@metamask/assets-controller 0.1.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 (252) hide show
  1. package/CHANGELOG.md +37 -0
  2. package/LICENSE +20 -0
  3. package/README.md +15 -0
  4. package/dist/AssetsController.cjs +1057 -0
  5. package/dist/AssetsController.cjs.map +1 -0
  6. package/dist/AssetsController.d.cts +260 -0
  7. package/dist/AssetsController.d.cts.map +1 -0
  8. package/dist/AssetsController.d.mts +260 -0
  9. package/dist/AssetsController.d.mts.map +1 -0
  10. package/dist/AssetsController.mjs +1050 -0
  11. package/dist/AssetsController.mjs.map +1 -0
  12. package/dist/data-sources/AbstractDataSource.cjs +103 -0
  13. package/dist/data-sources/AbstractDataSource.cjs.map +1 -0
  14. package/dist/data-sources/AbstractDataSource.d.cts +92 -0
  15. package/dist/data-sources/AbstractDataSource.d.cts.map +1 -0
  16. package/dist/data-sources/AbstractDataSource.d.mts +92 -0
  17. package/dist/data-sources/AbstractDataSource.d.mts.map +1 -0
  18. package/dist/data-sources/AbstractDataSource.mjs +99 -0
  19. package/dist/data-sources/AbstractDataSource.mjs.map +1 -0
  20. package/dist/data-sources/AccountsApiDataSource.cjs +421 -0
  21. package/dist/data-sources/AccountsApiDataSource.cjs.map +1 -0
  22. package/dist/data-sources/AccountsApiDataSource.d.cts +103 -0
  23. package/dist/data-sources/AccountsApiDataSource.d.cts.map +1 -0
  24. package/dist/data-sources/AccountsApiDataSource.d.mts +103 -0
  25. package/dist/data-sources/AccountsApiDataSource.d.mts.map +1 -0
  26. package/dist/data-sources/AccountsApiDataSource.mjs +416 -0
  27. package/dist/data-sources/AccountsApiDataSource.mjs.map +1 -0
  28. package/dist/data-sources/BackendWebsocketDataSource.cjs +388 -0
  29. package/dist/data-sources/BackendWebsocketDataSource.cjs.map +1 -0
  30. package/dist/data-sources/BackendWebsocketDataSource.d.cts +95 -0
  31. package/dist/data-sources/BackendWebsocketDataSource.d.cts.map +1 -0
  32. package/dist/data-sources/BackendWebsocketDataSource.d.mts +95 -0
  33. package/dist/data-sources/BackendWebsocketDataSource.d.mts.map +1 -0
  34. package/dist/data-sources/BackendWebsocketDataSource.mjs +383 -0
  35. package/dist/data-sources/BackendWebsocketDataSource.mjs.map +1 -0
  36. package/dist/data-sources/PriceDataSource.cjs +343 -0
  37. package/dist/data-sources/PriceDataSource.cjs.map +1 -0
  38. package/dist/data-sources/PriceDataSource.d.cts +153 -0
  39. package/dist/data-sources/PriceDataSource.d.cts.map +1 -0
  40. package/dist/data-sources/PriceDataSource.d.mts +153 -0
  41. package/dist/data-sources/PriceDataSource.d.mts.map +1 -0
  42. package/dist/data-sources/PriceDataSource.mjs +339 -0
  43. package/dist/data-sources/PriceDataSource.mjs.map +1 -0
  44. package/dist/data-sources/RpcDataSource.cjs +829 -0
  45. package/dist/data-sources/RpcDataSource.cjs.map +1 -0
  46. package/dist/data-sources/RpcDataSource.d.cts +243 -0
  47. package/dist/data-sources/RpcDataSource.d.cts.map +1 -0
  48. package/dist/data-sources/RpcDataSource.d.mts +243 -0
  49. package/dist/data-sources/RpcDataSource.d.mts.map +1 -0
  50. package/dist/data-sources/RpcDataSource.mjs +820 -0
  51. package/dist/data-sources/RpcDataSource.mjs.map +1 -0
  52. package/dist/data-sources/SnapDataSource.cjs +463 -0
  53. package/dist/data-sources/SnapDataSource.cjs.map +1 -0
  54. package/dist/data-sources/SnapDataSource.d.cts +155 -0
  55. package/dist/data-sources/SnapDataSource.d.cts.map +1 -0
  56. package/dist/data-sources/SnapDataSource.d.mts +155 -0
  57. package/dist/data-sources/SnapDataSource.d.mts.map +1 -0
  58. package/dist/data-sources/SnapDataSource.mjs +456 -0
  59. package/dist/data-sources/SnapDataSource.mjs.map +1 -0
  60. package/dist/data-sources/TokenDataSource.cjs +211 -0
  61. package/dist/data-sources/TokenDataSource.cjs.map +1 -0
  62. package/dist/data-sources/TokenDataSource.d.cts +62 -0
  63. package/dist/data-sources/TokenDataSource.d.cts.map +1 -0
  64. package/dist/data-sources/TokenDataSource.d.mts +62 -0
  65. package/dist/data-sources/TokenDataSource.d.mts.map +1 -0
  66. package/dist/data-sources/TokenDataSource.mjs +207 -0
  67. package/dist/data-sources/TokenDataSource.mjs.map +1 -0
  68. package/dist/data-sources/evm-rpc-services/clients/MulticallClient.cjs +638 -0
  69. package/dist/data-sources/evm-rpc-services/clients/MulticallClient.cjs.map +1 -0
  70. package/dist/data-sources/evm-rpc-services/clients/MulticallClient.d.cts +47 -0
  71. package/dist/data-sources/evm-rpc-services/clients/MulticallClient.d.cts.map +1 -0
  72. package/dist/data-sources/evm-rpc-services/clients/MulticallClient.d.mts +47 -0
  73. package/dist/data-sources/evm-rpc-services/clients/MulticallClient.d.mts.map +1 -0
  74. package/dist/data-sources/evm-rpc-services/clients/MulticallClient.mjs +632 -0
  75. package/dist/data-sources/evm-rpc-services/clients/MulticallClient.mjs.map +1 -0
  76. package/dist/data-sources/evm-rpc-services/clients/index.cjs +8 -0
  77. package/dist/data-sources/evm-rpc-services/clients/index.cjs.map +1 -0
  78. package/dist/data-sources/evm-rpc-services/clients/index.d.cts +3 -0
  79. package/dist/data-sources/evm-rpc-services/clients/index.d.cts.map +1 -0
  80. package/dist/data-sources/evm-rpc-services/clients/index.d.mts +3 -0
  81. package/dist/data-sources/evm-rpc-services/clients/index.d.mts.map +1 -0
  82. package/dist/data-sources/evm-rpc-services/clients/index.mjs +2 -0
  83. package/dist/data-sources/evm-rpc-services/clients/index.mjs.map +1 -0
  84. package/dist/data-sources/evm-rpc-services/index.cjs +12 -0
  85. package/dist/data-sources/evm-rpc-services/index.cjs.map +1 -0
  86. package/dist/data-sources/evm-rpc-services/index.d.cts +5 -0
  87. package/dist/data-sources/evm-rpc-services/index.d.cts.map +1 -0
  88. package/dist/data-sources/evm-rpc-services/index.d.mts +5 -0
  89. package/dist/data-sources/evm-rpc-services/index.d.mts.map +1 -0
  90. package/dist/data-sources/evm-rpc-services/index.mjs +4 -0
  91. package/dist/data-sources/evm-rpc-services/index.mjs.map +1 -0
  92. package/dist/data-sources/evm-rpc-services/services/BalanceFetcher.cjs +202 -0
  93. package/dist/data-sources/evm-rpc-services/services/BalanceFetcher.cjs.map +1 -0
  94. package/dist/data-sources/evm-rpc-services/services/BalanceFetcher.d.cts +75 -0
  95. package/dist/data-sources/evm-rpc-services/services/BalanceFetcher.d.cts.map +1 -0
  96. package/dist/data-sources/evm-rpc-services/services/BalanceFetcher.d.mts +75 -0
  97. package/dist/data-sources/evm-rpc-services/services/BalanceFetcher.d.mts.map +1 -0
  98. package/dist/data-sources/evm-rpc-services/services/BalanceFetcher.mjs +198 -0
  99. package/dist/data-sources/evm-rpc-services/services/BalanceFetcher.mjs.map +1 -0
  100. package/dist/data-sources/evm-rpc-services/services/TokenDetector.cjs +214 -0
  101. package/dist/data-sources/evm-rpc-services/services/TokenDetector.cjs.map +1 -0
  102. package/dist/data-sources/evm-rpc-services/services/TokenDetector.d.cts +71 -0
  103. package/dist/data-sources/evm-rpc-services/services/TokenDetector.d.cts.map +1 -0
  104. package/dist/data-sources/evm-rpc-services/services/TokenDetector.d.mts +71 -0
  105. package/dist/data-sources/evm-rpc-services/services/TokenDetector.d.mts.map +1 -0
  106. package/dist/data-sources/evm-rpc-services/services/TokenDetector.mjs +210 -0
  107. package/dist/data-sources/evm-rpc-services/services/TokenDetector.mjs.map +1 -0
  108. package/dist/data-sources/evm-rpc-services/services/index.cjs +8 -0
  109. package/dist/data-sources/evm-rpc-services/services/index.cjs.map +1 -0
  110. package/dist/data-sources/evm-rpc-services/services/index.d.cts +3 -0
  111. package/dist/data-sources/evm-rpc-services/services/index.d.cts.map +1 -0
  112. package/dist/data-sources/evm-rpc-services/services/index.d.mts +3 -0
  113. package/dist/data-sources/evm-rpc-services/services/index.d.mts.map +1 -0
  114. package/dist/data-sources/evm-rpc-services/services/index.mjs +3 -0
  115. package/dist/data-sources/evm-rpc-services/services/index.mjs.map +1 -0
  116. package/dist/data-sources/evm-rpc-services/types/assets.cjs +3 -0
  117. package/dist/data-sources/evm-rpc-services/types/assets.cjs.map +1 -0
  118. package/dist/data-sources/evm-rpc-services/types/assets.d.cts +53 -0
  119. package/dist/data-sources/evm-rpc-services/types/assets.d.cts.map +1 -0
  120. package/dist/data-sources/evm-rpc-services/types/assets.d.mts +53 -0
  121. package/dist/data-sources/evm-rpc-services/types/assets.d.mts.map +1 -0
  122. package/dist/data-sources/evm-rpc-services/types/assets.mjs +2 -0
  123. package/dist/data-sources/evm-rpc-services/types/assets.mjs.map +1 -0
  124. package/dist/data-sources/evm-rpc-services/types/config.cjs +3 -0
  125. package/dist/data-sources/evm-rpc-services/types/config.cjs.map +1 -0
  126. package/dist/data-sources/evm-rpc-services/types/config.d.cts +18 -0
  127. package/dist/data-sources/evm-rpc-services/types/config.d.cts.map +1 -0
  128. package/dist/data-sources/evm-rpc-services/types/config.d.mts +18 -0
  129. package/dist/data-sources/evm-rpc-services/types/config.d.mts.map +1 -0
  130. package/dist/data-sources/evm-rpc-services/types/config.mjs +2 -0
  131. package/dist/data-sources/evm-rpc-services/types/config.mjs.map +1 -0
  132. package/dist/data-sources/evm-rpc-services/types/core.cjs +3 -0
  133. package/dist/data-sources/evm-rpc-services/types/core.cjs.map +1 -0
  134. package/dist/data-sources/evm-rpc-services/types/core.d.cts +19 -0
  135. package/dist/data-sources/evm-rpc-services/types/core.d.cts.map +1 -0
  136. package/dist/data-sources/evm-rpc-services/types/core.d.mts +19 -0
  137. package/dist/data-sources/evm-rpc-services/types/core.d.mts.map +1 -0
  138. package/dist/data-sources/evm-rpc-services/types/core.mjs +2 -0
  139. package/dist/data-sources/evm-rpc-services/types/core.mjs.map +1 -0
  140. package/dist/data-sources/evm-rpc-services/types/index.cjs +3 -0
  141. package/dist/data-sources/evm-rpc-services/types/index.cjs.map +1 -0
  142. package/dist/data-sources/evm-rpc-services/types/index.d.cts +7 -0
  143. package/dist/data-sources/evm-rpc-services/types/index.d.cts.map +1 -0
  144. package/dist/data-sources/evm-rpc-services/types/index.d.mts +7 -0
  145. package/dist/data-sources/evm-rpc-services/types/index.d.mts.map +1 -0
  146. package/dist/data-sources/evm-rpc-services/types/index.mjs +2 -0
  147. package/dist/data-sources/evm-rpc-services/types/index.mjs.map +1 -0
  148. package/dist/data-sources/evm-rpc-services/types/multicall.cjs +3 -0
  149. package/dist/data-sources/evm-rpc-services/types/multicall.cjs.map +1 -0
  150. package/dist/data-sources/evm-rpc-services/types/multicall.d.cts +24 -0
  151. package/dist/data-sources/evm-rpc-services/types/multicall.d.cts.map +1 -0
  152. package/dist/data-sources/evm-rpc-services/types/multicall.d.mts +24 -0
  153. package/dist/data-sources/evm-rpc-services/types/multicall.d.mts.map +1 -0
  154. package/dist/data-sources/evm-rpc-services/types/multicall.mjs +2 -0
  155. package/dist/data-sources/evm-rpc-services/types/multicall.mjs.map +1 -0
  156. package/dist/data-sources/evm-rpc-services/types/services.cjs +3 -0
  157. package/dist/data-sources/evm-rpc-services/types/services.cjs.map +1 -0
  158. package/dist/data-sources/evm-rpc-services/types/services.d.cts +74 -0
  159. package/dist/data-sources/evm-rpc-services/types/services.d.cts.map +1 -0
  160. package/dist/data-sources/evm-rpc-services/types/services.d.mts +74 -0
  161. package/dist/data-sources/evm-rpc-services/types/services.d.mts.map +1 -0
  162. package/dist/data-sources/evm-rpc-services/types/services.mjs +2 -0
  163. package/dist/data-sources/evm-rpc-services/types/services.mjs.map +1 -0
  164. package/dist/data-sources/evm-rpc-services/types/state.cjs +3 -0
  165. package/dist/data-sources/evm-rpc-services/types/state.cjs.map +1 -0
  166. package/dist/data-sources/evm-rpc-services/types/state.d.cts +52 -0
  167. package/dist/data-sources/evm-rpc-services/types/state.d.cts.map +1 -0
  168. package/dist/data-sources/evm-rpc-services/types/state.d.mts +52 -0
  169. package/dist/data-sources/evm-rpc-services/types/state.d.mts.map +1 -0
  170. package/dist/data-sources/evm-rpc-services/types/state.mjs +2 -0
  171. package/dist/data-sources/evm-rpc-services/types/state.mjs.map +1 -0
  172. package/dist/data-sources/evm-rpc-services/utils/batch.cjs +45 -0
  173. package/dist/data-sources/evm-rpc-services/utils/batch.cjs.map +1 -0
  174. package/dist/data-sources/evm-rpc-services/utils/batch.d.cts +28 -0
  175. package/dist/data-sources/evm-rpc-services/utils/batch.d.cts.map +1 -0
  176. package/dist/data-sources/evm-rpc-services/utils/batch.d.mts +28 -0
  177. package/dist/data-sources/evm-rpc-services/utils/batch.d.mts.map +1 -0
  178. package/dist/data-sources/evm-rpc-services/utils/batch.mjs +40 -0
  179. package/dist/data-sources/evm-rpc-services/utils/batch.mjs.map +1 -0
  180. package/dist/data-sources/evm-rpc-services/utils/index.cjs +7 -0
  181. package/dist/data-sources/evm-rpc-services/utils/index.cjs.map +1 -0
  182. package/dist/data-sources/evm-rpc-services/utils/index.d.cts +2 -0
  183. package/dist/data-sources/evm-rpc-services/utils/index.d.cts.map +1 -0
  184. package/dist/data-sources/evm-rpc-services/utils/index.d.mts +2 -0
  185. package/dist/data-sources/evm-rpc-services/utils/index.d.mts.map +1 -0
  186. package/dist/data-sources/evm-rpc-services/utils/index.mjs +2 -0
  187. package/dist/data-sources/evm-rpc-services/utils/index.mjs.map +1 -0
  188. package/dist/data-sources/index.cjs +33 -0
  189. package/dist/data-sources/index.cjs.map +1 -0
  190. package/dist/data-sources/index.d.cts +9 -0
  191. package/dist/data-sources/index.d.cts.map +1 -0
  192. package/dist/data-sources/index.d.mts +9 -0
  193. package/dist/data-sources/index.d.mts.map +1 -0
  194. package/dist/data-sources/index.mjs +15 -0
  195. package/dist/data-sources/index.mjs.map +1 -0
  196. package/dist/data-sources/initDataSources.cjs +215 -0
  197. package/dist/data-sources/initDataSources.cjs.map +1 -0
  198. package/dist/data-sources/initDataSources.d.cts +140 -0
  199. package/dist/data-sources/initDataSources.d.cts.map +1 -0
  200. package/dist/data-sources/initDataSources.d.mts +140 -0
  201. package/dist/data-sources/initDataSources.d.mts.map +1 -0
  202. package/dist/data-sources/initDataSources.mjs +210 -0
  203. package/dist/data-sources/initDataSources.mjs.map +1 -0
  204. package/dist/index.cjs +47 -0
  205. package/dist/index.cjs.map +1 -0
  206. package/dist/index.d.cts +21 -0
  207. package/dist/index.d.cts.map +1 -0
  208. package/dist/index.d.mts +21 -0
  209. package/dist/index.d.mts.map +1 -0
  210. package/dist/index.mjs +25 -0
  211. package/dist/index.mjs.map +1 -0
  212. package/dist/logger.cjs +7 -0
  213. package/dist/logger.cjs.map +1 -0
  214. package/dist/logger.d.cts +5 -0
  215. package/dist/logger.d.cts.map +1 -0
  216. package/dist/logger.d.mts +5 -0
  217. package/dist/logger.d.mts.map +1 -0
  218. package/dist/logger.mjs +4 -0
  219. package/dist/logger.mjs.map +1 -0
  220. package/dist/middlewares/DetectionMiddleware.cjs +101 -0
  221. package/dist/middlewares/DetectionMiddleware.cjs.map +1 -0
  222. package/dist/middlewares/DetectionMiddleware.d.cts +54 -0
  223. package/dist/middlewares/DetectionMiddleware.d.cts.map +1 -0
  224. package/dist/middlewares/DetectionMiddleware.d.mts +54 -0
  225. package/dist/middlewares/DetectionMiddleware.d.mts.map +1 -0
  226. package/dist/middlewares/DetectionMiddleware.mjs +97 -0
  227. package/dist/middlewares/DetectionMiddleware.mjs.map +1 -0
  228. package/dist/middlewares/index.cjs +6 -0
  229. package/dist/middlewares/index.cjs.map +1 -0
  230. package/dist/middlewares/index.d.cts +2 -0
  231. package/dist/middlewares/index.d.cts.map +1 -0
  232. package/dist/middlewares/index.d.mts +2 -0
  233. package/dist/middlewares/index.d.mts.map +1 -0
  234. package/dist/middlewares/index.mjs +2 -0
  235. package/dist/middlewares/index.mjs.map +1 -0
  236. package/dist/types.cjs +39 -0
  237. package/dist/types.cjs.map +1 -0
  238. package/dist/types.d.cts +433 -0
  239. package/dist/types.d.cts.map +1 -0
  240. package/dist/types.d.mts +433 -0
  241. package/dist/types.d.mts.map +1 -0
  242. package/dist/types.mjs +35 -0
  243. package/dist/types.mjs.map +1 -0
  244. package/dist/utils.cjs +28 -0
  245. package/dist/utils.cjs.map +1 -0
  246. package/dist/utils.d.cts +13 -0
  247. package/dist/utils.d.cts.map +1 -0
  248. package/dist/utils.d.mts +13 -0
  249. package/dist/utils.d.mts.map +1 -0
  250. package/dist/utils.mjs +24 -0
  251. package/dist/utils.mjs.map +1 -0
  252. package/package.json +93 -0
@@ -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