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

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 (250) hide show
  1. package/CHANGELOG.md +10 -0
  2. package/dist/AssetsController.cjs +1028 -61
  3. package/dist/AssetsController.cjs.map +1 -1
  4. package/dist/AssetsController.d.cts +229 -83
  5. package/dist/AssetsController.d.cts.map +1 -1
  6. package/dist/AssetsController.d.mts +229 -83
  7. package/dist/AssetsController.d.mts.map +1 -1
  8. package/dist/AssetsController.mjs +1024 -59
  9. package/dist/AssetsController.mjs.map +1 -1
  10. package/dist/data-sources/AbstractDataSource.cjs +103 -0
  11. package/dist/data-sources/AbstractDataSource.cjs.map +1 -0
  12. package/dist/data-sources/AbstractDataSource.d.cts +92 -0
  13. package/dist/data-sources/AbstractDataSource.d.cts.map +1 -0
  14. package/dist/data-sources/AbstractDataSource.d.mts +92 -0
  15. package/dist/data-sources/AbstractDataSource.d.mts.map +1 -0
  16. package/dist/data-sources/AbstractDataSource.mjs +99 -0
  17. package/dist/data-sources/AbstractDataSource.mjs.map +1 -0
  18. package/dist/data-sources/AccountsApiDataSource.cjs +421 -0
  19. package/dist/data-sources/AccountsApiDataSource.cjs.map +1 -0
  20. package/dist/data-sources/AccountsApiDataSource.d.cts +103 -0
  21. package/dist/data-sources/AccountsApiDataSource.d.cts.map +1 -0
  22. package/dist/data-sources/AccountsApiDataSource.d.mts +103 -0
  23. package/dist/data-sources/AccountsApiDataSource.d.mts.map +1 -0
  24. package/dist/data-sources/AccountsApiDataSource.mjs +416 -0
  25. package/dist/data-sources/AccountsApiDataSource.mjs.map +1 -0
  26. package/dist/data-sources/BackendWebsocketDataSource.cjs +388 -0
  27. package/dist/data-sources/BackendWebsocketDataSource.cjs.map +1 -0
  28. package/dist/data-sources/BackendWebsocketDataSource.d.cts +95 -0
  29. package/dist/data-sources/BackendWebsocketDataSource.d.cts.map +1 -0
  30. package/dist/data-sources/BackendWebsocketDataSource.d.mts +95 -0
  31. package/dist/data-sources/BackendWebsocketDataSource.d.mts.map +1 -0
  32. package/dist/data-sources/BackendWebsocketDataSource.mjs +383 -0
  33. package/dist/data-sources/BackendWebsocketDataSource.mjs.map +1 -0
  34. package/dist/data-sources/PriceDataSource.cjs +350 -0
  35. package/dist/data-sources/PriceDataSource.cjs.map +1 -0
  36. package/dist/data-sources/PriceDataSource.d.cts +153 -0
  37. package/dist/data-sources/PriceDataSource.d.cts.map +1 -0
  38. package/dist/data-sources/PriceDataSource.d.mts +153 -0
  39. package/dist/data-sources/PriceDataSource.d.mts.map +1 -0
  40. package/dist/data-sources/PriceDataSource.mjs +346 -0
  41. package/dist/data-sources/PriceDataSource.mjs.map +1 -0
  42. package/dist/data-sources/RpcDataSource.cjs +410 -0
  43. package/dist/data-sources/RpcDataSource.cjs.map +1 -0
  44. package/dist/data-sources/RpcDataSource.d.cts +154 -0
  45. package/dist/data-sources/RpcDataSource.d.cts.map +1 -0
  46. package/dist/data-sources/RpcDataSource.d.mts +154 -0
  47. package/dist/data-sources/RpcDataSource.d.mts.map +1 -0
  48. package/dist/data-sources/RpcDataSource.mjs +405 -0
  49. package/dist/data-sources/RpcDataSource.mjs.map +1 -0
  50. package/dist/data-sources/SnapDataSource.cjs +734 -0
  51. package/dist/data-sources/SnapDataSource.cjs.map +1 -0
  52. package/dist/data-sources/SnapDataSource.d.cts +217 -0
  53. package/dist/data-sources/SnapDataSource.d.cts.map +1 -0
  54. package/dist/data-sources/SnapDataSource.d.mts +217 -0
  55. package/dist/data-sources/SnapDataSource.d.mts.map +1 -0
  56. package/dist/data-sources/SnapDataSource.mjs +723 -0
  57. package/dist/data-sources/SnapDataSource.mjs.map +1 -0
  58. package/dist/data-sources/TokenDataSource.cjs +179 -0
  59. package/dist/data-sources/TokenDataSource.cjs.map +1 -0
  60. package/dist/data-sources/TokenDataSource.d.cts +62 -0
  61. package/dist/data-sources/TokenDataSource.d.cts.map +1 -0
  62. package/dist/data-sources/TokenDataSource.d.mts +62 -0
  63. package/dist/data-sources/TokenDataSource.d.mts.map +1 -0
  64. package/dist/data-sources/TokenDataSource.mjs +175 -0
  65. package/dist/data-sources/TokenDataSource.mjs.map +1 -0
  66. package/dist/data-sources/index.cjs +62 -0
  67. package/dist/data-sources/index.cjs.map +1 -0
  68. package/dist/data-sources/index.d.cts +9 -0
  69. package/dist/data-sources/index.d.cts.map +1 -0
  70. package/dist/data-sources/index.d.mts +9 -0
  71. package/dist/data-sources/index.d.mts.map +1 -0
  72. package/dist/data-sources/index.mjs +23 -0
  73. package/dist/data-sources/index.mjs.map +1 -0
  74. package/dist/data-sources/initDataSources.cjs +199 -0
  75. package/dist/data-sources/initDataSources.cjs.map +1 -0
  76. package/dist/data-sources/initDataSources.d.cts +123 -0
  77. package/dist/data-sources/initDataSources.d.cts.map +1 -0
  78. package/dist/data-sources/initDataSources.d.mts +123 -0
  79. package/dist/data-sources/initDataSources.d.mts.map +1 -0
  80. package/dist/data-sources/initDataSources.mjs +194 -0
  81. package/dist/data-sources/initDataSources.mjs.map +1 -0
  82. package/dist/data-sources/rpc-datasource/clients/MulticallClient.cjs +638 -0
  83. package/dist/data-sources/rpc-datasource/clients/MulticallClient.cjs.map +1 -0
  84. package/dist/data-sources/rpc-datasource/clients/MulticallClient.d.cts +47 -0
  85. package/dist/data-sources/rpc-datasource/clients/MulticallClient.d.cts.map +1 -0
  86. package/dist/data-sources/rpc-datasource/clients/MulticallClient.d.mts +47 -0
  87. package/dist/data-sources/rpc-datasource/clients/MulticallClient.d.mts.map +1 -0
  88. package/dist/data-sources/rpc-datasource/clients/MulticallClient.mjs +632 -0
  89. package/dist/data-sources/rpc-datasource/clients/MulticallClient.mjs.map +1 -0
  90. package/dist/data-sources/rpc-datasource/clients/index.cjs +8 -0
  91. package/dist/data-sources/rpc-datasource/clients/index.cjs.map +1 -0
  92. package/dist/data-sources/rpc-datasource/clients/index.d.cts +3 -0
  93. package/dist/data-sources/rpc-datasource/clients/index.d.cts.map +1 -0
  94. package/dist/data-sources/rpc-datasource/clients/index.d.mts +3 -0
  95. package/dist/data-sources/rpc-datasource/clients/index.d.mts.map +1 -0
  96. package/dist/data-sources/rpc-datasource/clients/index.mjs +2 -0
  97. package/dist/data-sources/rpc-datasource/clients/index.mjs.map +1 -0
  98. package/dist/data-sources/rpc-datasource/index.cjs +9 -0
  99. package/dist/data-sources/rpc-datasource/index.cjs.map +1 -0
  100. package/dist/data-sources/rpc-datasource/index.d.cts +4 -0
  101. package/dist/data-sources/rpc-datasource/index.d.cts.map +1 -0
  102. package/dist/data-sources/rpc-datasource/index.d.mts +4 -0
  103. package/dist/data-sources/rpc-datasource/index.d.mts.map +1 -0
  104. package/dist/data-sources/rpc-datasource/index.mjs +3 -0
  105. package/dist/data-sources/rpc-datasource/index.mjs.map +1 -0
  106. package/dist/data-sources/rpc-datasource/services/BalanceFetcher.cjs +167 -0
  107. package/dist/data-sources/rpc-datasource/services/BalanceFetcher.cjs.map +1 -0
  108. package/dist/data-sources/rpc-datasource/services/BalanceFetcher.d.cts +16 -0
  109. package/dist/data-sources/rpc-datasource/services/BalanceFetcher.d.cts.map +1 -0
  110. package/dist/data-sources/rpc-datasource/services/BalanceFetcher.d.mts +16 -0
  111. package/dist/data-sources/rpc-datasource/services/BalanceFetcher.d.mts.map +1 -0
  112. package/dist/data-sources/rpc-datasource/services/BalanceFetcher.mjs +163 -0
  113. package/dist/data-sources/rpc-datasource/services/BalanceFetcher.mjs.map +1 -0
  114. package/dist/data-sources/rpc-datasource/services/TokenDetector.cjs +173 -0
  115. package/dist/data-sources/rpc-datasource/services/TokenDetector.cjs.map +1 -0
  116. package/dist/data-sources/rpc-datasource/services/TokenDetector.d.cts +14 -0
  117. package/dist/data-sources/rpc-datasource/services/TokenDetector.d.cts.map +1 -0
  118. package/dist/data-sources/rpc-datasource/services/TokenDetector.d.mts +14 -0
  119. package/dist/data-sources/rpc-datasource/services/TokenDetector.d.mts.map +1 -0
  120. package/dist/data-sources/rpc-datasource/services/TokenDetector.mjs +169 -0
  121. package/dist/data-sources/rpc-datasource/services/TokenDetector.mjs.map +1 -0
  122. package/dist/data-sources/rpc-datasource/services/index.cjs +8 -0
  123. package/dist/data-sources/rpc-datasource/services/index.cjs.map +1 -0
  124. package/dist/data-sources/rpc-datasource/services/index.d.cts +3 -0
  125. package/dist/data-sources/rpc-datasource/services/index.d.cts.map +1 -0
  126. package/dist/data-sources/rpc-datasource/services/index.d.mts +3 -0
  127. package/dist/data-sources/rpc-datasource/services/index.d.mts.map +1 -0
  128. package/dist/data-sources/rpc-datasource/services/index.mjs +3 -0
  129. package/dist/data-sources/rpc-datasource/services/index.mjs.map +1 -0
  130. package/dist/data-sources/rpc-datasource/types/assets.cjs +3 -0
  131. package/dist/data-sources/rpc-datasource/types/assets.cjs.map +1 -0
  132. package/dist/data-sources/rpc-datasource/types/assets.d.cts +53 -0
  133. package/dist/data-sources/rpc-datasource/types/assets.d.cts.map +1 -0
  134. package/dist/data-sources/rpc-datasource/types/assets.d.mts +53 -0
  135. package/dist/data-sources/rpc-datasource/types/assets.d.mts.map +1 -0
  136. package/dist/data-sources/rpc-datasource/types/assets.mjs +2 -0
  137. package/dist/data-sources/rpc-datasource/types/assets.mjs.map +1 -0
  138. package/dist/data-sources/rpc-datasource/types/config.cjs +3 -0
  139. package/dist/data-sources/rpc-datasource/types/config.cjs.map +1 -0
  140. package/dist/data-sources/rpc-datasource/types/config.d.cts +18 -0
  141. package/dist/data-sources/rpc-datasource/types/config.d.cts.map +1 -0
  142. package/dist/data-sources/rpc-datasource/types/config.d.mts +18 -0
  143. package/dist/data-sources/rpc-datasource/types/config.d.mts.map +1 -0
  144. package/dist/data-sources/rpc-datasource/types/config.mjs +2 -0
  145. package/dist/data-sources/rpc-datasource/types/config.mjs.map +1 -0
  146. package/dist/data-sources/rpc-datasource/types/core.cjs +3 -0
  147. package/dist/data-sources/rpc-datasource/types/core.cjs.map +1 -0
  148. package/dist/data-sources/rpc-datasource/types/core.d.cts +19 -0
  149. package/dist/data-sources/rpc-datasource/types/core.d.cts.map +1 -0
  150. package/dist/data-sources/rpc-datasource/types/core.d.mts +19 -0
  151. package/dist/data-sources/rpc-datasource/types/core.d.mts.map +1 -0
  152. package/dist/data-sources/rpc-datasource/types/core.mjs +2 -0
  153. package/dist/data-sources/rpc-datasource/types/core.mjs.map +1 -0
  154. package/dist/data-sources/rpc-datasource/types/index.cjs +3 -0
  155. package/dist/data-sources/rpc-datasource/types/index.cjs.map +1 -0
  156. package/dist/data-sources/rpc-datasource/types/index.d.cts +7 -0
  157. package/dist/data-sources/rpc-datasource/types/index.d.cts.map +1 -0
  158. package/dist/data-sources/rpc-datasource/types/index.d.mts +7 -0
  159. package/dist/data-sources/rpc-datasource/types/index.d.mts.map +1 -0
  160. package/dist/data-sources/rpc-datasource/types/index.mjs +2 -0
  161. package/dist/data-sources/rpc-datasource/types/index.mjs.map +1 -0
  162. package/dist/data-sources/rpc-datasource/types/multicall.cjs +3 -0
  163. package/dist/data-sources/rpc-datasource/types/multicall.cjs.map +1 -0
  164. package/dist/data-sources/rpc-datasource/types/multicall.d.cts +24 -0
  165. package/dist/data-sources/rpc-datasource/types/multicall.d.cts.map +1 -0
  166. package/dist/data-sources/rpc-datasource/types/multicall.d.mts +24 -0
  167. package/dist/data-sources/rpc-datasource/types/multicall.d.mts.map +1 -0
  168. package/dist/data-sources/rpc-datasource/types/multicall.mjs +2 -0
  169. package/dist/data-sources/rpc-datasource/types/multicall.mjs.map +1 -0
  170. package/dist/data-sources/rpc-datasource/types/services.cjs +3 -0
  171. package/dist/data-sources/rpc-datasource/types/services.cjs.map +1 -0
  172. package/dist/data-sources/rpc-datasource/types/services.d.cts +74 -0
  173. package/dist/data-sources/rpc-datasource/types/services.d.cts.map +1 -0
  174. package/dist/data-sources/rpc-datasource/types/services.d.mts +74 -0
  175. package/dist/data-sources/rpc-datasource/types/services.d.mts.map +1 -0
  176. package/dist/data-sources/rpc-datasource/types/services.mjs +2 -0
  177. package/dist/data-sources/rpc-datasource/types/services.mjs.map +1 -0
  178. package/dist/data-sources/rpc-datasource/types/state.cjs +3 -0
  179. package/dist/data-sources/rpc-datasource/types/state.cjs.map +1 -0
  180. package/dist/data-sources/rpc-datasource/types/state.d.cts +67 -0
  181. package/dist/data-sources/rpc-datasource/types/state.d.cts.map +1 -0
  182. package/dist/data-sources/rpc-datasource/types/state.d.mts +67 -0
  183. package/dist/data-sources/rpc-datasource/types/state.d.mts.map +1 -0
  184. package/dist/data-sources/rpc-datasource/types/state.mjs +2 -0
  185. package/dist/data-sources/rpc-datasource/types/state.mjs.map +1 -0
  186. package/dist/data-sources/rpc-datasource/utils/batch.cjs +45 -0
  187. package/dist/data-sources/rpc-datasource/utils/batch.cjs.map +1 -0
  188. package/dist/data-sources/rpc-datasource/utils/batch.d.cts +28 -0
  189. package/dist/data-sources/rpc-datasource/utils/batch.d.cts.map +1 -0
  190. package/dist/data-sources/rpc-datasource/utils/batch.d.mts +28 -0
  191. package/dist/data-sources/rpc-datasource/utils/batch.d.mts.map +1 -0
  192. package/dist/data-sources/rpc-datasource/utils/batch.mjs +40 -0
  193. package/dist/data-sources/rpc-datasource/utils/batch.mjs.map +1 -0
  194. package/dist/data-sources/rpc-datasource/utils/index.cjs +7 -0
  195. package/dist/data-sources/rpc-datasource/utils/index.cjs.map +1 -0
  196. package/dist/data-sources/rpc-datasource/utils/index.d.cts +2 -0
  197. package/dist/data-sources/rpc-datasource/utils/index.d.cts.map +1 -0
  198. package/dist/data-sources/rpc-datasource/utils/index.d.mts +2 -0
  199. package/dist/data-sources/rpc-datasource/utils/index.d.mts.map +1 -0
  200. package/dist/data-sources/rpc-datasource/utils/index.mjs +2 -0
  201. package/dist/data-sources/rpc-datasource/utils/index.mjs.map +1 -0
  202. package/dist/index.cjs +70 -1
  203. package/dist/index.cjs.map +1 -1
  204. package/dist/index.d.cts +19 -1
  205. package/dist/index.d.cts.map +1 -1
  206. package/dist/index.d.mts +19 -1
  207. package/dist/index.d.mts.map +1 -1
  208. package/dist/index.mjs +31 -0
  209. package/dist/index.mjs.map +1 -1
  210. package/dist/logger.cjs +7 -0
  211. package/dist/logger.cjs.map +1 -0
  212. package/dist/logger.d.cts +5 -0
  213. package/dist/logger.d.cts.map +1 -0
  214. package/dist/logger.d.mts +5 -0
  215. package/dist/logger.d.mts.map +1 -0
  216. package/dist/logger.mjs +4 -0
  217. package/dist/logger.mjs.map +1 -0
  218. package/dist/middlewares/DetectionMiddleware.cjs +101 -0
  219. package/dist/middlewares/DetectionMiddleware.cjs.map +1 -0
  220. package/dist/middlewares/DetectionMiddleware.d.cts +54 -0
  221. package/dist/middlewares/DetectionMiddleware.d.cts.map +1 -0
  222. package/dist/middlewares/DetectionMiddleware.d.mts +54 -0
  223. package/dist/middlewares/DetectionMiddleware.d.mts.map +1 -0
  224. package/dist/middlewares/DetectionMiddleware.mjs +97 -0
  225. package/dist/middlewares/DetectionMiddleware.mjs.map +1 -0
  226. package/dist/middlewares/index.cjs +6 -0
  227. package/dist/middlewares/index.cjs.map +1 -0
  228. package/dist/middlewares/index.d.cts +2 -0
  229. package/dist/middlewares/index.d.cts.map +1 -0
  230. package/dist/middlewares/index.d.mts +2 -0
  231. package/dist/middlewares/index.d.mts.map +1 -0
  232. package/dist/middlewares/index.mjs +2 -0
  233. package/dist/middlewares/index.mjs.map +1 -0
  234. package/dist/types.cjs +39 -0
  235. package/dist/types.cjs.map +1 -0
  236. package/dist/types.d.cts +360 -0
  237. package/dist/types.d.cts.map +1 -0
  238. package/dist/types.d.mts +360 -0
  239. package/dist/types.d.mts.map +1 -0
  240. package/dist/types.mjs +35 -0
  241. package/dist/types.mjs.map +1 -0
  242. package/dist/utils.cjs +28 -0
  243. package/dist/utils.cjs.map +1 -0
  244. package/dist/utils.d.cts +13 -0
  245. package/dist/utils.d.cts.map +1 -0
  246. package/dist/utils.d.mts +13 -0
  247. package/dist/utils.d.mts.map +1 -0
  248. package/dist/utils.mjs +24 -0
  249. package/dist/utils.mjs.map +1 -0
  250. package/package.json +15 -2
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MulticallClient.mjs","sourceRoot":"","sources":["../../../../src/data-sources/rpc-datasource/clients/MulticallClient.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Hex } from '@metamask/utils';\nimport type { Abi } from 'viem';\nimport { decodeFunctionResult, encodeFunctionData } from 'viem';\n\nimport type {\n Address,\n BalanceOfRequest,\n BalanceOfResponse,\n ChainId,\n GetProviderFunction,\n Provider,\n} from '../types';\nimport { reduceInBatchesSerially } from '../utils';\n\n// =============================================================================\n// ABI DEFINITIONS\n// =============================================================================\n\n/**\n * Multicall3 contract ABI (subset for aggregate3 and getEthBalance).\n *\n * @see https://github.com/mds1/multicall\n */\nconst MULTICALL3_ABI = [\n {\n name: 'aggregate3',\n type: 'function',\n stateMutability: 'payable',\n inputs: [\n {\n name: 'calls',\n type: 'tuple[]',\n components: [\n { name: 'target', type: 'address' },\n { name: 'allowFailure', type: 'bool' },\n { name: 'callData', type: 'bytes' },\n ],\n },\n ],\n outputs: [\n {\n name: 'returnData',\n type: 'tuple[]',\n components: [\n { name: 'success', type: 'bool' },\n { name: 'returnData', type: 'bytes' },\n ],\n },\n ],\n },\n {\n name: 'getEthBalance',\n type: 'function',\n stateMutability: 'view',\n inputs: [{ name: 'addr', type: 'address' }],\n outputs: [{ name: 'balance', type: 'uint256' }],\n },\n] as const satisfies Abi;\n\n/**\n * ERC-20 ABI (subset for balanceOf).\n */\nconst ERC20_ABI = [\n {\n name: 'balanceOf',\n type: 'function',\n stateMutability: 'view',\n inputs: [{ name: 'account', type: 'address' }],\n outputs: [{ name: 'balance', type: 'uint256' }],\n },\n] as const satisfies Abi;\n\n// =============================================================================\n// CONSTANTS\n// =============================================================================\n\n/**\n * Zero address constant for native token.\n */\nconst ZERO_ADDRESS: Address =\n '0x0000000000000000000000000000000000000000' as Address;\n\n/**\n * Multicall3 contract addresses by chain ID.\n * Source: https://github.com/mds1/multicall/blob/main/deployments.json\n *\n * TODO: try to find service to use here instead of hardcoding the addresses\n */\nconst MULTICALL3_ADDRESS_BY_CHAIN: Record<Hex, Hex> = {\n '0x1': '0xcA11bde05977b3631167028862bE2a173976CA11',\n '0x2a': '0xcA11bde05977b3631167028862bE2a173976CA11',\n '0x4': '0xcA11bde05977b3631167028862bE2a173976CA11',\n '0x5': '0xcA11bde05977b3631167028862bE2a173976CA11',\n '0x3': '0xcA11bde05977b3631167028862bE2a173976CA11',\n '0xaa36a7': '0xcA11bde05977b3631167028862bE2a173976CA11',\n '0x4268': '0xcA11bde05977b3631167028862bE2a173976CA11',\n '0x5e9': '0xcA11bde05977b3631167028862bE2a173976CA11',\n '0x1b6e6': '0xcA11bde05977b3631167028862bE2a173976CA11',\n '0x18fc4a': '0xcA11bde05977b3631167028862bE2a173976CA11',\n '0xa': '0xcA11bde05977b3631167028862bE2a173976CA11',\n '0x45': '0xcA11bde05977b3631167028862bE2a173976CA11',\n '0x1a4': '0xcA11bde05977b3631167028862bE2a173976CA11',\n '0xaa37dc': '0xcA11bde05977b3631167028862bE2a173976CA11',\n '0xa4b1': '0xcA11bde05977b3631167028862bE2a173976CA11',\n '0xa4ba': '0xcA11bde05977b3631167028862bE2a173976CA11',\n '0x66eed': '0xcA11bde05977b3631167028862bE2a173976CA11',\n '0x66eee': '0xcA11bde05977b3631167028862bE2a173976CA11',\n '0x66eeb': '0xcA11bde05977b3631167028862bE2a173976CA11',\n '0x15f2249': '0xcA11bde05977b3631167028862bE2a173976CA11',\n '0x89': '0xcA11bde05977b3631167028862bE2a173976CA11',\n '0x13881': '0xcA11bde05977b3631167028862bE2a173976CA11',\n '0x13882': '0xcA11bde05977b3631167028862bE2a173976CA11',\n '0x44d': '0xca11bde05977b3631167028862be2a173976ca11',\n '0x5a2': '0xca11bde05977b3631167028862be2a173976ca11',\n '0x98a': '0xca11bde05977b3631167028862be2a173976ca11',\n '0x64': '0xcA11bde05977b3631167028862bE2a173976CA11',\n '0x27d8': '0xcA11bde05977b3631167028862bE2a173976CA11',\n '0xa86a': '0xcA11bde05977b3631167028862bE2a173976CA11',\n '0xa869': '0xcA11bde05977b3631167028862bE2a173976CA11',\n '0xfa2': '0xcA11bde05977b3631167028862bE2a173976CA11',\n '0xfa': '0xcA11bde05977b3631167028862bE2a173976CA11',\n '0xfaf0': '0xca11bde05977b3631167028862be2a173976ca11',\n '0x38': '0xcA11bde05977b3631167028862bE2a173976CA11',\n '0x61': '0xcA11bde05977b3631167028862bE2a173976CA11',\n '0x15eb': '0xcA11bde05977b3631167028862bE2a173976CA11',\n '0xcc': '0xcA11bde05977b3631167028862bE2a173976CA11',\n '0x504': '0xcA11bde05977b3631167028862bE2a173976CA11',\n '0x505': '0xcA11bde05977b3631167028862bE2a173976CA11',\n '0x507': '0xcA11bde05977b3631167028862bE2a173976CA11',\n '0x2a15c308d': '0xca11bde05977b3631167028862be2a173976ca11',\n '0x2a15c3083': '0xca11bde05977b3631167028862be2a173976ca11',\n '0x63564c40': '0xcA11bde05977b3631167028862bE2a173976CA11',\n '0x19': '0xcA11bde05977b3631167028862bE2a173976CA11',\n '0x152': '0xcA11bde05977b3631167028862bE2a173976CA11',\n '0x5535072': '0xcA11bde05977b3631167028862bE2a173976CA11',\n '0x6c1': '0xcA11bde05977b3631167028862bE2a173976CA11',\n '0x7a': '0xcA11bde05977b3631167028862bE2a173976CA11',\n '0xe': '0xcA11bde05977b3631167028862bE2a173976CA11',\n '0x13': '0xcA11bde05977b3631167028862bE2a173976CA11',\n '0x10': '0xcA11bde05977b3631167028862bE2a173976CA11',\n '0x72': '0xcA11bde05977b3631167028862bE2a173976CA11',\n '0x120': '0xcA11bde05977b3631167028862bE2a173976CA11',\n '0x4e454152': '0xcA11bde05977b3631167028862bE2a173976CA11',\n '0x250': '0xcA11bde05977b3631167028862bE2a173976CA11',\n '0x5c2359': '0xcA11bde05977b3631167028862bE2a173976CA11',\n '0xec0': '0xcA11bde05977b3631167028862bE2a173976CA11',\n '0x42': '0xcA11bde05977b3631167028862bE2a173976CA11',\n '0x80': '0xcA11bde05977b3631167028862bE2a173976CA11',\n '0x440': '0xcA11bde05977b3631167028862bE2a173976CA11',\n '0x257': '0xcA11bde05977b3631167028862bE2a173976CA11',\n '0xe9fe': '0xcA11bde05977b3631167028862bE2a173976CA11',\n '0xd3a0': '0xcA11bde05977b3631167028862bE2a173976CA11',\n '0x84444': '0xcA11bde05977b3631167028862bE2a173976CA11',\n '0x1e': '0xcA11bde05977b3631167028862bE2a173976CA11',\n '0x1f': '0xcA11bde05977b3631167028862bE2a173976CA11',\n '0x2329': '0xcA11bde05977b3631167028862bE2a173976CA11',\n '0x2328': '0xcA11bde05977b3631167028862bE2a173976CA11',\n '0x6c': '0xcA11bde05977b3631167028862bE2a173976CA11',\n '0x12': '0xcA11bde05977b3631167028862bE2a173976CA11',\n '0xa516': '0xcA11bde05977b3631167028862bE2a173976CA11',\n '0x5afe': '0xcA11bde05977b3631167028862bE2a173976CA11',\n '0xa4ec': '0xcA11bde05977b3631167028862bE2a173976CA11',\n '0xaef3': '0xcA11bde05977b3631167028862bE2a173976CA11',\n '0x116ea': '0xcA11bde05977b3631167028862bE2a173976CA11',\n '0x116e9': '0xcA11bde05977b3631167028862bE2a173976CA11',\n '0x2019': '0xcA11bde05977b3631167028862bE2a173976CA11',\n '0x3e9': '0xca11bde05977b3631167028862be2a173976ca11',\n '0x7d1': '0xcA11bde05977b3631167028862bE2a173976CA11',\n '0x141': '0xcA11bde05977b3631167028862bE2a173976CA11',\n '0x6a': '0xcA11bde05977b3631167028862bE2a173976CA11',\n '0x28': '0xcA11bde05977b3631167028862bE2a173976CA11',\n '0x4d2': '0xcA11bde05977b3631167028862bE2a173976CA11',\n '0x1e14': '0xcA11bde05977b3631167028862bE2a173976CA11',\n '0x1e15': '0xcA11bde05977b3631167028862bE2a173976CA11',\n '0x1251': '0xcA11bde05977b3631167028862bE2a173976CA11',\n '0x7f08': '0xcA11bde05977b3631167028862bE2a173976CA11',\n '0x8ae': '0xcA11bde05977b3631167028862bE2a173976CA11',\n '0x138b': '0xcA11bde05977b3631167028862bE2a173976CA11',\n '0x1389': '0xcA11bde05977b3631167028862bE2a173976CA11',\n '0x1388': '0xcA11bde05977b3631167028862bE2a173976CA11',\n '0x1f92': '0xcA11bde05977b3631167028862bE2a173976CA11',\n '0x14a33': '0xca11bde05977b3631167028862be2a173976ca11',\n '0x14a34': '0xcA11bde05977b3631167028862bE2a173976CA11',\n '0x2105': '0xca11bde05977b3631167028862be2a173976ca11',\n '0x936': '0xcA11bde05977b3631167028862bE2a173976CA11',\n '0xff': '0xcA11bde05977b3631167028862bE2a173976CA11',\n '0x46a': '0xcA11bde05977b3631167028862bE2a173976CA11',\n '0x46b': '0xcA11bde05977b3631167028862bE2a173976CA11',\n '0x8a': '0xcA11bde05977b3631167028862bE2a173976CA11',\n '0x14f': '0xcA11bde05977b3631167028862bE2a173976CA11',\n '0xd2af': '0xcA11bde05977b3631167028862bE2a173976CA11',\n '0xe9ac0ce': '0xcA11bde05977b3631167028862bE2a173976CA11',\n '0xe705': '0xca11bde05977b3631167028862be2a173976ca11',\n '0xe704': '0xcA11bde05977b3631167028862bE2a173976CA11',\n '0xe708': '0xcA11bde05977b3631167028862bE2a173976CA11',\n '0x2b6f': '0xcA11bde05977b3631167028862bE2a173976CA11',\n '0x39': '0xcA11bde05977b3631167028862bE2a173976CA11',\n '0x23a': '0xcA11bde05977b3631167028862bE2a173976CA11',\n '0x1644': '0xcA11bde05977b3631167028862bE2a173976CA11',\n '0xdea8': '0xcA11bde05977b3631167028862bE2a173976CA11',\n '0x3af': '0xcA11bde05977b3631167028862bE2a173976CA11',\n '0x171': '0xcA11bde05977b3631167028862bE2a173976CA11',\n '0x3e7': '0xcA11bde05977b3631167028862bE2a173976CA11',\n '0x76adf1': '0xcA11bde05977b3631167028862bE2a173976CA11',\n '0x3b9ac9ff': '0xcA11bde05977b3631167028862bE2a173976CA11',\n '0x2c': '0xca11bde05977b3631167028862be2a173976ca11',\n '0x2e': '0xca11bde05977b3631167028862be2a173976ca11',\n '0x15b3': '0xcA11bde05977b3631167028862bE2a173976CA11',\n '0x82751': '0xcA11bde05977b3631167028862bE2a173976CA11',\n '0x8274f': '0xca11bde05977b3631167028862be2a173976ca11',\n '0x82750': '0xcA11bde05977b3631167028862bE2a173976CA11',\n '0x96f': '0xcA11bde05977b3631167028862bE2a173976CA11',\n '0x3cc5': '0xcA11bde05977b3631167028862bE2a173976CA11',\n '0x4571': '0xcA11bde05977b3631167028862bE2a173976CA11',\n '0xe99': '0xcA11bde05977b3631167028862bE2a173976CA11',\n '0x7d0': '0xcA11bde05977b3631167028862bE2a173976CA11',\n '0x1297': '0xcA11bde05977b3631167028862bE2a173976CA11',\n '0x1d5e': '0xcA11bde05977b3631167028862bE2a173976CA11',\n '0x3a14269b': '0xcA11bde05977b3631167028862bE2a173976CA11',\n '0x561bf78b': '0xcA11bde05977b3631167028862bE2a173976CA11',\n '0x235ddd0': '0xcA11bde05977b3631167028862bE2a173976CA11',\n '0x3cd156dc': '0xcA11bde05977b3631167028862bE2a173976CA11',\n '0x5d456c62': '0xcA11bde05977b3631167028862bE2a173976CA11',\n '0x79f99296': '0xcA11bde05977b3631167028862bE2a173976CA11',\n '0x585eb4b1': '0xcA11bde05977b3631167028862bE2a173976CA11',\n '0x507aaa2a': '0xcA11bde05977b3631167028862bE2a173976CA11',\n '0x1fc3': '0xcA11bde05977b3631167028862bE2a173976CA11',\n '0x32d': '0xcA11bde05977b3631167028862bE2a173976CA11',\n '0x8a73': '0xcA11bde05977b3631167028862bE2a173976CA11',\n '0x8a72': '0xcA11bde05977b3631167028862bE2a173976CA11',\n '0x8a71': '0xcA11bde05977b3631167028862bE2a173976CA11',\n '0xe9ac0d6': '0xca11bde05977b3631167028862be2a173976ca11',\n '0x1069': '0xcA11bde05977b3631167028862bE2a173976CA11',\n '0x7e5': '0xcA11bde05977b3631167028862bE2a173976CA11',\n '0x53': '0xca11bde05977b3631167028862be2a173976ca11',\n '0x52': '0xca11bde05977b3631167028862be2a173976ca11',\n '0xe298': '0xcA11bde05977b3631167028862bE2a173976CA11',\n '0x1a8': '0xcA11bde05977b3631167028862bE2a173976CA11',\n '0x94': '0xcA11bde05977b3631167028862bE2a173976CA11',\n '0x2c6': '0xcA11bde05977b3631167028862bE2a173976CA11',\n '0x2803': '0xcA11bde05977b3631167028862bE2a173976CA11',\n '0x2802': '0xcA11bde05977b3631167028862bE2a173976CA11',\n '0xa9': '0xcA11bde05977b3631167028862bE2a173976CA11',\n '0x28c5f': '0xcA11bde05977b3631167028862bE2a173976CA11',\n '0x28c60': '0xcA11bde05977b3631167028862bE2a173976CA11',\n '0x13a': '0xcA11bde05977b3631167028862bE2a173976CA11',\n '0x4cb2f': '0xdbfa261cd7d17bb40479a0493ad6c0fee435859e',\n '0x7f93': '0xcA11bde05977b3631167028862bE2a173976CA11',\n '0xb660': '0xcA11bde05977b3631167028862bE2a173976CA11',\n '0xb02113d3f': '0xcA11bde05977b3631167028862bE2a173976CA11',\n '0xdad': '0xcA11bde05977b3631167028862bE2a173976CA11',\n '0xdae': '0xcA11bde05977b3631167028862bE2a173976CA11',\n '0x15b38': '0xcA11bde05977b3631167028862bE2a173976CA11',\n '0x15b32': '0xcA11bde05977b3631167028862bE2a173976CA11',\n '0x45c': '0xcA11bde05977b3631167028862bE2a173976CA11',\n '0x45b': '0xcA11bde05977b3631167028862bE2a173976CA11',\n '0x3d': '0xcA11bde05977b3631167028862bE2a173976CA11',\n '0x41a6ace': '0xcA11bde05977b3631167028862bE2a173976CA11',\n '0xa729': '0xcA11bde05977b3631167028862bE2a173976CA11',\n '0x1f47b': '0xcA11bde05977b3631167028862bE2a173976CA11',\n '0x1b59': '0xca11bde05977b3631167028862be2a173976ca11',\n '0x1b58': '0xcA11bde05977b3631167028862bE2a173976CA11',\n '0xc3': '0xca11bde05977b3631167028862be2a173976ca11',\n '0x16fd8': '0xcA11bde05977b3631167028862bE2a173976CA11',\n '0xc7': '0xca11bde05977b3631167028862be2a173976ca11',\n '0x405': '0xca11bde05977b3631167028862be2a173976ca11',\n '0x334': '0xcA11bde05977b3631167028862bE2a173976CA11',\n '0x1ce': '0xca11bde05977b3631167028862be2a173976ca11',\n '0x1cf': '0xca11bde05977b3631167028862be2a173976ca11',\n '0xa70e': '0xcA11bde05977b3631167028862bE2a173976CA11',\n '0x868b': '0xcA11bde05977b3631167028862bE2a173976CA11',\n '0xa0c71fd': '0xcA11bde05977b3631167028862bE2a173976CA11',\n '0x13e31': '0xcA11bde05977b3631167028862bE2a173976CA11',\n '0xa1337': '0xcA11bde05977b3631167028862bE2a173976CA11',\n '0x1f2b': '0xcA11bde05977b3631167028862bE2a173976CA11',\n '0xf63': '0xcA11bde05977b3631167028862bE2a173976CA11',\n '0x144': '0xF9cda624FBC7e059355ce98a31693d299FACd963',\n '0x118': '0xF9cda624FBC7e059355ce98a31693d299FACd963',\n '0x12c': '0xF9cda624FBC7e059355ce98a31693d299FACd963',\n '0x18995f': '0xF9cda624FBC7e059355ce98a31693d299FACd963',\n '0x2b74': '0xF9cda624FBC7e059355ce98a31693d299FACd963',\n '0xfc': '0xcA11bde05977b3631167028862bE2a173976CA11',\n '0x9da': '0xcA11bde05977b3631167028862bE2a173976CA11',\n '0x137': '0xcA11bde05977b3631167028862bE2a173976CA11',\n '0x13ed': '0xcA11bde05977b3631167028862bE2a173976CA11',\n '0x24b1': '0xcA11bde05977b3631167028862bE2a173976CA11',\n '0xba9302': '0xcA11bde05977b3631167028862bE2a173976CA11',\n '0x7c8': '0xcA11bde05977b3631167028862bE2a173976CA11',\n '0x138d5': '0xcA11bde05977b3631167028862bE2a173976CA11',\n '0x6d': '0xcA11bde05977b3631167028862bE2a173976CA11',\n '0x343b': '0xcA11bde05977b3631167028862bE2a173976CA11',\n '0x34a1': '0xcA11bde05977b3631167028862bE2a173976CA11',\n '0x3109': '0xcA11bde05977b3631167028862bE2a173976CA11',\n '0x91b': '0xcA11bde05977b3631167028862bE2a173976CA11',\n '0xa96': '0xcA11bde05977b3631167028862bE2a173976CA11',\n '0x22c3': '0xcA11bde05977b3631167028862bE2a173976CA11',\n '0x2be3': '0xcA11bde05977b3631167028862bE2a173976CA11',\n '0xbf03': '0xcA11bde05977b3631167028862bE2a173976CA11',\n '0x1b254': '0xcA11bde05977b3631167028862bE2a173976CA11',\n '0xa7b14': '0xcA11bde05977b3631167028862bE2a173976CA11',\n '0x2276': '0xcA11bde05977b3631167028862bE2a173976CA11',\n '0x1b9e': '0xcA11bde05977b3631167028862bE2a173976CA11',\n '0x6a63bb8': '0xcA11bde05977b3631167028862bE2a173976CA11',\n '0x15af3': '0xcA11bde05977b3631167028862bE2a173976CA11',\n '0x15af1': '0xcA11bde05977b3631167028862bE2a173976CA11',\n '0xae3f3': '0xcA11bde05977b3631167028862bE2a173976CA11',\n '0x531': '0xcA11bde05977b3631167028862bE2a173976CA11',\n '0x28c61': '0xcA11bde05977b3631167028862bE2a173976CA11',\n '0x28c58': '0xca11bde05977b3631167028862be2a173976ca11',\n '0x1d88': '0xcA11bde05977b3631167028862bE2a173976CA11',\n '0x5b9b': '0xcA11bde05977b3631167028862bE2a173976CA11',\n '0x4c7e1': '0xcA11bde05977b3631167028862bE2a173976CA11',\n '0xa53b': '0xcA11bde05977b3631167028862bE2a173976CA11',\n '0x1a2b': '0xcA11bde05977b3631167028862bE2a173976CA11',\n '0x406': '0xca11bde05977b3631167028862be2a173976ca11',\n '0x2cef': '0xcA11bde05977b3631167028862bE2a173976CA11',\n '0x18b2': '0xca11bde05977b3631167028862be2a173976ca11',\n '0x182a9': '0xcA11bde05977b3631167028862bE2a173976CA11',\n '0xc4': '0xcA11bde05977b3631167028862bE2a173976CA11',\n '0xfdd': '0xcA11bde05977b3631167028862bE2a173976CA11',\n '0xfde': '0xcA11bde05977b3631167028862bE2a173976CA11',\n '0x99c0a0f': '0xca11bde05977b3631167028862be2a173976ca11',\n '0x22cf': '0xcA11bde05977b3631167028862bE2a173976CA11',\n '0x310c5': '0xca11bde05977b3631167028862be2a173976ca11',\n '0x46f': '0xcA11bde05977b3631167028862bE2a173976CA11',\n '0x659': '0xca11bde05977b3631167028862be2a173976ca11',\n '0x139c968f9': '0xcA11bde05977b3631167028862bE2a173976CA11',\n '0xed88': '0xcA11bde05977b3631167028862bE2a173976CA11',\n '0xd036': '0xcA11bde05977b3631167028862bE2a173976CA11',\n '0x1f3': '0xcA11bde05977b3631167028862bE2a173976CA11',\n '0x31bf8c3': '0xcA11bde05977b3631167028862bE2a173976CA11',\n '0x1cbc67bfdc': '0xcA11bde05977b3631167028862bE2a173976CA11',\n '0x98967f': '0xcA11bde05977b3631167028862bE2a173976CA11',\n '0x4f588': '0xcA11bde05977b3631167028862bE2a173976CA11',\n '0x16db': '0xca11bde05977b3631167028862be2a173976ca11',\n '0x3a': '0xca11bde05977b3631167028862be2a173976ca11',\n '0x59': '0xca11bde05977b3631167028862be2a173976ca11',\n '0x1e0': '0xcA11bde05977b3631167028862bE2a173976CA11',\n '0x2eb': '0xcA11bde05977b3631167028862bE2a173976CA11',\n '0x221': '0xcA11bde05977b3631167028862bE2a173976CA11',\n '0x6f0': '0xcA11bde05977b3631167028862bE2a173976CA11',\n '0xa867': '0xcA11bde05977b3631167028862bE2a173976CA11',\n '0x2611': '0xcA11bde05977b3631167028862bE2a173976CA11',\n '0xa6': '0xcA11bde05977b3631167028862bE2a173976CA11',\n '0x15f900': '0x6B5eFbC0C82eBb26CA13a4F11836f36Fc6fdBC5D',\n '0x74c': '0xcA11bde05977b3631167028862bE2a173976CA11',\n '0x407b': '0x90a2377F233E3461BACa6080d4837837d8762927',\n '0xa3c3': '0xcA11bde05977b3631167028862bE2a173976CA11',\n '0xab5': '0xF9cda624FBC7e059355ce98a31693d299FACd963',\n '0x138de': '0xcA11bde05977b3631167028862bE2a173976CA11',\n '0x18c6': '0xcA11bde05977b3631167028862bE2a173976CA11',\n '0x8173': '0xcA11bde05977b3631167028862bE2a173976CA11',\n '0x2ba': '0xcA11bde05977b3631167028862bE2a173976CA11',\n '0x279f': '0xcA11bde05977b3631167028862bE2a173976CA11',\n '0xb67d2': '0xcA11bde05977b3631167028862bE2a173976CA11',\n '0xe8': '0xcA11bde05977b3631167028862bE2a173976CA11',\n '0x18232': '0xcA11bde05977b3631167028862bE2a173976CA11',\n '0x8f': '0xcA11bde05977b3631167028862bE2a173976CA11',\n '0x32': '0x0B1795ccA8E4eC4df02346a082df54D437F8D9aF',\n '0x18c7': '0xcA11bde05977b3631167028862bE2a173976CA11',\n '0x10e6': '0xcA11bde05977b3631167028862bE2a173976CA11',\n '0x10b3e': '0x99423C88EB5723A590b4C644426069042f137B9e',\n};\n\n// =============================================================================\n// ENCODING/DECODING UTILITIES (using viem)\n// =============================================================================\n\n/**\n * Encode a balanceOf call for an ERC-20 token.\n *\n * @param accountAddress - The account address.\n * @returns The encoded call data.\n */\nfunction encodeBalanceOf(accountAddress: Address): Hex {\n return encodeFunctionData({\n abi: ERC20_ABI,\n functionName: 'balanceOf',\n args: [accountAddress],\n });\n}\n\n/**\n * Encode a getEthBalance call for native token via Multicall3.\n *\n * @param accountAddress - The account address.\n * @returns The encoded call data.\n */\nfunction encodeGetEthBalance(accountAddress: Address): Hex {\n return encodeFunctionData({\n abi: MULTICALL3_ABI,\n functionName: 'getEthBalance',\n args: [accountAddress],\n });\n}\n\n/**\n * Encode a Multicall3 aggregate3 call.\n *\n * @param calls - Array of calls with target, allowFailure, and callData.\n * @returns The encoded aggregate3 call data.\n */\nexport function encodeAggregate3(\n calls: readonly { target: Address; allowFailure: boolean; callData: Hex }[],\n): Hex {\n return encodeFunctionData({\n abi: MULTICALL3_ABI,\n functionName: 'aggregate3',\n args: [\n calls.map((call) => ({\n target: call.target,\n allowFailure: call.allowFailure,\n callData: call.callData,\n })),\n ],\n });\n}\n\n/**\n * Decode the response from aggregate3.\n * Returns array of (success, returnData) tuples.\n *\n * @param data - The raw response data.\n * @param callCount - Number of calls made (used for validation).\n * @returns Array of success and return data.\n */\nexport function decodeAggregate3Response(\n data: Hex,\n callCount: number,\n): { success: boolean; returnData: Hex }[] {\n const decoded = decodeFunctionResult({\n abi: MULTICALL3_ABI,\n functionName: 'aggregate3',\n data,\n });\n\n // decoded is an array of { success: boolean, returnData: `0x${string}` }\n const results = decoded as readonly {\n success: boolean;\n returnData: Hex;\n }[];\n\n if (results.length !== callCount) {\n throw new Error(`Expected ${callCount} results, got ${results.length}`);\n }\n\n return results.map((result) => ({\n success: result.success,\n returnData: result.returnData,\n }));\n}\n\n/**\n * Decode a uint256 balance from return data.\n *\n * @param data - The hex return data.\n * @returns The decoded balance as a string.\n */\nfunction decodeUint256(data: Hex): string {\n const hexData = data.slice(2);\n if (hexData.length === 0) {\n return '0';\n }\n // Take first 64 chars (32 bytes) for uint256\n const normalizedHex = hexData.length > 64 ? hexData.slice(0, 64) : hexData;\n return BigInt(`0x${normalizedHex}`).toString();\n}\n\n// =============================================================================\n// MULTICALL CLIENT\n// =============================================================================\n\nexport type MulticallClientConfig = {\n maxCallsPerBatch?: number;\n timeoutMs?: number;\n};\n\n/**\n * Client for batching RPC calls using Multicall3.\n * Falls back to individual calls on chains without Multicall3 support.\n */\nexport class MulticallClient {\n readonly #getProvider: GetProviderFunction;\n\n readonly #config: Required<MulticallClientConfig>;\n\n constructor(\n getProvider: GetProviderFunction,\n config?: MulticallClientConfig,\n ) {\n this.#getProvider = getProvider;\n // Use default values for invalid (non-positive) batch sizes to prevent\n // infinite loops or errors in divideIntoBatches\n const maxCallsPerBatch =\n config?.maxCallsPerBatch !== undefined && config.maxCallsPerBatch > 0\n ? config.maxCallsPerBatch\n : 300;\n const timeoutMs =\n config?.timeoutMs !== undefined && config.timeoutMs > 0\n ? config.timeoutMs\n : 30000;\n this.#config = {\n maxCallsPerBatch,\n timeoutMs,\n };\n }\n\n /**\n * Fetch ERC-20 and native token balances using Multicall3.\n * Falls back to individual RPC calls on unsupported chains.\n *\n * @param chainId - The chain ID.\n * @param requests - Array of balance requests.\n * @returns Array of balance responses.\n */\n async batchBalanceOf(\n chainId: ChainId,\n requests: BalanceOfRequest[],\n ): Promise<BalanceOfResponse[]> {\n if (requests.length === 0) {\n return [];\n }\n\n const multicallAddress = MULTICALL3_ADDRESS_BY_CHAIN[chainId];\n const provider = this.#getProvider(chainId);\n\n // If Multicall3 is not supported, fall back to individual calls\n if (!multicallAddress) {\n return this.#fallbackBatchBalanceOf(provider, requests);\n }\n\n // Use Multicall3\n return this.#multicallBatchBalanceOf(provider, multicallAddress, requests);\n }\n\n /**\n * Fetch balances using Multicall3 aggregate3.\n *\n * @param provider - The RPC provider.\n * @param multicallAddress - The Multicall3 contract address.\n * @param requests - Array of balance requests.\n * @returns Array of balance responses.\n */\n async #multicallBatchBalanceOf(\n provider: Provider,\n multicallAddress: Hex,\n requests: BalanceOfRequest[],\n ): Promise<BalanceOfResponse[]> {\n const batchSize = this.#config.maxCallsPerBatch;\n\n const responses = await reduceInBatchesSerially<\n BalanceOfRequest,\n BalanceOfResponse[]\n >({\n values: requests,\n batchSize,\n initialResult: [],\n eachBatch: async (workingResult, batch) => {\n try {\n // Build aggregate3 calls\n const calls = batch.map((req) => {\n const isNative = req.tokenAddress === ZERO_ADDRESS;\n const target = isNative ? multicallAddress : req.tokenAddress;\n return {\n target,\n allowFailure: true,\n callData: isNative\n ? encodeGetEthBalance(req.accountAddress)\n : encodeBalanceOf(req.accountAddress),\n };\n });\n\n // Encode and send aggregate3 call\n const callData = encodeAggregate3(calls);\n const result = await provider.call({\n to: multicallAddress,\n data: callData,\n });\n\n // Decode response\n const decoded = decodeAggregate3Response(result as Hex, batch.length);\n\n // Map results back to responses\n for (let i = 0; i < batch.length; i++) {\n const { tokenAddress, accountAddress } = batch[i];\n const { success, returnData } = decoded[i];\n\n if (success && returnData && returnData.length > 2) {\n workingResult.push({\n tokenAddress,\n accountAddress,\n success: true,\n balance: decodeUint256(returnData),\n });\n } else {\n workingResult.push({\n tokenAddress,\n accountAddress,\n success: false,\n });\n }\n }\n } catch {\n // On aggregate3 error, fall back to individual calls for this batch.\n // #fetchSingleBalance never rejects - it catches all errors internally\n // and returns a failed response, so we use Promise.all here.\n const fallbackResults = await Promise.all(\n batch.map((req) => this.#fetchSingleBalance(provider, req)),\n );\n\n for (const result of fallbackResults) {\n workingResult.push(result);\n }\n }\n\n return workingResult;\n },\n });\n\n return responses;\n }\n\n /**\n * Fallback: fetch balances using individual RPC calls.\n *\n * @param provider - The RPC provider.\n * @param requests - Array of balance requests.\n * @returns Array of balance responses.\n */\n async #fallbackBatchBalanceOf(\n provider: Provider,\n requests: BalanceOfRequest[],\n ): Promise<BalanceOfResponse[]> {\n // Use smaller batch size for parallel individual calls to avoid overwhelming RPC\n const batchSize = Math.min(this.#config.maxCallsPerBatch, 50);\n\n const responses = await reduceInBatchesSerially<\n BalanceOfRequest,\n BalanceOfResponse[]\n >({\n values: requests,\n batchSize,\n initialResult: [],\n eachBatch: async (workingResult, batch) => {\n // #fetchSingleBalance never rejects - it catches all errors internally\n // and returns a failed response, so we use Promise.all here.\n const batchResults = await Promise.all(\n batch.map((req) => this.#fetchSingleBalance(provider, req)),\n );\n\n for (const result of batchResults) {\n workingResult.push(result);\n }\n\n return workingResult;\n },\n });\n\n return responses;\n }\n\n /**\n * Fetch a single token balance (fallback method).\n *\n * @param provider - The RPC provider.\n * @param request - The balance request.\n * @returns The balance response.\n */\n async #fetchSingleBalance(\n provider: Provider,\n request: BalanceOfRequest,\n ): Promise<BalanceOfResponse> {\n // Destructure inside try block to ensure any errors are caught\n // and don't cause promise rejections that bypass error handling\n try {\n const { tokenAddress, accountAddress } = request;\n\n // Native token (zero address)\n if (tokenAddress === ZERO_ADDRESS) {\n const balance = await provider.getBalance(accountAddress);\n return {\n tokenAddress,\n accountAddress,\n success: true,\n balance: balance.toString(),\n };\n }\n\n // ERC-20 token\n const callData = encodeBalanceOf(accountAddress);\n const result = await provider.call({\n to: tokenAddress,\n data: callData,\n });\n\n const balance = decodeUint256(result as Hex);\n return {\n tokenAddress,\n accountAddress,\n success: true,\n balance,\n };\n } catch {\n return {\n tokenAddress: request.tokenAddress,\n accountAddress: request.accountAddress,\n success: false,\n };\n }\n }\n}\n"]}
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MulticallClient = exports.encodeAggregate3 = exports.decodeAggregate3Response = void 0;
4
+ var MulticallClient_1 = require("./MulticallClient.cjs");
5
+ Object.defineProperty(exports, "decodeAggregate3Response", { enumerable: true, get: function () { return MulticallClient_1.decodeAggregate3Response; } });
6
+ Object.defineProperty(exports, "encodeAggregate3", { enumerable: true, get: function () { return MulticallClient_1.encodeAggregate3; } });
7
+ Object.defineProperty(exports, "MulticallClient", { enumerable: true, get: function () { return MulticallClient_1.MulticallClient; } });
8
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.cjs","sourceRoot":"","sources":["../../../../src/data-sources/rpc-datasource/clients/index.ts"],"names":[],"mappings":";;;AAAA,yDAK2B;AAJzB,2HAAA,wBAAwB,OAAA;AACxB,mHAAA,gBAAgB,OAAA;AAChB,kHAAA,eAAe,OAAA","sourcesContent":["export {\n decodeAggregate3Response,\n encodeAggregate3,\n MulticallClient,\n type MulticallClientConfig,\n} from './MulticallClient';\n\n// Re-export provider types from types module\nexport type { GetProviderFunction, Provider } from '../types';\n"]}
@@ -0,0 +1,3 @@
1
+ export { decodeAggregate3Response, encodeAggregate3, MulticallClient, type MulticallClientConfig, } from "./MulticallClient.cjs";
2
+ export type { GetProviderFunction, Provider } from "../types/index.cjs";
3
+ //# sourceMappingURL=index.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.cts","sourceRoot":"","sources":["../../../../src/data-sources/rpc-datasource/clients/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,wBAAwB,EACxB,gBAAgB,EAChB,eAAe,EACf,KAAK,qBAAqB,GAC3B,8BAA0B;AAG3B,YAAY,EAAE,mBAAmB,EAAE,QAAQ,EAAE,2BAAiB"}
@@ -0,0 +1,3 @@
1
+ export { decodeAggregate3Response, encodeAggregate3, MulticallClient, type MulticallClientConfig, } from "./MulticallClient.mjs";
2
+ export type { GetProviderFunction, Provider } from "../types/index.mjs";
3
+ //# sourceMappingURL=index.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.mts","sourceRoot":"","sources":["../../../../src/data-sources/rpc-datasource/clients/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,wBAAwB,EACxB,gBAAgB,EAChB,eAAe,EACf,KAAK,qBAAqB,GAC3B,8BAA0B;AAG3B,YAAY,EAAE,mBAAmB,EAAE,QAAQ,EAAE,2BAAiB"}
@@ -0,0 +1,2 @@
1
+ export { decodeAggregate3Response, encodeAggregate3, MulticallClient } from "./MulticallClient.mjs";
2
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.mjs","sourceRoot":"","sources":["../../../../src/data-sources/rpc-datasource/clients/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,wBAAwB,EACxB,gBAAgB,EAChB,eAAe,EAEhB,8BAA0B","sourcesContent":["export {\n decodeAggregate3Response,\n encodeAggregate3,\n MulticallClient,\n type MulticallClientConfig,\n} from './MulticallClient';\n\n// Re-export provider types from types module\nexport type { GetProviderFunction, Provider } from '../types';\n"]}
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.reduceInBatchesSerially = exports.divideIntoBatches = exports.MulticallClient = void 0;
4
+ var clients_1 = require("./clients/index.cjs");
5
+ Object.defineProperty(exports, "MulticallClient", { enumerable: true, get: function () { return clients_1.MulticallClient; } });
6
+ var utils_1 = require("./utils/index.cjs");
7
+ Object.defineProperty(exports, "divideIntoBatches", { enumerable: true, get: function () { return utils_1.divideIntoBatches; } });
8
+ Object.defineProperty(exports, "reduceInBatchesSerially", { enumerable: true, get: function () { return utils_1.reduceInBatchesSerially; } });
9
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.cjs","sourceRoot":"","sources":["../../../src/data-sources/rpc-datasource/index.ts"],"names":[],"mappings":";;;AAQA,+CAAwE;AAA/D,0GAAA,eAAe,OAAA;AACxB,2CAAqE;AAA5D,0GAAA,iBAAiB,OAAA;AAAE,gHAAA,uBAAuB,OAAA","sourcesContent":["export type {\n Address,\n ChainId,\n GetProviderFunction,\n Provider,\n BalanceOfRequest,\n BalanceOfResponse,\n} from './types';\nexport { MulticallClient, type MulticallClientConfig } from './clients';\nexport { divideIntoBatches, reduceInBatchesSerially } from './utils';\n"]}
@@ -0,0 +1,4 @@
1
+ export type { Address, ChainId, GetProviderFunction, Provider, BalanceOfRequest, BalanceOfResponse, } from "./types/index.cjs";
2
+ export { MulticallClient, type MulticallClientConfig } from "./clients/index.cjs";
3
+ export { divideIntoBatches, reduceInBatchesSerially } from "./utils/index.cjs";
4
+ //# sourceMappingURL=index.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.cts","sourceRoot":"","sources":["../../../src/data-sources/rpc-datasource/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,OAAO,EACP,OAAO,EACP,mBAAmB,EACnB,QAAQ,EACR,gBAAgB,EAChB,iBAAiB,GAClB,0BAAgB;AACjB,OAAO,EAAE,eAAe,EAAE,KAAK,qBAAqB,EAAE,4BAAkB;AACxE,OAAO,EAAE,iBAAiB,EAAE,uBAAuB,EAAE,0BAAgB"}
@@ -0,0 +1,4 @@
1
+ export type { Address, ChainId, GetProviderFunction, Provider, BalanceOfRequest, BalanceOfResponse, } from "./types/index.mjs";
2
+ export { MulticallClient, type MulticallClientConfig } from "./clients/index.mjs";
3
+ export { divideIntoBatches, reduceInBatchesSerially } from "./utils/index.mjs";
4
+ //# sourceMappingURL=index.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.mts","sourceRoot":"","sources":["../../../src/data-sources/rpc-datasource/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,OAAO,EACP,OAAO,EACP,mBAAmB,EACnB,QAAQ,EACR,gBAAgB,EAChB,iBAAiB,GAClB,0BAAgB;AACjB,OAAO,EAAE,eAAe,EAAE,KAAK,qBAAqB,EAAE,4BAAkB;AACxE,OAAO,EAAE,iBAAiB,EAAE,uBAAuB,EAAE,0BAAgB"}
@@ -0,0 +1,3 @@
1
+ export { MulticallClient } from "./clients/index.mjs";
2
+ export { divideIntoBatches, reduceInBatchesSerially } from "./utils/index.mjs";
3
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.mjs","sourceRoot":"","sources":["../../../src/data-sources/rpc-datasource/index.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,eAAe,EAA8B,4BAAkB;AACxE,OAAO,EAAE,iBAAiB,EAAE,uBAAuB,EAAE,0BAAgB","sourcesContent":["export type {\n Address,\n ChainId,\n GetProviderFunction,\n Provider,\n BalanceOfRequest,\n BalanceOfResponse,\n} from './types';\nexport { MulticallClient, type MulticallClientConfig } from './clients';\nexport { divideIntoBatches, reduceInBatchesSerially } from './utils';\n"]}
@@ -0,0 +1,167 @@
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 _BalanceFetcher_instances, _BalanceFetcher_multicallClient, _BalanceFetcher_config, _BalanceFetcher_getUserTokensState, _BalanceFetcher_processBalanceResponses, _BalanceFetcher_formatBalance;
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.BalanceFetcher = void 0;
16
+ const utils_1 = require("../utils/index.cjs");
17
+ const ZERO_ADDRESS = '0x0000000000000000000000000000000000000000';
18
+ class BalanceFetcher {
19
+ constructor(multicallClient, config) {
20
+ _BalanceFetcher_instances.add(this);
21
+ _BalanceFetcher_multicallClient.set(this, void 0);
22
+ _BalanceFetcher_config.set(this, void 0);
23
+ _BalanceFetcher_getUserTokensState.set(this, void 0);
24
+ __classPrivateFieldSet(this, _BalanceFetcher_multicallClient, multicallClient, "f");
25
+ __classPrivateFieldSet(this, _BalanceFetcher_config, {
26
+ defaultBatchSize: config?.defaultBatchSize ?? 300,
27
+ defaultTimeoutMs: config?.defaultTimeoutMs ?? 30000,
28
+ includeNativeByDefault: config?.includeNativeByDefault ?? true,
29
+ }, "f");
30
+ }
31
+ setUserTokensStateGetter(getUserTokensState) {
32
+ __classPrivateFieldSet(this, _BalanceFetcher_getUserTokensState, getUserTokensState, "f");
33
+ }
34
+ getTokensToFetch(chainId, accountAddress) {
35
+ const userTokensState = __classPrivateFieldGet(this, _BalanceFetcher_getUserTokensState, "f")?.call(this);
36
+ if (!userTokensState) {
37
+ return [];
38
+ }
39
+ const tokenMap = new Map();
40
+ const addToken = (token) => {
41
+ const lowerAddress = token.address.toLowerCase();
42
+ if (!tokenMap.has(lowerAddress)) {
43
+ tokenMap.set(lowerAddress, {
44
+ address: token.address,
45
+ decimals: token.decimals,
46
+ symbol: token.symbol,
47
+ });
48
+ }
49
+ };
50
+ const importedTokens = userTokensState.allTokens[chainId]?.[accountAddress] ?? [];
51
+ for (const token of importedTokens) {
52
+ addToken(token);
53
+ }
54
+ const detectedTokens = userTokensState.allDetectedTokens[chainId]?.[accountAddress] ?? [];
55
+ for (const token of detectedTokens) {
56
+ addToken(token);
57
+ }
58
+ return Array.from(tokenMap.values());
59
+ }
60
+ async fetchBalances(chainId, accountId, accountAddress, options) {
61
+ const tokens = this.getTokensToFetch(chainId, accountAddress);
62
+ const tokenAddresses = tokens.map((token) => token.address);
63
+ return this.fetchBalancesForTokens(chainId, accountId, accountAddress, tokenAddresses, options, tokens);
64
+ }
65
+ async fetchBalancesForTokens(chainId, accountId, accountAddress, tokenAddresses, options, tokenInfos) {
66
+ const batchSize = options?.batchSize ?? __classPrivateFieldGet(this, _BalanceFetcher_config, "f").defaultBatchSize;
67
+ const includeNative = options?.includeNative ?? __classPrivateFieldGet(this, _BalanceFetcher_config, "f").includeNativeByDefault;
68
+ const timestamp = Date.now();
69
+ const tokenInfoMap = new Map();
70
+ if (tokenInfos) {
71
+ for (const info of tokenInfos) {
72
+ tokenInfoMap.set(info.address.toLowerCase(), info);
73
+ }
74
+ }
75
+ const balanceRequests = [];
76
+ if (includeNative) {
77
+ balanceRequests.push({
78
+ tokenAddress: ZERO_ADDRESS,
79
+ accountAddress,
80
+ });
81
+ }
82
+ for (const tokenAddress of tokenAddresses) {
83
+ balanceRequests.push({
84
+ tokenAddress,
85
+ accountAddress,
86
+ });
87
+ }
88
+ if (balanceRequests.length === 0) {
89
+ return {
90
+ chainId,
91
+ accountId,
92
+ accountAddress,
93
+ balances: [],
94
+ failedAddresses: [],
95
+ timestamp,
96
+ };
97
+ }
98
+ const result = await (0, utils_1.reduceInBatchesSerially)({
99
+ values: balanceRequests,
100
+ batchSize,
101
+ initialResult: {
102
+ balances: [],
103
+ failedAddresses: [],
104
+ },
105
+ eachBatch: async (workingResult, batch) => {
106
+ const responses = await __classPrivateFieldGet(this, _BalanceFetcher_multicallClient, "f").batchBalanceOf(chainId, batch);
107
+ return __classPrivateFieldGet(this, _BalanceFetcher_instances, "m", _BalanceFetcher_processBalanceResponses).call(this, responses, workingResult, chainId, accountId, timestamp, tokenInfoMap);
108
+ },
109
+ });
110
+ return {
111
+ chainId,
112
+ accountId,
113
+ accountAddress,
114
+ ...result,
115
+ timestamp,
116
+ };
117
+ }
118
+ }
119
+ exports.BalanceFetcher = BalanceFetcher;
120
+ _BalanceFetcher_multicallClient = new WeakMap(), _BalanceFetcher_config = new WeakMap(), _BalanceFetcher_getUserTokensState = new WeakMap(), _BalanceFetcher_instances = new WeakSet(), _BalanceFetcher_processBalanceResponses = function _BalanceFetcher_processBalanceResponses(responses, accumulator, chainId, accountId, timestamp, tokenInfoMap) {
121
+ const { balances, failedAddresses } = accumulator;
122
+ for (const response of responses) {
123
+ if (!response.success) {
124
+ failedAddresses.push(response.tokenAddress);
125
+ continue;
126
+ }
127
+ const balance = response.balance ?? '0';
128
+ const tokenInfo = tokenInfoMap.get(response.tokenAddress.toLowerCase());
129
+ const decimals = tokenInfo?.decimals ?? 18;
130
+ const formattedBalance = __classPrivateFieldGet(this, _BalanceFetcher_instances, "m", _BalanceFetcher_formatBalance).call(this, balance, decimals);
131
+ const chainIdDecimal = parseInt(chainId, 16);
132
+ const isNative = response.tokenAddress.toLowerCase() === ZERO_ADDRESS.toLowerCase();
133
+ const assetId = isNative
134
+ ? `eip155:${chainIdDecimal}/slip44:60`
135
+ : `eip155:${chainIdDecimal}/erc20:${response.tokenAddress.toLowerCase()}`;
136
+ balances.push({
137
+ assetId,
138
+ accountId,
139
+ chainId,
140
+ balance,
141
+ formattedBalance,
142
+ decimals,
143
+ timestamp,
144
+ });
145
+ }
146
+ return { balances, failedAddresses };
147
+ }, _BalanceFetcher_formatBalance = function _BalanceFetcher_formatBalance(rawBalance, decimals) {
148
+ if (rawBalance === '0') {
149
+ return '0';
150
+ }
151
+ try {
152
+ const balanceBigInt = BigInt(rawBalance);
153
+ const divisor = BigInt(10 ** decimals);
154
+ const integerPart = balanceBigInt / divisor;
155
+ const remainder = balanceBigInt % divisor;
156
+ const fractionalStr = remainder.toString().padStart(decimals, '0');
157
+ const trimmedFractional = fractionalStr.replace(/0+$/u, '');
158
+ if (trimmedFractional === '') {
159
+ return integerPart.toString();
160
+ }
161
+ return `${integerPart}.${trimmedFractional}`;
162
+ }
163
+ catch {
164
+ return rawBalance;
165
+ }
166
+ };
167
+ //# sourceMappingURL=BalanceFetcher.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BalanceFetcher.cjs","sourceRoot":"","sources":["../../../../src/data-sources/rpc-datasource/services/BalanceFetcher.ts"],"names":[],"mappings":"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","sourcesContent":["import type { CaipAssetType } from '@metamask/utils';\n\nimport type { MulticallClient } from '../clients';\nimport type {\n AccountId,\n Address,\n AssetBalance,\n BalanceFetchOptions,\n BalanceFetchResult,\n BalanceOfRequest,\n BalanceOfResponse,\n ChainId,\n TokenFetchInfo,\n UserToken,\n UserTokensState,\n} from '../types';\nimport { reduceInBatchesSerially } from '../utils';\n\nconst ZERO_ADDRESS: Address =\n '0x0000000000000000000000000000000000000000' as Address;\n\nexport type BalanceFetcherConfig = {\n defaultBatchSize?: number;\n defaultTimeoutMs?: number;\n includeNativeByDefault?: boolean;\n};\n\nexport class BalanceFetcher {\n readonly #multicallClient: MulticallClient;\n\n readonly #config: Required<BalanceFetcherConfig>;\n\n #getUserTokensState: (() => UserTokensState) | undefined;\n\n constructor(multicallClient: MulticallClient, config?: BalanceFetcherConfig) {\n this.#multicallClient = multicallClient;\n this.#config = {\n defaultBatchSize: config?.defaultBatchSize ?? 300,\n defaultTimeoutMs: config?.defaultTimeoutMs ?? 30000,\n includeNativeByDefault: config?.includeNativeByDefault ?? true,\n };\n }\n\n setUserTokensStateGetter(getUserTokensState: () => UserTokensState): void {\n this.#getUserTokensState = getUserTokensState;\n }\n\n getTokensToFetch(\n chainId: ChainId,\n accountAddress: Address,\n ): TokenFetchInfo[] {\n const userTokensState = this.#getUserTokensState?.();\n\n if (!userTokensState) {\n return [];\n }\n\n const tokenMap = new Map<string, TokenFetchInfo>();\n\n const addToken = (token: UserToken): void => {\n const lowerAddress = token.address.toLowerCase();\n if (!tokenMap.has(lowerAddress)) {\n tokenMap.set(lowerAddress, {\n address: token.address,\n decimals: token.decimals,\n symbol: token.symbol,\n });\n }\n };\n\n const importedTokens =\n userTokensState.allTokens[chainId]?.[accountAddress] ?? [];\n for (const token of importedTokens) {\n addToken(token);\n }\n\n const detectedTokens =\n userTokensState.allDetectedTokens[chainId]?.[accountAddress] ?? [];\n for (const token of detectedTokens) {\n addToken(token);\n }\n\n return Array.from(tokenMap.values());\n }\n\n async fetchBalances(\n chainId: ChainId,\n accountId: AccountId,\n accountAddress: Address,\n options?: BalanceFetchOptions,\n ): Promise<BalanceFetchResult> {\n const tokens = this.getTokensToFetch(chainId, accountAddress);\n const tokenAddresses = tokens.map((token) => token.address);\n\n return this.fetchBalancesForTokens(\n chainId,\n accountId,\n accountAddress,\n tokenAddresses,\n options,\n tokens,\n );\n }\n\n async fetchBalancesForTokens(\n chainId: ChainId,\n accountId: AccountId,\n accountAddress: Address,\n tokenAddresses: Address[],\n options?: BalanceFetchOptions,\n tokenInfos?: TokenFetchInfo[],\n ): Promise<BalanceFetchResult> {\n const batchSize = options?.batchSize ?? this.#config.defaultBatchSize;\n const includeNative =\n options?.includeNative ?? this.#config.includeNativeByDefault;\n const timestamp = Date.now();\n\n const tokenInfoMap = new Map<string, TokenFetchInfo>();\n if (tokenInfos) {\n for (const info of tokenInfos) {\n tokenInfoMap.set(info.address.toLowerCase(), info);\n }\n }\n\n const balanceRequests: BalanceOfRequest[] = [];\n\n if (includeNative) {\n balanceRequests.push({\n tokenAddress: ZERO_ADDRESS,\n accountAddress,\n });\n }\n\n for (const tokenAddress of tokenAddresses) {\n balanceRequests.push({\n tokenAddress,\n accountAddress,\n });\n }\n\n if (balanceRequests.length === 0) {\n return {\n chainId,\n accountId,\n accountAddress,\n balances: [],\n failedAddresses: [],\n timestamp,\n };\n }\n\n type FetchAccumulator = {\n balances: AssetBalance[];\n failedAddresses: Address[];\n };\n\n const result = await reduceInBatchesSerially<\n BalanceOfRequest,\n FetchAccumulator\n >({\n values: balanceRequests,\n batchSize,\n initialResult: {\n balances: [],\n failedAddresses: [],\n },\n eachBatch: async (workingResult, batch) => {\n const responses = await this.#multicallClient.batchBalanceOf(\n chainId,\n batch,\n );\n\n return this.#processBalanceResponses(\n responses,\n workingResult as FetchAccumulator,\n chainId,\n accountId,\n timestamp,\n tokenInfoMap,\n );\n },\n });\n\n return {\n chainId,\n accountId,\n accountAddress,\n ...result,\n timestamp,\n };\n }\n\n #processBalanceResponses(\n responses: BalanceOfResponse[],\n accumulator: {\n balances: AssetBalance[];\n failedAddresses: Address[];\n },\n chainId: ChainId,\n accountId: AccountId,\n timestamp: number,\n tokenInfoMap: Map<string, TokenFetchInfo>,\n ): {\n balances: AssetBalance[];\n failedAddresses: Address[];\n } {\n const { balances, failedAddresses } = accumulator;\n\n for (const response of responses) {\n if (!response.success) {\n failedAddresses.push(response.tokenAddress);\n continue;\n }\n\n const balance = response.balance ?? '0';\n const tokenInfo = tokenInfoMap.get(response.tokenAddress.toLowerCase());\n const decimals = tokenInfo?.decimals ?? 18;\n const formattedBalance = this.#formatBalance(balance, decimals);\n\n const chainIdDecimal = parseInt(chainId, 16);\n const isNative =\n response.tokenAddress.toLowerCase() === ZERO_ADDRESS.toLowerCase();\n const assetId: CaipAssetType = isNative\n ? (`eip155:${chainIdDecimal}/slip44:60` as CaipAssetType)\n : (`eip155:${chainIdDecimal}/erc20:${response.tokenAddress.toLowerCase()}` as CaipAssetType);\n\n balances.push({\n assetId,\n accountId,\n chainId,\n balance,\n formattedBalance,\n decimals,\n timestamp,\n });\n }\n\n return { balances, failedAddresses };\n }\n\n #formatBalance(rawBalance: string, decimals: number): string {\n if (rawBalance === '0') {\n return '0';\n }\n\n try {\n const balanceBigInt = BigInt(rawBalance);\n const divisor = BigInt(10 ** decimals);\n\n const integerPart = balanceBigInt / divisor;\n const remainder = balanceBigInt % divisor;\n const fractionalStr = remainder.toString().padStart(decimals, '0');\n const trimmedFractional = fractionalStr.replace(/0+$/u, '');\n\n if (trimmedFractional === '') {\n return integerPart.toString();\n }\n\n return `${integerPart}.${trimmedFractional}`;\n } catch {\n return rawBalance;\n }\n }\n}\n"]}
@@ -0,0 +1,16 @@
1
+ import type { MulticallClient } from "../clients/index.cjs";
2
+ import type { AccountId, Address, BalanceFetchOptions, BalanceFetchResult, ChainId, TokenFetchInfo, UserTokensState } from "../types/index.cjs";
3
+ export type BalanceFetcherConfig = {
4
+ defaultBatchSize?: number;
5
+ defaultTimeoutMs?: number;
6
+ includeNativeByDefault?: boolean;
7
+ };
8
+ export declare class BalanceFetcher {
9
+ #private;
10
+ constructor(multicallClient: MulticallClient, config?: BalanceFetcherConfig);
11
+ setUserTokensStateGetter(getUserTokensState: () => UserTokensState): void;
12
+ getTokensToFetch(chainId: ChainId, accountAddress: Address): TokenFetchInfo[];
13
+ fetchBalances(chainId: ChainId, accountId: AccountId, accountAddress: Address, options?: BalanceFetchOptions): Promise<BalanceFetchResult>;
14
+ fetchBalancesForTokens(chainId: ChainId, accountId: AccountId, accountAddress: Address, tokenAddresses: Address[], options?: BalanceFetchOptions, tokenInfos?: TokenFetchInfo[]): Promise<BalanceFetchResult>;
15
+ }
16
+ //# sourceMappingURL=BalanceFetcher.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BalanceFetcher.d.cts","sourceRoot":"","sources":["../../../../src/data-sources/rpc-datasource/services/BalanceFetcher.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAE,6BAAmB;AAClD,OAAO,KAAK,EACV,SAAS,EACT,OAAO,EAEP,mBAAmB,EACnB,kBAAkB,EAGlB,OAAO,EACP,cAAc,EAEd,eAAe,EAChB,2BAAiB;AAMlB,MAAM,MAAM,oBAAoB,GAAG;IACjC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,sBAAsB,CAAC,EAAE,OAAO,CAAC;CAClC,CAAC;AAEF,qBAAa,cAAc;;gBAOb,eAAe,EAAE,eAAe,EAAE,MAAM,CAAC,EAAE,oBAAoB;IAS3E,wBAAwB,CAAC,kBAAkB,EAAE,MAAM,eAAe,GAAG,IAAI;IAIzE,gBAAgB,CACd,OAAO,EAAE,OAAO,EAChB,cAAc,EAAE,OAAO,GACtB,cAAc,EAAE;IAmCb,aAAa,CACjB,OAAO,EAAE,OAAO,EAChB,SAAS,EAAE,SAAS,EACpB,cAAc,EAAE,OAAO,EACvB,OAAO,CAAC,EAAE,mBAAmB,GAC5B,OAAO,CAAC,kBAAkB,CAAC;IAcxB,sBAAsB,CAC1B,OAAO,EAAE,OAAO,EAChB,SAAS,EAAE,SAAS,EACpB,cAAc,EAAE,OAAO,EACvB,cAAc,EAAE,OAAO,EAAE,EACzB,OAAO,CAAC,EAAE,mBAAmB,EAC7B,UAAU,CAAC,EAAE,cAAc,EAAE,GAC5B,OAAO,CAAC,kBAAkB,CAAC;CAwJ/B"}
@@ -0,0 +1,16 @@
1
+ import type { MulticallClient } from "../clients/index.mjs";
2
+ import type { AccountId, Address, BalanceFetchOptions, BalanceFetchResult, ChainId, TokenFetchInfo, UserTokensState } from "../types/index.mjs";
3
+ export type BalanceFetcherConfig = {
4
+ defaultBatchSize?: number;
5
+ defaultTimeoutMs?: number;
6
+ includeNativeByDefault?: boolean;
7
+ };
8
+ export declare class BalanceFetcher {
9
+ #private;
10
+ constructor(multicallClient: MulticallClient, config?: BalanceFetcherConfig);
11
+ setUserTokensStateGetter(getUserTokensState: () => UserTokensState): void;
12
+ getTokensToFetch(chainId: ChainId, accountAddress: Address): TokenFetchInfo[];
13
+ fetchBalances(chainId: ChainId, accountId: AccountId, accountAddress: Address, options?: BalanceFetchOptions): Promise<BalanceFetchResult>;
14
+ fetchBalancesForTokens(chainId: ChainId, accountId: AccountId, accountAddress: Address, tokenAddresses: Address[], options?: BalanceFetchOptions, tokenInfos?: TokenFetchInfo[]): Promise<BalanceFetchResult>;
15
+ }
16
+ //# sourceMappingURL=BalanceFetcher.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BalanceFetcher.d.mts","sourceRoot":"","sources":["../../../../src/data-sources/rpc-datasource/services/BalanceFetcher.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAE,6BAAmB;AAClD,OAAO,KAAK,EACV,SAAS,EACT,OAAO,EAEP,mBAAmB,EACnB,kBAAkB,EAGlB,OAAO,EACP,cAAc,EAEd,eAAe,EAChB,2BAAiB;AAMlB,MAAM,MAAM,oBAAoB,GAAG;IACjC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,sBAAsB,CAAC,EAAE,OAAO,CAAC;CAClC,CAAC;AAEF,qBAAa,cAAc;;gBAOb,eAAe,EAAE,eAAe,EAAE,MAAM,CAAC,EAAE,oBAAoB;IAS3E,wBAAwB,CAAC,kBAAkB,EAAE,MAAM,eAAe,GAAG,IAAI;IAIzE,gBAAgB,CACd,OAAO,EAAE,OAAO,EAChB,cAAc,EAAE,OAAO,GACtB,cAAc,EAAE;IAmCb,aAAa,CACjB,OAAO,EAAE,OAAO,EAChB,SAAS,EAAE,SAAS,EACpB,cAAc,EAAE,OAAO,EACvB,OAAO,CAAC,EAAE,mBAAmB,GAC5B,OAAO,CAAC,kBAAkB,CAAC;IAcxB,sBAAsB,CAC1B,OAAO,EAAE,OAAO,EAChB,SAAS,EAAE,SAAS,EACpB,cAAc,EAAE,OAAO,EACvB,cAAc,EAAE,OAAO,EAAE,EACzB,OAAO,CAAC,EAAE,mBAAmB,EAC7B,UAAU,CAAC,EAAE,cAAc,EAAE,GAC5B,OAAO,CAAC,kBAAkB,CAAC;CAwJ/B"}
@@ -0,0 +1,163 @@
1
+ var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
2
+ if (kind === "m") throw new TypeError("Private method is not writable");
3
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
4
+ 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");
5
+ return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
6
+ };
7
+ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
8
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
9
+ 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");
10
+ return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
11
+ };
12
+ var _BalanceFetcher_instances, _BalanceFetcher_multicallClient, _BalanceFetcher_config, _BalanceFetcher_getUserTokensState, _BalanceFetcher_processBalanceResponses, _BalanceFetcher_formatBalance;
13
+ import { reduceInBatchesSerially } from "../utils/index.mjs";
14
+ const ZERO_ADDRESS = '0x0000000000000000000000000000000000000000';
15
+ export class BalanceFetcher {
16
+ constructor(multicallClient, config) {
17
+ _BalanceFetcher_instances.add(this);
18
+ _BalanceFetcher_multicallClient.set(this, void 0);
19
+ _BalanceFetcher_config.set(this, void 0);
20
+ _BalanceFetcher_getUserTokensState.set(this, void 0);
21
+ __classPrivateFieldSet(this, _BalanceFetcher_multicallClient, multicallClient, "f");
22
+ __classPrivateFieldSet(this, _BalanceFetcher_config, {
23
+ defaultBatchSize: config?.defaultBatchSize ?? 300,
24
+ defaultTimeoutMs: config?.defaultTimeoutMs ?? 30000,
25
+ includeNativeByDefault: config?.includeNativeByDefault ?? true,
26
+ }, "f");
27
+ }
28
+ setUserTokensStateGetter(getUserTokensState) {
29
+ __classPrivateFieldSet(this, _BalanceFetcher_getUserTokensState, getUserTokensState, "f");
30
+ }
31
+ getTokensToFetch(chainId, accountAddress) {
32
+ const userTokensState = __classPrivateFieldGet(this, _BalanceFetcher_getUserTokensState, "f")?.call(this);
33
+ if (!userTokensState) {
34
+ return [];
35
+ }
36
+ const tokenMap = new Map();
37
+ const addToken = (token) => {
38
+ const lowerAddress = token.address.toLowerCase();
39
+ if (!tokenMap.has(lowerAddress)) {
40
+ tokenMap.set(lowerAddress, {
41
+ address: token.address,
42
+ decimals: token.decimals,
43
+ symbol: token.symbol,
44
+ });
45
+ }
46
+ };
47
+ const importedTokens = userTokensState.allTokens[chainId]?.[accountAddress] ?? [];
48
+ for (const token of importedTokens) {
49
+ addToken(token);
50
+ }
51
+ const detectedTokens = userTokensState.allDetectedTokens[chainId]?.[accountAddress] ?? [];
52
+ for (const token of detectedTokens) {
53
+ addToken(token);
54
+ }
55
+ return Array.from(tokenMap.values());
56
+ }
57
+ async fetchBalances(chainId, accountId, accountAddress, options) {
58
+ const tokens = this.getTokensToFetch(chainId, accountAddress);
59
+ const tokenAddresses = tokens.map((token) => token.address);
60
+ return this.fetchBalancesForTokens(chainId, accountId, accountAddress, tokenAddresses, options, tokens);
61
+ }
62
+ async fetchBalancesForTokens(chainId, accountId, accountAddress, tokenAddresses, options, tokenInfos) {
63
+ const batchSize = options?.batchSize ?? __classPrivateFieldGet(this, _BalanceFetcher_config, "f").defaultBatchSize;
64
+ const includeNative = options?.includeNative ?? __classPrivateFieldGet(this, _BalanceFetcher_config, "f").includeNativeByDefault;
65
+ const timestamp = Date.now();
66
+ const tokenInfoMap = new Map();
67
+ if (tokenInfos) {
68
+ for (const info of tokenInfos) {
69
+ tokenInfoMap.set(info.address.toLowerCase(), info);
70
+ }
71
+ }
72
+ const balanceRequests = [];
73
+ if (includeNative) {
74
+ balanceRequests.push({
75
+ tokenAddress: ZERO_ADDRESS,
76
+ accountAddress,
77
+ });
78
+ }
79
+ for (const tokenAddress of tokenAddresses) {
80
+ balanceRequests.push({
81
+ tokenAddress,
82
+ accountAddress,
83
+ });
84
+ }
85
+ if (balanceRequests.length === 0) {
86
+ return {
87
+ chainId,
88
+ accountId,
89
+ accountAddress,
90
+ balances: [],
91
+ failedAddresses: [],
92
+ timestamp,
93
+ };
94
+ }
95
+ const result = await reduceInBatchesSerially({
96
+ values: balanceRequests,
97
+ batchSize,
98
+ initialResult: {
99
+ balances: [],
100
+ failedAddresses: [],
101
+ },
102
+ eachBatch: async (workingResult, batch) => {
103
+ const responses = await __classPrivateFieldGet(this, _BalanceFetcher_multicallClient, "f").batchBalanceOf(chainId, batch);
104
+ return __classPrivateFieldGet(this, _BalanceFetcher_instances, "m", _BalanceFetcher_processBalanceResponses).call(this, responses, workingResult, chainId, accountId, timestamp, tokenInfoMap);
105
+ },
106
+ });
107
+ return {
108
+ chainId,
109
+ accountId,
110
+ accountAddress,
111
+ ...result,
112
+ timestamp,
113
+ };
114
+ }
115
+ }
116
+ _BalanceFetcher_multicallClient = new WeakMap(), _BalanceFetcher_config = new WeakMap(), _BalanceFetcher_getUserTokensState = new WeakMap(), _BalanceFetcher_instances = new WeakSet(), _BalanceFetcher_processBalanceResponses = function _BalanceFetcher_processBalanceResponses(responses, accumulator, chainId, accountId, timestamp, tokenInfoMap) {
117
+ const { balances, failedAddresses } = accumulator;
118
+ for (const response of responses) {
119
+ if (!response.success) {
120
+ failedAddresses.push(response.tokenAddress);
121
+ continue;
122
+ }
123
+ const balance = response.balance ?? '0';
124
+ const tokenInfo = tokenInfoMap.get(response.tokenAddress.toLowerCase());
125
+ const decimals = tokenInfo?.decimals ?? 18;
126
+ const formattedBalance = __classPrivateFieldGet(this, _BalanceFetcher_instances, "m", _BalanceFetcher_formatBalance).call(this, balance, decimals);
127
+ const chainIdDecimal = parseInt(chainId, 16);
128
+ const isNative = response.tokenAddress.toLowerCase() === ZERO_ADDRESS.toLowerCase();
129
+ const assetId = isNative
130
+ ? `eip155:${chainIdDecimal}/slip44:60`
131
+ : `eip155:${chainIdDecimal}/erc20:${response.tokenAddress.toLowerCase()}`;
132
+ balances.push({
133
+ assetId,
134
+ accountId,
135
+ chainId,
136
+ balance,
137
+ formattedBalance,
138
+ decimals,
139
+ timestamp,
140
+ });
141
+ }
142
+ return { balances, failedAddresses };
143
+ }, _BalanceFetcher_formatBalance = function _BalanceFetcher_formatBalance(rawBalance, decimals) {
144
+ if (rawBalance === '0') {
145
+ return '0';
146
+ }
147
+ try {
148
+ const balanceBigInt = BigInt(rawBalance);
149
+ const divisor = BigInt(10 ** decimals);
150
+ const integerPart = balanceBigInt / divisor;
151
+ const remainder = balanceBigInt % divisor;
152
+ const fractionalStr = remainder.toString().padStart(decimals, '0');
153
+ const trimmedFractional = fractionalStr.replace(/0+$/u, '');
154
+ if (trimmedFractional === '') {
155
+ return integerPart.toString();
156
+ }
157
+ return `${integerPart}.${trimmedFractional}`;
158
+ }
159
+ catch {
160
+ return rawBalance;
161
+ }
162
+ };
163
+ //# sourceMappingURL=BalanceFetcher.mjs.map