@w3lib/evm-batch-call 0.3.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 (103) hide show
  1. package/CHANGELOG.md +45 -0
  2. package/README.md +98 -35
  3. package/contracts/DeploylessMulticall3.sol +5 -0
  4. package/dist/aggregate.d.ts +20 -1
  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 +31 -3
  33. package/dist/fallback.d.ts.map +1 -1
  34. package/dist/fallback.js +165 -27
  35. package/dist/fallback.js.map +1 -1
  36. package/dist/index.d.ts +9 -10
  37. package/dist/index.d.ts.map +1 -1
  38. package/dist/index.js +6 -7
  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 +9 -0
  48. package/dist/owner.d.ts.map +1 -1
  49. package/dist/owner.js +11 -2
  50. package/dist/owner.js.map +1 -1
  51. package/dist/provider.d.ts +55 -29
  52. package/dist/provider.d.ts.map +1 -1
  53. package/dist/provider.js +140 -111
  54. package/dist/provider.js.map +1 -1
  55. package/dist/shortcuts.d.ts +34 -53
  56. package/dist/shortcuts.d.ts.map +1 -1
  57. package/dist/shortcuts.js +41 -91
  58. package/dist/shortcuts.js.map +1 -1
  59. package/dist/source.d.ts +4 -2
  60. package/dist/source.d.ts.map +1 -1
  61. package/dist/source.js +35 -6
  62. package/dist/source.js.map +1 -1
  63. package/dist/subpaths/nft.d.ts +46 -0
  64. package/dist/subpaths/nft.d.ts.map +1 -0
  65. package/dist/subpaths/nft.js +55 -0
  66. package/dist/subpaths/nft.js.map +1 -0
  67. package/dist/subpaths/owner.d.ts +33 -0
  68. package/dist/subpaths/owner.d.ts.map +1 -0
  69. package/dist/subpaths/owner.js +34 -0
  70. package/dist/subpaths/owner.js.map +1 -0
  71. package/dist/tron.d.ts +2 -0
  72. package/dist/tron.d.ts.map +1 -1
  73. package/dist/tron.js +5 -0
  74. package/dist/tron.js.map +1 -1
  75. package/dist/util.d.ts +5 -0
  76. package/dist/util.d.ts.map +1 -1
  77. package/dist/util.js +23 -0
  78. package/dist/util.js.map +1 -1
  79. package/dist/watch.d.ts +25 -0
  80. package/dist/watch.d.ts.map +1 -0
  81. package/dist/watch.js +105 -0
  82. package/dist/watch.js.map +1 -0
  83. package/package.json +19 -10
  84. package/src/aggregate.ts +172 -7
  85. package/src/batcher.ts +69 -9
  86. package/src/call.ts +42 -2
  87. package/src/chains.ts +15 -0
  88. package/src/deployless.ts +1 -1
  89. package/src/erc20.ts +171 -8
  90. package/src/events.ts +42 -0
  91. package/src/fallback.ts +193 -26
  92. package/src/index.ts +19 -61
  93. package/src/multicall.ts +34 -2
  94. package/src/nft.ts +5 -0
  95. package/src/owner.ts +11 -2
  96. package/src/provider.ts +225 -124
  97. package/src/shortcuts.ts +76 -110
  98. package/src/source.ts +35 -8
  99. package/src/subpaths/nft.ts +107 -0
  100. package/src/subpaths/owner.ts +69 -0
  101. package/src/tron.ts +7 -0
  102. package/src/util.ts +27 -0
  103. package/src/watch.ts +149 -0
@@ -1,8 +1,6 @@
1
1
  import type { CallOverrides } from './aggregate.js';
2
- import type { OwnedToken, OwnerTokensOptions } from './owner.js';
3
- import type { BalanceToken, DefaultTokenField, TokenAllowance, TokenBalance, TokenDetails, TokenField } from './erc20.js';
4
- import type { DefaultNftCollectionField, Erc1155Balance, NftBalance, NftCollection, NftCollectionField, NftCollectionsOptions, NftItem, NftOwner, NftTokenUri } from './nft.js';
5
- import { Provider, type BalancesOptions, type ProviderConfig, type TokensOptions } from './provider.js';
2
+ import type { BalanceToken, DefaultTokenField, RawTokenAllowance, RawTokenBalance, TokenAllowance, TokenBalance, TokenDetails, TokenField } from './erc20.js';
3
+ import { Provider, type AllowancesOptions, type BalancesOptions, type BalancesQuery, type ProviderConfig, type TokensOptions } from './provider.js';
6
4
  import type { ProviderSource } from './source.js';
7
5
  /** getBalances / getTokens 共用的节点参数 */
8
6
  export interface ShortcutProviderOptions extends ProviderConfig {
@@ -14,15 +12,27 @@ export interface ShortcutProviderOptions extends ProviderConfig {
14
12
  * - ethers Provider
15
13
  * - 浏览器插件钱包:`window.ethereum`(EIP-1193)、`window.tronWeb`
16
14
  * - 混合数组,如 `[window.ethereum, 'https://…']`:钱包出错或不在这条链上时自动用后面的节点
15
+ * - 已创建的 Provider 实例:直接使用(chainId 和其他节点配置以实例为准,不能再传)
17
16
  */
18
- provider?: ProviderSource | readonly ProviderSource[];
17
+ provider?: ProviderSource | readonly ProviderSource[] | Provider;
19
18
  }
20
19
  export interface GetBalancesOptions extends BalancesOptions, ShortcutProviderOptions {
21
20
  }
22
21
  export interface GetTokensOptions<F extends TokenField = DefaultTokenField> extends TokensOptions<F>, ShortcutProviderOptions {
23
22
  }
23
+ export interface GetAllowancesOptions extends AllowancesOptions, ShortcutProviderOptions {
24
+ }
24
25
  export interface ShortcutOptions extends CallOverrides, ShortcutProviderOptions {
25
26
  }
27
+ /**
28
+ * 拆出节点参数、调用参数和函数自己的参数(ownKeys),其余作为 Provider 配置;值为 undefined 的参数忽略。
29
+ * 子路径(/nft、/owner)的快捷函数也用它,与 getBalances 共享 Provider 缓存
30
+ */
31
+ export declare function resolve<T extends ShortcutOptions, K extends keyof T & string = never>(options: T, ownKeys?: readonly K[]): {
32
+ provider: Provider;
33
+ overrides: CallOverrides;
34
+ own: Pick<T, K>;
35
+ };
26
36
  /**
27
37
  * 批量查余额(主币 + 代币,一次请求),返回原始余额、decimals 和换算后的数值。
28
38
  *
@@ -34,10 +44,25 @@ export interface ShortcutOptions extends CallOverrides, ShortcutProviderOptions
34
44
  * await getBalances(user, tokens, { provider: 'https://bsc-dataseed.bnbchain.org' })
35
45
  * await getBalances(user, tokens, { chainId: 56, provider: [window.ethereum, 'https://…'] }) // 钱包优先,失败用公共节点
36
46
  * await getBalances(user, tokens, { chainId: 56, symbol: true }) // 同时返回 symbol
47
+ * await getBalances(user, tokens, { chainId: 56, decimals: false }) // 只查余额,不带 decimals / formatted
37
48
  * // [{ token: NATIVE_TOKEN, native: true, balance: '1500000000000000000', decimals: 18, formatted: '1.5', success: true }, ...]
38
49
  * ```
39
50
  */
51
+ export declare function getBalances(owner: string, tokens: readonly BalanceToken[], options: GetBalancesOptions & {
52
+ decimals: false;
53
+ }): Promise<RawTokenBalance[]>;
40
54
  export declare function getBalances(owner: string, tokens: readonly BalanceToken[], options?: GetBalancesOptions): Promise<TokenBalance[]>;
55
+ /**
56
+ * 多个钱包一次查(同一条链上合成一次 multicall),结果与 queries 一一对应。节点参数与 getBalances 相同。
57
+ *
58
+ * ```ts
59
+ * const [a, b] = await getMultiBalances([{ owner: walletA, tokens: [NATIVE_TOKEN, USDT] }, { owner: walletB, tokens: [USDT] }], { chainId: 56 })
60
+ * ```
61
+ */
62
+ export declare function getMultiBalances(queries: readonly BalancesQuery[], options: GetBalancesOptions & {
63
+ decimals: false;
64
+ }): Promise<RawTokenBalance[][]>;
65
+ export declare function getMultiBalances(queries: readonly BalancesQuery[], options?: GetBalancesOptions): Promise<TokenBalance[][]>;
41
66
  /**
42
67
  * 批量查 ERC20 代币详情(一次请求),可以选择返回哪些字段。节点参数与 getBalances 相同。
43
68
  *
@@ -58,54 +83,10 @@ export declare function getTokens<const F extends TokenField = DefaultTokenField
58
83
  * if (!usdt.unlimited && BigInt(usdt.allowance) < amount) { // 需要 approve
59
84
  * ```
60
85
  */
61
- export declare function getAllowances(owner: string, spender: string, tokens: readonly BalanceToken[], options?: ShortcutOptions): Promise<TokenAllowance[]>;
62
- export interface GetNftCollectionsOptions<F extends NftCollectionField = DefaultNftCollectionField> extends NftCollectionsOptions<F>, ShortcutProviderOptions {
63
- }
64
- /**
65
- * 批量查 NFT 集合信息,字段可选(默认 standard / name / symbol)。
66
- *
67
- * ```ts
68
- * await getNftCollections([BAYC, MAYC], { chainId: 1, fields: ['standard', 'name', 'totalSupply'] })
69
- * // [{ address: BAYC, standard: 'ERC721', name: 'BoredApeYachtClub', totalSupply: '10000', success: true }, ...]
70
- * ```
71
- */
72
- export declare function getNftCollections<const F extends NftCollectionField = DefaultNftCollectionField>(collections: readonly string[], options?: GetNftCollectionsOptions<F>): Promise<NftCollection<F>[]>;
73
- /** 批量查 ERC721 持有数量:`await getNftBalances(user, [BAYC, MAYC], { chainId: 1 })` */
74
- export declare function getNftBalances(owner: string, collections: readonly string[], options?: ShortcutOptions): Promise<NftBalance[]>;
75
- /** 批量查 ERC721 持有人:`await getNftOwners([{ contract: BAYC, tokenId: 1 }], { chainId: 1 })` */
76
- export declare function getNftOwners(items: readonly NftItem[], options?: ShortcutOptions): Promise<NftOwner[]>;
77
- export interface GetNftTokenUrisOptions extends ShortcutOptions {
78
- /** 把 ipfs://xxx 转成 `${ipfsGateway}xxx`,如 'https://ipfs.io/ipfs/' */
79
- ipfsGateway?: string;
80
- }
81
- /**
82
- * 批量查 NFT 元数据地址(ERC721 tokenURI / ERC1155 uri 自动兼容)。
83
- *
84
- * ```ts
85
- * await getNftTokenUris([{ contract: BAYC, tokenId: 1 }], { chainId: 1, ipfsGateway: 'https://ipfs.io/ipfs/' })
86
- * // [{ contract: BAYC, tokenId: '1', uri: 'https://ipfs.io/ipfs/Qm…/1', success: true }]
87
- * ```
88
- */
89
- export declare function getNftTokenUris(items: readonly NftItem[], options?: GetNftTokenUrisOptions): Promise<NftTokenUri[]>;
90
- /** 批量查 ERC1155 余额:`await getErc1155Balances(user, [{ contract, tokenId: 1 }], { chainId: 137 })` */
91
- export declare function getErc1155Balances(owner: string, items: readonly NftItem[], options?: ShortcutOptions): Promise<Erc1155Balance[]>;
92
- export interface GetOwnerTokensOptions extends OwnerTokensOptions, ShortcutProviderOptions {
93
- }
94
- /**
95
- * 列出持有人拥有的代币(资产列表)。默认用免费公开代币列表发现代币,余额用 multicall 在链上核对。
96
- *
97
- * ```ts
98
- * await getOwnerTokens(user, { chainId: 56 }) // 免费,只能发现公开列表里的代币
99
- * await getOwnerTokens(user, { chainId: 1, prices: true, minUsd: 1 }) // 带美元价值,过滤零头和垃圾币
100
- * await getOwnerTokens(user, { chainId: 56, source: alchemy({ apiKey }) }) // 用 Alchemy 查全部历史持仓
101
- * ```
102
- *
103
- * @deprecated 不推荐使用:EVM 链上无法只靠节点可靠地列出地址持有的全部代币,这个方法只是尽力而为——
104
- * 默认来源只能发现公开列表里的代币,依赖第三方免费服务(可能限流、改格式或停止服务),要查几千个代币的余额、耗时数秒,
105
- * 价格也不一定可信;传 `alchemy` / `nodereal` 来源能查全,但同样受第三方服务的额度和可用性约束。
106
- * 已知要查哪些代币时请用 `getBalances`;需要可靠的完整持仓请直接接入索引服务的接口或自己的索引。局限性详见 README「资产列表」。
107
- */
108
- export declare function getOwnerTokens(owner: string, options?: GetOwnerTokensOptions): Promise<OwnedToken[]>;
86
+ export declare function getAllowances(owner: string, spender: string, tokens: readonly BalanceToken[], options: GetAllowancesOptions & {
87
+ decimals: false;
88
+ }): Promise<RawTokenAllowance[]>;
89
+ export declare function getAllowances(owner: string, spender: string, tokens: readonly BalanceToken[], options?: GetAllowancesOptions): Promise<TokenAllowance[]>;
109
90
  /** 测试用:按参数取(或创建)Provider,用于验证缓存复用(不在包的公开导出里) */
110
91
  export declare function resolveProviderForTest(options: ShortcutOptions): Provider;
111
92
  /** 测试用:清空 getBalances / getTokens 的 Provider 缓存 */
@@ -1 +1 @@
1
- {"version":3,"file":"shortcuts.d.ts","sourceRoot":"","sources":["../src/shortcuts.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"shortcuts.d.ts","sourceRoot":"","sources":["../src/shortcuts.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA;AACnD,OAAO,KAAK,EAAE,YAAY,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,eAAe,EAAE,cAAc,EAAE,YAAY,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AAC7J,OAAO,EAAE,QAAQ,EAAE,KAAK,iBAAiB,EAAE,KAAK,eAAe,EAAE,KAAK,aAAa,EAAE,KAAK,cAAc,EAAE,KAAK,aAAa,EAAE,MAAM,eAAe,CAAA;AACnJ,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAEjD,sCAAsC;AACtC,MAAM,WAAW,uBAAwB,SAAQ,cAAc;IAC7D,qEAAqE;IACrE,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IACzB;;;;;;;OAOG;IACH,QAAQ,CAAC,EAAE,cAAc,GAAG,SAAS,cAAc,EAAE,GAAG,QAAQ,CAAA;CACjE;AAED,MAAM,WAAW,kBAAmB,SAAQ,eAAe,EAAE,uBAAuB;CAAG;AAEvF,MAAM,WAAW,gBAAgB,CAAC,CAAC,SAAS,UAAU,GAAG,iBAAiB,CAAE,SAAQ,aAAa,CAAC,CAAC,CAAC,EAAE,uBAAuB;CAAG;AAEhI,MAAM,WAAW,oBAAqB,SAAQ,iBAAiB,EAAE,uBAAuB;CAAG;AAyG3F,MAAM,WAAW,eAAgB,SAAQ,aAAa,EAAE,uBAAuB;CAAG;AAElF;;;GAGG;AACH,wBAAgB,OAAO,CAAC,CAAC,SAAS,eAAe,EAAE,CAAC,SAAS,MAAM,CAAC,GAAG,MAAM,GAAG,KAAK,EACnF,OAAO,EAAE,CAAC,EACV,OAAO,GAAE,SAAS,CAAC,EAAO,GACzB;IAAE,QAAQ,EAAE,QAAQ,CAAC;IAAC,SAAS,EAAE,aAAa,CAAC;IAAC,GAAG,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;CAAE,CAenE;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,YAAY,EAAE,EAAE,OAAO,EAAE,kBAAkB,GAAG;IAAE,QAAQ,EAAE,KAAK,CAAA;CAAE,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC,CAAA;AAC1J,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,YAAY,EAAE,EAAE,OAAO,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAAA;AAMlI;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,SAAS,aAAa,EAAE,EAAE,OAAO,EAAE,kBAAkB,GAAG;IAAE,QAAQ,EAAE,KAAK,CAAA;CAAE,GAAG,OAAO,CAAC,eAAe,EAAE,EAAE,CAAC,CAAA;AACpJ,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,SAAS,aAAa,EAAE,EAAE,OAAO,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC,CAAA;AAM5H;;;;;;;;;;GAUG;AACH,wBAAgB,SAAS,CAAC,KAAK,CAAC,CAAC,SAAS,UAAU,GAAG,iBAAiB,EACtE,MAAM,EAAE,SAAS,MAAM,EAAE,EACzB,OAAO,GAAE,gBAAgB,CAAC,CAAC,CAAM,GAChC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC,CAG5B;AAED;;;;;;;GAOG;AACH,wBAAgB,aAAa,CAC3B,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,SAAS,YAAY,EAAE,EAC/B,OAAO,EAAE,oBAAoB,GAAG;IAAE,QAAQ,EAAE,KAAK,CAAA;CAAE,GAClD,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAAA;AAC/B,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,YAAY,EAAE,EAAE,OAAO,CAAC,EAAE,oBAAoB,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC,CAAA;AAWzJ,gDAAgD;AAChD,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,eAAe,GAAG,QAAQ,CAEzE;AAED,mDAAmD;AACnD,wBAAgB,0BAA0B,IAAI,IAAI,CAEjD"}
package/dist/shortcuts.js CHANGED
@@ -21,6 +21,17 @@ function configKey(config) {
21
21
  return null;
22
22
  }
23
23
  }
24
+ /** 对象来源(钱包、ethers Provider)的编号,用于混合数组的缓存 key;WeakMap 不阻止对象被回收 */
25
+ const objectIds = new WeakMap();
26
+ let nextObjectId = 0;
27
+ function objectId(value) {
28
+ let id = objectIds.get(value);
29
+ if (id === undefined) {
30
+ id = ++nextObjectId;
31
+ objectIds.set(value, id);
32
+ }
33
+ return id;
34
+ }
24
35
  function sourceKey(chainId, source) {
25
36
  if (source === undefined) {
26
37
  return 'default';
@@ -30,11 +41,22 @@ function sourceKey(chainId, source) {
30
41
  }
31
42
  if (Array.isArray(source)) {
32
43
  // URL 数组每次调用都是新数组,按内容缓存
33
- return source.every((item) => typeof item === 'string') ? `urls:${source.join('\n')}` : null;
44
+ if (source.every((item) => typeof item === 'string')) {
45
+ return `urls:${source.join('\n')}`;
46
+ }
47
+ // 钱包 + URL:对象按编号、URL 按内容
48
+ return chainId === undefined ? null : `mixed:${source.map((item) => (typeof item === 'string' ? `url:${item}` : `obj:${objectId(item)}`)).join('\n')}`;
34
49
  }
35
50
  return chainId === undefined ? null : source;
36
51
  }
37
- function getProvider(chainId, source, config) {
52
+ function getProvider(chainId, input, config) {
53
+ if (input instanceof Provider) {
54
+ if (chainId !== undefined || Object.keys(config).length) {
55
+ throw new Error('chainId and provider config must be set on the Provider instance itself, not passed alongside it');
56
+ }
57
+ return input;
58
+ }
59
+ const source = input;
38
60
  if (chainId === undefined && source === undefined) {
39
61
  throw new Error('getBalances / getTokens requires chainId or provider');
40
62
  }
@@ -62,9 +84,12 @@ function getProvider(chainId, source, config) {
62
84
  }
63
85
  return provider;
64
86
  }
65
- /** 拆出节点参数、调用参数和函数自己的参数(ownKeys),其余作为 Provider 配置;值为 undefined 的参数忽略 */
66
- function resolve(options, ownKeys = []) {
67
- const { chainId, provider, blockTag, from, ...others } = options;
87
+ /**
88
+ * 拆出节点参数、调用参数和函数自己的参数(ownKeys),其余作为 Provider 配置;值为 undefined 的参数忽略。
89
+ * 子路径(/nft、/owner)的快捷函数也用它,与 getBalances 共享 Provider 缓存
90
+ */
91
+ export function resolve(options, ownKeys = []) {
92
+ const { chainId, provider, blockTag, from, signal, minBlock, ...others } = options;
68
93
  const own = {};
69
94
  const config = {};
70
95
  for (const [key, value] of Object.entries(others)) {
@@ -76,27 +101,17 @@ function resolve(options, ownKeys = []) {
76
101
  return {
77
102
  // null / 空字符串(如状态里还没有 chainId)按“未传”处理,走自动识别,而不是变成 chainId 0
78
103
  provider: getProvider(chainId === undefined || chainId === null || chainId === '' ? undefined : Number(chainId), provider, config),
79
- overrides: { blockTag, from },
104
+ overrides: { blockTag, from, signal, minBlock },
80
105
  own: own,
81
106
  };
82
107
  }
83
- /**
84
- * 批量查余额(主币 + 代币,一次请求),返回原始余额、decimals 和换算后的数值。
85
- *
86
- * ```ts
87
- * import { NATIVE_TOKEN, getBalances } from '@w3lib/evm-batch-call'
88
- *
89
- * await getBalances(user, [NATIVE_TOKEN, USDT], { chainId: 56 }) // 内置公共节点
90
- * await getBalances(user, tokens, { provider: window.ethereum }) // 钱包,chainId 自动识别
91
- * await getBalances(user, tokens, { provider: 'https://bsc-dataseed.bnbchain.org' })
92
- * await getBalances(user, tokens, { chainId: 56, provider: [window.ethereum, 'https://…'] }) // 钱包优先,失败用公共节点
93
- * await getBalances(user, tokens, { chainId: 56, symbol: true }) // 同时返回 symbol
94
- * // [{ token: NATIVE_TOKEN, native: true, balance: '1500000000000000000', decimals: 18, formatted: '1.5', success: true }, ...]
95
- * ```
96
- */
97
108
  export function getBalances(owner, tokens, options = {}) {
98
- const { provider, overrides, own } = resolve(options, ['symbol']);
99
- return provider.balances(owner, tokens, { ...overrides, symbol: own.symbol });
109
+ const { provider, overrides, own } = resolve(options, ['symbol', 'decimals', 'withBlock']);
110
+ return provider.balances(owner, tokens, { ...overrides, ...own });
111
+ }
112
+ export function getMultiBalances(queries, options = {}) {
113
+ const { provider, overrides, own } = resolve(options, ['symbol', 'decimals', 'withBlock']);
114
+ return provider.multiBalances(queries, { ...overrides, ...own });
100
115
  }
101
116
  /**
102
117
  * 批量查 ERC20 代币详情(一次请求),可以选择返回哪些字段。节点参数与 getBalances 相同。
@@ -110,77 +125,12 @@ export function getBalances(owner, tokens, options = {}) {
110
125
  * ```
111
126
  */
112
127
  export function getTokens(tokens, options = {}) {
113
- const { provider, overrides, own } = resolve(options, ['fields']);
114
- return provider.tokens(tokens, { ...overrides, fields: own.fields });
128
+ const { provider, overrides, own } = resolve(options, ['fields', 'withBlock']);
129
+ return provider.tokens(tokens, { ...overrides, ...own });
115
130
  }
116
- /**
117
- * 批量查 ERC20 授权额度(一次请求)。
118
- *
119
- * ```ts
120
- * const [usdt] = await getAllowances(user, router, [USDT], { chainId: 56 })
121
- * if (!usdt.unlimited && BigInt(usdt.allowance) < amount) { // 需要 approve
122
- * ```
123
- */
124
131
  export function getAllowances(owner, spender, tokens, options = {}) {
125
- const { provider, overrides } = resolve(options);
126
- return provider.allowances(owner, spender, tokens, overrides);
127
- }
128
- /**
129
- * 批量查 NFT 集合信息,字段可选(默认 standard / name / symbol)。
130
- *
131
- * ```ts
132
- * await getNftCollections([BAYC, MAYC], { chainId: 1, fields: ['standard', 'name', 'totalSupply'] })
133
- * // [{ address: BAYC, standard: 'ERC721', name: 'BoredApeYachtClub', totalSupply: '10000', success: true }, ...]
134
- * ```
135
- */
136
- export function getNftCollections(collections, options = {}) {
137
- const { provider, overrides, own } = resolve(options, ['fields']);
138
- return provider.nftCollections(collections, { ...overrides, fields: own.fields });
139
- }
140
- /** 批量查 ERC721 持有数量:`await getNftBalances(user, [BAYC, MAYC], { chainId: 1 })` */
141
- export function getNftBalances(owner, collections, options = {}) {
142
- const { provider, overrides } = resolve(options);
143
- return provider.nftBalances(owner, collections, overrides);
144
- }
145
- /** 批量查 ERC721 持有人:`await getNftOwners([{ contract: BAYC, tokenId: 1 }], { chainId: 1 })` */
146
- export function getNftOwners(items, options = {}) {
147
- const { provider, overrides } = resolve(options);
148
- return provider.nftOwners(items, overrides);
149
- }
150
- /**
151
- * 批量查 NFT 元数据地址(ERC721 tokenURI / ERC1155 uri 自动兼容)。
152
- *
153
- * ```ts
154
- * await getNftTokenUris([{ contract: BAYC, tokenId: 1 }], { chainId: 1, ipfsGateway: 'https://ipfs.io/ipfs/' })
155
- * // [{ contract: BAYC, tokenId: '1', uri: 'https://ipfs.io/ipfs/Qm…/1', success: true }]
156
- * ```
157
- */
158
- export function getNftTokenUris(items, options = {}) {
159
- const { provider, overrides, own } = resolve(options, ['ipfsGateway']);
160
- return provider.nftTokenUris(items, { ...overrides, ipfsGateway: own.ipfsGateway });
161
- }
162
- /** 批量查 ERC1155 余额:`await getErc1155Balances(user, [{ contract, tokenId: 1 }], { chainId: 137 })` */
163
- export function getErc1155Balances(owner, items, options = {}) {
164
- const { provider, overrides } = resolve(options);
165
- return provider.erc1155Balances(owner, items, overrides);
166
- }
167
- /**
168
- * 列出持有人拥有的代币(资产列表)。默认用免费公开代币列表发现代币,余额用 multicall 在链上核对。
169
- *
170
- * ```ts
171
- * await getOwnerTokens(user, { chainId: 56 }) // 免费,只能发现公开列表里的代币
172
- * await getOwnerTokens(user, { chainId: 1, prices: true, minUsd: 1 }) // 带美元价值,过滤零头和垃圾币
173
- * await getOwnerTokens(user, { chainId: 56, source: alchemy({ apiKey }) }) // 用 Alchemy 查全部历史持仓
174
- * ```
175
- *
176
- * @deprecated 不推荐使用:EVM 链上无法只靠节点可靠地列出地址持有的全部代币,这个方法只是尽力而为——
177
- * 默认来源只能发现公开列表里的代币,依赖第三方免费服务(可能限流、改格式或停止服务),要查几千个代币的余额、耗时数秒,
178
- * 价格也不一定可信;传 `alchemy` / `nodereal` 来源能查全,但同样受第三方服务的额度和可用性约束。
179
- * 已知要查哪些代币时请用 `getBalances`;需要可靠的完整持仓请直接接入索引服务的接口或自己的索引。局限性详见 README「资产列表」。
180
- */
181
- export function getOwnerTokens(owner, options = {}) {
182
- const { provider, overrides, own } = resolve(options, ['source', 'prices', 'minUsd', 'includeNative', 'fetch', 'scanTransfers']);
183
- return provider.ownerTokens(owner, { ...overrides, ...own });
132
+ const { provider, overrides, own } = resolve(options, ['decimals', 'withBlock']);
133
+ return provider.allowances(owner, spender, tokens, { ...overrides, ...own });
184
134
  }
185
135
  /** 测试用:按参数取(或创建)Provider,用于验证缓存复用(不在包的公开导出里) */
186
136
  export function resolveProviderForTest(options) {
@@ -1 +1 @@
1
- {"version":3,"file":"shortcuts.js","sourceRoot":"","sources":["../src/shortcuts.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"shortcuts.js","sourceRoot":"","sources":["../src/shortcuts.ts"],"names":[],"mappings":"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"}
package/dist/source.d.ts CHANGED
@@ -1,7 +1,7 @@
1
1
  import { type Eip1193Provider, type TransactionRequest } from 'ethers';
2
2
  import type { EthersLikeProvider } from './aggregate.js';
3
3
  import { type FallbackOptions } from './fallback.js';
4
- import { type TronProviderOptions, type TronWebLike } from './tron.js';
4
+ import { isTronChain, type TronProviderOptions, type TronWebLike } from './tron.js';
5
5
  /**
6
6
  * 可传给 Provider 的底层连接(也可以传数组,按顺序作为主节点 + 备用节点):
7
7
  * - RPC URL 字符串(Tron 链上是全节点 HTTP 地址)
@@ -16,10 +16,12 @@ export interface SourceOptions {
16
16
  /** 用 URL 创建的 TronProvider 的参数(apiKey、minInterval 等) */
17
17
  tron?: Omit<TronProviderOptions, 'fullHost' | 'request'>;
18
18
  }
19
- export declare function isTronChain(chainId: number): boolean;
19
+ export { isTronChain };
20
20
  /** 链的默认节点:EVM 用内置公共节点表,Tron 主网用内置全节点列表 */
21
21
  export declare function getDefaultRpcUrls(chainId: number): readonly string[];
22
22
  export declare function resolveSource(chainId: number, source: ProviderSource | readonly ProviderSource[] | undefined, options?: SourceOptions): EthersLikeProvider;
23
+ /** 节点标识(错误信息、onRequest 事件用):URL 只取 host,不含 path / query(常带 API Key) */
24
+ export declare function nodeLabel(source: ProviderSource): string;
23
25
  /**
24
26
  * 校验节点所在的链与 Provider 的 chainId 一致,避免把另一条链的数据当成这条链的返回:
25
27
  * 比如 [钱包, 公共节点] 自动识别出钱包的链后,公共节点其实在另一条链上;或者配错了节点 URL。
@@ -1 +1 @@
1
- {"version":3,"file":"source.d.ts","sourceRoot":"","sources":["../src/source.ts"],"names":[],"mappings":"AAAA,OAAO,EAA6D,KAAK,eAAe,EAAE,KAAK,kBAAkB,EAAE,MAAM,QAAQ,CAAA;AAEjI,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAA;AAExD,OAAO,EAAe,KAAK,eAAe,EAAE,MAAM,eAAe,CAAA;AAEjE,OAAO,EAA+B,KAAK,mBAAmB,EAAE,KAAK,WAAW,EAAE,MAAM,WAAW,CAAA;AAEnG;;;;;;GAMG;AACH,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,kBAAkB,GAAG,eAAe,GAAG,WAAW,CAAA;AAExF,MAAM,WAAW,aAAa;IAC5B,6CAA6C;IAC7C,QAAQ,CAAC,EAAE,eAAe,CAAA;IAC1B,uDAAuD;IACvD,IAAI,CAAC,EAAE,IAAI,CAAC,mBAAmB,EAAE,UAAU,GAAG,SAAS,CAAC,CAAA;CACzD;AAID,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAEpD;AAED,0CAA0C;AAC1C,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,CAKpE;AAED,wBAAgB,aAAa,CAC3B,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,cAAc,GAAG,SAAS,cAAc,EAAE,GAAG,SAAS,EAC9D,OAAO,GAAE,aAAkB,GAC1B,kBAAkB,CAkBpB;AAKD;;;;;;;;GAQG;AACH,qBAAa,oBAAqB,YAAW,kBAAkB;;IAI3D,QAAQ,CAAC,KAAK,EAAE,kBAAkB;IAClC,QAAQ,CAAC,OAAO,EAAE,MAAM;IACxB,QAAQ,CAAC,MAAM,EAAE,cAAc;IAC/B,QAAQ,CAAC,OAAO,EAAE,MAAM;gBAHf,KAAK,EAAE,kBAAkB,EACzB,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,cAAc,EACtB,OAAO,EAAE,MAAM;IAiC1B,IAAI,CAAC,EAAE,EAAE,kBAAkB,GAAG,OAAO,CAAC,MAAM,CAAC;IAI7C,UAAU,CAAC,GAAG,IAAI,EAAE,UAAU,CAAC,kBAAkB,CAAC,YAAY,CAAC,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;IAIlF,cAAc,IAAI,OAAO,CAAC,MAAM,CAAC;IAQjC,OAAO,CAAC,MAAM,EAAE,UAAU,CAAC,WAAW,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;IAQ9I,UAAU,IAAI,OAAO,CAAC,MAAM,CAAC;CAGpC"}
1
+ {"version":3,"file":"source.d.ts","sourceRoot":"","sources":["../src/source.ts"],"names":[],"mappings":"AAAA,OAAO,EAA6D,KAAK,eAAe,EAAE,KAAK,kBAAkB,EAAE,MAAM,QAAQ,CAAA;AAEjI,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAA;AAExD,OAAO,EAAsC,KAAK,eAAe,EAAE,MAAM,eAAe,CAAA;AAExF,OAAO,EAA+B,WAAW,EAAE,KAAK,mBAAmB,EAAE,KAAK,WAAW,EAAE,MAAM,WAAW,CAAA;AAEhH;;;;;;GAMG;AACH,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,kBAAkB,GAAG,eAAe,GAAG,WAAW,CAAA;AAExF,MAAM,WAAW,aAAa;IAC5B,6CAA6C;IAC7C,QAAQ,CAAC,EAAE,eAAe,CAAA;IAC1B,uDAAuD;IACvD,IAAI,CAAC,EAAE,IAAI,CAAC,mBAAmB,EAAE,UAAU,GAAG,SAAS,CAAC,CAAA;CACzD;AAED,OAAO,EAAE,WAAW,EAAE,CAAA;AAEtB,0CAA0C;AAC1C,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,CAKpE;AAED,wBAAgB,aAAa,CAC3B,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,cAAc,GAAG,SAAS,cAAc,EAAE,GAAG,SAAS,EAC9D,OAAO,GAAE,aAAkB,GAC1B,kBAAkB,CAuBpB;AAED,uEAAuE;AACvE,wBAAgB,SAAS,CAAC,MAAM,EAAE,cAAc,GAAG,MAAM,CAuBxD;AAKD;;;;;;;;GAQG;AACH,qBAAa,oBAAqB,YAAW,kBAAkB;;IAI3D,QAAQ,CAAC,KAAK,EAAE,kBAAkB;IAClC,QAAQ,CAAC,OAAO,EAAE,MAAM;IACxB,QAAQ,CAAC,MAAM,EAAE,cAAc;IAC/B,QAAQ,CAAC,OAAO,EAAE,MAAM;gBAHf,KAAK,EAAE,kBAAkB,EACzB,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,cAAc,EACtB,OAAO,EAAE,MAAM;IAiC1B,IAAI,CAAC,EAAE,EAAE,kBAAkB,GAAG,OAAO,CAAC,MAAM,CAAC;IAI7C,UAAU,CAAC,GAAG,IAAI,EAAE,UAAU,CAAC,kBAAkB,CAAC,YAAY,CAAC,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;IAIlF,cAAc,IAAI,OAAO,CAAC,MAAM,CAAC;IAQjC,OAAO,CAAC,MAAM,EAAE,UAAU,CAAC,WAAW,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;IAQ9I,UAAU,IAAI,OAAO,CAAC,MAAM,CAAC;CAGpC"}
package/dist/source.js CHANGED
@@ -2,11 +2,8 @@ import { BrowserProvider, FetchRequest, JsonRpcProvider, makeError } from 'ether
2
2
  import { canDetectChainId, detectChainId, detectChainIdCached } from './detect.js';
3
3
  import { FallbackRpc } from './fallback.js';
4
4
  import { DEFAULT_RPC_URLS, DEFAULT_TRON_HOSTS } from './rpcNodes.js';
5
- import { TRON_CHAIN_ID, TronProvider } from './tron.js';
6
- const TRON_CHAIN_IDS = new Set(Object.values(TRON_CHAIN_ID));
7
- export function isTronChain(chainId) {
8
- return TRON_CHAIN_IDS.has(chainId);
9
- }
5
+ import { TRON_CHAIN_ID, TronProvider, isTronChain } from './tron.js';
6
+ export { isTronChain };
10
7
  /** 链的默认节点:EVM 用内置公共节点表,Tron 主网用内置全节点列表 */
11
8
  export function getDefaultRpcUrls(chainId) {
12
9
  if (chainId === TRON_CHAIN_ID.mainnet) {
@@ -29,7 +26,39 @@ export function resolveSource(chainId, source, options = {}) {
29
26
  // 内置公共节点本来就是按 chainId 选出来的,不需要再校验
30
27
  return source === undefined ? node : withChainCheck(chainId, item, node, timeout);
31
28
  });
32
- return multiple ? new FallbackRpc(nodes, options.fallback) : nodes[0];
29
+ const info = list.map((item) => ({ label: nodeLabel(item), key: item }));
30
+ // 单节点也经过 FallbackRpc(统一触发 onRequest 事件、抛原始错误)。外层超时只对单个 EVM URL 节点加(FetchRequest 本来就有同样的超时);
31
+ // 钱包等对象节点、Tron URL(TronProvider 有自己的超时和 429 退避、限流队列,外层超时会把排队 / 退避中的请求截断)不传 timeout 时不加,与原来一致
32
+ const singleEvmUrl = typeof list[0] === 'string' && !isTronChain(chainId);
33
+ const fallback = multiple || singleEvmUrl || options.fallback?.timeout !== undefined ? options.fallback : { ...options.fallback, timeout: 0 };
34
+ return new FallbackRpc(nodes, fallback, info);
35
+ }
36
+ /** 节点标识(错误信息、onRequest 事件用):URL 只取 host,不含 path / query(常带 API Key) */
37
+ export function nodeLabel(source) {
38
+ if (typeof source === 'string') {
39
+ try {
40
+ return new URL(source).host || 'url';
41
+ }
42
+ catch {
43
+ return 'url';
44
+ }
45
+ }
46
+ const value = source;
47
+ if (value instanceof JsonRpcProvider) {
48
+ try {
49
+ return new URL(value._getConnection().url).host || 'provider';
50
+ }
51
+ catch {
52
+ return 'provider';
53
+ }
54
+ }
55
+ if (value.fullNode) {
56
+ return 'tronWeb';
57
+ }
58
+ if (typeof value.call !== 'function' && typeof value.request === 'function') {
59
+ return 'wallet';
60
+ }
61
+ return 'provider';
33
62
  }
34
63
  /** 识别失败后多久内不再重试识别(期间请求照常发出,不做校验) */
35
64
  const CHECK_RETRY_INTERVAL = 60_000;
@@ -1 +1 @@
1
- {"version":3,"file":"source.js","sourceRoot":"","sources":["../src/source.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,eAAe,EAAE,SAAS,EAAiD,MAAM,QAAQ,CAAA;AAGjI,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;AAClF,OAAO,EAAE,WAAW,EAAwB,MAAM,eAAe,CAAA;AACjE,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAA;AACpE,OAAO,EAAE,aAAa,EAAE,YAAY,EAA8C,MAAM,WAAW,CAAA;AAkBnG,MAAM,cAAc,GAAG,IAAI,GAAG,CAAS,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAA;AAEpE,MAAM,UAAU,WAAW,CAAC,OAAe;IACzC,OAAO,cAAc,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;AACpC,CAAC;AAED,0CAA0C;AAC1C,MAAM,UAAU,iBAAiB,CAAC,OAAe;IAC/C,IAAI,OAAO,KAAK,aAAa,CAAC,OAAO,EAAE,CAAC;QACtC,OAAO,kBAAkB,CAAA;IAC3B,CAAC;IACD,OAAO,gBAAgB,CAAC,OAAO,CAAC,IAAI,EAAE,CAAA;AACxC,CAAC;AAED,MAAM,UAAU,aAAa,CAC3B,OAAe,EACf,MAA8D,EAC9D,UAAyB,EAAE;IAE3B,MAAM,IAAI,GAAG,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAA;IAC1G,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;QACjB,MAAM,IAAI,KAAK,CACb,MAAM,KAAK,SAAS;YAClB,CAAC,CAAC,4BAA4B,OAAO,sCAAsC;YAC3E,CAAC,CAAC,wBAAwB,CAC7B,CAAA;IACH,CAAC;IACD,qCAAqC;IACrC,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,CAAA;IAChC,MAAM,OAAO,GAAG,OAAO,CAAC,QAAQ,EAAE,OAAO,IAAI,MAAM,CAAA;IACnD,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;QAC9B,MAAM,IAAI,GAAG,YAAY,CAAC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAA;QAC3D,kCAAkC;QAClC,OAAO,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,cAAc,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,CAAA;IACnF,CAAC,CAAC,CAAA;IACF,OAAO,QAAQ,CAAC,CAAC,CAAC,IAAI,WAAW,CAAC,KAAK,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAE,KAAK,CAAC,CAAC,CAAwB,CAAA;AAC/F,CAAC;AAED,oCAAoC;AACpC,MAAM,oBAAoB,GAAG,MAAM,CAAA;AAEnC;;;;;;;;GAQG;AACH,MAAM,OAAO,oBAAoB;IAIpB;IACA;IACA;IACA;IANX,cAAc,GAAG,CAAC,CAAA;IAElB,YACW,KAAyB,EACzB,OAAe,EACf,MAAsB,EACtB,OAAe;QAHf,UAAK,GAAL,KAAK,CAAoB;QACzB,YAAO,GAAP,OAAO,CAAQ;QACf,WAAM,GAAN,MAAM,CAAgB;QACtB,YAAO,GAAP,OAAO,CAAQ;IACvB,CAAC;IAEJ,KAAK,CAAC,MAAM;QACV,IAAI,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,cAAc,GAAG,oBAAoB,EAAE,CAAC;YACnF,OAAM;QACR,CAAC;QACD,IAAI,MAAc,CAAA;QAClB,IAAI,CAAC;YACH,MAAM,GAAG,MAAM,mBAAmB,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,CAAA;QAC7G,CAAC;QAAC,MAAM,CAAC;YACP,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;YAChC,OAAM;QACR,CAAC;QACD,IAAI,CAAC,cAAc,GAAG,CAAC,CAAA;QACvB,IAAI,MAAM,KAAK,IAAI,CAAC,OAAO,EAAE,CAAC;YAC5B,MAAM,SAAS,CAAC,8BAA8B,IAAI,CAAC,OAAO,wBAAwB,MAAM,EAAE,EAAE,eAAe,EAAE;gBAC3G,KAAK,EAAE,iBAAiB;aACzB,CAAC,CAAA;QACJ,CAAC;IACH,CAAC;IAED,KAAK,CAAC,IAAI,CAAI,OAAyB;QACrC,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC,CAAA;QAC9E,IAAI,OAAO,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;YAClC,MAAM,OAAO,CAAC,MAAM,CAAA;QACtB,CAAC;QACD,IAAI,MAAM,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;YACjC,MAAM,MAAM,CAAC,MAAM,CAAA;QACrB,CAAC;QACD,OAAO,MAAM,CAAC,KAAK,CAAA;IACrB,CAAC;IAED,IAAI,CAAC,EAAsB;QACzB,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAA;IAC7C,CAAC;IAED,UAAU,CAAC,GAAG,IAAkD;QAC9D,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,IAAI,CAAC,CAAC,CAAA;IACxD,CAAC;IAED,cAAc;QACZ,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAA;QACxB,IAAI,CAAC,KAAK,CAAC,cAAc,EAAE,CAAC;YAC1B,OAAO,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC,CAAA;QAClF,CAAC;QACD,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAE,KAAK,CAAC,cAAwC,EAAE,CAAC,CAAA;IAC3E,CAAC;IAED,OAAO,CAAC,MAAiE;QACvE,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAA;QACxB,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;YACnB,OAAO,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC,CAAA;QAC3E,CAAC;QACD,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAE,KAAK,CAAC,OAAsD,CAAC,MAAM,CAAC,CAAC,CAAA;IAC/F,CAAC;IAED,KAAK,CAAC,UAAU;QACd,OAAO,IAAI,CAAC,OAAO,CAAA;IACrB,CAAC;CACF;AAED,0BAA0B;AAC1B,SAAS,aAAa,CAAC,IAAwB,EAAE,MAAsB;IACrE,IAAI,IAAI,YAAY,YAAY,EAAE,CAAC;QACjC,OAAO,IAAI,CAAC,UAAU,EAAE,CAAA;IAC1B,CAAC;IACD,wFAAwF;IACxF,IAAI,IAAI,YAAY,eAAe,EAAE,CAAC;QACpC,OAAO,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;IAClD,CAAC;IACD,OAAO,aAAa,CAAC,MAAM,EAAE,MAAM,CAAC,iBAAiB,CAAC,CAAA;AACxD,CAAC;AAED,SAAS,cAAc,CAAC,OAAe,EAAE,MAAsB,EAAE,IAAwB,EAAE,OAAe;IACxG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,IAAI,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;QACtF,OAAO,IAAI,CAAA;IACb,CAAC;IACD,OAAO,IAAI,oBAAoB,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,CAAA;AACjE,CAAC;AAED,iFAAiF;AACjF,MAAM,aAAa,GAAG,IAAI,OAAO,EAAsB,CAAA;AAEvD,SAAS,YAAY,CAAC,OAAe,EAAE,MAAsB,EAAE,OAAsB,EAAE,QAAiB;IACtG,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;QAC/B,IAAI,WAAW,CAAC,OAAO,CAAC,EAAE,CAAC;YACzB,OAAO,IAAI,YAAY,CAAC,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,GAAG,OAAO,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAA;QACnG,CAAC;QACD,kCAAkC;QAClC,MAAM,OAAO,GAAG,IAAI,YAAY,CAAC,MAAM,CAAC,CAAA;QACxC,MAAM,OAAO,GAAG,OAAO,CAAC,QAAQ,EAAE,OAAO,IAAI,MAAM,CAAA;QACnD,qEAAqE;QACrE,IAAI,OAAO,GAAG,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;YAC5C,OAAO,CAAC,OAAO,GAAG,OAAO,CAAA;QAC3B,CAAC;QACD,OAAO,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC;YAC7B,CAAC,CAAC,IAAI,eAAe,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;YAChE,CAAC,CAAC,IAAI,eAAe,CAAC,OAAO,CAAC,CAAA;IAClC,CAAC;IACD,MAAM,KAAK,GAAG,MAAqE,CAAA;IACnF,IAAI,OAAO,KAAK,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;QACrC,OAAO,MAA4B,CAAA;IACrC,CAAC;IACD,IAAI,KAAK,CAAC,QAAQ,IAAI,OAAO,KAAK,CAAC,QAAQ,CAAC,OAAO,KAAK,UAAU,EAAE,CAAC;QACnE,OAAO,YAAY,CAAC,WAAW,CAAC,MAAqB,EAAE,OAAO,CAAC,IAAI,CAAC,CAAA;IACtE,CAAC;IACD,IAAI,OAAO,KAAK,CAAC,OAAO,KAAK,UAAU,EAAE,CAAC;QACxC,8DAA8D;QAC9D,qCAAqC;QACrC,MAAM,MAAM,GAAG,IAAI,eAAe,CAAC,MAAyB,EAAE,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAA;QAC7G,IAAI,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;YAC7B,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;QAC3B,CAAC;QACD,OAAO,MAAM,CAAA;IACf,CAAC;IACD,MAAM,IAAI,KAAK,CAAC,2GAA2G,CAAC,CAAA;AAC9H,CAAC"}
1
+ {"version":3,"file":"source.js","sourceRoot":"","sources":["../src/source.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,46 @@
1
+ /**
2
+ * NFT 查询(子路径 `@w3lib/evm-batch-call/nft`):ERC721 / ERC1155 的集合信息、持有数量、持有人、元数据地址。
3
+ * 不放在主入口,不用 NFT 功能时打包不会带上这部分代码。
4
+ *
5
+ * ```ts
6
+ * import { Provider } from '@w3lib/evm-batch-call'
7
+ * import { getNftOwners, nftOwners } from '@w3lib/evm-batch-call/nft'
8
+ *
9
+ * await getNftOwners([{ contract: BAYC, tokenId: 1 }], { chainId: 1 }) // 节点参数与 getBalances 相同
10
+ * await nftOwners(multi, [{ contract: BAYC, tokenId: 1 }]) // 或传已创建的 Provider
11
+ * ```
12
+ */
13
+ import { type DefaultNftCollectionField, type Erc1155Balance, type NftBalance, type NftCollection, type NftCollectionField, type NftItem, type NftOwner, type NftTokenUri, type NftCollectionsOptions } from '../nft.js';
14
+ import { type ShortcutOptions, type ShortcutProviderOptions } from '../shortcuts.js';
15
+ export { DEFAULT_NFT_COLLECTION_FIELDS, ERC1155_ABI, ERC721_ABI, erc1155Balances, nftBalances, nftCollections, nftOwners, nftTokenUris, 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';
16
+ export interface GetNftCollectionsOptions<F extends NftCollectionField = DefaultNftCollectionField> extends NftCollectionsOptions<F>, ShortcutProviderOptions {
17
+ }
18
+ /**
19
+ * 批量查 NFT 集合信息,字段可选(默认 standard / name / symbol)。
20
+ *
21
+ * ```ts
22
+ * await getNftCollections([BAYC, MAYC], { chainId: 1, fields: ['standard', 'name', 'totalSupply'] })
23
+ * // [{ address: BAYC, standard: 'ERC721', name: 'BoredApeYachtClub', totalSupply: '10000', success: true }, ...]
24
+ * ```
25
+ */
26
+ export declare function getNftCollections<const F extends NftCollectionField = DefaultNftCollectionField>(collections: readonly string[], options?: GetNftCollectionsOptions<F>): Promise<NftCollection<F>[]>;
27
+ /** 批量查 ERC721 持有数量:`await getNftBalances(user, [BAYC, MAYC], { chainId: 1 })` */
28
+ export declare function getNftBalances(owner: string, collections: readonly string[], options?: ShortcutOptions): Promise<NftBalance[]>;
29
+ /** 批量查 ERC721 持有人:`await getNftOwners([{ contract: BAYC, tokenId: 1 }], { chainId: 1 })` */
30
+ export declare function getNftOwners(items: readonly NftItem[], options?: ShortcutOptions): Promise<NftOwner[]>;
31
+ export interface GetNftTokenUrisOptions extends ShortcutOptions {
32
+ /** 把 ipfs://xxx 转成 `${ipfsGateway}xxx`,如 'https://ipfs.io/ipfs/' */
33
+ ipfsGateway?: string;
34
+ }
35
+ /**
36
+ * 批量查 NFT 元数据地址(ERC721 tokenURI / ERC1155 uri 自动兼容)。
37
+ *
38
+ * ```ts
39
+ * await getNftTokenUris([{ contract: BAYC, tokenId: 1 }], { chainId: 1, ipfsGateway: 'https://ipfs.io/ipfs/' })
40
+ * // [{ contract: BAYC, tokenId: '1', uri: 'https://ipfs.io/ipfs/Qm…/1', success: true }]
41
+ * ```
42
+ */
43
+ export declare function getNftTokenUris(items: readonly NftItem[], options?: GetNftTokenUrisOptions): Promise<NftTokenUri[]>;
44
+ /** 批量查 ERC1155 余额:`await getErc1155Balances(user, [{ contract, tokenId: 1 }], { chainId: 137 })` */
45
+ export declare function getErc1155Balances(owner: string, items: readonly NftItem[], options?: ShortcutOptions): Promise<Erc1155Balance[]>;
46
+ //# sourceMappingURL=nft.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nft.d.ts","sourceRoot":"","sources":["../../src/subpaths/nft.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,OAAO,EAML,KAAK,yBAAyB,EAC9B,KAAK,cAAc,EACnB,KAAK,UAAU,EACf,KAAK,aAAa,EAClB,KAAK,kBAAkB,EACvB,KAAK,OAAO,EACZ,KAAK,QAAQ,EACb,KAAK,WAAW,EAChB,KAAK,qBAAqB,EAC3B,MAAM,WAAW,CAAA;AAClB,OAAO,EAAW,KAAK,eAAe,EAAE,KAAK,uBAAuB,EAAE,MAAM,iBAAiB,CAAA;AAE7F,OAAO,EACL,6BAA6B,EAC7B,WAAW,EACX,UAAU,EACV,eAAe,EACf,WAAW,EACX,cAAc,EACd,SAAS,EACT,YAAY,EACZ,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,WAAW,CAAA;AAElB,MAAM,WAAW,wBAAwB,CAAC,CAAC,SAAS,kBAAkB,GAAG,yBAAyB,CAChG,SAAQ,qBAAqB,CAAC,CAAC,CAAC,EAC9B,uBAAuB;CAAG;AAE9B;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,CAAC,CAAC,SAAS,kBAAkB,GAAG,yBAAyB,EAC9F,WAAW,EAAE,SAAS,MAAM,EAAE,EAC9B,OAAO,GAAE,wBAAwB,CAAC,CAAC,CAAM,GACxC,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC,CAG7B;AAED,iFAAiF;AACjF,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,SAAS,MAAM,EAAE,EAAE,OAAO,GAAE,eAAoB,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC,CAGlI;AAED,4FAA4F;AAC5F,wBAAgB,YAAY,CAAC,KAAK,EAAE,SAAS,OAAO,EAAE,EAAE,OAAO,GAAE,eAAoB,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC,CAG1G;AAED,MAAM,WAAW,sBAAuB,SAAQ,eAAe;IAC7D,oEAAoE;IACpE,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB;AAED;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,SAAS,OAAO,EAAE,EAAE,OAAO,GAAE,sBAA2B,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC,CAGvH;AAED,oGAAoG;AACpG,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,OAAO,EAAE,EAAE,OAAO,GAAE,eAAoB,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC,CAGrI"}
@@ -0,0 +1,55 @@
1
+ /**
2
+ * NFT 查询(子路径 `@w3lib/evm-batch-call/nft`):ERC721 / ERC1155 的集合信息、持有数量、持有人、元数据地址。
3
+ * 不放在主入口,不用 NFT 功能时打包不会带上这部分代码。
4
+ *
5
+ * ```ts
6
+ * import { Provider } from '@w3lib/evm-batch-call'
7
+ * import { getNftOwners, nftOwners } from '@w3lib/evm-batch-call/nft'
8
+ *
9
+ * await getNftOwners([{ contract: BAYC, tokenId: 1 }], { chainId: 1 }) // 节点参数与 getBalances 相同
10
+ * await nftOwners(multi, [{ contract: BAYC, tokenId: 1 }]) // 或传已创建的 Provider
11
+ * ```
12
+ */
13
+ import { erc1155Balances, nftBalances, nftCollections, nftOwners, nftTokenUris, } from '../nft.js';
14
+ import { resolve } from '../shortcuts.js';
15
+ export { DEFAULT_NFT_COLLECTION_FIELDS, ERC1155_ABI, ERC721_ABI, erc1155Balances, nftBalances, nftCollections, nftOwners, nftTokenUris, } from '../nft.js';
16
+ /**
17
+ * 批量查 NFT 集合信息,字段可选(默认 standard / name / symbol)。
18
+ *
19
+ * ```ts
20
+ * await getNftCollections([BAYC, MAYC], { chainId: 1, fields: ['standard', 'name', 'totalSupply'] })
21
+ * // [{ address: BAYC, standard: 'ERC721', name: 'BoredApeYachtClub', totalSupply: '10000', success: true }, ...]
22
+ * ```
23
+ */
24
+ export function getNftCollections(collections, options = {}) {
25
+ const { provider, overrides, own } = resolve(options, ['fields']);
26
+ return nftCollections(provider, collections, { ...overrides, fields: own.fields });
27
+ }
28
+ /** 批量查 ERC721 持有数量:`await getNftBalances(user, [BAYC, MAYC], { chainId: 1 })` */
29
+ export function getNftBalances(owner, collections, options = {}) {
30
+ const { provider, overrides } = resolve(options);
31
+ return nftBalances(provider, owner, collections, overrides);
32
+ }
33
+ /** 批量查 ERC721 持有人:`await getNftOwners([{ contract: BAYC, tokenId: 1 }], { chainId: 1 })` */
34
+ export function getNftOwners(items, options = {}) {
35
+ const { provider, overrides } = resolve(options);
36
+ return nftOwners(provider, items, overrides);
37
+ }
38
+ /**
39
+ * 批量查 NFT 元数据地址(ERC721 tokenURI / ERC1155 uri 自动兼容)。
40
+ *
41
+ * ```ts
42
+ * await getNftTokenUris([{ contract: BAYC, tokenId: 1 }], { chainId: 1, ipfsGateway: 'https://ipfs.io/ipfs/' })
43
+ * // [{ contract: BAYC, tokenId: '1', uri: 'https://ipfs.io/ipfs/Qm…/1', success: true }]
44
+ * ```
45
+ */
46
+ export function getNftTokenUris(items, options = {}) {
47
+ const { provider, overrides, own } = resolve(options, ['ipfsGateway']);
48
+ return nftTokenUris(provider, items, { ...overrides, ipfsGateway: own.ipfsGateway });
49
+ }
50
+ /** 批量查 ERC1155 余额:`await getErc1155Balances(user, [{ contract, tokenId: 1 }], { chainId: 137 })` */
51
+ export function getErc1155Balances(owner, items, options = {}) {
52
+ const { provider, overrides } = resolve(options);
53
+ return erc1155Balances(provider, owner, items, overrides);
54
+ }
55
+ //# sourceMappingURL=nft.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nft.js","sourceRoot":"","sources":["../../src/subpaths/nft.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,OAAO,EACL,eAAe,EACf,WAAW,EACX,cAAc,EACd,SAAS,EACT,YAAY,GAUb,MAAM,WAAW,CAAA;AAClB,OAAO,EAAE,OAAO,EAAsD,MAAM,iBAAiB,CAAA;AAE7F,OAAO,EACL,6BAA6B,EAC7B,WAAW,EACX,UAAU,EACV,eAAe,EACf,WAAW,EACX,cAAc,EACd,SAAS,EACT,YAAY,GAYb,MAAM,WAAW,CAAA;AAMlB;;;;;;;GAOG;AACH,MAAM,UAAU,iBAAiB,CAC/B,WAA8B,EAC9B,UAAuC,EAAE;IAEzC,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAA;IACjE,OAAO,cAAc,CAAI,QAAQ,EAAE,WAAW,EAAE,EAAE,GAAG,SAAS,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC,CAAA;AACvF,CAAC;AAED,iFAAiF;AACjF,MAAM,UAAU,cAAc,CAAC,KAAa,EAAE,WAA8B,EAAE,UAA2B,EAAE;IACzG,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;IAChD,OAAO,WAAW,CAAC,QAAQ,EAAE,KAAK,EAAE,WAAW,EAAE,SAAS,CAAC,CAAA;AAC7D,CAAC;AAED,4FAA4F;AAC5F,MAAM,UAAU,YAAY,CAAC,KAAyB,EAAE,UAA2B,EAAE;IACnF,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;IAChD,OAAO,SAAS,CAAC,QAAQ,EAAE,KAAK,EAAE,SAAS,CAAC,CAAA;AAC9C,CAAC;AAOD;;;;;;;GAOG;AACH,MAAM,UAAU,eAAe,CAAC,KAAyB,EAAE,UAAkC,EAAE;IAC7F,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,aAAa,CAAC,CAAC,CAAA;IACtE,OAAO,YAAY,CAAC,QAAQ,EAAE,KAAK,EAAE,EAAE,GAAG,SAAS,EAAE,WAAW,EAAE,GAAG,CAAC,WAAW,EAAE,CAAC,CAAA;AACtF,CAAC;AAED,oGAAoG;AACpG,MAAM,UAAU,kBAAkB,CAAC,KAAa,EAAE,KAAyB,EAAE,UAA2B,EAAE;IACxG,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;IAChD,OAAO,eAAe,CAAC,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,CAAC,CAAA;AAC3D,CAAC"}