upshift-finance 1.0.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 (316) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +349 -0
  3. package/lib/abis/AddressResolver.d.ts +28 -0
  4. package/lib/abis/AddressResolver.js +23 -0
  5. package/lib/abis/ChainlinkV3.d.ts +87 -0
  6. package/lib/abis/ChainlinkV3.js +117 -0
  7. package/lib/abis/ERC20.d.ts +168 -0
  8. package/lib/abis/ERC20.js +226 -0
  9. package/lib/abis/ERC20_Bytes32.d.ts +139 -0
  10. package/lib/abis/ERC20_Bytes32.js +196 -0
  11. package/lib/abis/ERC4626.d.ts +364 -0
  12. package/lib/abis/ERC4626.js +507 -0
  13. package/lib/abis/ERC721.d.ts +231 -0
  14. package/lib/abis/ERC721.js +321 -0
  15. package/lib/abis/FeeOracle.d.ts +120 -0
  16. package/lib/abis/FeeOracle.js +162 -0
  17. package/lib/abis/LendingPool.d.ts +1393 -0
  18. package/lib/abis/LendingPool.js +1807 -0
  19. package/lib/abis/LendingPoolV2.d.ts +1413 -0
  20. package/lib/abis/LendingPoolV2.js +1833 -0
  21. package/lib/abis/LendingPoolV3.d.ts +1677 -0
  22. package/lib/abis/LendingPoolV3.js +1160 -0
  23. package/lib/abis/Loan.d.ts +837 -0
  24. package/lib/abis/Loan.js +1080 -0
  25. package/lib/abis/MultiAssetNativeDepositWrapper.d.ts +137 -0
  26. package/lib/abis/MultiAssetNativeDepositWrapper.js +125 -0
  27. package/lib/abis/Multicall3.d.ts +30 -0
  28. package/lib/abis/Multicall3.js +97 -0
  29. package/lib/abis/OFT.d.ts +116 -0
  30. package/lib/abis/OFT.js +85 -0
  31. package/lib/abis/PoolAdapter.d.ts +36 -0
  32. package/lib/abis/PoolAdapter.js +51 -0
  33. package/lib/abis/RewardDistributor.d.ts +267 -0
  34. package/lib/abis/RewardDistributor.js +352 -0
  35. package/lib/abis/RwaRedeemSubaccount.d.ts +747 -0
  36. package/lib/abis/RwaRedeemSubaccount.js +548 -0
  37. package/lib/abis/SmartAccount.d.ts +17 -0
  38. package/lib/abis/SmartAccount.js +19 -0
  39. package/lib/abis/SwapRouter.d.ts +1043 -0
  40. package/lib/abis/SwapRouter.js +740 -0
  41. package/lib/abis/TextResolver.d.ts +16 -0
  42. package/lib/abis/TextResolver.js +16 -0
  43. package/lib/abis/TokenizedVaultV2.d.ts +1364 -0
  44. package/lib/abis/TokenizedVaultV2.js +1041 -0
  45. package/lib/abis/TokenizedVaultV2DepositWithPermit.d.ts +1456 -0
  46. package/lib/abis/TokenizedVaultV2DepositWithPermit.js +1878 -0
  47. package/lib/abis/TokenizedVaultV2Receipt.d.ts +1568 -0
  48. package/lib/abis/TokenizedVaultV2Receipt.js +1061 -0
  49. package/lib/abis/TokenizedVaultV2SenderAllocationWhitelist.d.ts +454 -0
  50. package/lib/abis/TokenizedVaultV2SenderAllocationWhitelist.js +327 -0
  51. package/lib/abis/TokenizedVaultV2WhitelistedAllocation.d.ts +1466 -0
  52. package/lib/abis/TokenizedVaultV2WhitelistedAllocation.js +1092 -0
  53. package/lib/abis/TokenizedVaultV2WhitelistedAssets.d.ts +274 -0
  54. package/lib/abis/TokenizedVaultV2WhitelistedAssets.js +167 -0
  55. package/lib/abis/UniversalResolverResolve.d.ts +69 -0
  56. package/lib/abis/UniversalResolverResolve.js +35 -0
  57. package/lib/abis/UniversalSignatureValidator.d.ts +17 -0
  58. package/lib/abis/UniversalSignatureValidator.js +30 -0
  59. package/lib/abis/WrapperAdapter.d.ts +71 -0
  60. package/lib/abis/WrapperAdapter.js +77 -0
  61. package/lib/abis/index.d.ts +34 -0
  62. package/lib/abis/index.js +51 -0
  63. package/lib/adapters/evm/getters.d.ts +19 -0
  64. package/lib/adapters/evm/getters.js +209 -0
  65. package/lib/adapters/evm/index.d.ts +353 -0
  66. package/lib/adapters/evm/index.js +434 -0
  67. package/lib/adapters/evm/utils.d.ts +8 -0
  68. package/lib/adapters/evm/utils.js +51 -0
  69. package/lib/adapters/solana/constants.d.ts +33 -0
  70. package/lib/adapters/solana/constants.js +52 -0
  71. package/lib/adapters/solana/getters.d.ts +11 -0
  72. package/lib/adapters/solana/getters.js +165 -0
  73. package/lib/adapters/solana/idl/vault-idl.d.ts +272 -0
  74. package/lib/adapters/solana/idl/vault-idl.js +1084 -0
  75. package/lib/adapters/solana/index.d.ts +233 -0
  76. package/lib/adapters/solana/index.js +291 -0
  77. package/lib/adapters/solana/types.d.ts +67 -0
  78. package/lib/adapters/solana/types.js +3 -0
  79. package/lib/adapters/solana/utils.d.ts +141 -0
  80. package/lib/adapters/solana/utils.js +595 -0
  81. package/lib/adapters/solana/vault.actions.d.ts +57 -0
  82. package/lib/adapters/solana/vault.actions.js +379 -0
  83. package/lib/adapters/stellar/actions.d.ts +28 -0
  84. package/lib/adapters/stellar/actions.js +77 -0
  85. package/lib/adapters/stellar/constants.d.ts +43 -0
  86. package/lib/adapters/stellar/constants.js +53 -0
  87. package/lib/adapters/stellar/getters.d.ts +68 -0
  88. package/lib/adapters/stellar/getters.js +290 -0
  89. package/lib/adapters/stellar/index.d.ts +114 -0
  90. package/lib/adapters/stellar/index.js +175 -0
  91. package/lib/adapters/stellar/soroban.d.ts +123 -0
  92. package/lib/adapters/stellar/soroban.js +613 -0
  93. package/lib/adapters/stellar/submit.d.ts +34 -0
  94. package/lib/adapters/stellar/submit.js +149 -0
  95. package/lib/adapters/stellar/types.d.ts +58 -0
  96. package/lib/adapters/stellar/types.js +6 -0
  97. package/lib/adapters/stellar/utils.d.ts +24 -0
  98. package/lib/adapters/stellar/utils.js +34 -0
  99. package/lib/adapters/sui/constants.d.ts +14 -0
  100. package/lib/adapters/sui/constants.js +29 -0
  101. package/lib/adapters/sui/getters.d.ts +9 -0
  102. package/lib/adapters/sui/getters.js +60 -0
  103. package/lib/adapters/sui/index.d.ts +45 -0
  104. package/lib/adapters/sui/index.js +101 -0
  105. package/lib/adapters/sui/transformer.d.ts +10 -0
  106. package/lib/adapters/sui/transformer.js +107 -0
  107. package/lib/adapters/sui/types.d.ts +66 -0
  108. package/lib/adapters/sui/types.js +3 -0
  109. package/lib/adapters/sui/utils.d.ts +10 -0
  110. package/lib/adapters/sui/utils.js +29 -0
  111. package/lib/core/analytics/chain-name.d.ts +9 -0
  112. package/lib/core/analytics/chain-name.js +34 -0
  113. package/lib/core/analytics/constants.d.ts +5 -0
  114. package/lib/core/analytics/constants.js +9 -0
  115. package/lib/core/analytics/env.d.ts +29 -0
  116. package/lib/core/analytics/env.js +59 -0
  117. package/lib/core/analytics/index.d.ts +36 -0
  118. package/lib/core/analytics/index.js +79 -0
  119. package/lib/core/analytics/instrumentation.d.ts +29 -0
  120. package/lib/core/analytics/instrumentation.js +277 -0
  121. package/lib/core/analytics/method-taxonomy.d.ts +19 -0
  122. package/lib/core/analytics/method-taxonomy.js +128 -0
  123. package/lib/core/analytics/metrics.d.ts +33 -0
  124. package/lib/core/analytics/metrics.js +116 -0
  125. package/lib/core/analytics/sanitize.d.ts +44 -0
  126. package/lib/core/analytics/sanitize.js +260 -0
  127. package/lib/core/analytics/sentry-runtime.d.ts +15 -0
  128. package/lib/core/analytics/sentry-runtime.js +97 -0
  129. package/lib/core/analytics/sentry.d.ts +67 -0
  130. package/lib/core/analytics/sentry.js +613 -0
  131. package/lib/core/analytics/types.d.ts +48 -0
  132. package/lib/core/analytics/types.js +3 -0
  133. package/lib/core/analytics/user-identity.d.ts +41 -0
  134. package/lib/core/analytics/user-identity.js +141 -0
  135. package/lib/core/analytics/version.d.ts +6 -0
  136. package/lib/core/analytics/version.js +10 -0
  137. package/lib/core/attribution.d.ts +111 -0
  138. package/lib/core/attribution.js +142 -0
  139. package/lib/core/auth/index.d.ts +1 -0
  140. package/lib/core/auth/index.js +18 -0
  141. package/lib/core/auth/verify.d.ts +2 -0
  142. package/lib/core/auth/verify.js +31 -0
  143. package/lib/core/base.class.d.ts +152 -0
  144. package/lib/core/base.class.js +172 -0
  145. package/lib/core/cache.d.ts +9 -0
  146. package/lib/core/cache.js +31 -0
  147. package/lib/core/constants/adapters.d.ts +103 -0
  148. package/lib/core/constants/adapters.js +180 -0
  149. package/lib/core/constants/core.d.ts +133 -0
  150. package/lib/core/constants/core.js +209 -0
  151. package/lib/core/constants/swap-router.d.ts +150 -0
  152. package/lib/core/constants/swap-router.js +169 -0
  153. package/lib/core/constants/vaults.d.ts +93 -0
  154. package/lib/core/constants/vaults.js +273 -0
  155. package/lib/core/constants/web3.d.ts +91 -0
  156. package/lib/core/constants/web3.js +229 -0
  157. package/lib/core/errors/index.d.ts +114 -0
  158. package/lib/core/errors/index.js +183 -0
  159. package/lib/core/fetcher.d.ts +198 -0
  160. package/lib/core/fetcher.js +903 -0
  161. package/lib/core/helpers/adapters.d.ts +13 -0
  162. package/lib/core/helpers/adapters.js +39 -0
  163. package/lib/core/helpers/chain-address.d.ts +13 -0
  164. package/lib/core/helpers/chain-address.js +47 -0
  165. package/lib/core/helpers/chain-error.d.ts +207 -0
  166. package/lib/core/helpers/chain-error.js +682 -0
  167. package/lib/core/helpers/chain-support.d.ts +80 -0
  168. package/lib/core/helpers/chain-support.js +115 -0
  169. package/lib/core/helpers/core.d.ts +68 -0
  170. package/lib/core/helpers/core.js +285 -0
  171. package/lib/core/helpers/explorer-link.d.ts +16 -0
  172. package/lib/core/helpers/explorer-link.js +26 -0
  173. package/lib/core/helpers/multicall.d.ts +68 -0
  174. package/lib/core/helpers/multicall.js +103 -0
  175. package/lib/core/helpers/revert-decode.d.ts +248 -0
  176. package/lib/core/helpers/revert-decode.js +515 -0
  177. package/lib/core/helpers/signer.d.ts +52 -0
  178. package/lib/core/helpers/signer.js +145 -0
  179. package/lib/core/helpers/swap-router.d.ts +211 -0
  180. package/lib/core/helpers/swap-router.js +480 -0
  181. package/lib/core/helpers/vault-version.d.ts +23 -0
  182. package/lib/core/helpers/vault-version.js +75 -0
  183. package/lib/core/helpers/vaults.d.ts +89 -0
  184. package/lib/core/helpers/vaults.js +235 -0
  185. package/lib/core/helpers/web3.d.ts +353 -0
  186. package/lib/core/helpers/web3.js +992 -0
  187. package/lib/core/index.d.ts +23 -0
  188. package/lib/core/index.js +40 -0
  189. package/lib/core/logger/index.d.ts +98 -0
  190. package/lib/core/logger/index.js +144 -0
  191. package/lib/core/logger/slack.d.ts +16 -0
  192. package/lib/core/logger/slack.js +57 -0
  193. package/lib/core/vault-metadata.d.ts +12 -0
  194. package/lib/core/vault-metadata.js +42 -0
  195. package/lib/core/version-check.d.ts +58 -0
  196. package/lib/core/version-check.js +182 -0
  197. package/lib/evm/index.d.ts +2 -0
  198. package/lib/evm/index.js +19 -0
  199. package/lib/evm/methods/crossChainVault.d.ts +128 -0
  200. package/lib/evm/methods/crossChainVault.js +853 -0
  201. package/lib/evm/methods/crossChainVaultRegistry.d.ts +93 -0
  202. package/lib/evm/methods/crossChainVaultRegistry.js +240 -0
  203. package/lib/evm/methods/index.d.ts +2 -0
  204. package/lib/evm/methods/index.js +19 -0
  205. package/lib/evm/types/crossChain.d.ts +363 -0
  206. package/lib/evm/types/crossChain.js +20 -0
  207. package/lib/evm/types/index.d.ts +1 -0
  208. package/lib/evm/types/index.js +18 -0
  209. package/lib/index.d.ts +30 -0
  210. package/lib/index.js +52 -0
  211. package/lib/main.d.ts +527 -0
  212. package/lib/main.js +601 -0
  213. package/lib/modules/api/fetcher.d.ts +82 -0
  214. package/lib/modules/api/fetcher.js +150 -0
  215. package/lib/modules/api/index.d.ts +1 -0
  216. package/lib/modules/api/index.js +6 -0
  217. package/lib/modules/api/main.d.ts +313 -0
  218. package/lib/modules/api/main.js +479 -0
  219. package/lib/modules/sub-accounts/fetcher.d.ts +53 -0
  220. package/lib/modules/sub-accounts/fetcher.js +120 -0
  221. package/lib/modules/sub-accounts/index.d.ts +2 -0
  222. package/lib/modules/sub-accounts/index.js +19 -0
  223. package/lib/modules/sub-accounts/main.d.ts +243 -0
  224. package/lib/modules/sub-accounts/main.js +205 -0
  225. package/lib/modules/sub-accounts/utils.d.ts +106 -0
  226. package/lib/modules/sub-accounts/utils.js +112 -0
  227. package/lib/modules/vaults/adapter.helpers.d.ts +64 -0
  228. package/lib/modules/vaults/adapter.helpers.js +184 -0
  229. package/lib/modules/vaults/fetcher.d.ts +147 -0
  230. package/lib/modules/vaults/fetcher.js +368 -0
  231. package/lib/modules/vaults/getters.d.ts +570 -0
  232. package/lib/modules/vaults/getters.js +3051 -0
  233. package/lib/modules/vaults/index.d.ts +20 -0
  234. package/lib/modules/vaults/index.js +44 -0
  235. package/lib/modules/vaults/main.d.ts +601 -0
  236. package/lib/modules/vaults/main.js +1623 -0
  237. package/lib/modules/vaults/prefetch.d.ts +65 -0
  238. package/lib/modules/vaults/prefetch.js +120 -0
  239. package/lib/modules/vaults/read.actions.d.ts +225 -0
  240. package/lib/modules/vaults/read.actions.js +596 -0
  241. package/lib/modules/vaults/types.d.ts +71 -0
  242. package/lib/modules/vaults/types.js +3 -0
  243. package/lib/modules/vaults/utils/call-data-decoder.d.ts +61 -0
  244. package/lib/modules/vaults/utils/call-data-decoder.js +194 -0
  245. package/lib/modules/vaults/utils/date-utils.d.ts +50 -0
  246. package/lib/modules/vaults/utils/date-utils.js +84 -0
  247. package/lib/modules/vaults/utils.d.ts +140 -0
  248. package/lib/modules/vaults/utils.js +799 -0
  249. package/lib/modules/vaults/write.actions.d.ts +529 -0
  250. package/lib/modules/vaults/write.actions.js +1749 -0
  251. package/lib/polyfills.d.ts +1 -0
  252. package/lib/polyfills.js +12 -0
  253. package/lib/sdk.d.ts +26721 -0
  254. package/lib/services/coingecko/fetcher.d.ts +15 -0
  255. package/lib/services/coingecko/fetcher.js +67 -0
  256. package/lib/services/coingecko/index.d.ts +2 -0
  257. package/lib/services/coingecko/index.js +19 -0
  258. package/lib/services/coingecko/utils.d.ts +1 -0
  259. package/lib/services/coingecko/utils.js +24 -0
  260. package/lib/services/debank/fetcher.d.ts +126 -0
  261. package/lib/services/debank/fetcher.js +47 -0
  262. package/lib/services/debank/index.d.ts +2 -0
  263. package/lib/services/debank/index.js +19 -0
  264. package/lib/services/debank/utils.d.ts +38 -0
  265. package/lib/services/debank/utils.js +297 -0
  266. package/lib/services/layerzero/deposits.d.ts +49 -0
  267. package/lib/services/layerzero/deposits.js +166 -0
  268. package/lib/services/layerzero/redeems.d.ts +20 -0
  269. package/lib/services/layerzero/redeems.js +92 -0
  270. package/lib/services/layerzero/utils.d.ts +9 -0
  271. package/lib/services/layerzero/utils.js +22 -0
  272. package/lib/services/octavfi/fetcher.d.ts +9 -0
  273. package/lib/services/octavfi/fetcher.js +103 -0
  274. package/lib/services/octavfi/index.d.ts +3 -0
  275. package/lib/services/octavfi/index.js +20 -0
  276. package/lib/services/octavfi/types.d.ts +34 -0
  277. package/lib/services/octavfi/types.js +3 -0
  278. package/lib/services/octavfi/utils.d.ts +16 -0
  279. package/lib/services/octavfi/utils.js +212 -0
  280. package/lib/services/subgraph/fetcher.d.ts +2 -0
  281. package/lib/services/subgraph/fetcher.js +61 -0
  282. package/lib/services/subgraph/index.d.ts +2 -0
  283. package/lib/services/subgraph/index.js +19 -0
  284. package/lib/services/subgraph/schema.d.ts +45 -0
  285. package/lib/services/subgraph/schema.js +75 -0
  286. package/lib/services/subgraph/vaults.d.ts +25 -0
  287. package/lib/services/subgraph/vaults.js +1106 -0
  288. package/lib/services/swap-quotes/index.d.ts +105 -0
  289. package/lib/services/swap-quotes/index.js +77 -0
  290. package/lib/services/swap-quotes/paraswap.d.ts +51 -0
  291. package/lib/services/swap-quotes/paraswap.js +138 -0
  292. package/lib/types/api.d.ts +280 -0
  293. package/lib/types/api.js +3 -0
  294. package/lib/types/index.d.ts +12 -0
  295. package/lib/types/index.js +28 -0
  296. package/lib/types/points.d.ts +28 -0
  297. package/lib/types/points.js +3 -0
  298. package/lib/types/pools.d.ts +144 -0
  299. package/lib/types/pools.js +3 -0
  300. package/lib/types/staking.d.ts +28 -0
  301. package/lib/types/staking.js +3 -0
  302. package/lib/types/sub-accounts.d.ts +140 -0
  303. package/lib/types/sub-accounts.js +3 -0
  304. package/lib/types/subgraph.d.ts +74 -0
  305. package/lib/types/subgraph.js +3 -0
  306. package/lib/types/typed-contract.d.ts +102 -0
  307. package/lib/types/typed-contract.js +3 -0
  308. package/lib/types/user.d.ts +1 -0
  309. package/lib/types/user.js +3 -0
  310. package/lib/types/vaults.d.ts +714 -0
  311. package/lib/types/vaults.js +24 -0
  312. package/lib/types/web3.d.ts +51 -0
  313. package/lib/types/web3.js +14 -0
  314. package/lib/types/webserver.d.ts +698 -0
  315. package/lib/types/webserver.js +3 -0
  316. package/package.json +78 -0
@@ -0,0 +1,65 @@
1
+ import type { IAddress, ITokenizedVault } from '../../types';
2
+ /**
3
+ * Per-vault on-chain reads resolved ahead of the positions fan-out, so
4
+ * `getVaultPositions` / `getVaultAvailableRedemptions` can skip their own
5
+ * `balanceOf` / `lagDuration` RPCs. A missing field means the read was not
6
+ * (or could not be) prefetched — the getter falls back to its own call.
7
+ * @internal
8
+ */
9
+ export interface IPrefetchedVaultReads {
10
+ /** Raw share/receipt-token balance of the wallet (`balanceOf`). */
11
+ balance?: bigint;
12
+ /** Vault redemption lag in seconds (`lagDuration`). */
13
+ lagDuration?: number;
14
+ }
15
+ /**
16
+ * Minimal shape of a backend tokenized-vault row the prefetch needs. The
17
+ * full backend response type is looser than this; only these fields are read.
18
+ * @internal
19
+ */
20
+ interface IPrefetchableVault {
21
+ address: string;
22
+ chain: number;
23
+ chain_type?: string;
24
+ /**
25
+ * Backend vault kind. `getVaultVersionV2` reads this to classify evm-2
26
+ * (`multiAssetVault`) vaults whose address isn't in the hardcoded
27
+ * `MULTI_ASSET_VAULTS` list; without it such a vault would be misclassified
28
+ * as evm-1 and the batch would target the vault itself for `balanceOf`
29
+ * instead of its receipt token.
30
+ */
31
+ internal_type?: ITokenizedVault['internal_type'];
32
+ }
33
+ /**
34
+ * Batch the two non-cacheable per-vault reads (`balanceOf`, `lagDuration`)
35
+ * for a vault list via Multicall3, grouped by chain, ahead of the per-vault
36
+ * positions fan-out.
37
+ *
38
+ * Scope and fallback rules (task 52):
39
+ * - Only EVM vaults on chains with a configured provider AND a verified
40
+ * Multicall3 deployment are batched. Solana/Stellar vaults, unverified
41
+ * chains (e.g. Citrea 4114), and provider-less chains are skipped — they
42
+ * keep today's exact per-vault read path.
43
+ * - `balanceOf` targets the receipt token for evm-2 vaults (resolved through
44
+ * the same cached `getReceiptTokenAddress` the getters use) and the vault
45
+ * itself for evm-1. Without an EVM wallet only `lagDuration` is batched.
46
+ * - Failures never propagate: a reverting vault call is simply absent from
47
+ * the result map, and a whole-chain error drops that chain's entries. The
48
+ * worst case is always "no prefetch → per-vault fallback", never wrong data.
49
+ *
50
+ * RPC cost: per batched chain, `ceil(reads / 10)` `eth_call`s (+1 cold
51
+ * `lpTokenAddress` per evm-2 vault) instead of ~2 `eth_call`s per vault.
52
+ *
53
+ * @param vaults Backend tokenized-vault rows about to be fanned out over.
54
+ * @param wallet Optional EVM wallet for `balanceOf` reads.
55
+ * @param providers Chain-id → RPC-url map (the module's `this.providers`).
56
+ * @returns Map keyed by lowercased vault address; vaults with no batched
57
+ * reads have no entry.
58
+ * @internal
59
+ */
60
+ export declare function prefetchVaultPositionReads({ vaults, wallet, providers, }: {
61
+ vaults: IPrefetchableVault[];
62
+ wallet?: IAddress;
63
+ providers?: Partial<Record<number, string>>;
64
+ }): Promise<Map<string, IPrefetchedVaultReads>>;
65
+ export {};
@@ -0,0 +1,120 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.prefetchVaultPositionReads = prefetchVaultPositionReads;
4
+ const ethers_1 = require("ethers");
5
+ const abis_1 = require("../../abis");
6
+ const TokenizedVaultV2Receipt_1 = require("../../abis/TokenizedVaultV2Receipt");
7
+ const core_1 = require("../../core");
8
+ /**
9
+ * Batch the two non-cacheable per-vault reads (`balanceOf`, `lagDuration`)
10
+ * for a vault list via Multicall3, grouped by chain, ahead of the per-vault
11
+ * positions fan-out.
12
+ *
13
+ * Scope and fallback rules (task 52):
14
+ * - Only EVM vaults on chains with a configured provider AND a verified
15
+ * Multicall3 deployment are batched. Solana/Stellar vaults, unverified
16
+ * chains (e.g. Citrea 4114), and provider-less chains are skipped — they
17
+ * keep today's exact per-vault read path.
18
+ * - `balanceOf` targets the receipt token for evm-2 vaults (resolved through
19
+ * the same cached `getReceiptTokenAddress` the getters use) and the vault
20
+ * itself for evm-1. Without an EVM wallet only `lagDuration` is batched.
21
+ * - Failures never propagate: a reverting vault call is simply absent from
22
+ * the result map, and a whole-chain error drops that chain's entries. The
23
+ * worst case is always "no prefetch → per-vault fallback", never wrong data.
24
+ *
25
+ * RPC cost: per batched chain, `ceil(reads / 10)` `eth_call`s (+1 cold
26
+ * `lpTokenAddress` per evm-2 vault) instead of ~2 `eth_call`s per vault.
27
+ *
28
+ * @param vaults Backend tokenized-vault rows about to be fanned out over.
29
+ * @param wallet Optional EVM wallet for `balanceOf` reads.
30
+ * @param providers Chain-id → RPC-url map (the module's `this.providers`).
31
+ * @returns Map keyed by lowercased vault address; vaults with no batched
32
+ * reads have no entry.
33
+ * @internal
34
+ */
35
+ async function prefetchVaultPositionReads({ vaults, wallet, providers, }) {
36
+ const reads = new Map();
37
+ const hasWallet = !!(wallet && (0, ethers_1.isAddress)(wallet));
38
+ const byChain = new Map();
39
+ for (const v of vaults) {
40
+ if (!v?.address || !(0, ethers_1.isAddress)(v.address))
41
+ continue;
42
+ if (!(0, core_1.isMulticall3Supported)(v.chain))
43
+ continue;
44
+ if (!providers?.[v.chain])
45
+ continue;
46
+ const group = byChain.get(v.chain) ?? [];
47
+ group.push(v);
48
+ byChain.set(v.chain, group);
49
+ }
50
+ await Promise.all(Array.from(byChain.entries()).map(async ([chain, chainVaults]) => {
51
+ try {
52
+ // Same cache key as the getters (`createProvider(rpcUrl)` without a
53
+ // chainId) so the receipt-token/decimals caches stay shared.
54
+ const provider = (0, core_1.createProvider)(providers[chain]);
55
+ // Resolve each vault's `balanceOf` target — the receipt token for
56
+ // evm-2 vaults (one `lpTokenAddress` read each on a cold cache),
57
+ // the vault itself otherwise. Bound the fan-out to
58
+ // `MULTICALL3_BATCH_SIZE` concurrent reads (CLAUDE.md §4.1): a wallet
59
+ // with many uncached evm-2 vaults on one chain would otherwise burst
60
+ // N simultaneous reads before the aggregate3 batch even fires.
61
+ const balanceTargets = [];
62
+ for (let i = 0; i < chainVaults.length; i += core_1.MULTICALL3_BATCH_SIZE) {
63
+ const slice = chainVaults.slice(i, i + core_1.MULTICALL3_BATCH_SIZE);
64
+ const resolved = await Promise.all(slice.map(async (v) => {
65
+ if (!hasWallet)
66
+ return undefined;
67
+ if ((0, core_1.getVaultVersionV2)(v) === 'evm-2') {
68
+ // Cached + in-flight-deduped; a cold miss costs the same
69
+ // `lpTokenAddress` read the getter itself would make.
70
+ return (0, core_1.getReceiptTokenAddress)(provider, v.address);
71
+ }
72
+ return v.address;
73
+ }));
74
+ balanceTargets.push(...resolved);
75
+ }
76
+ const calls = [];
77
+ const slots = [];
78
+ chainVaults.forEach((v, i) => {
79
+ calls.push({
80
+ target: v.address,
81
+ abi: abis_1.ABI_LENDING_POOL_V2,
82
+ functionName: 'lagDuration',
83
+ });
84
+ slots.push({ address: v.address, field: 'lagDuration' });
85
+ const target = balanceTargets[i];
86
+ if (hasWallet && target && (0, ethers_1.isAddress)(target)) {
87
+ calls.push({
88
+ target: target,
89
+ abi: target === v.address
90
+ ? abis_1.ABI_LENDING_POOL_V2
91
+ : TokenizedVaultV2Receipt_1.ABI_TOKENIZED_VAULT_V2_RECEIPT,
92
+ functionName: 'balanceOf',
93
+ args: [wallet],
94
+ });
95
+ slots.push({ address: v.address, field: 'balance' });
96
+ }
97
+ });
98
+ const results = await (0, core_1.multicall3Aggregate)(provider, chain, calls);
99
+ results.forEach((r, i) => {
100
+ if (!r.success)
101
+ return;
102
+ const slot = slots[i];
103
+ const key = slot.address.toLowerCase();
104
+ const entry = reads.get(key) ?? {};
105
+ if (slot.field === 'lagDuration') {
106
+ entry.lagDuration = Number(r.value);
107
+ }
108
+ else {
109
+ entry.balance = BigInt(r.value);
110
+ }
111
+ reads.set(key, entry);
112
+ });
113
+ }
114
+ catch (e) {
115
+ core_1.Logger.log.warn('prefetchVaultPositionReads', `chain ${chain} prefetch failed — falling back to per-vault reads`, e);
116
+ }
117
+ }));
118
+ return reads;
119
+ }
120
+ //# sourceMappingURL=prefetch.js.map
@@ -0,0 +1,225 @@
1
+ import type { IAddress, IContractRunner, INormalizedNumber } from '../../types';
2
+ import type { IContractWriteOptions } from './write.actions';
3
+ /**
4
+ * Function to fetch instant redemption fee
5
+ * @param signer - signer / provider object
6
+ * @param options - object including pool contract address, user wallet address
7
+ * @returns normalized number object of the instant redemption fee
8
+ */
9
+ export declare function fetchInstantRedemptionFee(signer: IContractRunner, options: IContractWriteOptions): Promise<INormalizedNumber>;
10
+ /**
11
+ * allowance checks user's current allowance per pool
12
+ * @param signer - signer / provider object
13
+ * @param options - object including pool contract address, user wallet address
14
+ * @returns normalized number object of the user's current allowance
15
+ */
16
+ export declare function vaultAllowance(signer: IContractRunner, options: IContractWriteOptions): Promise<INormalizedNumber>;
17
+ /**
18
+ * Fetches the senders whitelist contract address from a whitelisted allocation vault
19
+ * @param signer - signer / provider object
20
+ * @param options - object including vault contract address
21
+ * @returns the senders whitelist contract address
22
+ */
23
+ export declare function sendersWhitelistAddress(signer: IContractRunner, options: {
24
+ vault: IAddress;
25
+ }): Promise<IAddress | undefined>;
26
+ /**
27
+ * Checks if an address is whitelisted on a whitelist contract
28
+ * @param signer - signer / provider object
29
+ * @param options - object including whitelist contract address and wallet address to check
30
+ * @returns boolean indicating if the address is whitelisted
31
+ */
32
+ export declare function isWhitelisted(signer: IContractRunner, options: {
33
+ whitelist: IAddress;
34
+ wallet: IAddress;
35
+ }): Promise<boolean | undefined>;
36
+ /**
37
+ * Fetches the total amount deposited by an address on a whitelist contract
38
+ * @param signer - signer / provider object
39
+ * @param options - object including whitelist contract address, wallet address, and vault address
40
+ * @returns normalized number of the deposited amount
41
+ */
42
+ export declare function getDeposited(signer: IContractRunner, options: {
43
+ whitelist: IAddress;
44
+ wallet: IAddress;
45
+ vault: IAddress;
46
+ }): Promise<INormalizedNumber | undefined>;
47
+ /**
48
+ * Fetches the remaining allocation for an address on a whitelist contract
49
+ * @param signer - signer / provider object
50
+ * @param options - object including whitelist contract address, wallet address, vault address, and optional deposit cap amount
51
+ * @returns the remaining allocation as normalized number
52
+ */
53
+ export declare function getRemainingAllocations(signer: IContractRunner, options: {
54
+ whitelist: IAddress;
55
+ wallet: IAddress;
56
+ vault: IAddress;
57
+ depositCapAmount?: bigint;
58
+ }): Promise<INormalizedNumber | undefined>;
59
+ export type IPreviewRwaRedemptionOptions = {
60
+ /** RwaRedeemSubaccount contract address */
61
+ target: IAddress;
62
+ /** Redeemable asset address (e.g. USDC, USDT) */
63
+ asset: IAddress;
64
+ /** Amount of vault shares to preview */
65
+ amount: string | bigint | number;
66
+ /** Decimals of the vault share token */
67
+ decimals: number;
68
+ /** Decimals of the output/redeemable asset */
69
+ outputDecimals: number;
70
+ };
71
+ /**
72
+ * Preview the output amount for an RWA instant redemption via the RwaRedeemSubaccount contract.
73
+ * @param signer - signer / provider object
74
+ * @param options - object including subaccount address, asset, amount, decimals, and outputDecimals
75
+ * @returns normalized number of the expected output amount (in output asset decimals)
76
+ */
77
+ export declare function previewRwaRedemption(signer: IContractRunner, options: IPreviewRwaRedemptionOptions): Promise<INormalizedNumber | undefined>;
78
+ /** Options for {@link previewDeposit}. */
79
+ export type IPreviewDepositOptions = {
80
+ /** Vault contract address. */
81
+ vault: IAddress;
82
+ /** Deposit amount in the deposit asset's smallest unit (raw bigint-shaped). */
83
+ amount: string | bigint | number;
84
+ /**
85
+ * Optional deposit asset. Required for multi-asset vaults (EVM-2); ignored
86
+ * for single-asset vaults where the underlying is implicit.
87
+ */
88
+ asset?: IAddress;
89
+ };
90
+ /** Options for {@link previewRedeem}. */
91
+ export type IPreviewRedeemOptions = {
92
+ /** Vault contract address. */
93
+ vault: IAddress;
94
+ /** Share amount in the vault share token's smallest unit (raw bigint-shaped). */
95
+ shares: string | bigint | number;
96
+ };
97
+ /** Options for {@link allowance}. */
98
+ export type IAllowanceOptions = {
99
+ /** Spender contract — usually the vault address. */
100
+ vault: IAddress;
101
+ /** Owner whose ERC-20 allowance is being queried. */
102
+ owner: IAddress;
103
+ /**
104
+ * Token whose allowance is queried. Defaults to the vault's underlying
105
+ * asset, resolved via `IERC4626.asset()`.
106
+ */
107
+ asset?: IAddress;
108
+ };
109
+ /** Options for {@link balanceOf}. */
110
+ export type IBalanceOfOptions = {
111
+ /** ERC-20 token address. */
112
+ asset: IAddress;
113
+ /** Owner whose balance is queried. */
114
+ owner: IAddress;
115
+ };
116
+ /** Options for {@link maxDeposit}. */
117
+ export type IMaxDepositOptions = {
118
+ /** Vault contract address. */
119
+ vault: IAddress;
120
+ /**
121
+ * Receiver address — passed to ERC-4626 `maxDeposit(address)` on single-
122
+ * asset vaults. Ignored by EVM-2 multi-asset vaults which expose a vault-
123
+ * level `maxDepositAmount()` without a receiver argument.
124
+ */
125
+ receiver?: IAddress;
126
+ };
127
+ /**
128
+ * Preview the number of shares that would be minted for a deposit, without
129
+ * touching on-chain state. Routes between single-asset ERC-4626 and EVM-2
130
+ * multi-asset vaults using the vault version detected from backend metadata.
131
+ *
132
+ * @returns The number of shares (raw on-chain units, share-token decimals).
133
+ * @throws AugustValidationError on invalid vault address or amount.
134
+ * @throws AugustSDKError when the underlying contract call fails.
135
+ *
136
+ * @example
137
+ * ```ts
138
+ * const shares = await augustSdk.evm.previewDeposit({
139
+ * vault: '0xE9B725010A9E419412ed67d0fA5f3A5f40159D32',
140
+ * amount: 1_000_000n, // 1 USDC (6 decimals)
141
+ * });
142
+ * ```
143
+ */
144
+ export declare function previewDeposit(signer: IContractRunner, options: IPreviewDepositOptions): Promise<bigint>;
145
+ /**
146
+ * Preview the number of underlying assets returned by redeeming a given
147
+ * number of shares, without touching on-chain state. Routes between single-
148
+ * asset ERC-4626 (`previewRedeem`) and EVM-2 multi-asset
149
+ * (`previewRedemption(shares, isInstant=false)`) using the vault version.
150
+ *
151
+ * @returns The assets that would be redeemed (raw on-chain units, asset
152
+ * decimals).
153
+ * @throws AugustValidationError on invalid vault or share input.
154
+ * @throws AugustSDKError when the underlying contract call fails.
155
+ *
156
+ * @example
157
+ * ```ts
158
+ * const assets = await augustSdk.evm.previewRedeem({
159
+ * vault: '0xE9B725010A9E419412ed67d0fA5f3A5f40159D32',
160
+ * shares: 1_000_000_000_000_000_000n, // 1 share (18 decimals)
161
+ * });
162
+ * ```
163
+ */
164
+ export declare function previewRedeem(signer: IContractRunner, options: IPreviewRedeemOptions): Promise<bigint>;
165
+ /**
166
+ * Read the ERC-20 allowance an `owner` has granted to a vault (the spender).
167
+ * If `asset` is omitted, the vault's underlying asset is resolved via
168
+ * `IERC4626.asset()` and used as the token.
169
+ *
170
+ * Returns a raw `bigint` to keep BigInt math precise — call
171
+ * {@link toNormalizedBn} if you need a UI-shaped {@link INormalizedNumber}.
172
+ *
173
+ * @returns Allowance in raw on-chain units of `asset`.
174
+ * @throws AugustValidationError on invalid addresses.
175
+ * @throws AugustSDKError when the underlying contract call fails.
176
+ *
177
+ * @example
178
+ * ```ts
179
+ * const raw = await augustSdk.evm.allowance({
180
+ * vault: '0xE9B725010A9E419412ed67d0fA5f3A5f40159D32',
181
+ * owner: walletAddress,
182
+ * });
183
+ * if (raw < requiredAmount) {
184
+ * await augustSdk.evm.vaultApprove({
185
+ * target: vault,
186
+ * wallet: walletAddress,
187
+ * amount: requiredAmount.toString(),
188
+ * });
189
+ * }
190
+ * ```
191
+ */
192
+ export declare function allowance(signer: IContractRunner, options: IAllowanceOptions): Promise<bigint>;
193
+ /**
194
+ * Read an ERC-20 balance directly. Returns the raw on-chain value as
195
+ * `bigint`; call {@link toNormalizedBn} if you need a {@link INormalizedNumber}.
196
+ *
197
+ * @returns Balance in raw on-chain units of `asset`.
198
+ * @throws AugustValidationError on invalid asset / owner addresses.
199
+ * @throws AugustSDKError when the underlying contract call fails.
200
+ *
201
+ * @example
202
+ * ```ts
203
+ * const raw = await augustSdk.evm.balanceOf({
204
+ * asset: '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48', // USDC
205
+ * owner: walletAddress,
206
+ * });
207
+ * ```
208
+ */
209
+ export declare function balanceOf(signer: IContractRunner, options: IBalanceOfOptions): Promise<bigint>;
210
+ /**
211
+ * Read the maximum deposit currently accepted by a vault. Routes between
212
+ * single-asset ERC-4626 (`maxDeposit(receiver)`) and EVM-2 multi-asset
213
+ * (`maxDepositAmount()`, vault-level cap, no receiver dependence).
214
+ *
215
+ * @returns Max deposit in raw on-chain units of the deposit asset.
216
+ * @throws AugustValidationError on invalid vault address.
217
+ * @throws AugustSDKError when the underlying contract call fails.
218
+ *
219
+ * @example
220
+ * ```ts
221
+ * const cap = await augustSdk.evm.maxDeposit({ vault });
222
+ * if (cap === 0n) showVaultIsFullToast();
223
+ * ```
224
+ */
225
+ export declare function maxDeposit(signer: IContractRunner, options: IMaxDepositOptions): Promise<bigint>;