@w3lib/evm-batch-call 0.2.0 → 0.4.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 (108) hide show
  1. package/CHANGELOG.md +56 -0
  2. package/README.md +184 -30
  3. package/contracts/DeploylessMulticall3.sol +5 -0
  4. package/dist/aggregate.d.ts +25 -3
  5. package/dist/aggregate.d.ts.map +1 -1
  6. package/dist/aggregate.js +143 -5
  7. package/dist/aggregate.js.map +1 -1
  8. package/dist/batcher.d.ts +6 -1
  9. package/dist/batcher.d.ts.map +1 -1
  10. package/dist/batcher.js +59 -9
  11. package/dist/batcher.js.map +1 -1
  12. package/dist/call.d.ts +27 -2
  13. package/dist/call.d.ts.map +1 -1
  14. package/dist/call.js +22 -0
  15. package/dist/call.js.map +1 -1
  16. package/dist/chains.d.ts +7 -0
  17. package/dist/chains.d.ts.map +1 -1
  18. package/dist/chains.js +11 -0
  19. package/dist/chains.js.map +1 -1
  20. package/dist/deployless.d.ts +1 -1
  21. package/dist/deployless.d.ts.map +1 -1
  22. package/dist/deployless.js +1 -1
  23. package/dist/deployless.js.map +1 -1
  24. package/dist/erc20.d.ts +70 -4
  25. package/dist/erc20.d.ts.map +1 -1
  26. package/dist/erc20.js +121 -5
  27. package/dist/erc20.js.map +1 -1
  28. package/dist/events.d.ts +25 -0
  29. package/dist/events.d.ts.map +1 -0
  30. package/dist/events.js +25 -0
  31. package/dist/events.js.map +1 -0
  32. package/dist/fallback.d.ts +54 -3
  33. package/dist/fallback.d.ts.map +1 -1
  34. package/dist/fallback.js +273 -21
  35. package/dist/fallback.js.map +1 -1
  36. package/dist/index.d.ts +10 -8
  37. package/dist/index.d.ts.map +1 -1
  38. package/dist/index.js +7 -5
  39. package/dist/index.js.map +1 -1
  40. package/dist/multicall.d.ts.map +1 -1
  41. package/dist/multicall.js +33 -2
  42. package/dist/multicall.js.map +1 -1
  43. package/dist/nft.d.ts +5 -0
  44. package/dist/nft.d.ts.map +1 -1
  45. package/dist/nft.js +5 -0
  46. package/dist/nft.js.map +1 -1
  47. package/dist/owner.d.ts +145 -0
  48. package/dist/owner.d.ts.map +1 -0
  49. package/dist/owner.js +510 -0
  50. package/dist/owner.js.map +1 -0
  51. package/dist/provider.d.ts +63 -18
  52. package/dist/provider.d.ts.map +1 -1
  53. package/dist/provider.js +166 -100
  54. package/dist/provider.js.map +1 -1
  55. package/dist/scan.d.ts +59 -0
  56. package/dist/scan.d.ts.map +1 -0
  57. package/dist/scan.js +245 -0
  58. package/dist/scan.js.map +1 -0
  59. package/dist/shortcuts.d.ts +34 -35
  60. package/dist/shortcuts.d.ts.map +1 -1
  61. package/dist/shortcuts.js +41 -73
  62. package/dist/shortcuts.js.map +1 -1
  63. package/dist/source.d.ts +6 -2
  64. package/dist/source.d.ts.map +1 -1
  65. package/dist/source.js +49 -6
  66. package/dist/source.js.map +1 -1
  67. package/dist/subpaths/nft.d.ts +46 -0
  68. package/dist/subpaths/nft.d.ts.map +1 -0
  69. package/dist/subpaths/nft.js +55 -0
  70. package/dist/subpaths/nft.js.map +1 -0
  71. package/dist/subpaths/owner.d.ts +33 -0
  72. package/dist/subpaths/owner.d.ts.map +1 -0
  73. package/dist/subpaths/owner.js +34 -0
  74. package/dist/subpaths/owner.js.map +1 -0
  75. package/dist/tron.d.ts +2 -0
  76. package/dist/tron.d.ts.map +1 -1
  77. package/dist/tron.js +5 -0
  78. package/dist/tron.js.map +1 -1
  79. package/dist/util.d.ts +5 -0
  80. package/dist/util.d.ts.map +1 -1
  81. package/dist/util.js +23 -0
  82. package/dist/util.js.map +1 -1
  83. package/dist/watch.d.ts +25 -0
  84. package/dist/watch.d.ts.map +1 -0
  85. package/dist/watch.js +105 -0
  86. package/dist/watch.js.map +1 -0
  87. package/package.json +19 -10
  88. package/src/aggregate.ts +177 -9
  89. package/src/batcher.ts +69 -9
  90. package/src/call.ts +42 -2
  91. package/src/chains.ts +15 -0
  92. package/src/deployless.ts +1 -1
  93. package/src/erc20.ts +171 -8
  94. package/src/events.ts +42 -0
  95. package/src/fallback.ts +306 -22
  96. package/src/index.ts +20 -27
  97. package/src/multicall.ts +34 -2
  98. package/src/nft.ts +5 -0
  99. package/src/owner.ts +660 -0
  100. package/src/provider.ts +255 -112
  101. package/src/scan.ts +293 -0
  102. package/src/shortcuts.ts +76 -88
  103. package/src/source.ts +51 -8
  104. package/src/subpaths/nft.ts +107 -0
  105. package/src/subpaths/owner.ts +69 -0
  106. package/src/tron.ts +7 -0
  107. package/src/util.ts +27 -0
  108. package/src/watch.ts +149 -0
package/dist/fallback.js CHANGED
@@ -1,9 +1,49 @@
1
1
  import { isError } from 'ethers';
2
2
  import { detectChainIdOf } from './detect.js';
3
3
  import { isExecutionError } from './errors.js';
4
- import { withTimeout } from './util.js';
4
+ import { emitRequest } from './events.js';
5
+ import { TimeoutError, withTimeout } from './util.js';
6
+ /** 连续超时多少次后才冷却(偶尔慢不算坏节点) */
7
+ const TIMEOUTS_BEFORE_COOLDOWN = 3;
8
+ const MAX_TRACKED_URLS = 1000;
9
+ const healthByUrl = new Map();
10
+ const healthByObject = new WeakMap();
11
+ function healthOf(key) {
12
+ if (typeof key === 'string') {
13
+ let health = healthByUrl.get(key);
14
+ if (!health) {
15
+ health = { failedAt: 0, timeouts: 0 };
16
+ healthByUrl.set(key, health);
17
+ if (healthByUrl.size > MAX_TRACKED_URLS) {
18
+ healthByUrl.delete(healthByUrl.keys().next().value);
19
+ }
20
+ }
21
+ return health;
22
+ }
23
+ let health = healthByObject.get(key);
24
+ if (!health) {
25
+ health = { failedAt: 0, timeouts: 0 };
26
+ healthByObject.set(key, health);
27
+ }
28
+ return health;
29
+ }
30
+ /** 测试用:清空全局的节点健康状态 */
31
+ export function resetNodeHealth() {
32
+ healthByUrl.clear();
33
+ }
34
+ /** 所有节点都失败(多节点时):errors 是每个节点的标识和失败原因,按尝试顺序 */
35
+ export class AllNodesFailedError extends Error {
36
+ errors;
37
+ constructor(errors) {
38
+ super(`All RPC nodes failed: ${errors.map((e) => `${e.node}: ${errorText(e.error)}`).join(' | ')}`, { cause: errors[errors.length - 1]?.error });
39
+ this.errors = errors;
40
+ this.name = 'AllNodesFailedError';
41
+ }
42
+ }
5
43
  /**
6
- * 多节点故障切换:按顺序使用节点,出错或超时换下一个;出错的节点在 cooldown 内排到最后。
44
+ * 多节点故障切换:按顺序使用节点,出错或超时换下一个;出错的节点在 cooldown 内排到最后(超时只换节点,连续 3 次才冷却)。
45
+ * 设置了 stallTimeout 时,节点迟迟不返回就同时请求下一个,谁先成功用谁。所有节点都失败时抛 AllNodesFailedError(单节点时抛原始错误)。
46
+ * 冷却状态按节点全局共享,每次请求都会触发 onRequest 事件。
7
47
  *
8
48
  * 与 ethers FallbackProvider 相比:
9
49
  * - 没有首次请求前对所有节点的 getBlockNumber 同步,一个卡住的节点不会拖住第一次查询
@@ -12,57 +52,269 @@ import { withTimeout } from './util.js';
12
52
  export class FallbackRpc {
13
53
  #nodes;
14
54
  #timeout;
55
+ #stallTimeout;
15
56
  #cooldown;
16
- #failedAt;
17
- constructor(nodes, options = {}) {
57
+ #labels;
58
+ /** 健康状态的 key;每次用时再从全局表里取(表淘汰条目后,各实例仍取到同一个对象) */
59
+ #healthKeys;
60
+ /** 上次 getLogs 成功的节点 */
61
+ #logsNode = -1;
62
+ /** 上次成功的节点连续被限频的次数 */
63
+ #logsThrottled = 0;
64
+ /** getLogs 超时 / 连不上的时间,只影响 getLogs 的节点顺序 */
65
+ #logsFailedAt;
66
+ constructor(nodes, options = {}, info) {
18
67
  if (!nodes.length) {
19
68
  throw new Error('FallbackRpc requires at least one node');
20
69
  }
21
70
  this.#nodes = nodes;
22
71
  this.#timeout = options.timeout ?? 10_000;
72
+ this.#stallTimeout = options.stallTimeout ?? 0;
23
73
  this.#cooldown = options.cooldown ?? 30_000;
24
- this.#failedAt = nodes.map(() => 0);
74
+ this.#labels = nodes.map((_, i) => info?.[i]?.label ?? `node${i}`);
75
+ this.#healthKeys = nodes.map((node, i) => info?.[i]?.key ?? node);
76
+ this.#logsFailedAt = nodes.map(() => 0);
25
77
  }
26
78
  get nodes() {
27
79
  return this.#nodes;
28
80
  }
29
81
  call(tx) {
30
- return this.#run((node) => node.call(tx));
82
+ return this.#run('call', (node) => node.call(tx));
31
83
  }
32
84
  getBalance(address, blockTag) {
33
- return this.#run((node) => node.getBalance(address, blockTag));
85
+ return this.#run('getBalance', (node) => node.getBalance(address, blockTag));
34
86
  }
35
87
  /** 按节点顺序探测 chainId(节点需实现 getChainId,见 detect.ts) */
36
88
  getChainId() {
37
- return this.#run((node) => detectChainIdOf(node));
89
+ return this.#run('getChainId', (node) => detectChainIdOf(node));
90
+ }
91
+ /** 对第 index 个节点发一次请求(带超时),并触发 onRequest 事件 */
92
+ async #attempt(method, index, attempt, fn, timeout = this.#timeout) {
93
+ const started = Date.now();
94
+ try {
95
+ const result = await withTimeout(Promise.resolve().then(() => fn(this.#nodes[index])), timeout);
96
+ emitRequest({ node: this.#labels[index], method, ms: Date.now() - started, ok: true, attempt });
97
+ return result;
98
+ }
99
+ catch (err) {
100
+ emitRequest({ node: this.#labels[index], method, ms: Date.now() - started, ok: false, error: err, attempt });
101
+ throw err;
102
+ }
103
+ }
104
+ /** 单节点:直接请求(getLogs / getBlockNumber 不走多节点的特殊逻辑),抛原始错误 */
105
+ #single(method, fn) {
106
+ return this.#attempt(method, 0, 0, fn);
38
107
  }
39
- async #run(fn) {
40
- let lastError;
41
- for (const index of this.#order()) {
108
+ /**
109
+ * 当前区块号。优先问上次 getLogs 成功的节点(增量扫描时区块号和日志来自同一个节点,不会因节点间的高度差漏扫);
110
+ * 不支持 getBlockNumber 的节点跳过,失败也不让节点进入冷却(不影响 call / getBalance)
111
+ */
112
+ async getBlockNumber() {
113
+ if (this.#nodes.length === 1) {
114
+ const node = this.#nodes[0];
115
+ if (!node.getBlockNumber) {
116
+ throw new Error('getBlockNumber is not supported by this provider');
117
+ }
118
+ return this.#single('getBlockNumber', (n) => n.getBlockNumber());
119
+ }
120
+ let lastError = new Error('No node supports getBlockNumber');
121
+ let attempt = 0;
122
+ for (const index of this.#preferLogsNode(this.#order())) {
123
+ const node = this.#nodes[index];
124
+ if (!node.getBlockNumber) {
125
+ continue;
126
+ }
42
127
  try {
43
- const result = await withTimeout(fn(this.#nodes[index]), this.#timeout);
44
- this.#failedAt[index] = 0;
45
- return result;
128
+ return await this.#attempt('getBlockNumber', index, attempt++, (n) => n.getBlockNumber());
46
129
  }
47
130
  catch (err) {
48
- if (isDeterministic(err)) {
49
- throw err;
50
- }
51
- this.#failedAt[index] = Date.now();
52
131
  lastError = err;
53
132
  }
54
133
  }
55
134
  throw lastError;
56
135
  }
136
+ /**
137
+ * 依次尝试支持 getLogs 的节点。与其他请求不同:
138
+ * - getLogs 失败多半是“区块范围超限 / 节点不开放这个方法”,不代表节点故障,所以不影响 call / getBalance 的节点顺序;
139
+ * 超时 / 连不上的节点只在 getLogs 里排到后面(冷却期内),上次成功的节点排在最前
140
+ * - 在用的节点被限频时直接抛出(连续 3 次后才换节点),其他情况全部失败时抛出;GetLogsError 带上每个节点的错误
141
+ */
142
+ async getLogs(filter) {
143
+ if (this.#nodes.length === 1) {
144
+ // 单节点:原样请求、抛原始错误(与不经过 FallbackRpc 时一致)
145
+ if (!this.#nodes[0]?.getLogs) {
146
+ throw new Error('getLogs is not supported by this provider');
147
+ }
148
+ return this.#single('getLogs', (n) => n.getLogs(filter));
149
+ }
150
+ const errors = [];
151
+ let preferred;
152
+ const sticky = this.#logsNode;
153
+ let attempt = 0;
154
+ for (const index of this.#preferLogsNode(this.#order(this.#logsFailedAt))) {
155
+ const node = this.#nodes[index];
156
+ if (!node.getLogs) {
157
+ continue;
158
+ }
159
+ try {
160
+ const logs = await this.#attempt('getLogs', index, attempt++, (n) => n.getLogs(filter));
161
+ this.#logsNode = index;
162
+ this.#logsFailedAt[index] = 0;
163
+ this.#logsThrottled = 0;
164
+ return logs;
165
+ }
166
+ catch (err) {
167
+ if (isError(err, 'INVALID_ARGUMENT')) {
168
+ throw err;
169
+ }
170
+ if (!isAlive(err)) {
171
+ // 超时 / 连不上:排到后面;如果是上次成功的节点,不再优先用它
172
+ this.#logsFailedAt[index] = Date.now();
173
+ if (index === this.#logsNode) {
174
+ this.#logsNode = -1;
175
+ }
176
+ }
177
+ else if (index === sticky) {
178
+ preferred = err;
179
+ if (isRateLimited(err)) {
180
+ // 在用的节点只是限频:直接抛出让调用方退避重试(其他节点多半本来就不能用,逐个试只会更慢);
181
+ // 连续 3 次就不再优先用它,试其他节点
182
+ if (++this.#logsThrottled < 3) {
183
+ throw new GetLogsError([err], err);
184
+ }
185
+ this.#logsThrottled = 0;
186
+ this.#logsNode = -1;
187
+ }
188
+ }
189
+ errors.push(err);
190
+ }
191
+ }
192
+ throw new GetLogsError(errors, preferred);
193
+ }
194
+ /**
195
+ * 按顺序请求节点:出错(非确定性错误)或超时立即换下一个;设置了 stallTimeout 时,
196
+ * 当前节点超过 stallTimeout 还没返回也会同时请求下一个(已发出的请求不取消),第一个成功的结果胜出。
197
+ * 出错的节点进入冷却;超时只换节点,同一节点连续 3 次超时才冷却(冷启动的大批量查询偶尔慢,不应把健康的节点踢到后面);
198
+ * 节点还没有请求的区块(minBlock 重查时落后的节点)也只换节点、不冷却。
199
+ * 确定性错误(revert、参数错误等)直接抛出;所有节点都失败时抛 AllNodesFailedError(单节点时抛原始错误)。
200
+ */
201
+ #run(method, fn) {
202
+ const order = this.#order();
203
+ return new Promise((resolve, reject) => {
204
+ let next = 0;
205
+ let running = 0;
206
+ let settled = false;
207
+ const errors = [];
208
+ let stallTimer;
209
+ const finish = (done) => {
210
+ settled = true;
211
+ clearTimeout(stallTimer);
212
+ done();
213
+ };
214
+ const fail = () => {
215
+ const only = errors.length === 1 && this.#nodes.length === 1;
216
+ finish(() => reject(only ? errors[0]?.error : new AllNodesFailedError(errors)));
217
+ };
218
+ const launch = () => {
219
+ if (settled || next >= order.length) {
220
+ return false;
221
+ }
222
+ const attempt = next++;
223
+ const index = order[attempt];
224
+ const health = healthOf(this.#healthKeys[index]);
225
+ running++;
226
+ clearTimeout(stallTimer);
227
+ if (this.#stallTimeout > 0 && next < order.length) {
228
+ stallTimer = setTimeout(launch, this.#stallTimeout);
229
+ }
230
+ this.#attempt(method, index, attempt, fn).then((result) => {
231
+ running--;
232
+ health.failedAt = 0;
233
+ health.timeouts = 0;
234
+ if (!settled) {
235
+ finish(() => resolve(result));
236
+ }
237
+ }, (err) => {
238
+ running--;
239
+ const deterministic = isDeterministic(err);
240
+ if (err instanceof TimeoutError) {
241
+ if (++health.timeouts >= TIMEOUTS_BEFORE_COOLDOWN) {
242
+ health.failedAt = Date.now();
243
+ health.timeouts = 0;
244
+ }
245
+ }
246
+ else if (!deterministic && !isBehind(err)) {
247
+ health.failedAt = Date.now();
248
+ }
249
+ if (settled) {
250
+ return;
251
+ }
252
+ if (deterministic) {
253
+ finish(() => reject(err));
254
+ return;
255
+ }
256
+ errors.push({ node: this.#labels[index], error: err });
257
+ if (!launch() && running === 0) {
258
+ fail();
259
+ }
260
+ });
261
+ return true;
262
+ };
263
+ launch();
264
+ });
265
+ }
57
266
  /** 健康的节点按原顺序在前,冷却中的按出错时间先后排在后面(全挂时也都会再试一次) */
58
- #order() {
267
+ #order(failedAt = this.#healthKeys.map((key) => healthOf(key).failedAt)) {
59
268
  const now = Date.now();
60
269
  const healthy = [];
61
270
  const cooling = [];
62
- this.#failedAt.forEach((at, i) => (at && now - at < this.#cooldown ? cooling : healthy).push(i));
63
- cooling.sort((a, b) => this.#failedAt[a] - this.#failedAt[b]);
271
+ failedAt.forEach((at, i) => (at && now - at < this.#cooldown ? cooling : healthy).push(i));
272
+ cooling.sort((a, b) => failedAt[a] - failedAt[b]);
64
273
  return [...healthy, ...cooling];
65
274
  }
275
+ /** 上次 getLogs 成功的节点(不在 getLogs 冷却中时)排到最前 */
276
+ #preferLogsNode(order) {
277
+ const index = this.#logsNode;
278
+ const at = this.#logsFailedAt[index];
279
+ if (index < 0 || (at && Date.now() - at < this.#cooldown)) {
280
+ return order;
281
+ }
282
+ return [index, ...order.filter((i) => i !== index)];
283
+ }
284
+ }
285
+ /**
286
+ * getLogs 失败时抛出(所有节点都失败,或在用的节点被限频),errors 是各节点的错误;
287
+ * preferred 是上次成功的节点这次返回的错误(它最能说明问题:其他节点可能一直就不能用)
288
+ */
289
+ export class GetLogsError extends Error {
290
+ errors;
291
+ preferred;
292
+ constructor(errors, preferred) {
293
+ super(errors.length ? `getLogs failed: ${errors.map(errorText).join(' | ')}` : 'No node supports getLogs');
294
+ this.errors = errors;
295
+ this.preferred = preferred;
296
+ this.name = 'GetLogsError';
297
+ }
298
+ }
299
+ /** 取出错误里节点返回的原始信息(ethers 会把它放在 error.message 里,外层是 “could not coalesce error”) */
300
+ export function errorText(err) {
301
+ const e = err;
302
+ const parts = [e?.error?.message, e?.info?.error?.message, e?.shortMessage ?? e?.message].filter((p) => typeof p === 'string');
303
+ return parts.length ? parts.join('; ') : String(err);
304
+ }
305
+ /** 节点正常返回了 JSON-RPC 错误(ethers 把它放在 error / info.error 里)或只是限频,说明节点本身可用 */
306
+ function isAlive(err) {
307
+ const e = err;
308
+ return typeof (e?.error?.message ?? e?.info?.error?.message) === 'string' || isRateLimited(err);
309
+ }
310
+ function isRateLimited(err) {
311
+ return /too many requests|rate.?limit|\b429\b/i.test(errorText(err));
312
+ }
313
+ /**
314
+ * 节点还没有请求的区块(minBlock 按指定区块重查时,落后的节点会这样报错):只换节点、不冷却——节点本身是健康的,只是慢一两个块
315
+ */
316
+ function isBehind(err) {
317
+ return /header not found|unknown block|block not found|block .*not (yet )?(available|found)|requested block .*(ahead|future)|after last accepted block/i.test(errorText(err));
66
318
  }
67
319
  /** 换节点也不会变的错误:合约执行结果、参数错误、用户拒绝等 */
68
320
  function isDeterministic(err) {
@@ -1 +1 @@
1
- {"version":3,"file":"fallback.js","sourceRoot":"","sources":["../src/fallback.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"fallback.js","sourceRoot":"","sources":["../src/fallback.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -1,17 +1,19 @@
1
1
  export { Contract, bindCall, type BoundMethod, type ContractAbi, type ContractRunner } from './contract.js';
2
- export { getAllowances, getBalances, getErc1155Balances, getNftBalances, getNftCollections, getNftOwners, getNftTokenUris, getTokens, type GetBalancesOptions, type GetNftCollectionsOptions, type GetNftTokenUrisOptions, type GetTokensOptions, type ShortcutOptions, type ShortcutProviderOptions, } from './shortcuts.js';
3
- export { DEFAULT_NFT_COLLECTION_FIELDS, ERC1155_ABI, ERC721_ABI, type DefaultNftCollectionField, type Erc1155Balance, type NftBalance, type NftCollection, type NftCollectionField, type NftCollectionsOptions, type NftItem, type NftOwner, type NftStandard, type NftTokenUri, type NftTokenUriOptions, } from './nft.js';
4
- export { NATIVE_CURRENCIES, getNativeCurrency, type NativeCurrency } from './chains.js';
2
+ export { GetLogsError } from './fallback.js';
3
+ export { getAllowances, getBalances, getMultiBalances, getTokens, type GetAllowancesOptions, type GetBalancesOptions, type GetTokensOptions, type ShortcutOptions, type ShortcutProviderOptions, } from './shortcuts.js';
4
+ export { NATIVE_BALANCE_MODES, NATIVE_CURRENCIES, getNativeBalanceMode, getNativeCurrency, type NativeCurrency } from './chains.js';
5
5
  export { clearChainIdCache, detectChainId } from './detect.js';
6
- export { DEFAULT_NATIVE_TOKENS, ERC20_ABI, NATIVE_TOKEN, formatAmount, type BalanceToken, type Erc20Contract, type TokenBalance, type TokenAllowance, MAX_UINT256, UNLIMITED_ALLOWANCE_THRESHOLD, DEFAULT_TOKEN_FIELDS, type DefaultTokenField, type TokenDetails, type TokenField, } from './erc20.js';
7
- export { Provider, type BalancesOptions, type CallInput, type CallResults, type ProviderConfig, type ProviderSource, type StaticCallItem, type StaticCallOverrides, type StaticCallResult, type TokensOptions, type TryCallResults, } from './provider.js';
6
+ export { DEFAULT_NATIVE_TOKENS, ERC20_ABI, NATIVE_TOKEN, exportTokenMetaCache, formatAmount, formatUnits, importTokenMetaCache, persistTokenMetaCache, type TokenMetaSnapshot, type TokenMetaStore, type BalanceToken, type Erc20Contract, type RawTokenAllowance, type RawTokenBalance, type TokenBalance, type TokenAllowance, MAX_UINT256, UNLIMITED_ALLOWANCE_THRESHOLD, DEFAULT_TOKEN_FIELDS, type DefaultTokenField, type TokenDetails, type TokenField, } from './erc20.js';
7
+ export { Provider, type AllowancesOptions, type BalancesOptions, type BalancesQuery, type BlockOptions, type CallInput, type CallResults, type ProviderConfig, type ProviderSource, type StaticCallItem, type StaticCallOverrides, type StaticCallResult, type TokensOptions, type TryCallResults, } from './provider.js';
8
8
  export { TRON_CHAIN_ID, TronProvider, isTronAddress, toEvmAddress, toTronAddress, type TronProviderOptions, type TronRequest, type TronWebLike, } from './tron.js';
9
9
  export { CallFailedError, decodeRevertReason, isExecutionError } from './errors.js';
10
- export { FallbackRpc, type FallbackOptions } from './fallback.js';
10
+ export { AllNodesFailedError, FallbackRpc, type FallbackNodeInfo, type FallbackOptions } from './fallback.js';
11
+ export { onRequest, type RequestEvent, type RequestListener } from './events.js';
12
+ export { watchBalances, type WatchBalancesOptions } from './watch.js';
11
13
  export { ChainCheckedProvider, getDefaultRpcUrls, isTronChain, type SourceOptions } from './source.js';
12
14
  export { DEFAULT_RPC_URLS, DEFAULT_TRON_HOSTS } from './rpcNodes.js';
13
15
  export { MULTICALL3_ADDRESS, getMulticall3, type Multicall } from './multicall.js';
14
- export type { BlockTag, CallOverrides, EthersLikeProvider } from './aggregate.js';
16
+ export type { BlockTag, CallOverrides, EthersLikeProvider, NativeBalanceMode } from './aggregate.js';
15
17
  export type { BatchOptions } from './batcher.js';
16
- export type { BoundCall, Call, FailableCall, Params, RawResult } from './call.js';
18
+ export type { BoundCall, Call, FailableCall, FailureReason, Params, RawResult, Settled } from './call.js';
17
19
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,WAAW,EAAE,KAAK,WAAW,EAAE,KAAK,cAAc,EAAE,MAAM,eAAe,CAAA;AAC3G,OAAO,EACL,aAAa,EACb,WAAW,EACX,kBAAkB,EAClB,cAAc,EACd,iBAAiB,EACjB,YAAY,EACZ,eAAe,EACf,SAAS,EACT,KAAK,kBAAkB,EACvB,KAAK,wBAAwB,EAC7B,KAAK,sBAAsB,EAC3B,KAAK,gBAAgB,EACrB,KAAK,eAAe,EACpB,KAAK,uBAAuB,GAC7B,MAAM,gBAAgB,CAAA;AACvB,OAAO,EACL,6BAA6B,EAC7B,WAAW,EACX,UAAU,EACV,KAAK,yBAAyB,EAC9B,KAAK,cAAc,EACnB,KAAK,UAAU,EACf,KAAK,aAAa,EAClB,KAAK,kBAAkB,EACvB,KAAK,qBAAqB,EAC1B,KAAK,OAAO,EACZ,KAAK,QAAQ,EACb,KAAK,WAAW,EAChB,KAAK,WAAW,EAChB,KAAK,kBAAkB,GACxB,MAAM,UAAU,CAAA;AACjB,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,KAAK,cAAc,EAAE,MAAM,aAAa,CAAA;AACvF,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAC9D,OAAO,EACL,qBAAqB,EACrB,SAAS,EACT,YAAY,EACZ,YAAY,EACZ,KAAK,YAAY,EACjB,KAAK,aAAa,EAClB,KAAK,YAAY,EACjB,KAAK,cAAc,EACnB,WAAW,EACX,6BAA6B,EAC7B,oBAAoB,EACpB,KAAK,iBAAiB,EACtB,KAAK,YAAY,EACjB,KAAK,UAAU,GAChB,MAAM,YAAY,CAAA;AACnB,OAAO,EACL,QAAQ,EACR,KAAK,eAAe,EACpB,KAAK,SAAS,EACd,KAAK,WAAW,EAChB,KAAK,cAAc,EACnB,KAAK,cAAc,EACnB,KAAK,cAAc,EACnB,KAAK,mBAAmB,EACxB,KAAK,gBAAgB,EACrB,KAAK,aAAa,EAClB,KAAK,cAAc,GACpB,MAAM,eAAe,CAAA;AACtB,OAAO,EACL,aAAa,EACb,YAAY,EACZ,aAAa,EACb,YAAY,EACZ,aAAa,EACb,KAAK,mBAAmB,EACxB,KAAK,WAAW,EAChB,KAAK,WAAW,GACjB,MAAM,WAAW,CAAA;AAClB,OAAO,EAAE,eAAe,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAA;AACnF,OAAO,EAAE,WAAW,EAAE,KAAK,eAAe,EAAE,MAAM,eAAe,CAAA;AACjE,OAAO,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,WAAW,EAAE,KAAK,aAAa,EAAE,MAAM,aAAa,CAAA;AACtG,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAA;AACpE,OAAO,EAAE,kBAAkB,EAAE,aAAa,EAAE,KAAK,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAClF,YAAY,EAAE,QAAQ,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAA;AACjF,YAAY,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAChD,YAAY,EAAE,SAAS,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,WAAW,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,WAAW,EAAE,KAAK,WAAW,EAAE,KAAK,cAAc,EAAE,MAAM,eAAe,CAAA;AAC3G,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AAC5C,OAAO,EACL,aAAa,EACb,WAAW,EACX,gBAAgB,EAChB,SAAS,EACT,KAAK,oBAAoB,EACzB,KAAK,kBAAkB,EACvB,KAAK,gBAAgB,EACrB,KAAK,eAAe,EACpB,KAAK,uBAAuB,GAC7B,MAAM,gBAAgB,CAAA;AACvB,OAAO,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,KAAK,cAAc,EAAE,MAAM,aAAa,CAAA;AACnI,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAC9D,OAAO,EACL,qBAAqB,EACrB,SAAS,EACT,YAAY,EACZ,oBAAoB,EACpB,YAAY,EACZ,WAAW,EACX,oBAAoB,EACpB,qBAAqB,EACrB,KAAK,iBAAiB,EACtB,KAAK,cAAc,EACnB,KAAK,YAAY,EACjB,KAAK,aAAa,EAClB,KAAK,iBAAiB,EACtB,KAAK,eAAe,EACpB,KAAK,YAAY,EACjB,KAAK,cAAc,EACnB,WAAW,EACX,6BAA6B,EAC7B,oBAAoB,EACpB,KAAK,iBAAiB,EACtB,KAAK,YAAY,EACjB,KAAK,UAAU,GAChB,MAAM,YAAY,CAAA;AACnB,OAAO,EACL,QAAQ,EACR,KAAK,iBAAiB,EACtB,KAAK,eAAe,EACpB,KAAK,aAAa,EAClB,KAAK,YAAY,EACjB,KAAK,SAAS,EACd,KAAK,WAAW,EAChB,KAAK,cAAc,EACnB,KAAK,cAAc,EACnB,KAAK,cAAc,EACnB,KAAK,mBAAmB,EACxB,KAAK,gBAAgB,EACrB,KAAK,aAAa,EAClB,KAAK,cAAc,GACpB,MAAM,eAAe,CAAA;AACtB,OAAO,EACL,aAAa,EACb,YAAY,EACZ,aAAa,EACb,YAAY,EACZ,aAAa,EACb,KAAK,mBAAmB,EACxB,KAAK,WAAW,EAChB,KAAK,WAAW,GACjB,MAAM,WAAW,CAAA;AAClB,OAAO,EAAE,eAAe,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAA;AACnF,OAAO,EAAE,mBAAmB,EAAE,WAAW,EAAE,KAAK,gBAAgB,EAAE,KAAK,eAAe,EAAE,MAAM,eAAe,CAAA;AAC7G,OAAO,EAAE,SAAS,EAAE,KAAK,YAAY,EAAE,KAAK,eAAe,EAAE,MAAM,aAAa,CAAA;AAChF,OAAO,EAAE,aAAa,EAAE,KAAK,oBAAoB,EAAE,MAAM,YAAY,CAAA;AACrE,OAAO,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,WAAW,EAAE,KAAK,aAAa,EAAE,MAAM,aAAa,CAAA;AACtG,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAA;AACpE,OAAO,EAAE,kBAAkB,EAAE,aAAa,EAAE,KAAK,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAClF,YAAY,EAAE,QAAQ,EAAE,aAAa,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAA;AACpG,YAAY,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAChD,YAAY,EAAE,SAAS,EAAE,IAAI,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA"}
package/dist/index.js CHANGED
@@ -1,13 +1,15 @@
1
1
  export { Contract, bindCall } from './contract.js';
2
- export { getAllowances, getBalances, getErc1155Balances, getNftBalances, getNftCollections, getNftOwners, getNftTokenUris, getTokens, } from './shortcuts.js';
3
- export { DEFAULT_NFT_COLLECTION_FIELDS, ERC1155_ABI, ERC721_ABI, } from './nft.js';
4
- export { NATIVE_CURRENCIES, getNativeCurrency } from './chains.js';
2
+ export { GetLogsError } from './fallback.js';
3
+ export { getAllowances, getBalances, getMultiBalances, getTokens, } from './shortcuts.js';
4
+ export { NATIVE_BALANCE_MODES, NATIVE_CURRENCIES, getNativeBalanceMode, getNativeCurrency } from './chains.js';
5
5
  export { clearChainIdCache, detectChainId } from './detect.js';
6
- export { DEFAULT_NATIVE_TOKENS, ERC20_ABI, NATIVE_TOKEN, formatAmount, MAX_UINT256, UNLIMITED_ALLOWANCE_THRESHOLD, DEFAULT_TOKEN_FIELDS, } from './erc20.js';
6
+ export { DEFAULT_NATIVE_TOKENS, ERC20_ABI, NATIVE_TOKEN, exportTokenMetaCache, formatAmount, formatUnits, importTokenMetaCache, persistTokenMetaCache, MAX_UINT256, UNLIMITED_ALLOWANCE_THRESHOLD, DEFAULT_TOKEN_FIELDS, } from './erc20.js';
7
7
  export { Provider, } from './provider.js';
8
8
  export { TRON_CHAIN_ID, TronProvider, isTronAddress, toEvmAddress, toTronAddress, } from './tron.js';
9
9
  export { CallFailedError, decodeRevertReason, isExecutionError } from './errors.js';
10
- export { FallbackRpc } from './fallback.js';
10
+ export { AllNodesFailedError, FallbackRpc } from './fallback.js';
11
+ export { onRequest } from './events.js';
12
+ export { watchBalances } from './watch.js';
11
13
  export { ChainCheckedProvider, getDefaultRpcUrls, isTronChain } from './source.js';
12
14
  export { DEFAULT_RPC_URLS, DEFAULT_TRON_HOSTS } from './rpcNodes.js';
13
15
  export { MULTICALL3_ADDRESS, getMulticall3 } from './multicall.js';
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAA2D,MAAM,eAAe,CAAA;AAC3G,OAAO,EACL,aAAa,EACb,WAAW,EACX,kBAAkB,EAClB,cAAc,EACd,iBAAiB,EACjB,YAAY,EACZ,eAAe,EACf,SAAS,GAOV,MAAM,gBAAgB,CAAA;AACvB,OAAO,EACL,6BAA6B,EAC7B,WAAW,EACX,UAAU,GAYX,MAAM,UAAU,CAAA;AACjB,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAuB,MAAM,aAAa,CAAA;AACvF,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAC9D,OAAO,EACL,qBAAqB,EACrB,SAAS,EACT,YAAY,EACZ,YAAY,EAKZ,WAAW,EACX,6BAA6B,EAC7B,oBAAoB,GAIrB,MAAM,YAAY,CAAA;AACnB,OAAO,EACL,QAAQ,GAWT,MAAM,eAAe,CAAA;AACtB,OAAO,EACL,aAAa,EACb,YAAY,EACZ,aAAa,EACb,YAAY,EACZ,aAAa,GAId,MAAM,WAAW,CAAA;AAClB,OAAO,EAAE,eAAe,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAA;AACnF,OAAO,EAAE,WAAW,EAAwB,MAAM,eAAe,CAAA;AACjE,OAAO,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,WAAW,EAAsB,MAAM,aAAa,CAAA;AACtG,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAA;AACpE,OAAO,EAAE,kBAAkB,EAAE,aAAa,EAAkB,MAAM,gBAAgB,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAA2D,MAAM,eAAe,CAAA;AAC3G,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AAC5C,OAAO,EACL,aAAa,EACb,WAAW,EACX,gBAAgB,EAChB,SAAS,GAMV,MAAM,gBAAgB,CAAA;AACvB,OAAO,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,iBAAiB,EAAuB,MAAM,aAAa,CAAA;AACnI,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAC9D,OAAO,EACL,qBAAqB,EACrB,SAAS,EACT,YAAY,EACZ,oBAAoB,EACpB,YAAY,EACZ,WAAW,EACX,oBAAoB,EACpB,qBAAqB,EASrB,WAAW,EACX,6BAA6B,EAC7B,oBAAoB,GAIrB,MAAM,YAAY,CAAA;AACnB,OAAO,EACL,QAAQ,GAcT,MAAM,eAAe,CAAA;AACtB,OAAO,EACL,aAAa,EACb,YAAY,EACZ,aAAa,EACb,YAAY,EACZ,aAAa,GAId,MAAM,WAAW,CAAA;AAClB,OAAO,EAAE,eAAe,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAA;AACnF,OAAO,EAAE,mBAAmB,EAAE,WAAW,EAA+C,MAAM,eAAe,CAAA;AAC7G,OAAO,EAAE,SAAS,EAA2C,MAAM,aAAa,CAAA;AAChF,OAAO,EAAE,aAAa,EAA6B,MAAM,YAAY,CAAA;AACrE,OAAO,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,WAAW,EAAsB,MAAM,aAAa,CAAA;AACtG,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAA;AACpE,OAAO,EAAE,kBAAkB,EAAE,aAAa,EAAkB,MAAM,gBAAgB,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"multicall.d.ts","sourceRoot":"","sources":["../src/multicall.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,MAAM,CAAA;IACf,qCAAqC;IACrC,KAAK,EAAE,MAAM,CAAA;CACd;AAED,eAAO,MAAM,kBAAkB,+CAA+C,CAAA;AA6C9E,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAE/D"}
1
+ {"version":3,"file":"multicall.d.ts","sourceRoot":"","sources":["../src/multicall.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,MAAM,CAAA;IACf,qCAAqC;IACrC,KAAK,EAAE,MAAM,CAAA;CACd;AAED,eAAO,MAAM,kBAAkB,+CAA+C,CAAA;AA6E9E,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAE/D"}
package/dist/multicall.js CHANGED
@@ -38,12 +38,43 @@ const MULTICALL3 = {
38
38
  43114: { address: CANONICAL, block: 11907934 },
39
39
  80001: { address: CANONICAL, block: 25444704 },
40
40
  421611: { address: CANONICAL, block: 10228837 },
41
- 5000: { address: '0xd77b59d4cb13bea71f3cc093e401720867355d6e', block: 18877383 },
41
+ // Mantle:标准地址上的合约字节码与其他链不同,但 aggregate3 / getBlockNumber / getEthBalance 行为一致(2026-10 实测);
42
+ // ethcall 表里的 0xd77b…5d6e 调 aggregate3 会 revert
43
+ 5000: { address: CANONICAL, block: 304717 },
42
44
  1666600000: { address: CANONICAL, block: 24185753 },
43
45
  73927: { address: '0x138A85647768815078DF1dD85C6121e611381A0b', block: 14080843 },
44
46
  // Tron 主网 TEazPvZwDjDtFeJupyo7QunvnrnUjPH8ED(链上合约名 Multicall3,2026-10 实测)
45
47
  728126428: { address: '0x32a4f47a74a6810bd0bf861cabab99656a75de9e', block: 0 },
46
- 81457: { address: '0x23928c6f823e0d78eadc9d2f69ace652ff3cdcb1', block: 368182 },
48
+ // Blast:ethcall 表里的 0x2392…cdcb1 调 aggregate3 会 revert,标准地址可用(2026-10 实测)
49
+ 81457: { address: CANONICAL, block: 88189 },
50
+ // ---- 2026-10 实测补充:标准地址上 aggregate3 可用、区块号与节点一致 ----
51
+ // 部署区块查到的按实际填写;节点不提供历史状态(或忽略区块参数)查不到的,保守地填核实时的区块:
52
+ // 更早的历史查询走 deployless,最新状态照常用合约
53
+ 25: { address: CANONICAL, block: 98990812 }, // Cronos,部署区块未查到
54
+ 106: { address: CANONICAL, block: 70377223 }, // Velas,部署区块未查到
55
+ 130: { address: CANONICAL, block: 60854543 }, // Unichain,部署区块未查到
56
+ 143: { address: CANONICAL, block: 9248132 }, // Monad
57
+ 204: { address: CANONICAL, block: 193943883 }, // opBNB,部署区块未查到
58
+ 288: { address: CANONICAL, block: 40299030 }, // Boba,部署区块未查到
59
+ 321: { address: CANONICAL, block: 56352410 }, // KCC,部署区块未查到
60
+ 592: { address: CANONICAL, block: 761794 }, // Astar
61
+ 988: { address: CANONICAL, block: 42479473 }, // Stable,部署区块未查到
62
+ 999: { address: CANONICAL, block: 48135400 }, // HyperEVM,部署区块未查到
63
+ 1116: { address: CANONICAL, block: 6988931 }, // Core
64
+ 2818: { address: CANONICAL, block: 3654913 }, // Morph
65
+ 4663: { address: CANONICAL, block: 84683398 }, // Robinhood Chain,部署区块未查到
66
+ 4689: { address: CANONICAL, block: 53225909 }, // IoTeX,部署区块未查到
67
+ 9745: { address: CANONICAL, block: 0 }, // Plasma,创世预置
68
+ 34443: { address: CANONICAL, block: 2465882 }, // Mode
69
+ 57073: { address: CANONICAL, block: 58104502 }, // Ink,部署区块未查到
70
+ 59144: { address: CANONICAL, block: 42 }, // Linea
71
+ 80094: { address: CANONICAL, block: 0 }, // Berachain,创世预置
72
+ 534352: { address: CANONICAL, block: 14 }, // Scroll
73
+ 86233268: { address: CANONICAL, block: 10854614 }, // Winchain,部署区块未查到
74
+ // 以下两条链不支持 deployless(合约创建式 eth_call 返回空 / 格式不对),只能用 Multicall3;
75
+ // 早于部署区块的历史查询会失败
76
+ 42262: { address: CANONICAL, block: 22380155 }, // Oasis Emerald,部署区块未查到
77
+ 1313161554: { address: CANONICAL, block: 62907816 }, // Aurora
47
78
  };
48
79
  export function getMulticall3(chainId) {
49
80
  return MULTICALL3[chainId] ?? null;
@@ -1 +1 @@
1
- {"version":3,"file":"multicall.js","sourceRoot":"","sources":["../src/multicall.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"multicall.js","sourceRoot":"","sources":["../src/multicall.ts"],"names":[],"mappings":"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"}
package/dist/nft.d.ts CHANGED
@@ -62,10 +62,15 @@ export interface NftCollectionsOptions<F extends NftCollectionField = DefaultNft
62
62
  /** 要返回的字段,默认 ['standard', 'name', 'symbol'] */
63
63
  fields?: readonly F[];
64
64
  }
65
+ /** 批量查 ERC721 持有人(ownerOf),可混合多个集合:`await nftOwners(multi, [{ contract: BAYC, tokenId: 1 }])` */
65
66
  export declare function nftOwners(provider: Provider, items: readonly NftItem[], overrides?: CallOverrides): Promise<NftOwner[]>;
67
+ /** 批量查 ERC721 持有数量(balanceOf):`await nftBalances(multi, user, [BAYC, MAYC])` */
66
68
  export declare function nftBalances(provider: Provider, owner: string, collections: readonly string[], overrides?: CallOverrides): Promise<NftBalance[]>;
69
+ /** 批量查 ERC1155 余额:`await erc1155Balances(multi, user, [{ contract, tokenId: 1 }])` */
67
70
  export declare function erc1155Balances(provider: Provider, owner: string, items: readonly NftItem[], overrides?: CallOverrides): Promise<Erc1155Balance[]>;
71
+ /** 批量查 NFT 元数据地址:兼容 ERC721 tokenURI 与 ERC1155 uri({id} 按规范替换),可转换 ipfs:// */
68
72
  export declare function nftTokenUris(provider: Provider, items: readonly NftItem[], options?: NftTokenUriOptions): Promise<NftTokenUri[]>;
73
+ /** 批量查 NFT 集合信息(标准 / name / symbol / totalSupply),字段可选 */
69
74
  export declare function nftCollections<F extends NftCollectionField = DefaultNftCollectionField>(provider: Provider, collections: readonly string[], options?: NftCollectionsOptions<F>): Promise<NftCollection<F>[]>;
70
75
  export {};
71
76
  //# sourceMappingURL=nft.d.ts.map
package/dist/nft.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"nft.d.ts","sourceRoot":"","sources":["../src/nft.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"nft.d.ts","sourceRoot":"","sources":["../src/nft.ts"],"names":[],"mappings":"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"}
package/dist/nft.js CHANGED
@@ -40,6 +40,7 @@ function expandUri(uri, tokenId, gateway) {
40
40
  }
41
41
  return expanded;
42
42
  }
43
+ /** 批量查 ERC721 持有人(ownerOf),可混合多个集合:`await nftOwners(multi, [{ contract: BAYC, tokenId: 1 }])` */
43
44
  export async function nftOwners(provider, items, overrides) {
44
45
  // Tron 上返回 T 开头的地址,方便与 tronWeb.defaultAddress.base58 等直接比较
45
46
  const tron = isTronChain(await provider.getChainId());
@@ -53,6 +54,7 @@ export async function nftOwners(provider, items, overrides) {
53
54
  return { contract: item.contract, tokenId: ids[i] === null ? String(item.tokenId) : tokenIdString(item.tokenId), owner, success: owner !== null };
54
55
  });
55
56
  }
57
+ /** 批量查 ERC721 持有数量(balanceOf):`await nftBalances(multi, user, [BAYC, MAYC])` */
56
58
  export async function nftBalances(provider, owner, collections, overrides) {
57
59
  const calls = collections.map((contract) => provider.contract(contract, ERC721_ABI).balanceOf(owner));
58
60
  const results = calls.length ? await provider.tryAll(calls, overrides) : [];
@@ -61,6 +63,7 @@ export async function nftBalances(provider, owner, collections, overrides) {
61
63
  return { contract, balance: balance === null ? '0' : balance.toString(), success: balance !== null };
62
64
  });
63
65
  }
66
+ /** 批量查 ERC1155 余额:`await erc1155Balances(multi, user, [{ contract, tokenId: 1 }])` */
64
67
  export async function erc1155Balances(provider, owner, items, overrides) {
65
68
  const ids = items.map((item) => parseTokenId(item.tokenId));
66
69
  const calls = items.flatMap((item, i) => ids[i] === null ? [] : [provider.contract(item.contract, ERC1155_ABI).balanceOf(owner, ids[i])]);
@@ -76,6 +79,7 @@ export async function erc1155Balances(provider, owner, items, overrides) {
76
79
  };
77
80
  });
78
81
  }
82
+ /** 批量查 NFT 元数据地址:兼容 ERC721 tokenURI 与 ERC1155 uri({id} 按规范替换),可转换 ipfs:// */
79
83
  export async function nftTokenUris(provider, items, options = {}) {
80
84
  const { ipfsGateway, ...overrides } = options;
81
85
  const chainId = await provider.getChainId();
@@ -129,6 +133,7 @@ export async function nftTokenUris(provider, items, options = {}) {
129
133
  };
130
134
  });
131
135
  }
136
+ /** 批量查 NFT 集合信息(标准 / name / symbol / totalSupply),字段可选 */
132
137
  export async function nftCollections(provider, collections, options = {}) {
133
138
  const { fields = DEFAULT_NFT_COLLECTION_FIELDS, ...overrides } = options;
134
139
  const wanted = new Set(fields);