@gauntlet-xyz/sdk 2.5.0 → 3.0.1

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 (346) hide show
  1. package/README.md +89 -6
  2. package/dist/api/activity.d.ts +1 -1
  3. package/dist/api/activity.d.ts.map +1 -1
  4. package/dist/api/caip.d.ts +1 -1
  5. package/dist/api/caip.d.ts.map +1 -1
  6. package/dist/api/client.d.ts +43 -5
  7. package/dist/api/client.d.ts.map +1 -1
  8. package/dist/api/errors.d.ts +1 -1
  9. package/dist/api/errors.d.ts.map +1 -1
  10. package/dist/api/generated.d.ts +570 -7
  11. package/dist/api/generated.d.ts.map +1 -1
  12. package/dist/api/index.d.ts +13 -13
  13. package/dist/api/index.d.ts.map +1 -1
  14. package/dist/api/index.js +48 -8
  15. package/dist/api/index.js.map +7 -1
  16. package/dist/api/positionHistory.d.ts +1 -1
  17. package/dist/api/positionHistory.d.ts.map +1 -1
  18. package/dist/attribution/index.d.ts +3 -3
  19. package/dist/attribution/index.d.ts.map +1 -1
  20. package/dist/chunk-7TA2OJUK.js +4364 -0
  21. package/dist/chunk-7TA2OJUK.js.map +7 -0
  22. package/dist/chunk-HC2BS7MK.js +439 -0
  23. package/dist/chunk-HC2BS7MK.js.map +7 -0
  24. package/dist/chunk-S2TTA45N.js +2009 -0
  25. package/dist/chunk-S2TTA45N.js.map +7 -0
  26. package/dist/chunk-STIV2CC4.js +57 -0
  27. package/dist/chunk-STIV2CC4.js.map +7 -0
  28. package/dist/chunk-SU6JAKIA.js +283 -0
  29. package/dist/chunk-SU6JAKIA.js.map +7 -0
  30. package/dist/cjs/api/activity.d.ts +70 -0
  31. package/dist/cjs/api/activity.d.ts.map +1 -0
  32. package/dist/cjs/api/activity.js +136 -0
  33. package/dist/cjs/api/activity.js.map +7 -0
  34. package/dist/cjs/api/caip.d.ts +29 -0
  35. package/dist/cjs/api/caip.d.ts.map +1 -0
  36. package/dist/cjs/api/caip.js +59 -0
  37. package/dist/cjs/api/caip.js.map +7 -0
  38. package/dist/cjs/api/client.d.ts +173 -0
  39. package/dist/cjs/api/client.d.ts.map +1 -0
  40. package/dist/cjs/api/client.js +171 -0
  41. package/dist/cjs/api/client.js.map +7 -0
  42. package/dist/cjs/api/decimal.d.ts +21 -0
  43. package/dist/cjs/api/decimal.d.ts.map +1 -0
  44. package/dist/cjs/api/decimal.js +60 -0
  45. package/dist/cjs/api/decimal.js.map +7 -0
  46. package/dist/cjs/api/errors.d.ts +32 -0
  47. package/dist/cjs/api/errors.d.ts.map +1 -0
  48. package/dist/cjs/api/errors.js +80 -0
  49. package/dist/cjs/api/errors.js.map +7 -0
  50. package/dist/cjs/api/generated.d.ts +2068 -0
  51. package/dist/cjs/api/generated.d.ts.map +1 -0
  52. package/dist/cjs/api/generated.js +17 -0
  53. package/dist/cjs/api/generated.js.map +7 -0
  54. package/dist/cjs/api/http.d.ts +16 -0
  55. package/dist/cjs/api/http.d.ts.map +1 -0
  56. package/dist/cjs/api/http.js +64 -0
  57. package/dist/cjs/api/http.js.map +7 -0
  58. package/dist/cjs/api/index.d.ts +14 -0
  59. package/dist/cjs/api/index.d.ts.map +1 -0
  60. package/dist/cjs/api/index.js +73 -0
  61. package/dist/cjs/api/index.js.map +7 -0
  62. package/dist/cjs/api/positionHistory.d.ts +44 -0
  63. package/dist/cjs/api/positionHistory.d.ts.map +1 -0
  64. package/dist/cjs/api/positionHistory.js +131 -0
  65. package/dist/cjs/api/positionHistory.js.map +7 -0
  66. package/dist/cjs/attribution/erc8021.d.ts +9 -0
  67. package/dist/cjs/attribution/erc8021.d.ts.map +1 -0
  68. package/dist/cjs/attribution/erc8021.js +37 -0
  69. package/dist/cjs/attribution/erc8021.js.map +7 -0
  70. package/dist/cjs/attribution/index.d.ts +25 -0
  71. package/dist/cjs/attribution/index.d.ts.map +1 -0
  72. package/dist/cjs/attribution/index.js +68 -0
  73. package/dist/cjs/attribution/index.js.map +7 -0
  74. package/dist/cjs/client.d.ts +72 -0
  75. package/dist/cjs/client.d.ts.map +1 -0
  76. package/dist/cjs/client.js +80 -0
  77. package/dist/cjs/client.js.map +7 -0
  78. package/dist/cjs/constants.d.ts +16 -0
  79. package/dist/cjs/constants.d.ts.map +1 -0
  80. package/dist/cjs/constants.js +83 -0
  81. package/dist/cjs/constants.js.map +7 -0
  82. package/dist/cjs/errors.d.ts +85 -0
  83. package/dist/cjs/errors.d.ts.map +1 -0
  84. package/dist/cjs/errors.js +210 -0
  85. package/dist/cjs/errors.js.map +7 -0
  86. package/dist/cjs/evm/abis/erc20.d.ts +41 -0
  87. package/dist/cjs/evm/abis/erc20.d.ts.map +1 -0
  88. package/dist/cjs/evm/abis/erc20.js +57 -0
  89. package/dist/cjs/evm/abis/erc20.js.map +7 -0
  90. package/dist/cjs/evm/abis/erc4626.d.ts +105 -0
  91. package/dist/cjs/evm/abis/erc4626.d.ts.map +1 -0
  92. package/dist/cjs/evm/abis/erc4626.js +97 -0
  93. package/dist/cjs/evm/abis/erc4626.js.map +7 -0
  94. package/dist/cjs/evm/abis/multiDepositorVault.d.ts +1048 -0
  95. package/dist/cjs/evm/abis/multiDepositorVault.d.ts.map +1 -0
  96. package/dist/cjs/evm/abis/multiDepositorVault.js +614 -0
  97. package/dist/cjs/evm/abis/multiDepositorVault.js.map +7 -0
  98. package/dist/cjs/evm/abis/priceAndFeeCalculator.d.ts +910 -0
  99. package/dist/cjs/evm/abis/priceAndFeeCalculator.d.ts.map +1 -0
  100. package/dist/cjs/evm/abis/priceAndFeeCalculator.js +517 -0
  101. package/dist/cjs/evm/abis/priceAndFeeCalculator.js.map +7 -0
  102. package/dist/cjs/evm/abis/priceAndFeeCalculatorV2.d.ts +277 -0
  103. package/dist/cjs/evm/abis/priceAndFeeCalculatorV2.d.ts.map +1 -0
  104. package/dist/cjs/evm/abis/priceAndFeeCalculatorV2.js +166 -0
  105. package/dist/cjs/evm/abis/priceAndFeeCalculatorV2.js.map +7 -0
  106. package/dist/cjs/evm/abis/provisioner.d.ts +4984 -0
  107. package/dist/cjs/evm/abis/provisioner.d.ts.map +1 -0
  108. package/dist/cjs/evm/abis/provisioner.js +2785 -0
  109. package/dist/cjs/evm/abis/provisioner.js.map +7 -0
  110. package/dist/cjs/evm/abis/provisionerV2.d.ts +740 -0
  111. package/dist/cjs/evm/abis/provisionerV2.d.ts.map +1 -0
  112. package/dist/cjs/evm/abis/provisionerV2.js +320 -0
  113. package/dist/cjs/evm/abis/provisionerV2.js.map +7 -0
  114. package/dist/cjs/evm/adapters/aera.d.ts +6 -0
  115. package/dist/cjs/evm/adapters/aera.d.ts.map +1 -0
  116. package/dist/cjs/evm/adapters/aera.js +491 -0
  117. package/dist/cjs/evm/adapters/aera.js.map +7 -0
  118. package/dist/cjs/evm/adapters/index.d.ts +3 -0
  119. package/dist/cjs/evm/adapters/index.d.ts.map +1 -0
  120. package/dist/cjs/evm/adapters/index.js +41 -0
  121. package/dist/cjs/evm/adapters/index.js.map +7 -0
  122. package/dist/cjs/evm/adapters/morpho.d.ts +3 -0
  123. package/dist/cjs/evm/adapters/morpho.d.ts.map +1 -0
  124. package/dist/cjs/evm/adapters/morpho.js +103 -0
  125. package/dist/cjs/evm/adapters/morpho.js.map +7 -0
  126. package/dist/cjs/evm/adapters/types.d.ts +84 -0
  127. package/dist/cjs/evm/adapters/types.d.ts.map +1 -0
  128. package/dist/cjs/evm/adapters/types.js +17 -0
  129. package/dist/cjs/evm/adapters/types.js.map +7 -0
  130. package/dist/cjs/evm/aeraContracts/priceAndFeeCalculator.d.ts +46 -0
  131. package/dist/cjs/evm/aeraContracts/priceAndFeeCalculator.d.ts.map +1 -0
  132. package/dist/cjs/evm/aeraContracts/priceAndFeeCalculator.js +223 -0
  133. package/dist/cjs/evm/aeraContracts/priceAndFeeCalculator.js.map +7 -0
  134. package/dist/cjs/evm/aeraContracts/readOptions.d.ts +8 -0
  135. package/dist/cjs/evm/aeraContracts/readOptions.d.ts.map +1 -0
  136. package/dist/cjs/evm/aeraContracts/readOptions.js +31 -0
  137. package/dist/cjs/evm/aeraContracts/readOptions.js.map +7 -0
  138. package/dist/cjs/evm/aeraContracts/v1.d.ts +2317 -0
  139. package/dist/cjs/evm/aeraContracts/v1.d.ts.map +1 -0
  140. package/dist/cjs/evm/aeraContracts/v1.js +120 -0
  141. package/dist/cjs/evm/aeraContracts/v1.js.map +7 -0
  142. package/dist/cjs/evm/aeraContracts/v2.d.ts +4538 -0
  143. package/dist/cjs/evm/aeraContracts/v2.d.ts.map +1 -0
  144. package/dist/cjs/evm/aeraContracts/v2.js +449 -0
  145. package/dist/cjs/evm/aeraContracts/v2.js.map +7 -0
  146. package/dist/cjs/evm/aeraContracts.d.ts +33 -0
  147. package/dist/cjs/evm/aeraContracts.d.ts.map +1 -0
  148. package/dist/cjs/evm/aeraContracts.js +224 -0
  149. package/dist/cjs/evm/aeraContracts.js.map +7 -0
  150. package/dist/cjs/evm/deposit.d.ts +50 -0
  151. package/dist/cjs/evm/deposit.d.ts.map +1 -0
  152. package/dist/cjs/evm/deposit.js +112 -0
  153. package/dist/cjs/evm/deposit.js.map +7 -0
  154. package/dist/cjs/evm/depositQuote.d.ts +32 -0
  155. package/dist/cjs/evm/depositQuote.d.ts.map +1 -0
  156. package/dist/cjs/evm/depositQuote.js +96 -0
  157. package/dist/cjs/evm/depositQuote.js.map +7 -0
  158. package/dist/cjs/evm/depositReceiverApproval.d.ts +17 -0
  159. package/dist/cjs/evm/depositReceiverApproval.d.ts.map +1 -0
  160. package/dist/cjs/evm/depositReceiverApproval.js +66 -0
  161. package/dist/cjs/evm/depositReceiverApproval.js.map +7 -0
  162. package/dist/cjs/evm/index.d.ts +28 -0
  163. package/dist/cjs/evm/index.d.ts.map +1 -0
  164. package/dist/cjs/evm/index.js +116 -0
  165. package/dist/cjs/evm/index.js.map +7 -0
  166. package/dist/cjs/evm/operationMode.d.ts +9 -0
  167. package/dist/cjs/evm/operationMode.d.ts.map +1 -0
  168. package/dist/cjs/evm/operationMode.js +65 -0
  169. package/dist/cjs/evm/operationMode.js.map +7 -0
  170. package/dist/cjs/evm/tokenModes.d.ts +22 -0
  171. package/dist/cjs/evm/tokenModes.d.ts.map +1 -0
  172. package/dist/cjs/evm/tokenModes.js +47 -0
  173. package/dist/cjs/evm/tokenModes.js.map +7 -0
  174. package/dist/cjs/evm/types.d.ts +34 -0
  175. package/dist/cjs/evm/types.d.ts.map +1 -0
  176. package/dist/cjs/evm/types.js +32 -0
  177. package/dist/cjs/evm/types.js.map +7 -0
  178. package/dist/cjs/evm/userCurrentBalance.d.ts +55 -0
  179. package/dist/cjs/evm/userCurrentBalance.d.ts.map +1 -0
  180. package/dist/cjs/evm/userCurrentBalance.js +225 -0
  181. package/dist/cjs/evm/userCurrentBalance.js.map +7 -0
  182. package/dist/cjs/evm/vaults.d.ts +44 -0
  183. package/dist/cjs/evm/vaults.d.ts.map +1 -0
  184. package/dist/cjs/evm/vaults.js +78 -0
  185. package/dist/cjs/evm/vaults.js.map +7 -0
  186. package/dist/cjs/evm/withdraw.d.ts +73 -0
  187. package/dist/cjs/evm/withdraw.d.ts.map +1 -0
  188. package/dist/cjs/evm/withdraw.js +161 -0
  189. package/dist/cjs/evm/withdraw.js.map +7 -0
  190. package/dist/cjs/evm/withdrawQuote.d.ts +135 -0
  191. package/dist/cjs/evm/withdrawQuote.d.ts.map +1 -0
  192. package/dist/cjs/evm/withdrawQuote.js +256 -0
  193. package/dist/cjs/evm/withdrawQuote.js.map +7 -0
  194. package/dist/cjs/index.d.ts +31 -0
  195. package/dist/cjs/index.d.ts.map +1 -0
  196. package/dist/cjs/index.js +128 -0
  197. package/dist/cjs/index.js.map +7 -0
  198. package/dist/cjs/package.json +1 -0
  199. package/dist/cjs/privy/index.d.ts +52 -0
  200. package/dist/cjs/privy/index.d.ts.map +1 -0
  201. package/dist/cjs/privy/index.js +57 -0
  202. package/dist/cjs/privy/index.js.map +7 -0
  203. package/dist/client.d.ts +4 -2
  204. package/dist/client.d.ts.map +1 -1
  205. package/dist/constants.d.ts.map +1 -1
  206. package/dist/errors.d.ts +4 -1
  207. package/dist/errors.d.ts.map +1 -1
  208. package/dist/evm/adapters/aera.d.ts +1 -1
  209. package/dist/evm/adapters/aera.d.ts.map +1 -1
  210. package/dist/evm/adapters/index.d.ts +1 -1
  211. package/dist/evm/adapters/index.d.ts.map +1 -1
  212. package/dist/evm/adapters/morpho.d.ts +1 -1
  213. package/dist/evm/adapters/morpho.d.ts.map +1 -1
  214. package/dist/evm/adapters/types.d.ts +5 -3
  215. package/dist/evm/adapters/types.d.ts.map +1 -1
  216. package/dist/evm/aeraContracts/priceAndFeeCalculator.d.ts +1 -1
  217. package/dist/evm/aeraContracts/priceAndFeeCalculator.d.ts.map +1 -1
  218. package/dist/evm/aeraContracts/v1.d.ts +2 -2
  219. package/dist/evm/aeraContracts/v1.d.ts.map +1 -1
  220. package/dist/evm/aeraContracts/v2.d.ts +25 -4
  221. package/dist/evm/aeraContracts/v2.d.ts.map +1 -1
  222. package/dist/evm/aeraContracts.d.ts +2 -2
  223. package/dist/evm/aeraContracts.d.ts.map +1 -1
  224. package/dist/evm/deposit.d.ts +4 -2
  225. package/dist/evm/deposit.d.ts.map +1 -1
  226. package/dist/evm/depositQuote.d.ts +32 -0
  227. package/dist/evm/depositQuote.d.ts.map +1 -0
  228. package/dist/evm/depositReceiverApproval.d.ts +2 -2
  229. package/dist/evm/depositReceiverApproval.d.ts.map +1 -1
  230. package/dist/evm/index.d.ts +27 -25
  231. package/dist/evm/index.d.ts.map +1 -1
  232. package/dist/evm/index.js +88 -12
  233. package/dist/evm/index.js.map +7 -1
  234. package/dist/evm/tokenModes.d.ts +2 -2
  235. package/dist/evm/tokenModes.d.ts.map +1 -1
  236. package/dist/evm/userCurrentBalance.d.ts +6 -2
  237. package/dist/evm/userCurrentBalance.d.ts.map +1 -1
  238. package/dist/evm/vaults.d.ts +2 -9
  239. package/dist/evm/vaults.d.ts.map +1 -1
  240. package/dist/evm/withdraw.d.ts +3 -3
  241. package/dist/evm/withdraw.d.ts.map +1 -1
  242. package/dist/evm/withdrawQuote.d.ts +14 -6
  243. package/dist/evm/withdrawQuote.d.ts.map +1 -1
  244. package/dist/index.d.ts +30 -28
  245. package/dist/index.d.ts.map +1 -1
  246. package/dist/index.js +139 -14
  247. package/dist/index.js.map +7 -1
  248. package/dist/manifest/vaults.json +1958 -0
  249. package/dist/privy/index.d.ts +1 -1
  250. package/dist/privy/index.d.ts.map +1 -1
  251. package/dist/privy/index.js +39 -48
  252. package/dist/privy/index.js.map +7 -1
  253. package/manifest/vaults.json +22 -395
  254. package/package.json +43 -9
  255. package/src/api/client.ts +69 -5
  256. package/src/api/generated.ts +570 -7
  257. package/src/api/index.ts +8 -0
  258. package/src/client.ts +4 -1
  259. package/src/constants.ts +2 -0
  260. package/src/errors.ts +7 -0
  261. package/src/evm/adapters/aera.ts +14 -11
  262. package/src/evm/adapters/types.ts +2 -0
  263. package/src/evm/aeraContracts/v2.ts +124 -16
  264. package/src/evm/deposit.ts +19 -7
  265. package/src/evm/depositQuote.ts +137 -0
  266. package/src/evm/index.ts +10 -1
  267. package/src/evm/userCurrentBalance.ts +12 -1
  268. package/src/evm/vaults.ts +0 -7
  269. package/src/evm/withdrawQuote.ts +125 -51
  270. package/src/index.ts +11 -2
  271. package/dist/api/activity.js +0 -154
  272. package/dist/api/activity.js.map +0 -1
  273. package/dist/api/caip.js +0 -38
  274. package/dist/api/caip.js.map +0 -1
  275. package/dist/api/client.js +0 -119
  276. package/dist/api/client.js.map +0 -1
  277. package/dist/api/decimal.js +0 -44
  278. package/dist/api/decimal.js.map +0 -1
  279. package/dist/api/errors.js +0 -41
  280. package/dist/api/errors.js.map +0 -1
  281. package/dist/api/generated.js +0 -6
  282. package/dist/api/generated.js.map +0 -1
  283. package/dist/api/http.js +0 -39
  284. package/dist/api/http.js.map +0 -1
  285. package/dist/api/positionHistory.js +0 -126
  286. package/dist/api/positionHistory.js.map +0 -1
  287. package/dist/attribution/erc8021.js +0 -17
  288. package/dist/attribution/erc8021.js.map +0 -1
  289. package/dist/attribution/index.js +0 -45
  290. package/dist/attribution/index.js.map +0 -1
  291. package/dist/client.js +0 -72
  292. package/dist/client.js.map +0 -1
  293. package/dist/constants.js +0 -28
  294. package/dist/constants.js.map +0 -1
  295. package/dist/errors.js +0 -134
  296. package/dist/errors.js.map +0 -1
  297. package/dist/evm/abis/erc20.js +0 -30
  298. package/dist/evm/abis/erc20.js.map +0 -1
  299. package/dist/evm/abis/erc4626.js +0 -70
  300. package/dist/evm/abis/erc4626.js.map +0 -1
  301. package/dist/evm/abis/multiDepositorVault.js +0 -587
  302. package/dist/evm/abis/multiDepositorVault.js.map +0 -1
  303. package/dist/evm/abis/priceAndFeeCalculator.js +0 -490
  304. package/dist/evm/abis/priceAndFeeCalculator.js.map +0 -1
  305. package/dist/evm/abis/priceAndFeeCalculatorV2.js +0 -141
  306. package/dist/evm/abis/priceAndFeeCalculatorV2.js.map +0 -1
  307. package/dist/evm/abis/provisioner.js +0 -2768
  308. package/dist/evm/abis/provisioner.js.map +0 -1
  309. package/dist/evm/abis/provisionerV2.js +0 -295
  310. package/dist/evm/abis/provisionerV2.js.map +0 -1
  311. package/dist/evm/adapters/aera.js +0 -280
  312. package/dist/evm/adapters/aera.js.map +0 -1
  313. package/dist/evm/adapters/index.js +0 -14
  314. package/dist/evm/adapters/index.js.map +0 -1
  315. package/dist/evm/adapters/morpho.js +0 -79
  316. package/dist/evm/adapters/morpho.js.map +0 -1
  317. package/dist/evm/adapters/types.js +0 -2
  318. package/dist/evm/adapters/types.js.map +0 -1
  319. package/dist/evm/aeraContracts/priceAndFeeCalculator.js +0 -174
  320. package/dist/evm/aeraContracts/priceAndFeeCalculator.js.map +0 -1
  321. package/dist/evm/aeraContracts/readOptions.js +0 -4
  322. package/dist/evm/aeraContracts/readOptions.js.map +0 -1
  323. package/dist/evm/aeraContracts/v1.js +0 -59
  324. package/dist/evm/aeraContracts/v1.js.map +0 -1
  325. package/dist/evm/aeraContracts/v2.js +0 -273
  326. package/dist/evm/aeraContracts/v2.js.map +0 -1
  327. package/dist/evm/aeraContracts.js +0 -195
  328. package/dist/evm/aeraContracts.js.map +0 -1
  329. package/dist/evm/deposit.js +0 -109
  330. package/dist/evm/deposit.js.map +0 -1
  331. package/dist/evm/depositReceiverApproval.js +0 -32
  332. package/dist/evm/depositReceiverApproval.js.map +0 -1
  333. package/dist/evm/operationMode.js +0 -41
  334. package/dist/evm/operationMode.js.map +0 -1
  335. package/dist/evm/tokenModes.js +0 -34
  336. package/dist/evm/tokenModes.js.map +0 -1
  337. package/dist/evm/types.js +0 -5
  338. package/dist/evm/types.js.map +0 -1
  339. package/dist/evm/userCurrentBalance.js +0 -211
  340. package/dist/evm/userCurrentBalance.js.map +0 -1
  341. package/dist/evm/vaults.js +0 -75
  342. package/dist/evm/vaults.js.map +0 -1
  343. package/dist/evm/withdraw.js +0 -177
  344. package/dist/evm/withdraw.js.map +0 -1
  345. package/dist/evm/withdrawQuote.js +0 -164
  346. package/dist/evm/withdrawQuote.js.map +0 -1
package/src/api/index.ts CHANGED
@@ -19,7 +19,10 @@ export type {
19
19
  TimeseriesMeta,
20
20
  TimeWindowOptions,
21
21
  TokenRef,
22
+ TvlBreakdownMode,
22
23
  TvlResponse,
24
+ TvlTimeseriesPoint,
25
+ TvlTimeseriesResponse,
23
26
  UserActivity,
24
27
  UserActivityResponse,
25
28
  UserAllPositionsResponse,
@@ -28,7 +31,12 @@ export type {
28
31
  UserPositionsTimeseriesResponse,
29
32
  VaultDetail,
30
33
  VaultDetailResponse,
34
+ VaultAllocations,
35
+ VaultAllocationsResponse,
31
36
  VaultMetrics,
37
+ VaultsOptions,
38
+ VaultGroupTimeseriesPoint,
39
+ VaultGroupTimeseriesResponse,
32
40
  VaultTimeseriesPoint,
33
41
  VaultTimeseriesResponse,
34
42
  } from './client';
package/src/client.ts CHANGED
@@ -20,6 +20,9 @@ export enum AttributionMode {
20
20
 
21
21
  export type ChainId = string | number;
22
22
 
23
+ /** The static vault manifest bundled with this SDK release; the GauntletClient default. */
24
+ export const bundledVaultManifest = bundledManifest as VaultManifest;
25
+
23
26
  export interface GauntletClientConfig {
24
27
  /** Gaia API key, sent as `x-api-key` on `client.api` requests. Anonymous access is rate-limited. */
25
28
  apiKey?: string;
@@ -68,7 +71,7 @@ export class GauntletClient {
68
71
  /** Typed client for the Gaia REST API (vaults, positions, activity, tvl, prices). */
69
72
  readonly api: GauntletApi;
70
73
 
71
- private _manifest: VaultManifest = bundledManifest as VaultManifest;
74
+ private _manifest: VaultManifest = bundledVaultManifest;
72
75
 
73
76
  constructor(config: GauntletClientConfig) {
74
77
  this.apiKey = config.apiKey;
package/src/constants.ts CHANGED
@@ -17,6 +17,7 @@ export const CHAIN_NAMES: Record<number, string> = {
17
17
  8453: 'base',
18
18
  42161: 'arbitrum',
19
19
  10: 'optimism',
20
+ 5042: 'arc',
20
21
  };
21
22
 
22
23
  // Approximate 3-day block lookback per chain based on avg block time.
@@ -25,6 +26,7 @@ export const BLOCKS_3_DAYS: Record<number, bigint> = {
25
26
  8453: 129_600n,
26
27
  42161: 1_036_800n,
27
28
  10: 129_600n,
29
+ 5042: 518_400n,
28
30
  };
29
31
  export const DEFAULT_BLOCKS_3_DAYS = 129_600n;
30
32
 
package/src/errors.ts CHANGED
@@ -202,3 +202,10 @@ export class InvalidSlippageBPSError extends GauntletSDKError {
202
202
  this.slippage = slippage;
203
203
  }
204
204
  }
205
+
206
+ export class InvalidSyncDepositBoundError extends GauntletSDKError {
207
+ constructor() {
208
+ super('Sync deposit minUnitsOut requires explicit sync mode and must be greater than zero');
209
+ this.name = 'InvalidSyncDepositBoundError';
210
+ }
211
+ }
@@ -225,6 +225,7 @@ export const aeraAdapter: EvmProtocolAdapter = {
225
225
  solverTip = DEFAULT_SOLVER_TIP,
226
226
  maxPriceAge = DEFAULT_MAX_PRICE_AGE,
227
227
  aeraRuntime,
228
+ minUnitsOut: requestedMinUnitsOut,
228
229
  } = params;
229
230
 
230
231
  const runtime = requireAeraRuntime(aeraRuntime);
@@ -238,17 +239,19 @@ export const aeraAdapter: EvmProtocolAdapter = {
238
239
  throw new UnsupportedFeatureError('Aera: sync operations on V1');
239
240
  }
240
241
 
241
- const tokensInForUnits = isAsync ? subtractSolverTip(amount, solverTip) : amount;
242
- const vaultUnits = await getDepositUnitsOut({
243
- publicClient,
244
- runtime,
245
- vault: vault.vaultAddress,
246
- token: asset.address,
247
- tokensIn: tokensInForUnits,
248
- isAsync,
249
- });
250
-
251
- const minUnitsOut = applySlippageDown(vaultUnits, slippageBps);
242
+ const minUnitsOut =
243
+ requestedMinUnitsOut ??
244
+ applySlippageDown(
245
+ await getDepositUnitsOut({
246
+ publicClient,
247
+ runtime,
248
+ vault: vault.vaultAddress,
249
+ token: asset.address,
250
+ tokensIn: isAsync ? subtractSolverTip(amount, solverTip) : amount,
251
+ isAsync,
252
+ }),
253
+ slippageBps
254
+ );
252
255
 
253
256
  if (isAsync) {
254
257
  const deadline = getRequestDeadline(vault.expirationDays);
@@ -38,6 +38,8 @@ export interface AdapterDepositParams {
38
38
  /** Maximum price age passed to async Aera provisioner requests. Defaults to 10 days. */
39
39
  maxPriceAge?: bigint;
40
40
  aeraRuntime?: AeraRuntimeContracts;
41
+ /** Caller-reviewed minimum output for an explicit synchronous deposit. */
42
+ minUnitsOut?: bigint;
41
43
  }
42
44
 
43
45
  export type AdapterWithdrawParams = {
@@ -4,11 +4,14 @@ import {
4
4
  type GetContractReturnType,
5
5
  type PublicClient,
6
6
  getContract,
7
+ zeroAddress,
7
8
  } from 'viem';
9
+ import { erc20Abi } from '../abis/erc20';
8
10
  import { priceAndFeeCalculatorV2Abi } from '../abis/priceAndFeeCalculatorV2';
9
11
  import { provisionerV2Abi } from '../abis/provisionerV2';
10
12
  import {
11
13
  Rounding,
14
+ convertTokenToNumeraire,
12
15
  convertTokenToUnitsIfActive,
13
16
  convertUnitsToTokenIfActive,
14
17
  } from './priceAndFeeCalculator';
@@ -74,7 +77,31 @@ async function getTokenDetails(
74
77
  });
75
78
  }
76
79
 
77
- async function getDepositUnitsOut({
80
+ /**
81
+ * Returns the vault's currently known sync-redeem liquidity in tokens.
82
+ *
83
+ * When a pull-funds pointer is configured, the provisioner may source more tokens during the
84
+ * redemption, so the vault's current token balance is not a reliable liquidity limit.
85
+ */
86
+ export async function getKnownSyncRedeemLiquidityTokens(
87
+ client: PublicClient,
88
+ vault: Address,
89
+ token: Address,
90
+ hasPullFundsSubmitData: boolean,
91
+ options: SyncRedeemReadOptions = {}
92
+ ): Promise<bigint | undefined> {
93
+ if (hasPullFundsSubmitData) return undefined;
94
+
95
+ return client.readContract({
96
+ address: token,
97
+ abi: erc20Abi,
98
+ functionName: 'balanceOf',
99
+ args: [vault],
100
+ ...readAtBlock(options),
101
+ });
102
+ }
103
+
104
+ async function getDepositQuote({
78
105
  client,
79
106
  provisioner,
80
107
  feeCalculator,
@@ -94,12 +121,12 @@ async function getDepositUnitsOut({
94
121
  tokensIn: bigint;
95
122
  multiplierIndex: 4 | 6;
96
123
  options?: SyncRedeemReadOptions;
97
- }): Promise<bigint> {
124
+ }): Promise<{ unitsOut: bigint; multiplierBps: bigint }> {
98
125
  const tokenDetails = await getTokenDetails(client, provisioner, token, options);
99
- const multiplier = BigInt(tokenDetails[multiplierIndex]);
100
- const adjustedTokensIn = (tokensIn * multiplier) / MAX_BPS;
126
+ const multiplierBps = BigInt(tokenDetails[multiplierIndex]);
127
+ const adjustedTokensIn = (tokensIn * multiplierBps) / MAX_BPS;
101
128
 
102
- return convertTokenToUnitsIfActive(
129
+ const unitsOut = await convertTokenToUnitsIfActive(
103
130
  client,
104
131
  feeCalculator,
105
132
  feeCalculatorVersion,
@@ -109,6 +136,8 @@ async function getDepositUnitsOut({
109
136
  Rounding.Floor,
110
137
  options
111
138
  );
139
+
140
+ return { unitsOut, multiplierBps };
112
141
  }
113
142
 
114
143
  async function getRedeemTokenOut({
@@ -198,20 +227,22 @@ export interface SyncRedeemRate {
198
227
  }
199
228
 
200
229
  /**
201
- * Reads the live sync redeem rate, replicating the provisioner's effective-multiplier
202
- * derivation (base multiplier minus a price-age-proportional dynamic premium).
230
+ * Reads the live sync redeem rate and whether pull-funds calldata is configured.
231
+ *
232
+ * Both values come from the same token-details read, avoiding another RPC request when a quote
233
+ * needs to determine whether the vault balance is a reliable liquidity limit.
203
234
  *
204
235
  * @throws {StalePriceError} If the oracle price is older than the configured max age,
205
236
  * in which case the on-chain sync redeem would revert.
206
237
  */
207
- export async function getSyncRedeemRate(
238
+ export async function getSyncRedeemRateContext(
208
239
  client: PublicClient,
209
240
  provisioner: Address,
210
241
  vault: Address,
211
242
  token: Address,
212
243
  feeCalculator: Address,
213
244
  options: SyncRedeemReadOptions = {}
214
- ): Promise<SyncRedeemRate> {
245
+ ): Promise<{ rate: SyncRedeemRate; hasPullFundsSubmitData: boolean }> {
215
246
  const readContext = await resolveReadContext(client, options);
216
247
  const [tokenDetails, syncRedeemDetails, anchorTimestamp] = await client.multicall({
217
248
  contracts: [
@@ -256,12 +287,28 @@ export async function getSyncRedeemRate(
256
287
  : ((blockTimestamp - priceTimestamp) * maxDynamicPremiumBps + maxPriceAge - 1n) / maxPriceAge;
257
288
 
258
289
  return {
259
- baseMultiplierBps,
260
- dynamicPremiumBps,
261
- effectiveMultiplierBps: baseMultiplierBps - dynamicPremiumBps,
290
+ rate: {
291
+ baseMultiplierBps,
292
+ dynamicPremiumBps,
293
+ effectiveMultiplierBps: baseMultiplierBps - dynamicPremiumBps,
294
+ },
295
+ hasPullFundsSubmitData: tokenDetails[9] !== zeroAddress,
262
296
  };
263
297
  }
264
298
 
299
+ /** Preserves the existing rate-only API for callers that do not need pull-funds state. */
300
+ export async function getSyncRedeemRate(
301
+ client: PublicClient,
302
+ provisioner: Address,
303
+ vault: Address,
304
+ token: Address,
305
+ feeCalculator: Address,
306
+ options: SyncRedeemReadOptions = {}
307
+ ): Promise<SyncRedeemRate> {
308
+ return (await getSyncRedeemRateContext(client, provisioner, vault, token, feeCalculator, options))
309
+ .rate;
310
+ }
311
+
265
312
  async function getSyncRedeemMultiplier(
266
313
  client: PublicClient,
267
314
  provisioner: Address,
@@ -315,7 +362,7 @@ export async function getAsyncDepositUnitsOut(
315
362
  token: Address,
316
363
  tokensIn: bigint
317
364
  ): Promise<bigint> {
318
- return getDepositUnitsOut({
365
+ const quote = await getDepositQuote({
319
366
  client,
320
367
  provisioner,
321
368
  feeCalculator,
@@ -325,9 +372,10 @@ export async function getAsyncDepositUnitsOut(
325
372
  tokensIn,
326
373
  multiplierIndex: 4,
327
374
  });
375
+ return quote.unitsOut;
328
376
  }
329
377
 
330
- export async function getSyncDepositUnitsOut(
378
+ const getSyncDepositQuote = (
331
379
  client: PublicClient,
332
380
  provisioner: Address,
333
381
  feeCalculator: Address,
@@ -335,8 +383,8 @@ export async function getSyncDepositUnitsOut(
335
383
  vault: Address,
336
384
  token: Address,
337
385
  tokensIn: bigint
338
- ): Promise<bigint> {
339
- return getDepositUnitsOut({
386
+ ) =>
387
+ getDepositQuote({
340
388
  client,
341
389
  provisioner,
342
390
  feeCalculator,
@@ -346,6 +394,66 @@ export async function getSyncDepositUnitsOut(
346
394
  tokensIn,
347
395
  multiplierIndex: 6,
348
396
  });
397
+
398
+ export async function getSyncDepositUnitsOut(
399
+ client: PublicClient,
400
+ provisioner: Address,
401
+ feeCalculator: Address,
402
+ feeCalculatorVersion: ContractVersion,
403
+ vault: Address,
404
+ token: Address,
405
+ tokensIn: bigint
406
+ ): Promise<bigint> {
407
+ const quote = await getSyncDepositQuote(
408
+ client,
409
+ provisioner,
410
+ feeCalculator,
411
+ feeCalculatorVersion,
412
+ vault,
413
+ token,
414
+ tokensIn
415
+ );
416
+ return quote.unitsOut;
417
+ }
418
+
419
+ export async function getSyncDepositQuoteValues(
420
+ client: PublicClient,
421
+ provisioner: Address,
422
+ feeCalculator: Address,
423
+ feeCalculatorVersion: ContractVersion,
424
+ vault: Address,
425
+ token: Address,
426
+ tokensIn: bigint
427
+ ): Promise<{ unitsOut: bigint; feeBps: bigint; numeraireOut: bigint }> {
428
+ const { unitsOut, multiplierBps } = await getSyncDepositQuote(
429
+ client,
430
+ provisioner,
431
+ feeCalculator,
432
+ feeCalculatorVersion,
433
+ vault,
434
+ token,
435
+ tokensIn
436
+ );
437
+ const numeraireOut = await convertTokenToNumeraire(
438
+ client,
439
+ feeCalculator,
440
+ feeCalculatorVersion,
441
+ vault,
442
+ token,
443
+ (tokensIn * multiplierBps) / MAX_BPS
444
+ );
445
+ return { unitsOut, feeBps: MAX_BPS - multiplierBps, numeraireOut };
446
+ }
447
+
448
+ /** Reads the live Instant Supply fee for a vault token, independent of the deposit amount. */
449
+ export async function getSyncDepositFeeBps(
450
+ client: PublicClient,
451
+ provisioner: Address,
452
+ token: Address,
453
+ options: SyncRedeemReadOptions = {}
454
+ ): Promise<bigint> {
455
+ const tokenDetails = await getTokenDetails(client, provisioner, token, options);
456
+ return MAX_BPS - BigInt(tokenDetails[6]);
349
457
  }
350
458
 
351
459
  export async function getAsyncRedeemTokenOut(
@@ -8,6 +8,7 @@ import {
8
8
  VaultNotFoundError,
9
9
  UnsupportedAssetError,
10
10
  InvalidSlippageBPSError,
11
+ InvalidSyncDepositBoundError,
11
12
  } from '../errors';
12
13
  import {
13
14
  resolveAeraRuntimeContracts,
@@ -40,6 +41,8 @@ export interface EvmDepositParams {
40
41
  solverTip?: bigint;
41
42
  /** Maximum price age passed to async Aera provisioner requests. Defaults to 10 days. */
42
43
  maxPriceAge?: bigint;
44
+ /** Caller-reviewed minimum output for an explicit Aera synchronous deposit. */
45
+ minUnitsOut?: bigint;
43
46
  }
44
47
 
45
48
  /**
@@ -74,13 +77,15 @@ export async function getDepositTx(
74
77
  client: GauntletClient,
75
78
  params: EvmDepositParams
76
79
  ): Promise<PreparedTx[]> {
80
+ const slippageBps = params.slippageBps ?? DEFAULT_BPS;
81
+ if (!Number.isInteger(slippageBps) || slippageBps < 0 || slippageBps > Number(MAX_BPS)) {
82
+ throw new InvalidSlippageBPSError(slippageBps);
83
+ }
77
84
  if (
78
- params.slippageBps !== undefined &&
79
- (!Number.isInteger(params.slippageBps) ||
80
- params.slippageBps < 0 ||
81
- params.slippageBps > Number(MAX_BPS))
85
+ params.minUnitsOut !== undefined &&
86
+ (typeof params.minUnitsOut !== 'bigint' || params.minUnitsOut <= 0n)
82
87
  ) {
83
- throw new InvalidSlippageBPSError(params.slippageBps);
88
+ throw new InvalidSyncDepositBoundError();
84
89
  }
85
90
 
86
91
  const resolved = await resolveVault(client, params.vaultId, params.chainId);
@@ -105,6 +110,12 @@ export async function getDepositTx(
105
110
  }
106
111
 
107
112
  const requestedDepositMode = parseOperationMode(params.vaultId, params.depositMode);
113
+ if (
114
+ params.minUnitsOut !== undefined &&
115
+ (protocol !== 'aera' || requestedDepositMode !== 'sync')
116
+ ) {
117
+ throw new InvalidSyncDepositBoundError();
118
+ }
108
119
  let modifiedDepositMode: OperationMode;
109
120
  let aeraRuntime: AeraRuntimeContracts | undefined;
110
121
 
@@ -159,12 +170,13 @@ export async function getDepositTx(
159
170
  async: modifiedDepositMode === 'async',
160
171
  asset: token,
161
172
  publicClient,
162
- slippageBps: params.slippageBps ?? DEFAULT_BPS,
173
+ slippageBps,
163
174
  solverTip: params.solverTip,
164
175
  maxPriceAge: params.maxPriceAge,
165
176
  aeraRuntime,
177
+ minUnitsOut: params.minUnitsOut,
166
178
  });
167
179
  steps.push(...depositSteps);
168
180
 
169
- return await Promise.all(steps.map((step) => encodeTransactionWithAttribution(client, step)));
181
+ return Promise.all(steps.map((step) => encodeTransactionWithAttribution(client, step)));
170
182
  }
@@ -0,0 +1,137 @@
1
+ import type { GauntletClient } from '../client';
2
+ import { DEFAULT_BPS, MAX_BPS } from '../constants';
3
+ import {
4
+ InvalidSlippageBPSError,
5
+ InvalidSyncDepositBoundError,
6
+ UnsupportedAssetError,
7
+ UnsupportedFeatureError,
8
+ VaultNotFoundError,
9
+ } from '../errors';
10
+ import {
11
+ applySlippageDown,
12
+ resolveAeraRuntimeContracts,
13
+ resolveAeraTokenModeSupport,
14
+ } from './aeraContracts';
15
+ import { getSyncDepositFeeBps, getSyncDepositQuoteValues } from './aeraContracts/v2';
16
+ import { resolveOperationMode } from './operationMode';
17
+ import { ContractVersion } from './types';
18
+ import { resolveVault } from './vaults';
19
+
20
+ export type SyncDepositQuote = Readonly<{
21
+ unitsOut: bigint;
22
+ minUnitsOut: bigint;
23
+ /** Deposit amount converted to the vault's numeraire, after the Instant Supply fee. */
24
+ numeraireOut: bigint;
25
+ /** Instant Supply fee applied to the deposited token amount, in basis points. */
26
+ feeBps: bigint;
27
+ /** Slippage tolerance used to derive `minUnitsOut`, in basis points. */
28
+ slippageBps: number;
29
+ }>;
30
+
31
+ export type SyncDepositQuoteParams = {
32
+ vaultId: string;
33
+ chainId?: number;
34
+ assetSymbol?: string;
35
+ amount: bigint;
36
+ slippageBps?: number;
37
+ };
38
+
39
+ export type SyncDepositRateParams = {
40
+ vaultId: string;
41
+ chainId?: number;
42
+ assetSymbol?: string;
43
+ };
44
+
45
+ export type SyncDepositRate = Readonly<{
46
+ /** Instant Supply fee, in basis points. Independent of the deposit amount. */
47
+ feeBps: bigint;
48
+ }>;
49
+
50
+ async function resolveSyncDepositContext(
51
+ client: GauntletClient,
52
+ params: SyncDepositRateParams,
53
+ readKind: 'quote' | 'rate'
54
+ ) {
55
+ const resolved = await resolveVault(client, params.vaultId, params.chainId);
56
+ if (!resolved) throw new VaultNotFoundError(params.vaultId, params.chainId);
57
+ if (resolved.protocol !== 'aera') {
58
+ throw new UnsupportedFeatureError(
59
+ readKind === 'quote'
60
+ ? 'Sync deposit quote is only available for Aera vaults'
61
+ : 'Sync deposit rate is only available for Aera vaults'
62
+ );
63
+ }
64
+
65
+ const { vault } = resolved;
66
+ const token =
67
+ vault.supplyToken.length > 1
68
+ ? vault.supplyToken.find(({ symbol }) => symbol === params.assetSymbol)
69
+ : vault.supplyToken[0];
70
+ if (!token) throw new UnsupportedAssetError(params.assetSymbol ?? 'unknown', params.vaultId);
71
+
72
+ const publicClient = client.getPublicClient(params.chainId ?? vault.chainId);
73
+ const runtime = await resolveAeraRuntimeContracts(publicClient, vault);
74
+ if (runtime.provisioner.version !== ContractVersion.V2) {
75
+ throw new UnsupportedFeatureError(
76
+ readKind === 'quote'
77
+ ? 'Sync deposit quote requires an Aera V2 provisioner'
78
+ : 'Sync deposit rate requires an Aera V2 provisioner'
79
+ );
80
+ }
81
+
82
+ const tokenModeSupport = await resolveAeraTokenModeSupport(publicClient, runtime, token.address, {
83
+ includeSyncModes: true,
84
+ });
85
+ resolveOperationMode(params.vaultId, 'sync', {
86
+ async: tokenModeSupport.asyncDeposit,
87
+ sync: tokenModeSupport.syncDeposit,
88
+ });
89
+
90
+ return { publicClient, vault, token, runtime };
91
+ }
92
+
93
+ /** Quotes an Aera synchronous deposit and its execution bounds. */
94
+ export async function getSyncDepositQuote(
95
+ client: GauntletClient,
96
+ params: SyncDepositQuoteParams
97
+ ): Promise<SyncDepositQuote> {
98
+ const slippageBps = params.slippageBps ?? DEFAULT_BPS;
99
+ if (!Number.isInteger(slippageBps) || slippageBps < 0 || slippageBps > Number(MAX_BPS)) {
100
+ throw new InvalidSlippageBPSError(slippageBps);
101
+ }
102
+
103
+ const { publicClient, vault, token, runtime } = await resolveSyncDepositContext(
104
+ client,
105
+ params,
106
+ 'quote'
107
+ );
108
+
109
+ const { unitsOut, feeBps, numeraireOut } = await getSyncDepositQuoteValues(
110
+ publicClient,
111
+ runtime.provisioner.address,
112
+ runtime.feeCalculator.address,
113
+ runtime.feeCalculator.version,
114
+ vault.vaultAddress,
115
+ token.address,
116
+ params.amount
117
+ );
118
+ const minUnitsOut = applySlippageDown(unitsOut, slippageBps);
119
+ if (minUnitsOut <= 0n) throw new InvalidSyncDepositBoundError();
120
+
121
+ return { unitsOut, minUnitsOut, numeraireOut, feeBps, slippageBps };
122
+ }
123
+
124
+ /** Reads the live Instant Supply fee for a vault token, without requiring a deposit amount. */
125
+ export async function getSyncDepositRate(
126
+ client: GauntletClient,
127
+ params: SyncDepositRateParams
128
+ ): Promise<SyncDepositRate> {
129
+ const { publicClient, runtime, token } = await resolveSyncDepositContext(client, params, 'rate');
130
+
131
+ const feeBps = await getSyncDepositFeeBps(
132
+ publicClient,
133
+ runtime.provisioner.address,
134
+ token.address
135
+ );
136
+ return { feeBps };
137
+ }
package/src/evm/index.ts CHANGED
@@ -1,7 +1,8 @@
1
1
  export { getDepositTx } from './deposit';
2
2
  export { getDepositReceiverApprovalTx } from './depositReceiverApproval';
3
+ export { getSyncDepositQuote, getSyncDepositRate } from './depositQuote';
3
4
  export { getWithdrawTx } from './withdraw';
4
- export { getSyncWithdrawQuote } from './withdrawQuote';
5
+ export { getSyncWithdrawQuote, getSyncWithdrawRate } from './withdrawQuote';
5
6
  export { getAeraTokenModeSupport } from './tokenModes';
6
7
  export { getUserCurrentBalance } from './userCurrentBalance';
7
8
  export { getVaults, VaultId } from './vaults';
@@ -14,6 +15,7 @@ export {
14
15
  ChainMismatchError,
15
16
  InvalidSlippageBPSError,
16
17
  InvalidSolverTipError,
18
+ InvalidSyncDepositBoundError,
17
19
  InvalidSyncWithdrawBoundError,
18
20
  InvalidWithdrawParamsError,
19
21
  RpcNotConfiguredError,
@@ -38,6 +40,12 @@ export {
38
40
 
39
41
  export type { EvmDepositParams } from './deposit';
40
42
  export type { EvmDepositReceiverApprovalParams } from './depositReceiverApproval';
43
+ export type {
44
+ SyncDepositQuote,
45
+ SyncDepositQuoteParams,
46
+ SyncDepositRate,
47
+ SyncDepositRateParams,
48
+ } from './depositQuote';
41
49
  export type { EvmWithdrawParams } from './withdraw';
42
50
  export type {
43
51
  SyncWithdrawQuote,
@@ -46,6 +54,7 @@ export type {
46
54
  SyncWithdrawQuoteContext,
47
55
  SyncWithdrawQuoteRequest,
48
56
  SyncWithdrawQuoteBounds,
57
+ SyncWithdrawRateParams,
49
58
  } from './withdrawQuote';
50
59
  export type { AeraTokenModeSupportParams } from './tokenModes';
51
60
  export type { SyncRedeemRate } from './aeraContracts/v2';
@@ -4,6 +4,7 @@ import type { EvmVaultDeployment } from './types';
4
4
  import { ChainMismatchError, UnsupportedProtocolError, VaultNotFoundError } from '../errors';
5
5
  import { getMultiDepositorVault, resolveAeraRuntimeContracts } from './aeraContracts';
6
6
  import { convertUnitsToToken } from './aeraContracts/priceAndFeeCalculator';
7
+ import { getUserUnitsRefundableUntil } from './aeraContracts/v2';
7
8
  import { provisionerV2Abi } from './abis/provisionerV2';
8
9
  import { ContractVersion } from './types';
9
10
  import { BLOCKS_3_DAYS, CHAIN_NAMES, DEFAULT_BLOCKS_3_DAYS, LOG_PAGE_SIZE } from '../constants';
@@ -59,6 +60,8 @@ export interface UserCurrentBalanceParams {
59
60
  export interface UserCurrentBalance {
60
61
  /** Chain identifier, e.g. "base" */
61
62
  chain: string;
63
+ /** EVM chain id of the deployment, e.g. 8453 */
64
+ chainId: number;
62
65
  token: Address;
63
66
  decimals: number;
64
67
  /** Assets queued via async deposit, not yet earning */
@@ -67,6 +70,8 @@ export interface UserCurrentBalance {
67
70
  balance: bigint;
68
71
  /** Assets queued via async withdraw, not yet claimable */
69
72
  pendingWithdraw: bigint;
73
+ /** Timestamp until which this account cannot redeem vault units. */
74
+ unitsLockedUntil?: bigint;
70
75
  }
71
76
 
72
77
  // V2 legacy wrapper calls can emit both receiver-aware and legacy events for one request.
@@ -101,6 +106,9 @@ async function queryDeploymentBalance(
101
106
  ]);
102
107
  const provisionerAddress = runtime.provisioner.address;
103
108
  const isV2 = runtime.provisioner.version === ContractVersion.V2;
109
+ const unitsLockedUntilPromise = isV2
110
+ ? getUserUnitsRefundableUntil(publicClient, provisionerAddress, address)
111
+ : Promise.resolve(undefined);
104
112
 
105
113
  const balance = await convertUnitsToToken(
106
114
  publicClient,
@@ -218,14 +226,17 @@ async function queryDeploymentBalance(
218
226
  pendingWithdrawUnits
219
227
  )
220
228
  : 0n;
229
+ const unitsLockedUntil = await unitsLockedUntilPromise;
221
230
 
222
231
  return {
223
232
  chain: CHAIN_NAMES[deployment.chainId] ?? `chain-${deployment.chainId}`,
233
+ chainId: deployment.chainId,
224
234
  token: token.address,
225
235
  decimals: token.decimals,
226
236
  pendingDeposit,
227
237
  balance,
228
238
  pendingWithdraw,
239
+ ...(unitsLockedUntil !== undefined ? { unitsLockedUntil } : {}),
229
240
  };
230
241
  }
231
242
 
@@ -256,7 +267,7 @@ async function queryDeploymentBalance(
256
267
  * vaultId: 'baseUsdcPrime',
257
268
  * address: '0xYourWalletAddress',
258
269
  * });
259
- * // [{ chain: 'base', token: '0x...', decimals: 6, balance: 100_000_000n, pendingDeposit: 0n, pendingWithdraw: 0n }]
270
+ * // [{ chain: 'base', chainId: 8453, token: '0x...', decimals: 6, balance: 100_000_000n, pendingDeposit: 0n, pendingWithdraw: 0n }]
260
271
  * ```
261
272
  */
262
273
  export async function getUserCurrentBalance(
package/src/evm/vaults.ts CHANGED
@@ -8,16 +8,9 @@ export enum VaultId {
8
8
  EthUsdcPrime = 'ethUsdcPrime',
9
9
  AeraUsdAlpha = 'gtusda',
10
10
  EthUsdcPrimeV2 = 'ethUsdcPrimeV2',
11
- AeraUsdAlphaStaging = 'stgusda',
12
- AeraUsdAlphaDev = 'devusda',
13
- AeraUsdAlphaDevDeux = 'devusda2',
14
11
  AeraLeveredFalconX = 'gpaafalconx',
15
- AeraLeveredFalconXStaging = 'pytstg',
16
12
  AeraSyrupUsdc = 'gpsyrupusdc',
17
- AeraSyrupUsdcStaging = 'syruppytstg',
18
13
  AeraBtcYield = 'gtbtc',
19
- AeraBtcYieldStaging = 'gtbtcstaging',
20
- AeraLeveredUsccStaging = 'gtusccstg',
21
14
  AeraLeveredUscc = 'gtuscc',
22
15
  AeraLend = 'gtlend',
23
16
  AeraKastEth = 'kasteth',