@metamask-previews/assets-controller 0.0.0-preview-903db2da → 0.0.0-preview-ab102d86

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 (122) hide show
  1. package/CHANGELOG.md +9 -0
  2. package/dist/data-sources/rpc-datasource/clients/MulticallClient.cjs +638 -0
  3. package/dist/data-sources/rpc-datasource/clients/MulticallClient.cjs.map +1 -0
  4. package/dist/data-sources/rpc-datasource/clients/MulticallClient.d.cts +47 -0
  5. package/dist/data-sources/rpc-datasource/clients/MulticallClient.d.cts.map +1 -0
  6. package/dist/data-sources/rpc-datasource/clients/MulticallClient.d.mts +47 -0
  7. package/dist/data-sources/rpc-datasource/clients/MulticallClient.d.mts.map +1 -0
  8. package/dist/data-sources/rpc-datasource/clients/MulticallClient.mjs +632 -0
  9. package/dist/data-sources/rpc-datasource/clients/MulticallClient.mjs.map +1 -0
  10. package/dist/data-sources/rpc-datasource/clients/index.cjs +8 -0
  11. package/dist/data-sources/rpc-datasource/clients/index.cjs.map +1 -0
  12. package/dist/data-sources/rpc-datasource/clients/index.d.cts +3 -0
  13. package/dist/data-sources/rpc-datasource/clients/index.d.cts.map +1 -0
  14. package/dist/data-sources/rpc-datasource/clients/index.d.mts +3 -0
  15. package/dist/data-sources/rpc-datasource/clients/index.d.mts.map +1 -0
  16. package/dist/data-sources/rpc-datasource/clients/index.mjs +2 -0
  17. package/dist/data-sources/rpc-datasource/clients/index.mjs.map +1 -0
  18. package/dist/data-sources/rpc-datasource/index.cjs +9 -0
  19. package/dist/data-sources/rpc-datasource/index.cjs.map +1 -0
  20. package/dist/data-sources/rpc-datasource/index.d.cts +4 -0
  21. package/dist/data-sources/rpc-datasource/index.d.cts.map +1 -0
  22. package/dist/data-sources/rpc-datasource/index.d.mts +4 -0
  23. package/dist/data-sources/rpc-datasource/index.d.mts.map +1 -0
  24. package/dist/data-sources/rpc-datasource/index.mjs +3 -0
  25. package/dist/data-sources/rpc-datasource/index.mjs.map +1 -0
  26. package/dist/data-sources/rpc-datasource/services/BalanceFetcher.cjs +167 -0
  27. package/dist/data-sources/rpc-datasource/services/BalanceFetcher.cjs.map +1 -0
  28. package/dist/data-sources/rpc-datasource/services/BalanceFetcher.d.cts +16 -0
  29. package/dist/data-sources/rpc-datasource/services/BalanceFetcher.d.cts.map +1 -0
  30. package/dist/data-sources/rpc-datasource/services/BalanceFetcher.d.mts +16 -0
  31. package/dist/data-sources/rpc-datasource/services/BalanceFetcher.d.mts.map +1 -0
  32. package/dist/data-sources/rpc-datasource/services/BalanceFetcher.mjs +163 -0
  33. package/dist/data-sources/rpc-datasource/services/BalanceFetcher.mjs.map +1 -0
  34. package/dist/data-sources/rpc-datasource/services/TokenDetector.cjs +173 -0
  35. package/dist/data-sources/rpc-datasource/services/TokenDetector.cjs.map +1 -0
  36. package/dist/data-sources/rpc-datasource/services/TokenDetector.d.cts +14 -0
  37. package/dist/data-sources/rpc-datasource/services/TokenDetector.d.cts.map +1 -0
  38. package/dist/data-sources/rpc-datasource/services/TokenDetector.d.mts +14 -0
  39. package/dist/data-sources/rpc-datasource/services/TokenDetector.d.mts.map +1 -0
  40. package/dist/data-sources/rpc-datasource/services/TokenDetector.mjs +169 -0
  41. package/dist/data-sources/rpc-datasource/services/TokenDetector.mjs.map +1 -0
  42. package/dist/data-sources/rpc-datasource/services/index.cjs +8 -0
  43. package/dist/data-sources/rpc-datasource/services/index.cjs.map +1 -0
  44. package/dist/data-sources/rpc-datasource/services/index.d.cts +3 -0
  45. package/dist/data-sources/rpc-datasource/services/index.d.cts.map +1 -0
  46. package/dist/data-sources/rpc-datasource/services/index.d.mts +3 -0
  47. package/dist/data-sources/rpc-datasource/services/index.d.mts.map +1 -0
  48. package/dist/data-sources/rpc-datasource/services/index.mjs +3 -0
  49. package/dist/data-sources/rpc-datasource/services/index.mjs.map +1 -0
  50. package/dist/data-sources/rpc-datasource/types/assets.cjs +3 -0
  51. package/dist/data-sources/rpc-datasource/types/assets.cjs.map +1 -0
  52. package/dist/data-sources/rpc-datasource/types/assets.d.cts +53 -0
  53. package/dist/data-sources/rpc-datasource/types/assets.d.cts.map +1 -0
  54. package/dist/data-sources/rpc-datasource/types/assets.d.mts +53 -0
  55. package/dist/data-sources/rpc-datasource/types/assets.d.mts.map +1 -0
  56. package/dist/data-sources/rpc-datasource/types/assets.mjs +2 -0
  57. package/dist/data-sources/rpc-datasource/types/assets.mjs.map +1 -0
  58. package/dist/data-sources/rpc-datasource/types/config.cjs +3 -0
  59. package/dist/data-sources/rpc-datasource/types/config.cjs.map +1 -0
  60. package/dist/data-sources/rpc-datasource/types/config.d.cts +18 -0
  61. package/dist/data-sources/rpc-datasource/types/config.d.cts.map +1 -0
  62. package/dist/data-sources/rpc-datasource/types/config.d.mts +18 -0
  63. package/dist/data-sources/rpc-datasource/types/config.d.mts.map +1 -0
  64. package/dist/data-sources/rpc-datasource/types/config.mjs +2 -0
  65. package/dist/data-sources/rpc-datasource/types/config.mjs.map +1 -0
  66. package/dist/data-sources/rpc-datasource/types/core.cjs +3 -0
  67. package/dist/data-sources/rpc-datasource/types/core.cjs.map +1 -0
  68. package/dist/data-sources/rpc-datasource/types/core.d.cts +19 -0
  69. package/dist/data-sources/rpc-datasource/types/core.d.cts.map +1 -0
  70. package/dist/data-sources/rpc-datasource/types/core.d.mts +19 -0
  71. package/dist/data-sources/rpc-datasource/types/core.d.mts.map +1 -0
  72. package/dist/data-sources/rpc-datasource/types/core.mjs +2 -0
  73. package/dist/data-sources/rpc-datasource/types/core.mjs.map +1 -0
  74. package/dist/data-sources/rpc-datasource/types/index.cjs +3 -0
  75. package/dist/data-sources/rpc-datasource/types/index.cjs.map +1 -0
  76. package/dist/data-sources/rpc-datasource/types/index.d.cts +7 -0
  77. package/dist/data-sources/rpc-datasource/types/index.d.cts.map +1 -0
  78. package/dist/data-sources/rpc-datasource/types/index.d.mts +7 -0
  79. package/dist/data-sources/rpc-datasource/types/index.d.mts.map +1 -0
  80. package/dist/data-sources/rpc-datasource/types/index.mjs +2 -0
  81. package/dist/data-sources/rpc-datasource/types/index.mjs.map +1 -0
  82. package/dist/data-sources/rpc-datasource/types/multicall.cjs +3 -0
  83. package/dist/data-sources/rpc-datasource/types/multicall.cjs.map +1 -0
  84. package/dist/data-sources/rpc-datasource/types/multicall.d.cts +24 -0
  85. package/dist/data-sources/rpc-datasource/types/multicall.d.cts.map +1 -0
  86. package/dist/data-sources/rpc-datasource/types/multicall.d.mts +24 -0
  87. package/dist/data-sources/rpc-datasource/types/multicall.d.mts.map +1 -0
  88. package/dist/data-sources/rpc-datasource/types/multicall.mjs +2 -0
  89. package/dist/data-sources/rpc-datasource/types/multicall.mjs.map +1 -0
  90. package/dist/data-sources/rpc-datasource/types/services.cjs +3 -0
  91. package/dist/data-sources/rpc-datasource/types/services.cjs.map +1 -0
  92. package/dist/data-sources/rpc-datasource/types/services.d.cts +74 -0
  93. package/dist/data-sources/rpc-datasource/types/services.d.cts.map +1 -0
  94. package/dist/data-sources/rpc-datasource/types/services.d.mts +74 -0
  95. package/dist/data-sources/rpc-datasource/types/services.d.mts.map +1 -0
  96. package/dist/data-sources/rpc-datasource/types/services.mjs +2 -0
  97. package/dist/data-sources/rpc-datasource/types/services.mjs.map +1 -0
  98. package/dist/data-sources/rpc-datasource/types/state.cjs +3 -0
  99. package/dist/data-sources/rpc-datasource/types/state.cjs.map +1 -0
  100. package/dist/data-sources/rpc-datasource/types/state.d.cts +67 -0
  101. package/dist/data-sources/rpc-datasource/types/state.d.cts.map +1 -0
  102. package/dist/data-sources/rpc-datasource/types/state.d.mts +67 -0
  103. package/dist/data-sources/rpc-datasource/types/state.d.mts.map +1 -0
  104. package/dist/data-sources/rpc-datasource/types/state.mjs +2 -0
  105. package/dist/data-sources/rpc-datasource/types/state.mjs.map +1 -0
  106. package/dist/data-sources/rpc-datasource/utils/batch.cjs +45 -0
  107. package/dist/data-sources/rpc-datasource/utils/batch.cjs.map +1 -0
  108. package/dist/data-sources/rpc-datasource/utils/batch.d.cts +28 -0
  109. package/dist/data-sources/rpc-datasource/utils/batch.d.cts.map +1 -0
  110. package/dist/data-sources/rpc-datasource/utils/batch.d.mts +28 -0
  111. package/dist/data-sources/rpc-datasource/utils/batch.d.mts.map +1 -0
  112. package/dist/data-sources/rpc-datasource/utils/batch.mjs +40 -0
  113. package/dist/data-sources/rpc-datasource/utils/batch.mjs.map +1 -0
  114. package/dist/data-sources/rpc-datasource/utils/index.cjs +7 -0
  115. package/dist/data-sources/rpc-datasource/utils/index.cjs.map +1 -0
  116. package/dist/data-sources/rpc-datasource/utils/index.d.cts +2 -0
  117. package/dist/data-sources/rpc-datasource/utils/index.d.cts.map +1 -0
  118. package/dist/data-sources/rpc-datasource/utils/index.d.mts +2 -0
  119. package/dist/data-sources/rpc-datasource/utils/index.d.mts.map +1 -0
  120. package/dist/data-sources/rpc-datasource/utils/index.mjs +2 -0
  121. package/dist/data-sources/rpc-datasource/utils/index.mjs.map +1 -0
  122. package/package.json +3 -2
package/CHANGELOG.md CHANGED
@@ -10,5 +10,14 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
10
10
  ### Added
11
11
 
12
12
  - Initial release ([#7587](https://github.com/MetaMask/core/pull/7587))
13
+ - Add `MulticallClient` for batching RPC calls using Multicall3 contract ([#7677](https://github.com/MetaMask/core/pull/7677))
14
+ - Add batch utilities (`divideIntoBatches`, `reduceInBatchesSerially`) for processing arrays in batches ([#7677](https://github.com/MetaMask/core/pull/7677))
15
+ - Add `TokenDetector` service for detecting ERC-20 tokens with non-zero balances on a chain ([#7683](https://github.com/MetaMask/core/pull/7683))
16
+ - Add `BalanceFetcher` service for fetching token balances for user's imported/detected tokens ([#7684](https://github.com/MetaMask/core/pull/7684))
17
+ - Add `viem` dependency for ABI encoding/decoding in MulticallClient
18
+
19
+ ### Changed
20
+
21
+ - Refactor `MulticallClient` to use viem for ABI encoding/decoding instead of manual implementation
13
22
 
14
23
  [Unreleased]: https://github.com/MetaMask/core/
@@ -0,0 +1,638 @@
1
+ "use strict";
2
+ var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
3
+ if (kind === "m") throw new TypeError("Private method is not writable");
4
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
5
+ if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
6
+ return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
7
+ };
8
+ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
9
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
10
+ if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
11
+ return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
12
+ };
13
+ var _MulticallClient_instances, _MulticallClient_getProvider, _MulticallClient_config, _MulticallClient_multicallBatchBalanceOf, _MulticallClient_fallbackBatchBalanceOf, _MulticallClient_fetchSingleBalance;
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.MulticallClient = exports.decodeAggregate3Response = exports.encodeAggregate3 = void 0;
16
+ const viem_1 = require("viem");
17
+ const utils_1 = require("../utils/index.cjs");
18
+ // =============================================================================
19
+ // ABI DEFINITIONS
20
+ // =============================================================================
21
+ /**
22
+ * Multicall3 contract ABI (subset for aggregate3 and getEthBalance).
23
+ *
24
+ * @see https://github.com/mds1/multicall
25
+ */
26
+ const MULTICALL3_ABI = [
27
+ {
28
+ name: 'aggregate3',
29
+ type: 'function',
30
+ stateMutability: 'payable',
31
+ inputs: [
32
+ {
33
+ name: 'calls',
34
+ type: 'tuple[]',
35
+ components: [
36
+ { name: 'target', type: 'address' },
37
+ { name: 'allowFailure', type: 'bool' },
38
+ { name: 'callData', type: 'bytes' },
39
+ ],
40
+ },
41
+ ],
42
+ outputs: [
43
+ {
44
+ name: 'returnData',
45
+ type: 'tuple[]',
46
+ components: [
47
+ { name: 'success', type: 'bool' },
48
+ { name: 'returnData', type: 'bytes' },
49
+ ],
50
+ },
51
+ ],
52
+ },
53
+ {
54
+ name: 'getEthBalance',
55
+ type: 'function',
56
+ stateMutability: 'view',
57
+ inputs: [{ name: 'addr', type: 'address' }],
58
+ outputs: [{ name: 'balance', type: 'uint256' }],
59
+ },
60
+ ];
61
+ /**
62
+ * ERC-20 ABI (subset for balanceOf).
63
+ */
64
+ const ERC20_ABI = [
65
+ {
66
+ name: 'balanceOf',
67
+ type: 'function',
68
+ stateMutability: 'view',
69
+ inputs: [{ name: 'account', type: 'address' }],
70
+ outputs: [{ name: 'balance', type: 'uint256' }],
71
+ },
72
+ ];
73
+ // =============================================================================
74
+ // CONSTANTS
75
+ // =============================================================================
76
+ /**
77
+ * Zero address constant for native token.
78
+ */
79
+ const ZERO_ADDRESS = '0x0000000000000000000000000000000000000000';
80
+ /**
81
+ * Multicall3 contract addresses by chain ID.
82
+ * Source: https://github.com/mds1/multicall/blob/main/deployments.json
83
+ *
84
+ * TODO: try to find service to use here instead of hardcoding the addresses
85
+ */
86
+ const MULTICALL3_ADDRESS_BY_CHAIN = {
87
+ '0x1': '0xcA11bde05977b3631167028862bE2a173976CA11',
88
+ '0x2a': '0xcA11bde05977b3631167028862bE2a173976CA11',
89
+ '0x4': '0xcA11bde05977b3631167028862bE2a173976CA11',
90
+ '0x5': '0xcA11bde05977b3631167028862bE2a173976CA11',
91
+ '0x3': '0xcA11bde05977b3631167028862bE2a173976CA11',
92
+ '0xaa36a7': '0xcA11bde05977b3631167028862bE2a173976CA11',
93
+ '0x4268': '0xcA11bde05977b3631167028862bE2a173976CA11',
94
+ '0x5e9': '0xcA11bde05977b3631167028862bE2a173976CA11',
95
+ '0x1b6e6': '0xcA11bde05977b3631167028862bE2a173976CA11',
96
+ '0x18fc4a': '0xcA11bde05977b3631167028862bE2a173976CA11',
97
+ '0xa': '0xcA11bde05977b3631167028862bE2a173976CA11',
98
+ '0x45': '0xcA11bde05977b3631167028862bE2a173976CA11',
99
+ '0x1a4': '0xcA11bde05977b3631167028862bE2a173976CA11',
100
+ '0xaa37dc': '0xcA11bde05977b3631167028862bE2a173976CA11',
101
+ '0xa4b1': '0xcA11bde05977b3631167028862bE2a173976CA11',
102
+ '0xa4ba': '0xcA11bde05977b3631167028862bE2a173976CA11',
103
+ '0x66eed': '0xcA11bde05977b3631167028862bE2a173976CA11',
104
+ '0x66eee': '0xcA11bde05977b3631167028862bE2a173976CA11',
105
+ '0x66eeb': '0xcA11bde05977b3631167028862bE2a173976CA11',
106
+ '0x15f2249': '0xcA11bde05977b3631167028862bE2a173976CA11',
107
+ '0x89': '0xcA11bde05977b3631167028862bE2a173976CA11',
108
+ '0x13881': '0xcA11bde05977b3631167028862bE2a173976CA11',
109
+ '0x13882': '0xcA11bde05977b3631167028862bE2a173976CA11',
110
+ '0x44d': '0xca11bde05977b3631167028862be2a173976ca11',
111
+ '0x5a2': '0xca11bde05977b3631167028862be2a173976ca11',
112
+ '0x98a': '0xca11bde05977b3631167028862be2a173976ca11',
113
+ '0x64': '0xcA11bde05977b3631167028862bE2a173976CA11',
114
+ '0x27d8': '0xcA11bde05977b3631167028862bE2a173976CA11',
115
+ '0xa86a': '0xcA11bde05977b3631167028862bE2a173976CA11',
116
+ '0xa869': '0xcA11bde05977b3631167028862bE2a173976CA11',
117
+ '0xfa2': '0xcA11bde05977b3631167028862bE2a173976CA11',
118
+ '0xfa': '0xcA11bde05977b3631167028862bE2a173976CA11',
119
+ '0xfaf0': '0xca11bde05977b3631167028862be2a173976ca11',
120
+ '0x38': '0xcA11bde05977b3631167028862bE2a173976CA11',
121
+ '0x61': '0xcA11bde05977b3631167028862bE2a173976CA11',
122
+ '0x15eb': '0xcA11bde05977b3631167028862bE2a173976CA11',
123
+ '0xcc': '0xcA11bde05977b3631167028862bE2a173976CA11',
124
+ '0x504': '0xcA11bde05977b3631167028862bE2a173976CA11',
125
+ '0x505': '0xcA11bde05977b3631167028862bE2a173976CA11',
126
+ '0x507': '0xcA11bde05977b3631167028862bE2a173976CA11',
127
+ '0x2a15c308d': '0xca11bde05977b3631167028862be2a173976ca11',
128
+ '0x2a15c3083': '0xca11bde05977b3631167028862be2a173976ca11',
129
+ '0x63564c40': '0xcA11bde05977b3631167028862bE2a173976CA11',
130
+ '0x19': '0xcA11bde05977b3631167028862bE2a173976CA11',
131
+ '0x152': '0xcA11bde05977b3631167028862bE2a173976CA11',
132
+ '0x5535072': '0xcA11bde05977b3631167028862bE2a173976CA11',
133
+ '0x6c1': '0xcA11bde05977b3631167028862bE2a173976CA11',
134
+ '0x7a': '0xcA11bde05977b3631167028862bE2a173976CA11',
135
+ '0xe': '0xcA11bde05977b3631167028862bE2a173976CA11',
136
+ '0x13': '0xcA11bde05977b3631167028862bE2a173976CA11',
137
+ '0x10': '0xcA11bde05977b3631167028862bE2a173976CA11',
138
+ '0x72': '0xcA11bde05977b3631167028862bE2a173976CA11',
139
+ '0x120': '0xcA11bde05977b3631167028862bE2a173976CA11',
140
+ '0x4e454152': '0xcA11bde05977b3631167028862bE2a173976CA11',
141
+ '0x250': '0xcA11bde05977b3631167028862bE2a173976CA11',
142
+ '0x5c2359': '0xcA11bde05977b3631167028862bE2a173976CA11',
143
+ '0xec0': '0xcA11bde05977b3631167028862bE2a173976CA11',
144
+ '0x42': '0xcA11bde05977b3631167028862bE2a173976CA11',
145
+ '0x80': '0xcA11bde05977b3631167028862bE2a173976CA11',
146
+ '0x440': '0xcA11bde05977b3631167028862bE2a173976CA11',
147
+ '0x257': '0xcA11bde05977b3631167028862bE2a173976CA11',
148
+ '0xe9fe': '0xcA11bde05977b3631167028862bE2a173976CA11',
149
+ '0xd3a0': '0xcA11bde05977b3631167028862bE2a173976CA11',
150
+ '0x84444': '0xcA11bde05977b3631167028862bE2a173976CA11',
151
+ '0x1e': '0xcA11bde05977b3631167028862bE2a173976CA11',
152
+ '0x1f': '0xcA11bde05977b3631167028862bE2a173976CA11',
153
+ '0x2329': '0xcA11bde05977b3631167028862bE2a173976CA11',
154
+ '0x2328': '0xcA11bde05977b3631167028862bE2a173976CA11',
155
+ '0x6c': '0xcA11bde05977b3631167028862bE2a173976CA11',
156
+ '0x12': '0xcA11bde05977b3631167028862bE2a173976CA11',
157
+ '0xa516': '0xcA11bde05977b3631167028862bE2a173976CA11',
158
+ '0x5afe': '0xcA11bde05977b3631167028862bE2a173976CA11',
159
+ '0xa4ec': '0xcA11bde05977b3631167028862bE2a173976CA11',
160
+ '0xaef3': '0xcA11bde05977b3631167028862bE2a173976CA11',
161
+ '0x116ea': '0xcA11bde05977b3631167028862bE2a173976CA11',
162
+ '0x116e9': '0xcA11bde05977b3631167028862bE2a173976CA11',
163
+ '0x2019': '0xcA11bde05977b3631167028862bE2a173976CA11',
164
+ '0x3e9': '0xca11bde05977b3631167028862be2a173976ca11',
165
+ '0x7d1': '0xcA11bde05977b3631167028862bE2a173976CA11',
166
+ '0x141': '0xcA11bde05977b3631167028862bE2a173976CA11',
167
+ '0x6a': '0xcA11bde05977b3631167028862bE2a173976CA11',
168
+ '0x28': '0xcA11bde05977b3631167028862bE2a173976CA11',
169
+ '0x4d2': '0xcA11bde05977b3631167028862bE2a173976CA11',
170
+ '0x1e14': '0xcA11bde05977b3631167028862bE2a173976CA11',
171
+ '0x1e15': '0xcA11bde05977b3631167028862bE2a173976CA11',
172
+ '0x1251': '0xcA11bde05977b3631167028862bE2a173976CA11',
173
+ '0x7f08': '0xcA11bde05977b3631167028862bE2a173976CA11',
174
+ '0x8ae': '0xcA11bde05977b3631167028862bE2a173976CA11',
175
+ '0x138b': '0xcA11bde05977b3631167028862bE2a173976CA11',
176
+ '0x1389': '0xcA11bde05977b3631167028862bE2a173976CA11',
177
+ '0x1388': '0xcA11bde05977b3631167028862bE2a173976CA11',
178
+ '0x1f92': '0xcA11bde05977b3631167028862bE2a173976CA11',
179
+ '0x14a33': '0xca11bde05977b3631167028862be2a173976ca11',
180
+ '0x14a34': '0xcA11bde05977b3631167028862bE2a173976CA11',
181
+ '0x2105': '0xca11bde05977b3631167028862be2a173976ca11',
182
+ '0x936': '0xcA11bde05977b3631167028862bE2a173976CA11',
183
+ '0xff': '0xcA11bde05977b3631167028862bE2a173976CA11',
184
+ '0x46a': '0xcA11bde05977b3631167028862bE2a173976CA11',
185
+ '0x46b': '0xcA11bde05977b3631167028862bE2a173976CA11',
186
+ '0x8a': '0xcA11bde05977b3631167028862bE2a173976CA11',
187
+ '0x14f': '0xcA11bde05977b3631167028862bE2a173976CA11',
188
+ '0xd2af': '0xcA11bde05977b3631167028862bE2a173976CA11',
189
+ '0xe9ac0ce': '0xcA11bde05977b3631167028862bE2a173976CA11',
190
+ '0xe705': '0xca11bde05977b3631167028862be2a173976ca11',
191
+ '0xe704': '0xcA11bde05977b3631167028862bE2a173976CA11',
192
+ '0xe708': '0xcA11bde05977b3631167028862bE2a173976CA11',
193
+ '0x2b6f': '0xcA11bde05977b3631167028862bE2a173976CA11',
194
+ '0x39': '0xcA11bde05977b3631167028862bE2a173976CA11',
195
+ '0x23a': '0xcA11bde05977b3631167028862bE2a173976CA11',
196
+ '0x1644': '0xcA11bde05977b3631167028862bE2a173976CA11',
197
+ '0xdea8': '0xcA11bde05977b3631167028862bE2a173976CA11',
198
+ '0x3af': '0xcA11bde05977b3631167028862bE2a173976CA11',
199
+ '0x171': '0xcA11bde05977b3631167028862bE2a173976CA11',
200
+ '0x3e7': '0xcA11bde05977b3631167028862bE2a173976CA11',
201
+ '0x76adf1': '0xcA11bde05977b3631167028862bE2a173976CA11',
202
+ '0x3b9ac9ff': '0xcA11bde05977b3631167028862bE2a173976CA11',
203
+ '0x2c': '0xca11bde05977b3631167028862be2a173976ca11',
204
+ '0x2e': '0xca11bde05977b3631167028862be2a173976ca11',
205
+ '0x15b3': '0xcA11bde05977b3631167028862bE2a173976CA11',
206
+ '0x82751': '0xcA11bde05977b3631167028862bE2a173976CA11',
207
+ '0x8274f': '0xca11bde05977b3631167028862be2a173976ca11',
208
+ '0x82750': '0xcA11bde05977b3631167028862bE2a173976CA11',
209
+ '0x96f': '0xcA11bde05977b3631167028862bE2a173976CA11',
210
+ '0x3cc5': '0xcA11bde05977b3631167028862bE2a173976CA11',
211
+ '0x4571': '0xcA11bde05977b3631167028862bE2a173976CA11',
212
+ '0xe99': '0xcA11bde05977b3631167028862bE2a173976CA11',
213
+ '0x7d0': '0xcA11bde05977b3631167028862bE2a173976CA11',
214
+ '0x1297': '0xcA11bde05977b3631167028862bE2a173976CA11',
215
+ '0x1d5e': '0xcA11bde05977b3631167028862bE2a173976CA11',
216
+ '0x3a14269b': '0xcA11bde05977b3631167028862bE2a173976CA11',
217
+ '0x561bf78b': '0xcA11bde05977b3631167028862bE2a173976CA11',
218
+ '0x235ddd0': '0xcA11bde05977b3631167028862bE2a173976CA11',
219
+ '0x3cd156dc': '0xcA11bde05977b3631167028862bE2a173976CA11',
220
+ '0x5d456c62': '0xcA11bde05977b3631167028862bE2a173976CA11',
221
+ '0x79f99296': '0xcA11bde05977b3631167028862bE2a173976CA11',
222
+ '0x585eb4b1': '0xcA11bde05977b3631167028862bE2a173976CA11',
223
+ '0x507aaa2a': '0xcA11bde05977b3631167028862bE2a173976CA11',
224
+ '0x1fc3': '0xcA11bde05977b3631167028862bE2a173976CA11',
225
+ '0x32d': '0xcA11bde05977b3631167028862bE2a173976CA11',
226
+ '0x8a73': '0xcA11bde05977b3631167028862bE2a173976CA11',
227
+ '0x8a72': '0xcA11bde05977b3631167028862bE2a173976CA11',
228
+ '0x8a71': '0xcA11bde05977b3631167028862bE2a173976CA11',
229
+ '0xe9ac0d6': '0xca11bde05977b3631167028862be2a173976ca11',
230
+ '0x1069': '0xcA11bde05977b3631167028862bE2a173976CA11',
231
+ '0x7e5': '0xcA11bde05977b3631167028862bE2a173976CA11',
232
+ '0x53': '0xca11bde05977b3631167028862be2a173976ca11',
233
+ '0x52': '0xca11bde05977b3631167028862be2a173976ca11',
234
+ '0xe298': '0xcA11bde05977b3631167028862bE2a173976CA11',
235
+ '0x1a8': '0xcA11bde05977b3631167028862bE2a173976CA11',
236
+ '0x94': '0xcA11bde05977b3631167028862bE2a173976CA11',
237
+ '0x2c6': '0xcA11bde05977b3631167028862bE2a173976CA11',
238
+ '0x2803': '0xcA11bde05977b3631167028862bE2a173976CA11',
239
+ '0x2802': '0xcA11bde05977b3631167028862bE2a173976CA11',
240
+ '0xa9': '0xcA11bde05977b3631167028862bE2a173976CA11',
241
+ '0x28c5f': '0xcA11bde05977b3631167028862bE2a173976CA11',
242
+ '0x28c60': '0xcA11bde05977b3631167028862bE2a173976CA11',
243
+ '0x13a': '0xcA11bde05977b3631167028862bE2a173976CA11',
244
+ '0x4cb2f': '0xdbfa261cd7d17bb40479a0493ad6c0fee435859e',
245
+ '0x7f93': '0xcA11bde05977b3631167028862bE2a173976CA11',
246
+ '0xb660': '0xcA11bde05977b3631167028862bE2a173976CA11',
247
+ '0xb02113d3f': '0xcA11bde05977b3631167028862bE2a173976CA11',
248
+ '0xdad': '0xcA11bde05977b3631167028862bE2a173976CA11',
249
+ '0xdae': '0xcA11bde05977b3631167028862bE2a173976CA11',
250
+ '0x15b38': '0xcA11bde05977b3631167028862bE2a173976CA11',
251
+ '0x15b32': '0xcA11bde05977b3631167028862bE2a173976CA11',
252
+ '0x45c': '0xcA11bde05977b3631167028862bE2a173976CA11',
253
+ '0x45b': '0xcA11bde05977b3631167028862bE2a173976CA11',
254
+ '0x3d': '0xcA11bde05977b3631167028862bE2a173976CA11',
255
+ '0x41a6ace': '0xcA11bde05977b3631167028862bE2a173976CA11',
256
+ '0xa729': '0xcA11bde05977b3631167028862bE2a173976CA11',
257
+ '0x1f47b': '0xcA11bde05977b3631167028862bE2a173976CA11',
258
+ '0x1b59': '0xca11bde05977b3631167028862be2a173976ca11',
259
+ '0x1b58': '0xcA11bde05977b3631167028862bE2a173976CA11',
260
+ '0xc3': '0xca11bde05977b3631167028862be2a173976ca11',
261
+ '0x16fd8': '0xcA11bde05977b3631167028862bE2a173976CA11',
262
+ '0xc7': '0xca11bde05977b3631167028862be2a173976ca11',
263
+ '0x405': '0xca11bde05977b3631167028862be2a173976ca11',
264
+ '0x334': '0xcA11bde05977b3631167028862bE2a173976CA11',
265
+ '0x1ce': '0xca11bde05977b3631167028862be2a173976ca11',
266
+ '0x1cf': '0xca11bde05977b3631167028862be2a173976ca11',
267
+ '0xa70e': '0xcA11bde05977b3631167028862bE2a173976CA11',
268
+ '0x868b': '0xcA11bde05977b3631167028862bE2a173976CA11',
269
+ '0xa0c71fd': '0xcA11bde05977b3631167028862bE2a173976CA11',
270
+ '0x13e31': '0xcA11bde05977b3631167028862bE2a173976CA11',
271
+ '0xa1337': '0xcA11bde05977b3631167028862bE2a173976CA11',
272
+ '0x1f2b': '0xcA11bde05977b3631167028862bE2a173976CA11',
273
+ '0xf63': '0xcA11bde05977b3631167028862bE2a173976CA11',
274
+ '0x144': '0xF9cda624FBC7e059355ce98a31693d299FACd963',
275
+ '0x118': '0xF9cda624FBC7e059355ce98a31693d299FACd963',
276
+ '0x12c': '0xF9cda624FBC7e059355ce98a31693d299FACd963',
277
+ '0x18995f': '0xF9cda624FBC7e059355ce98a31693d299FACd963',
278
+ '0x2b74': '0xF9cda624FBC7e059355ce98a31693d299FACd963',
279
+ '0xfc': '0xcA11bde05977b3631167028862bE2a173976CA11',
280
+ '0x9da': '0xcA11bde05977b3631167028862bE2a173976CA11',
281
+ '0x137': '0xcA11bde05977b3631167028862bE2a173976CA11',
282
+ '0x13ed': '0xcA11bde05977b3631167028862bE2a173976CA11',
283
+ '0x24b1': '0xcA11bde05977b3631167028862bE2a173976CA11',
284
+ '0xba9302': '0xcA11bde05977b3631167028862bE2a173976CA11',
285
+ '0x7c8': '0xcA11bde05977b3631167028862bE2a173976CA11',
286
+ '0x138d5': '0xcA11bde05977b3631167028862bE2a173976CA11',
287
+ '0x6d': '0xcA11bde05977b3631167028862bE2a173976CA11',
288
+ '0x343b': '0xcA11bde05977b3631167028862bE2a173976CA11',
289
+ '0x34a1': '0xcA11bde05977b3631167028862bE2a173976CA11',
290
+ '0x3109': '0xcA11bde05977b3631167028862bE2a173976CA11',
291
+ '0x91b': '0xcA11bde05977b3631167028862bE2a173976CA11',
292
+ '0xa96': '0xcA11bde05977b3631167028862bE2a173976CA11',
293
+ '0x22c3': '0xcA11bde05977b3631167028862bE2a173976CA11',
294
+ '0x2be3': '0xcA11bde05977b3631167028862bE2a173976CA11',
295
+ '0xbf03': '0xcA11bde05977b3631167028862bE2a173976CA11',
296
+ '0x1b254': '0xcA11bde05977b3631167028862bE2a173976CA11',
297
+ '0xa7b14': '0xcA11bde05977b3631167028862bE2a173976CA11',
298
+ '0x2276': '0xcA11bde05977b3631167028862bE2a173976CA11',
299
+ '0x1b9e': '0xcA11bde05977b3631167028862bE2a173976CA11',
300
+ '0x6a63bb8': '0xcA11bde05977b3631167028862bE2a173976CA11',
301
+ '0x15af3': '0xcA11bde05977b3631167028862bE2a173976CA11',
302
+ '0x15af1': '0xcA11bde05977b3631167028862bE2a173976CA11',
303
+ '0xae3f3': '0xcA11bde05977b3631167028862bE2a173976CA11',
304
+ '0x531': '0xcA11bde05977b3631167028862bE2a173976CA11',
305
+ '0x28c61': '0xcA11bde05977b3631167028862bE2a173976CA11',
306
+ '0x28c58': '0xca11bde05977b3631167028862be2a173976ca11',
307
+ '0x1d88': '0xcA11bde05977b3631167028862bE2a173976CA11',
308
+ '0x5b9b': '0xcA11bde05977b3631167028862bE2a173976CA11',
309
+ '0x4c7e1': '0xcA11bde05977b3631167028862bE2a173976CA11',
310
+ '0xa53b': '0xcA11bde05977b3631167028862bE2a173976CA11',
311
+ '0x1a2b': '0xcA11bde05977b3631167028862bE2a173976CA11',
312
+ '0x406': '0xca11bde05977b3631167028862be2a173976ca11',
313
+ '0x2cef': '0xcA11bde05977b3631167028862bE2a173976CA11',
314
+ '0x18b2': '0xca11bde05977b3631167028862be2a173976ca11',
315
+ '0x182a9': '0xcA11bde05977b3631167028862bE2a173976CA11',
316
+ '0xc4': '0xcA11bde05977b3631167028862bE2a173976CA11',
317
+ '0xfdd': '0xcA11bde05977b3631167028862bE2a173976CA11',
318
+ '0xfde': '0xcA11bde05977b3631167028862bE2a173976CA11',
319
+ '0x99c0a0f': '0xca11bde05977b3631167028862be2a173976ca11',
320
+ '0x22cf': '0xcA11bde05977b3631167028862bE2a173976CA11',
321
+ '0x310c5': '0xca11bde05977b3631167028862be2a173976ca11',
322
+ '0x46f': '0xcA11bde05977b3631167028862bE2a173976CA11',
323
+ '0x659': '0xca11bde05977b3631167028862be2a173976ca11',
324
+ '0x139c968f9': '0xcA11bde05977b3631167028862bE2a173976CA11',
325
+ '0xed88': '0xcA11bde05977b3631167028862bE2a173976CA11',
326
+ '0xd036': '0xcA11bde05977b3631167028862bE2a173976CA11',
327
+ '0x1f3': '0xcA11bde05977b3631167028862bE2a173976CA11',
328
+ '0x31bf8c3': '0xcA11bde05977b3631167028862bE2a173976CA11',
329
+ '0x1cbc67bfdc': '0xcA11bde05977b3631167028862bE2a173976CA11',
330
+ '0x98967f': '0xcA11bde05977b3631167028862bE2a173976CA11',
331
+ '0x4f588': '0xcA11bde05977b3631167028862bE2a173976CA11',
332
+ '0x16db': '0xca11bde05977b3631167028862be2a173976ca11',
333
+ '0x3a': '0xca11bde05977b3631167028862be2a173976ca11',
334
+ '0x59': '0xca11bde05977b3631167028862be2a173976ca11',
335
+ '0x1e0': '0xcA11bde05977b3631167028862bE2a173976CA11',
336
+ '0x2eb': '0xcA11bde05977b3631167028862bE2a173976CA11',
337
+ '0x221': '0xcA11bde05977b3631167028862bE2a173976CA11',
338
+ '0x6f0': '0xcA11bde05977b3631167028862bE2a173976CA11',
339
+ '0xa867': '0xcA11bde05977b3631167028862bE2a173976CA11',
340
+ '0x2611': '0xcA11bde05977b3631167028862bE2a173976CA11',
341
+ '0xa6': '0xcA11bde05977b3631167028862bE2a173976CA11',
342
+ '0x15f900': '0x6B5eFbC0C82eBb26CA13a4F11836f36Fc6fdBC5D',
343
+ '0x74c': '0xcA11bde05977b3631167028862bE2a173976CA11',
344
+ '0x407b': '0x90a2377F233E3461BACa6080d4837837d8762927',
345
+ '0xa3c3': '0xcA11bde05977b3631167028862bE2a173976CA11',
346
+ '0xab5': '0xF9cda624FBC7e059355ce98a31693d299FACd963',
347
+ '0x138de': '0xcA11bde05977b3631167028862bE2a173976CA11',
348
+ '0x18c6': '0xcA11bde05977b3631167028862bE2a173976CA11',
349
+ '0x8173': '0xcA11bde05977b3631167028862bE2a173976CA11',
350
+ '0x2ba': '0xcA11bde05977b3631167028862bE2a173976CA11',
351
+ '0x279f': '0xcA11bde05977b3631167028862bE2a173976CA11',
352
+ '0xb67d2': '0xcA11bde05977b3631167028862bE2a173976CA11',
353
+ '0xe8': '0xcA11bde05977b3631167028862bE2a173976CA11',
354
+ '0x18232': '0xcA11bde05977b3631167028862bE2a173976CA11',
355
+ '0x8f': '0xcA11bde05977b3631167028862bE2a173976CA11',
356
+ '0x32': '0x0B1795ccA8E4eC4df02346a082df54D437F8D9aF',
357
+ '0x18c7': '0xcA11bde05977b3631167028862bE2a173976CA11',
358
+ '0x10e6': '0xcA11bde05977b3631167028862bE2a173976CA11',
359
+ '0x10b3e': '0x99423C88EB5723A590b4C644426069042f137B9e',
360
+ };
361
+ // =============================================================================
362
+ // ENCODING/DECODING UTILITIES (using viem)
363
+ // =============================================================================
364
+ /**
365
+ * Encode a balanceOf call for an ERC-20 token.
366
+ *
367
+ * @param accountAddress - The account address.
368
+ * @returns The encoded call data.
369
+ */
370
+ function encodeBalanceOf(accountAddress) {
371
+ return (0, viem_1.encodeFunctionData)({
372
+ abi: ERC20_ABI,
373
+ functionName: 'balanceOf',
374
+ args: [accountAddress],
375
+ });
376
+ }
377
+ /**
378
+ * Encode a getEthBalance call for native token via Multicall3.
379
+ *
380
+ * @param accountAddress - The account address.
381
+ * @returns The encoded call data.
382
+ */
383
+ function encodeGetEthBalance(accountAddress) {
384
+ return (0, viem_1.encodeFunctionData)({
385
+ abi: MULTICALL3_ABI,
386
+ functionName: 'getEthBalance',
387
+ args: [accountAddress],
388
+ });
389
+ }
390
+ /**
391
+ * Encode a Multicall3 aggregate3 call.
392
+ *
393
+ * @param calls - Array of calls with target, allowFailure, and callData.
394
+ * @returns The encoded aggregate3 call data.
395
+ */
396
+ function encodeAggregate3(calls) {
397
+ return (0, viem_1.encodeFunctionData)({
398
+ abi: MULTICALL3_ABI,
399
+ functionName: 'aggregate3',
400
+ args: [
401
+ calls.map((call) => ({
402
+ target: call.target,
403
+ allowFailure: call.allowFailure,
404
+ callData: call.callData,
405
+ })),
406
+ ],
407
+ });
408
+ }
409
+ exports.encodeAggregate3 = encodeAggregate3;
410
+ /**
411
+ * Decode the response from aggregate3.
412
+ * Returns array of (success, returnData) tuples.
413
+ *
414
+ * @param data - The raw response data.
415
+ * @param callCount - Number of calls made (used for validation).
416
+ * @returns Array of success and return data.
417
+ */
418
+ function decodeAggregate3Response(data, callCount) {
419
+ const decoded = (0, viem_1.decodeFunctionResult)({
420
+ abi: MULTICALL3_ABI,
421
+ functionName: 'aggregate3',
422
+ data,
423
+ });
424
+ // decoded is an array of { success: boolean, returnData: `0x${string}` }
425
+ const results = decoded;
426
+ if (results.length !== callCount) {
427
+ throw new Error(`Expected ${callCount} results, got ${results.length}`);
428
+ }
429
+ return results.map((result) => ({
430
+ success: result.success,
431
+ returnData: result.returnData,
432
+ }));
433
+ }
434
+ exports.decodeAggregate3Response = decodeAggregate3Response;
435
+ /**
436
+ * Decode a uint256 balance from return data.
437
+ *
438
+ * @param data - The hex return data.
439
+ * @returns The decoded balance as a string.
440
+ */
441
+ function decodeUint256(data) {
442
+ const hexData = data.slice(2);
443
+ if (hexData.length === 0) {
444
+ return '0';
445
+ }
446
+ // Take first 64 chars (32 bytes) for uint256
447
+ const normalizedHex = hexData.length > 64 ? hexData.slice(0, 64) : hexData;
448
+ return BigInt(`0x${normalizedHex}`).toString();
449
+ }
450
+ /**
451
+ * Client for batching RPC calls using Multicall3.
452
+ * Falls back to individual calls on chains without Multicall3 support.
453
+ */
454
+ class MulticallClient {
455
+ constructor(getProvider, config) {
456
+ _MulticallClient_instances.add(this);
457
+ _MulticallClient_getProvider.set(this, void 0);
458
+ _MulticallClient_config.set(this, void 0);
459
+ __classPrivateFieldSet(this, _MulticallClient_getProvider, getProvider, "f");
460
+ // Use default values for invalid (non-positive) batch sizes to prevent
461
+ // infinite loops or errors in divideIntoBatches
462
+ const maxCallsPerBatch = config?.maxCallsPerBatch !== undefined && config.maxCallsPerBatch > 0
463
+ ? config.maxCallsPerBatch
464
+ : 300;
465
+ const timeoutMs = config?.timeoutMs !== undefined && config.timeoutMs > 0
466
+ ? config.timeoutMs
467
+ : 30000;
468
+ __classPrivateFieldSet(this, _MulticallClient_config, {
469
+ maxCallsPerBatch,
470
+ timeoutMs,
471
+ }, "f");
472
+ }
473
+ /**
474
+ * Fetch ERC-20 and native token balances using Multicall3.
475
+ * Falls back to individual RPC calls on unsupported chains.
476
+ *
477
+ * @param chainId - The chain ID.
478
+ * @param requests - Array of balance requests.
479
+ * @returns Array of balance responses.
480
+ */
481
+ async batchBalanceOf(chainId, requests) {
482
+ if (requests.length === 0) {
483
+ return [];
484
+ }
485
+ const multicallAddress = MULTICALL3_ADDRESS_BY_CHAIN[chainId];
486
+ const provider = __classPrivateFieldGet(this, _MulticallClient_getProvider, "f").call(this, chainId);
487
+ // If Multicall3 is not supported, fall back to individual calls
488
+ if (!multicallAddress) {
489
+ return __classPrivateFieldGet(this, _MulticallClient_instances, "m", _MulticallClient_fallbackBatchBalanceOf).call(this, provider, requests);
490
+ }
491
+ // Use Multicall3
492
+ return __classPrivateFieldGet(this, _MulticallClient_instances, "m", _MulticallClient_multicallBatchBalanceOf).call(this, provider, multicallAddress, requests);
493
+ }
494
+ }
495
+ exports.MulticallClient = MulticallClient;
496
+ _MulticallClient_getProvider = new WeakMap(), _MulticallClient_config = new WeakMap(), _MulticallClient_instances = new WeakSet(), _MulticallClient_multicallBatchBalanceOf =
497
+ /**
498
+ * Fetch balances using Multicall3 aggregate3.
499
+ *
500
+ * @param provider - The RPC provider.
501
+ * @param multicallAddress - The Multicall3 contract address.
502
+ * @param requests - Array of balance requests.
503
+ * @returns Array of balance responses.
504
+ */
505
+ async function _MulticallClient_multicallBatchBalanceOf(provider, multicallAddress, requests) {
506
+ const batchSize = __classPrivateFieldGet(this, _MulticallClient_config, "f").maxCallsPerBatch;
507
+ const responses = await (0, utils_1.reduceInBatchesSerially)({
508
+ values: requests,
509
+ batchSize,
510
+ initialResult: [],
511
+ eachBatch: async (workingResult, batch) => {
512
+ try {
513
+ // Build aggregate3 calls
514
+ const calls = batch.map((req) => {
515
+ const isNative = req.tokenAddress === ZERO_ADDRESS;
516
+ const target = isNative ? multicallAddress : req.tokenAddress;
517
+ return {
518
+ target,
519
+ allowFailure: true,
520
+ callData: isNative
521
+ ? encodeGetEthBalance(req.accountAddress)
522
+ : encodeBalanceOf(req.accountAddress),
523
+ };
524
+ });
525
+ // Encode and send aggregate3 call
526
+ const callData = encodeAggregate3(calls);
527
+ const result = await provider.call({
528
+ to: multicallAddress,
529
+ data: callData,
530
+ });
531
+ // Decode response
532
+ const decoded = decodeAggregate3Response(result, batch.length);
533
+ // Map results back to responses
534
+ for (let i = 0; i < batch.length; i++) {
535
+ const { tokenAddress, accountAddress } = batch[i];
536
+ const { success, returnData } = decoded[i];
537
+ if (success && returnData && returnData.length > 2) {
538
+ workingResult.push({
539
+ tokenAddress,
540
+ accountAddress,
541
+ success: true,
542
+ balance: decodeUint256(returnData),
543
+ });
544
+ }
545
+ else {
546
+ workingResult.push({
547
+ tokenAddress,
548
+ accountAddress,
549
+ success: false,
550
+ });
551
+ }
552
+ }
553
+ }
554
+ catch {
555
+ // On aggregate3 error, fall back to individual calls for this batch.
556
+ // #fetchSingleBalance never rejects - it catches all errors internally
557
+ // and returns a failed response, so we use Promise.all here.
558
+ const fallbackResults = await Promise.all(batch.map((req) => __classPrivateFieldGet(this, _MulticallClient_instances, "m", _MulticallClient_fetchSingleBalance).call(this, provider, req)));
559
+ for (const result of fallbackResults) {
560
+ workingResult.push(result);
561
+ }
562
+ }
563
+ return workingResult;
564
+ },
565
+ });
566
+ return responses;
567
+ }, _MulticallClient_fallbackBatchBalanceOf =
568
+ /**
569
+ * Fallback: fetch balances using individual RPC calls.
570
+ *
571
+ * @param provider - The RPC provider.
572
+ * @param requests - Array of balance requests.
573
+ * @returns Array of balance responses.
574
+ */
575
+ async function _MulticallClient_fallbackBatchBalanceOf(provider, requests) {
576
+ // Use smaller batch size for parallel individual calls to avoid overwhelming RPC
577
+ const batchSize = Math.min(__classPrivateFieldGet(this, _MulticallClient_config, "f").maxCallsPerBatch, 50);
578
+ const responses = await (0, utils_1.reduceInBatchesSerially)({
579
+ values: requests,
580
+ batchSize,
581
+ initialResult: [],
582
+ eachBatch: async (workingResult, batch) => {
583
+ // #fetchSingleBalance never rejects - it catches all errors internally
584
+ // and returns a failed response, so we use Promise.all here.
585
+ const batchResults = await Promise.all(batch.map((req) => __classPrivateFieldGet(this, _MulticallClient_instances, "m", _MulticallClient_fetchSingleBalance).call(this, provider, req)));
586
+ for (const result of batchResults) {
587
+ workingResult.push(result);
588
+ }
589
+ return workingResult;
590
+ },
591
+ });
592
+ return responses;
593
+ }, _MulticallClient_fetchSingleBalance =
594
+ /**
595
+ * Fetch a single token balance (fallback method).
596
+ *
597
+ * @param provider - The RPC provider.
598
+ * @param request - The balance request.
599
+ * @returns The balance response.
600
+ */
601
+ async function _MulticallClient_fetchSingleBalance(provider, request) {
602
+ // Destructure inside try block to ensure any errors are caught
603
+ // and don't cause promise rejections that bypass error handling
604
+ try {
605
+ const { tokenAddress, accountAddress } = request;
606
+ // Native token (zero address)
607
+ if (tokenAddress === ZERO_ADDRESS) {
608
+ const balance = await provider.getBalance(accountAddress);
609
+ return {
610
+ tokenAddress,
611
+ accountAddress,
612
+ success: true,
613
+ balance: balance.toString(),
614
+ };
615
+ }
616
+ // ERC-20 token
617
+ const callData = encodeBalanceOf(accountAddress);
618
+ const result = await provider.call({
619
+ to: tokenAddress,
620
+ data: callData,
621
+ });
622
+ const balance = decodeUint256(result);
623
+ return {
624
+ tokenAddress,
625
+ accountAddress,
626
+ success: true,
627
+ balance,
628
+ };
629
+ }
630
+ catch {
631
+ return {
632
+ tokenAddress: request.tokenAddress,
633
+ accountAddress: request.accountAddress,
634
+ success: false,
635
+ };
636
+ }
637
+ };
638
+ //# sourceMappingURL=MulticallClient.cjs.map