@w3lib/evm-batch-call 0.1.0 → 0.3.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.
Files changed (77) hide show
  1. package/CHANGELOG.md +43 -0
  2. package/README.md +194 -12
  3. package/dist/aggregate.d.ts +5 -2
  4. package/dist/aggregate.d.ts.map +1 -1
  5. package/dist/aggregate.js.map +1 -1
  6. package/dist/call.d.ts +8 -2
  7. package/dist/call.d.ts.map +1 -1
  8. package/dist/call.js +25 -1
  9. package/dist/call.js.map +1 -1
  10. package/dist/chains.d.ts +13 -0
  11. package/dist/chains.d.ts.map +1 -0
  12. package/dist/chains.js +35 -0
  13. package/dist/chains.js.map +1 -0
  14. package/dist/detect.d.ts +23 -0
  15. package/dist/detect.d.ts.map +1 -0
  16. package/dist/detect.js +178 -0
  17. package/dist/detect.js.map +1 -0
  18. package/dist/erc20.d.ts +83 -7
  19. package/dist/erc20.d.ts.map +1 -1
  20. package/dist/erc20.js +36 -5
  21. package/dist/erc20.js.map +1 -1
  22. package/dist/fallback.d.ts +25 -0
  23. package/dist/fallback.d.ts.map +1 -1
  24. package/dist/fallback.js +123 -21
  25. package/dist/fallback.js.map +1 -1
  26. package/dist/index.d.ts +10 -3
  27. package/dist/index.d.ts.map +1 -1
  28. package/dist/index.js +9 -2
  29. package/dist/index.js.map +1 -1
  30. package/dist/nft.d.ts +71 -0
  31. package/dist/nft.d.ts.map +1 -0
  32. package/dist/nft.js +194 -0
  33. package/dist/nft.js.map +1 -0
  34. package/dist/owner.d.ts +136 -0
  35. package/dist/owner.d.ts.map +1 -0
  36. package/dist/owner.js +501 -0
  37. package/dist/owner.js.map +1 -0
  38. package/dist/provider.d.ts +112 -12
  39. package/dist/provider.d.ts.map +1 -1
  40. package/dist/provider.js +343 -48
  41. package/dist/provider.js.map +1 -1
  42. package/dist/scan.d.ts +59 -0
  43. package/dist/scan.d.ts.map +1 -0
  44. package/dist/scan.js +245 -0
  45. package/dist/scan.js.map +1 -0
  46. package/dist/shortcuts.d.ts +113 -0
  47. package/dist/shortcuts.d.ts.map +1 -0
  48. package/dist/shortcuts.js +193 -0
  49. package/dist/shortcuts.js.map +1 -0
  50. package/dist/source.d.ts +23 -1
  51. package/dist/source.d.ts.map +1 -1
  52. package/dist/source.js +110 -3
  53. package/dist/source.js.map +1 -1
  54. package/dist/tron.d.ts +6 -0
  55. package/dist/tron.d.ts.map +1 -1
  56. package/dist/tron.js +16 -1
  57. package/dist/tron.js.map +1 -1
  58. package/dist/util.d.ts +6 -0
  59. package/dist/util.d.ts.map +1 -0
  60. package/dist/util.js +20 -0
  61. package/dist/util.js.map +1 -0
  62. package/package.json +3 -2
  63. package/src/aggregate.ts +5 -2
  64. package/src/call.ts +32 -3
  65. package/src/chains.ts +46 -0
  66. package/src/detect.ts +193 -0
  67. package/src/erc20.ts +111 -9
  68. package/src/fallback.ts +127 -23
  69. package/src/index.ts +90 -4
  70. package/src/nft.ts +298 -0
  71. package/src/owner.ts +651 -0
  72. package/src/provider.ts +458 -54
  73. package/src/scan.ts +293 -0
  74. package/src/shortcuts.ts +278 -0
  75. package/src/source.ts +118 -3
  76. package/src/tron.ts +21 -2
  77. package/src/util.ts +20 -0
package/dist/provider.js CHANGED
@@ -1,12 +1,22 @@
1
1
  import {} from 'ethers';
2
2
  import { aggregate } from './aggregate.js';
3
3
  import { Batcher } from './batcher.js';
4
- import { decodeCall, encodeCall } from './call.js';
4
+ import { asStringOrBytes32, decodeCall, encodeCall } from './call.js';
5
5
  import { Contract, bindCall } from './contract.js';
6
- import { DEFAULT_NATIVE_TOKENS, ERC20_ABI } from './erc20.js';
6
+ import { DEFAULT_NATIVE_TOKENS, ERC20_ABI, formatAmount, getCachedTokenMeta, setCachedTokenMeta, MAX_UINT256, UNLIMITED_ALLOWANCE_THRESHOLD, DEFAULT_TOKEN_FIELDS, } from './erc20.js';
7
7
  import { CallFailedError, isExecutionError } from './errors.js';
8
8
  import { MULTICALL3_ADDRESS, getMulticall3 } from './multicall.js';
9
- import { resolveSource } from './source.js';
9
+ import { getNativeCurrency } from './chains.js';
10
+ import { ownerTokens } from './owner.js';
11
+ import { erc1155Balances, nftBalances, nftCollections, nftOwners, nftTokenUris, } from './nft.js';
12
+ import { detectChainId } from './detect.js';
13
+ import { isTronChain, resolveSource } from './source.js';
14
+ /** 构造参数第一个是 chainId 还是节点:数字、数字字符串、0x 十六进制视为 chainId,其余(URL、对象、数组)视为节点 */
15
+ function isChainIdArg(value) {
16
+ return (typeof value === 'number' ||
17
+ typeof value === 'bigint' ||
18
+ (typeof value === 'string' && /^\s*(\d+|0x[0-9a-fA-F]+)\s*$/.test(value)));
19
+ }
10
20
  const ETH_BALANCE_INPUTS = [{ name: 'addr', type: 'address' }];
11
21
  const ETH_BALANCE_OUTPUTS = [{ name: 'balance', type: 'uint256' }];
12
22
  /**
@@ -18,25 +28,89 @@ const ETH_BALANCE_OUTPUTS = [{ name: 'balance', type: 'uint256' }];
18
28
  * ```
19
29
  */
20
30
  export class Provider {
21
- #ctx;
31
+ /** 不传 chainId 时在识别完成前为 null */
32
+ #ctx = null;
33
+ /** 识别中的 Promise;识别失败后置空,下次使用时重试 */
34
+ #detecting = null;
35
+ #source;
22
36
  #batcher;
23
37
  #nativeTokens;
38
+ #config;
39
+ constructor(first, second, third) {
40
+ const hasChainId = isChainIdArg(first);
41
+ const source = (hasChainId ? second : first);
42
+ const config = ((hasChainId ? third : second) ?? {});
43
+ this.#config = config;
44
+ this.#batcher = new Batcher((requests, overrides) => this.#aggregate(requests, overrides), config.batch);
45
+ this.#nativeTokens = new Set((config.nativeTokens ?? DEFAULT_NATIVE_TOKENS).map((t) => t.toLowerCase()));
46
+ this.#source = source;
47
+ if (hasChainId) {
48
+ this.#ctx = this.#createContext(Number(first), source);
49
+ }
50
+ else {
51
+ if (source === undefined) {
52
+ throw new Error('Provider requires a chainId or a provider');
53
+ }
54
+ // 提前开始识别;失败时由使用方的调用拿到错误(这里避免未处理的 rejection)
55
+ this.#ensureReady().catch(() => { });
56
+ }
57
+ }
24
58
  /**
25
- * @param chainId 链 ID(接受数字字符串)
26
- * @param provider 节点:RPC URL、ethers Provider、钱包(window.ethereum / tronWeb)或它们的数组(主节点 + 备用节点)。
27
- * 不传则使用内置的公共节点表
28
- * @param config 可选配置
59
+ * 只传节点时等 chainId 识别完成后再返回实例,之后 rpc / multicall 等同步属性可以直接用。
60
+ *
61
+ * ```ts
62
+ * const multi = await Provider.create(window.ethereum)
63
+ * multi.rpc // 已就绪
64
+ * ```
29
65
  */
30
- constructor(chainId, provider, config = {}) {
31
- const id = Number(chainId);
32
- this.#ctx = {
33
- provider: resolveSource(id, provider, config),
34
- chainId: id,
35
- multicall: config.deployless ? null : resolveMulticall(id, config.multicall),
66
+ static async create(provider, config) {
67
+ return new Provider(provider, config).ready();
68
+ }
69
+ /** 取初始化好的上下文;识别失败不会被永久记住,下次调用重新识别(如节点短暂限流) */
70
+ #ensureReady() {
71
+ if (this.#ctx) {
72
+ return Promise.resolve(this.#ctx);
73
+ }
74
+ if (!this.#detecting) {
75
+ const source = this.#source;
76
+ const detecting = detectChainId(source, this.#config.fallback?.timeout).then((id) => {
77
+ this.#ctx = this.#createContext(id, source);
78
+ return this.#ctx;
79
+ });
80
+ this.#detecting = detecting;
81
+ detecting.catch(() => {
82
+ if (this.#detecting === detecting) {
83
+ this.#detecting = null;
84
+ }
85
+ });
86
+ }
87
+ return this.#detecting;
88
+ }
89
+ #createContext(chainId, source) {
90
+ const config = this.#config;
91
+ return {
92
+ provider: resolveSource(chainId, source, config),
93
+ chainId,
94
+ multicall: config.deployless ? null : resolveMulticall(chainId, config.multicall),
36
95
  chunkSize: config.chunkSize ?? 500,
37
96
  };
38
- this.#batcher = new Batcher((requests, overrides) => this.#aggregate(requests, overrides), config.batch);
39
- this.#nativeTokens = new Set((config.nativeTokens ?? DEFAULT_NATIVE_TOKENS).map((t) => t.toLowerCase()));
97
+ }
98
+ /** 链 ID(不传 chainId 构造时,会等待从节点识别完成) */
99
+ async getChainId() {
100
+ return (await this.#ensureReady()).chainId;
101
+ }
102
+ /** 等待初始化完成(只传节点时会先识别 chainId;识别失败在这里抛出) */
103
+ async ready() {
104
+ await this.#ensureReady();
105
+ return this;
106
+ }
107
+ #nativeCurrency(chainId) {
108
+ const known = getNativeCurrency(chainId);
109
+ return {
110
+ decimals: this.#config.nativeDecimals ?? known?.decimals ?? (isTronChain(chainId) ? 6 : 18),
111
+ symbol: this.#config.nativeSymbol ?? known?.symbol ?? null,
112
+ name: this.#config.nativeName ?? known?.name ?? null,
113
+ };
40
114
  }
41
115
  /**
42
116
  * 绑定到本 Provider 的合约:方法返回的 Call 可以直接 await(自动合并成 multicall),
@@ -55,39 +129,230 @@ export class Provider {
55
129
  return new Contract(address, ERC20_ABI, this);
56
130
  }
57
131
  /**
58
- * 批量查余额,主币和代币混在一起、一次请求。主币地址见 config.nativeTokens。
59
- * 查询失败(非合约地址、非法地址等)的位置为 0n;需要区分失败请用 tryAll。
132
+ * 批量查余额(含按 decimals 换算后的数值),主币和代币混在一起、一次请求。
133
+ *
134
+ * ```ts
135
+ * const list = await multi.balances(user, [NATIVE_TOKEN, USDT, { address: USDC, decimals: 6 }], { symbol: true })
136
+ * list[1] // { token: USDT, native: false, balance: '1234500000000000000000', decimals: 18, formatted: '1234.5', symbol: 'USDT', success: true }
137
+ * ```
138
+ *
139
+ * - 主币地址见 config.nativeTokens(默认 0xeeee…eeee 和零地址);精度 / symbol 按内置链信息表,可用 nativeDecimals / nativeSymbol 覆盖
140
+ * - decimals、symbol 查到一次后缓存,之后只查 balanceOf;也可以直接传 `{ address, decimals }`
141
+ * - 单个代币失败(非合约地址、非法地址等)不影响其他代币,该项 success 为 false
60
142
  */
61
- async balances(owner, tokens, overrides) {
62
- const calls = tokens.map((token) => this.#nativeTokens.has(token.toLowerCase()) ? this.getEthBalance(owner) : this.erc20(token).balanceOf(owner));
143
+ async balances(owner, tokens, options = {}) {
144
+ const { symbol: withSymbol = false, ...overrides } = options;
145
+ const { chainId } = await this.#ensureReady();
146
+ const nativeCurrency = this.#nativeCurrency(chainId);
147
+ const items = tokens.map((token) => {
148
+ const resolved = this.#resolveToken(chainId, token, nativeCurrency.decimals);
149
+ const symbol = resolved.native ? nativeCurrency.symbol : getCachedTokenMeta(chainId, resolved.address).symbol;
150
+ return { ...resolved, symbol };
151
+ });
152
+ const calls = [];
153
+ const plan = items.map(({ address, native, decimals, symbol }) => {
154
+ const balanceIndex = calls.push(native ? this.getEthBalance(owner) : this.erc20(address).balanceOf(owner)) - 1;
155
+ const decimalsIndex = decimals === undefined ? calls.push(this.erc20(address).decimals()) - 1 : -1;
156
+ const symbolIndex = withSymbol && !native && symbol === undefined ? calls.push(this.#symbolCall(address)) - 1 : -1;
157
+ return { balanceIndex, decimalsIndex, symbolIndex };
158
+ });
63
159
  const results = await this.tryAll(calls, overrides);
64
- return results.map((balance) => balance ?? 0n);
160
+ return items.map((item, i) => {
161
+ const { balanceIndex, decimalsIndex, symbolIndex } = plan[i];
162
+ const balance = results[balanceIndex];
163
+ const fetchedDecimals = decimalsIndex === -1 ? null : results[decimalsIndex];
164
+ const fetchedSymbol = symbolIndex === -1 ? null : results[symbolIndex];
165
+ if (!item.native && (fetchedDecimals !== null || fetchedSymbol !== null)) {
166
+ setCachedTokenMeta(chainId, item.address, {
167
+ ...(fetchedDecimals !== null ? { decimals: Number(fetchedDecimals) } : {}),
168
+ ...(fetchedSymbol !== null ? { symbol: fetchedSymbol } : {}),
169
+ });
170
+ }
171
+ const decimals = item.decimals ?? (fetchedDecimals === null ? null : Number(fetchedDecimals));
172
+ const extra = withSymbol ? { symbol: item.symbol ?? fetchedSymbol ?? null } : {};
173
+ if (balance === null || decimals === null) {
174
+ return { token: item.address, native: item.native, balance: '0', decimals: decimals ?? 0, formatted: '0', ...extra, success: false };
175
+ }
176
+ // 结果全是字符串 / 数字 / 布尔 / null,可以直接 JSON.stringify
177
+ return {
178
+ token: item.address,
179
+ native: item.native,
180
+ balance: balance.toString(),
181
+ decimals,
182
+ formatted: formatAmount(balance, decimals),
183
+ ...extra,
184
+ success: true,
185
+ };
186
+ });
187
+ }
188
+ /**
189
+ * 批量查 ERC20 授权额度(发交易前判断是否需要 approve),一次请求。
190
+ *
191
+ * ```ts
192
+ * const [usdt] = await multi.allowances(user, router, [USDT])
193
+ * usdt // { token: USDT, spender: router, native: false, allowance: '…', decimals: 18, formatted: '100', unlimited: false, success: true }
194
+ * ```
195
+ *
196
+ * - 主币不需要授权:native 为 true,额度视为 MaxUint256、unlimited 为 true,不发请求
197
+ * - decimals 与 balances / tokens 共用缓存;也可以直接传 `{ address, decimals }`
198
+ */
199
+ async allowances(owner, spender, tokens, overrides) {
200
+ const { chainId } = await this.#ensureReady();
201
+ const nativeDecimals = this.#nativeCurrency(chainId).decimals;
202
+ const calls = [];
203
+ const plan = tokens.map((token) => {
204
+ const { address, native, decimals } = this.#resolveToken(chainId, token, nativeDecimals);
205
+ const allowanceIndex = native ? -1 : calls.push(this.erc20(address).allowance(owner, spender)) - 1;
206
+ const decimalsIndex = native || decimals !== undefined ? -1 : calls.push(this.erc20(address).decimals()) - 1;
207
+ return { address, native, decimals, allowanceIndex, decimalsIndex };
208
+ });
209
+ const results = calls.length ? await this.tryAll(calls, overrides) : [];
210
+ return plan.map(({ address, native, decimals: known, allowanceIndex, decimalsIndex }) => {
211
+ const allowance = native ? MAX_UINT256 : (results[allowanceIndex] ?? null);
212
+ const fetched = decimalsIndex === -1 ? null : (results[decimalsIndex] ?? null);
213
+ if (fetched !== null) {
214
+ setCachedTokenMeta(chainId, address, { decimals: Number(fetched) });
215
+ }
216
+ const decimals = known ?? (fetched === null ? null : Number(fetched));
217
+ if (allowance === null || decimals === null) {
218
+ return { token: address, spender, native, allowance: '0', decimals: decimals ?? 0, formatted: '0', unlimited: false, success: false };
219
+ }
220
+ return {
221
+ token: address,
222
+ spender,
223
+ native,
224
+ allowance: allowance.toString(),
225
+ decimals,
226
+ formatted: formatAmount(allowance, decimals),
227
+ unlimited: allowance >= UNLIMITED_ALLOWANCE_THRESHOLD,
228
+ success: true,
229
+ };
230
+ });
65
231
  }
66
232
  /**
67
- * 批量查代币信息(symbol / name / decimals),一次请求。
68
- * decimals 读不到(非代币合约、主币占位地址等)的位置为 null。
233
+ * 列出持有人拥有的代币(资产列表):从代币来源拿候选代币,再用 multicall 在链上核对余额。
234
+ * 默认来源是公开代币列表,**只能发现列表里的代币**,局限性见 README「资产列表」一节。
235
+ *
236
+ * @deprecated 不推荐使用:EVM 链上无法只靠节点可靠地列出地址持有的全部代币,这个方法只是尽力而为——
237
+ * 默认来源只能发现公开列表里的代币,依赖第三方免费服务(可能限流、改格式或停止服务),要查几千个代币的余额、耗时数秒,
238
+ * 价格也不一定可信;传 `alchemy` / `nodereal` 来源能查全,但同样受第三方服务的额度和可用性约束。
239
+ * 已知要查哪些代币时请用 `getBalances`;需要可靠的完整持仓请直接接入索引服务的接口或自己的索引。局限性详见 README「资产列表」。
240
+ */
241
+ ownerTokens(owner, options) {
242
+ return ownerTokens(this, owner, options);
243
+ }
244
+ /** 批量查 NFT 集合信息(标准 / name / symbol / totalSupply),字段可选 */
245
+ nftCollections(collections, options) {
246
+ return nftCollections(this, collections, options);
247
+ }
248
+ /** 批量查 ERC721 持有数量(balanceOf) */
249
+ nftBalances(owner, collections, overrides) {
250
+ return nftBalances(this, owner, collections, overrides);
251
+ }
252
+ /** 批量查 ERC721 持有人(ownerOf),可混合多个集合 */
253
+ nftOwners(items, overrides) {
254
+ return nftOwners(this, items, overrides);
255
+ }
256
+ /** 批量查 NFT 元数据地址:兼容 ERC721 tokenURI 与 ERC1155 uri({id} 按规范替换),可转换 ipfs:// */
257
+ nftTokenUris(items, options) {
258
+ return nftTokenUris(this, items, options);
259
+ }
260
+ /** 批量查 ERC1155 余额 */
261
+ erc1155Balances(owner, items, overrides) {
262
+ return erc1155Balances(this, owner, items, overrides);
263
+ }
264
+ /** symbol() 调用:string 解码失败时按 bytes32 解析(MKR 等老代币) */
265
+ #symbolCall(address) {
266
+ return asStringOrBytes32(this.erc20(address).symbol());
267
+ }
268
+ /** 解析 balances / allowances 的代币参数:是否主币、已知的 decimals(传入的 > 主币配置 / 缓存) */
269
+ #resolveToken(chainId, token, nativeDecimals) {
270
+ const address = typeof token === 'string' ? token : token.address;
271
+ const native = this.#nativeTokens.has(address.toLowerCase());
272
+ const passed = typeof token === 'string' ? undefined : token.decimals;
273
+ const decimals = passed ?? (native ? nativeDecimals : getCachedTokenMeta(chainId, address).decimals);
274
+ return { address, native, decimals };
275
+ }
276
+ /**
277
+ * 批量查 ERC20 代币详情,一次请求;可以选择返回哪些字段。
278
+ *
279
+ * ```ts
280
+ * await multi.tokens([USDT, NATIVE_TOKEN]) // name / symbol / decimals
281
+ * await multi.tokens([USDT], { fields: ['symbol', 'decimals', 'totalSupply'] })
282
+ * // [{ address: USDT, native: false, symbol: 'USDT', decimals: 18, totalSupply: '…', totalSupplyFormatted: '…', success: true }]
283
+ * ```
284
+ *
285
+ * - name / symbol / decimals 查到一次后缓存(与 balances 共用),totalSupply 每次都查
286
+ * - 主币占位地址不发请求,信息取内置链信息表(可用 nativeName / nativeSymbol / nativeDecimals 覆盖),totalSupply 为 null
287
+ * - symbol / name 兼容返回 bytes32 的老代币(MKR 等)
288
+ * - 读取失败的字段为 null;请求的字段都读到时 success 为 true
69
289
  */
70
- async tokenInfo(tokens, overrides) {
71
- // 主币占位地址不是合约,不发请求
72
- const targets = tokens.filter((token) => !this.#nativeTokens.has(token.toLowerCase()));
73
- const calls = targets.flatMap((token) => {
74
- const erc20 = this.erc20(token);
75
- return [erc20.symbol(), erc20.name(), erc20.decimals()];
290
+ async tokens(tokens, options = {}) {
291
+ const { fields = DEFAULT_TOKEN_FIELDS, ...overrides } = options;
292
+ const wanted = new Set(fields);
293
+ const needDecimals = wanted.has('decimals') || wanted.has('totalSupply');
294
+ const { chainId } = await this.#ensureReady();
295
+ const nativeCurrency = this.#nativeCurrency(chainId);
296
+ const calls = [];
297
+ const plan = tokens.map((address) => {
298
+ const native = this.#nativeTokens.has(address.toLowerCase());
299
+ const meta = native
300
+ ? { name: nativeCurrency.name ?? undefined, symbol: nativeCurrency.symbol ?? undefined, decimals: nativeCurrency.decimals }
301
+ : getCachedTokenMeta(chainId, address);
302
+ const index = {};
303
+ if (!native) {
304
+ const erc20 = this.erc20(address);
305
+ if (wanted.has('name') && meta.name === undefined) {
306
+ index.name = calls.push(asStringOrBytes32(erc20.name())) - 1;
307
+ }
308
+ if (wanted.has('symbol') && meta.symbol === undefined) {
309
+ index.symbol = calls.push(this.#symbolCall(address)) - 1;
310
+ }
311
+ if (needDecimals && meta.decimals === undefined) {
312
+ index.decimals = calls.push(erc20.decimals()) - 1;
313
+ }
314
+ if (wanted.has('totalSupply')) {
315
+ index.totalSupply = calls.push(erc20.totalSupply()) - 1;
316
+ }
317
+ }
318
+ return { address, native, meta, index };
76
319
  });
77
320
  const results = calls.length ? await this.tryAll(calls, overrides) : [];
78
- const infoByToken = new Map();
79
- targets.forEach((address, i) => {
80
- const decimals = results[i * 3 + 2];
81
- infoByToken.set(address, decimals === null
82
- ? null
83
- : {
84
- address,
85
- symbol: results[i * 3] ?? null,
86
- name: results[i * 3 + 1] ?? null,
87
- decimals: Number(decimals),
321
+ const read = (i) => (i === undefined ? null : (results[i] ?? null));
322
+ return plan.map(({ address, native, meta, index }) => {
323
+ const name = meta.name ?? read(index.name);
324
+ const symbol = meta.symbol ?? read(index.symbol);
325
+ const fetchedDecimals = read(index.decimals);
326
+ const decimals = meta.decimals ?? (fetchedDecimals === null ? null : Number(fetchedDecimals));
327
+ const totalSupply = read(index.totalSupply);
328
+ if (!native) {
329
+ setCachedTokenMeta(chainId, address, {
330
+ ...(index.name !== undefined && name !== null ? { name } : {}),
331
+ ...(index.symbol !== undefined && symbol !== null ? { symbol } : {}),
332
+ ...(fetchedDecimals !== null ? { decimals: Number(fetchedDecimals) } : {}),
88
333
  });
334
+ }
335
+ const values = {
336
+ name,
337
+ symbol,
338
+ decimals,
339
+ totalSupply: totalSupply === null ? null : totalSupply.toString(),
340
+ };
341
+ const out = { address, native };
342
+ let success = true;
343
+ for (const field of fields) {
344
+ out[field] = values[field];
345
+ // 主币没有 totalSupply,不算失败
346
+ if (values[field] === null && !(native && field === 'totalSupply')) {
347
+ success = false;
348
+ }
349
+ }
350
+ if (wanted.has('totalSupply')) {
351
+ out.totalSupplyFormatted = totalSupply === null || decimals === null ? null : formatAmount(totalSupply, decimals);
352
+ }
353
+ out.success = success;
354
+ return out;
89
355
  });
90
- return tokens.map((token) => infoByToken.get(token) ?? null);
91
356
  }
92
357
  /**
93
358
  * 主币余额查询,可以和合约调用放在同一批里(同一次 eth_call):
@@ -95,7 +360,8 @@ export class Provider {
95
360
  */
96
361
  getEthBalance(address) {
97
362
  const call = {
98
- contract: { address: this.#ctx.multicall?.address ?? MULTICALL3_ADDRESS },
363
+ // 地址只用于展示:执行时合约模式会换成实际的 multicall 地址,deployless 时由合约内部处理
364
+ contract: { address: this.#ctx?.multicall?.address ?? MULTICALL3_ADDRESS },
99
365
  name: 'getEthBalance',
100
366
  inputs: ETH_BALANCE_INPUTS,
101
367
  outputs: ETH_BALANCE_OUTPUTS,
@@ -180,7 +446,8 @@ export class Provider {
180
446
  const merged = merge(merge({ ...shared }, call.overrides), explicit);
181
447
  if (call.kind === 'ethBalance') {
182
448
  try {
183
- return { success: true, data: (await this.#ctx.provider.getBalance(call.params[0], merged.blockTag)) };
449
+ const { provider } = await this.#ensureReady();
450
+ return { success: true, data: (await provider.getBalance(call.params[0], merged.blockTag)) };
184
451
  }
185
452
  catch (err) {
186
453
  return { success: false, error: err instanceof Error ? err : new Error(String(err)) };
@@ -189,7 +456,8 @@ export class Provider {
189
456
  let returnData;
190
457
  try {
191
458
  const request = encodeCall(call, false);
192
- returnData = await this.#ctx.provider.call({
459
+ const { provider } = await this.#ensureReady();
460
+ returnData = await provider.call({
193
461
  to: request.target,
194
462
  data: request.callData,
195
463
  from: merged.from,
@@ -213,16 +481,43 @@ export class Provider {
213
481
  return { success: false, error: new CallFailedError(call, returnData, err) };
214
482
  }
215
483
  }
216
- /** 底层连接(多节点时是 FallbackRpc) */
484
+ /** 当前区块号(底层节点需支持 getBlockNumber) */
485
+ async getBlockNumber() {
486
+ const { provider } = await this.#ensureReady();
487
+ if (!provider.getBlockNumber) {
488
+ throw new Error('getBlockNumber is not supported by this provider');
489
+ }
490
+ return provider.getBlockNumber();
491
+ }
492
+ /** eth_getLogs(底层节点需支持 getLogs)。多节点时依次尝试,全部失败抛 GetLogsError */
493
+ async getLogs(filter) {
494
+ const { provider } = await this.#ensureReady();
495
+ if (!provider.getLogs) {
496
+ throw new Error('getLogs is not supported by this provider');
497
+ }
498
+ return provider.getLogs(filter);
499
+ }
500
+ /** 是否是按主币处理的地址(config.nativeTokens,默认 0xeeee…eeee 和零地址) */
501
+ isNativeToken(address) {
502
+ return this.#nativeTokens.has(address.toLowerCase());
503
+ }
504
+ /** 按主币处理的地址(小写),顺序同 config.nativeTokens */
505
+ get nativeTokens() {
506
+ return [...this.#nativeTokens];
507
+ }
508
+ /** 底层连接(多节点时是 FallbackRpc)。只传节点构造时,需在 ready() 之后读取 */
217
509
  get rpc() {
510
+ if (!this.#ctx) {
511
+ throw new Error('Provider is still detecting chainId; await provider.ready() first');
512
+ }
218
513
  return this.#ctx.provider;
219
514
  }
220
- /** 当前使用的 multicall 合约(null 表示 deployless) */
515
+ /** 当前使用的 multicall 合约(null 表示 deployless;只传节点构造时在 ready() 之前也为 null) */
221
516
  get multicall() {
222
- return this.#ctx.multicall;
517
+ return this.#ctx?.multicall ?? null;
223
518
  }
224
- #aggregate(requests, overrides) {
225
- return aggregate(this.#ctx, requests, overrides);
519
+ async #aggregate(requests, overrides) {
520
+ return aggregate(await this.#ensureReady(), requests, overrides);
226
521
  }
227
522
  }
228
523
  function resolveMulticall(chainId, custom) {
@@ -1 +1 @@
1
- {"version":3,"file":"provider.js","sourceRoot":"","sources":["../src/provider.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"provider.js","sourceRoot":"","sources":["../src/provider.ts"],"names":[],"mappings":"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"}
package/dist/scan.d.ts ADDED
@@ -0,0 +1,59 @@
1
+ import type { TokenSource } from './owner.js';
2
+ /** 增量扫描的进度,按 chainId + 地址保存 */
3
+ export interface TransferScanState {
4
+ /** 第一个扫描的区块(之前的历史不扫描) */
5
+ startBlock: number;
6
+ /** 已扫描到的区块号(含);第一次调用且 lookbackBlocks 为 0 时等于 startBlock - 1 */
7
+ cursor: number;
8
+ /** 扫描中发现的代币合约地址(小写) */
9
+ tokens: string[];
10
+ /** 当前使用的单次查询区块范围:出错时缩小,连续成功后翻倍,直到 rangeLimit / blockRange 选项 */
11
+ blockRange: number;
12
+ /** 节点的区块范围上限(报错里给出的,或减半试出来的),记录 1 天后失效,之后会重新试更大的范围 */
13
+ rangeLimit?: number;
14
+ /** rangeLimit 的记录时间(毫秒时间戳) */
15
+ rangeLimitAt?: number;
16
+ /** 节点不开放 getLogs 时,在这个时间之前不再尝试(毫秒时间戳) */
17
+ pausedUntil?: number;
18
+ }
19
+ /** 进度存储:默认存在内存里;传自定义存储可以跨页面刷新 / 重启接着扫(如 localStorage、数据库) */
20
+ export interface TransferScanStorage {
21
+ get(key: string): TransferScanState | undefined | Promise<TransferScanState | undefined>;
22
+ set(key: string, state: TransferScanState): void | Promise<void>;
23
+ }
24
+ /** 内存存储(默认):最多保存 1000 个地址,超出时淘汰最早的 */
25
+ export declare function memoryScanStorage(limit?: number): TransferScanStorage;
26
+ /**
27
+ * 基于 getItem / setItem 的存储(如浏览器的 localStorage):
28
+ * `transferScan({ storage: keyValueScanStorage(localStorage) })`
29
+ */
30
+ export declare function keyValueScanStorage(store: {
31
+ getItem(key: string): string | null;
32
+ setItem(key: string, value: string): void;
33
+ }, prefix?: string): TransferScanStorage;
34
+ export interface TransferScanOptions {
35
+ /** 进度存储,默认内存(进程 / 页面结束就丢失) */
36
+ storage?: TransferScanStorage;
37
+ /** 第一次调用时往回扫多少个区块,默认 0(只从现在开始往后扫) */
38
+ lookbackBlocks?: number;
39
+ /** 单次 getLogs 的最大区块范围,默认 1000;节点有上限时自动缩小 */
40
+ blockRange?: number;
41
+ /** 每次调用最多发多少个 getLogs 请求,默认 20;落后很多时分多次追上 */
42
+ maxRequests?: number;
43
+ /** 每次调用的扫描时间预算(毫秒),默认 5000:超过后不再发新请求,留到下次调用 */
44
+ timeBudget?: number;
45
+ /** 只扫到最新区块往前这么多个区块,默认 5:避开链重组,也避免节点之间高度不一致时漏扫 */
46
+ confirmations?: number;
47
+ }
48
+ /**
49
+ * 增量扫描地址收到的 ERC20 代币(Transfer 事件,to = 该地址):第一次调用记下当前区块,之后每次从上次的位置往后扫。
50
+ * 用来补充代币列表发现不了的新代币。作为代币来源使用:`combine(defaultTokenSource(), transferScan())`,
51
+ * 或在 getOwnerTokens 里用 `scanTransfers: true`。
52
+ *
53
+ * 局限:只能发现开始扫描之后收到的代币(除非设置 lookbackBlocks);需要节点支持 eth_getLogs,免费公共节点限制较多
54
+ *(BSC 上只有 blockrazor 可用且每次最多 25 个区块);Tron 不支持。
55
+ */
56
+ export declare function transferScan(options?: TransferScanOptions): TokenSource;
57
+ /** 读取某地址的扫描进度(不存在时为 undefined) */
58
+ export declare function getTransferScanState(chainId: number, owner: string, storage?: TransferScanStorage): Promise<TransferScanState | undefined>;
59
+ //# sourceMappingURL=scan.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scan.d.ts","sourceRoot":"","sources":["../src/scan.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAmB,WAAW,EAAE,MAAM,YAAY,CAAA;AAM9D,+BAA+B;AAC/B,MAAM,WAAW,iBAAiB;IAChC,yBAAyB;IACzB,UAAU,EAAE,MAAM,CAAA;IAClB,+DAA+D;IAC/D,MAAM,EAAE,MAAM,CAAA;IACd,uBAAuB;IACvB,MAAM,EAAE,MAAM,EAAE,CAAA;IAChB,gEAAgE;IAChE,UAAU,EAAE,MAAM,CAAA;IAClB,sDAAsD;IACtD,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,8BAA8B;IAC9B,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,yCAAyC;IACzC,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB;AAED,6DAA6D;AAC7D,MAAM,WAAW,mBAAmB;IAClC,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,iBAAiB,GAAG,SAAS,GAAG,OAAO,CAAC,iBAAiB,GAAG,SAAS,CAAC,CAAA;IACxF,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,iBAAiB,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;CACjE;AAED,sCAAsC;AACtC,wBAAgB,iBAAiB,CAAC,KAAK,SAAO,GAAG,mBAAmB,CAYnE;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE;IAAE,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IAAC,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,EAAE,MAAM,SAAyB,GAAG,mBAAmB,CAkBnL;AAED,MAAM,WAAW,mBAAmB;IAClC,8BAA8B;IAC9B,OAAO,CAAC,EAAE,mBAAmB,CAAA;IAC7B,qCAAqC;IACrC,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,4CAA4C;IAC5C,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,6CAA6C;IAC7C,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,+CAA+C;IAC/C,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,iDAAiD;IACjD,aAAa,CAAC,EAAE,MAAM,CAAA;CACvB;AAoFD;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAAC,OAAO,GAAE,mBAAwB,GAAG,WAAW,CA+G3E;AAED,kCAAkC;AAClC,wBAAsB,oBAAoB,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,GAAE,mBAAoC,GAAG,OAAO,CAAC,iBAAiB,GAAG,SAAS,CAAC,CAEhK"}