@gauntlet-xyz/sdk 2.5.0 → 3.1.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 (362) hide show
  1. package/README.md +121 -7
  2. package/dist/api/activity.d.ts +4 -2
  3. package/dist/api/activity.d.ts.map +1 -1
  4. package/dist/api/activityRows.d.ts +11 -0
  5. package/dist/api/activityRows.d.ts.map +1 -0
  6. package/dist/api/caip.d.ts +1 -1
  7. package/dist/api/caip.d.ts.map +1 -1
  8. package/dist/api/client.d.ts +43 -5
  9. package/dist/api/client.d.ts.map +1 -1
  10. package/dist/api/decimal.d.ts.map +1 -1
  11. package/dist/api/errors.d.ts +1 -1
  12. package/dist/api/errors.d.ts.map +1 -1
  13. package/dist/api/generated.d.ts +570 -7
  14. package/dist/api/generated.d.ts.map +1 -1
  15. package/dist/api/http.d.ts.map +1 -1
  16. package/dist/api/index.d.ts +13 -13
  17. package/dist/api/index.d.ts.map +1 -1
  18. package/dist/api/index.js +47 -8
  19. package/dist/api/index.js.map +7 -1
  20. package/dist/api/positionHistory.d.ts +1 -1
  21. package/dist/api/positionHistory.d.ts.map +1 -1
  22. package/dist/attribution/index.d.ts +8 -5
  23. package/dist/attribution/index.d.ts.map +1 -1
  24. package/dist/chunk-JJOLVL5V.js +546 -0
  25. package/dist/chunk-JJOLVL5V.js.map +7 -0
  26. package/dist/chunk-JRSNLXFY.js +2009 -0
  27. package/dist/chunk-JRSNLXFY.js.map +7 -0
  28. package/dist/chunk-MEKISE2T.js +367 -0
  29. package/dist/chunk-MEKISE2T.js.map +7 -0
  30. package/dist/chunk-YQXTLIJA.js +4477 -0
  31. package/dist/chunk-YQXTLIJA.js.map +7 -0
  32. package/dist/cjs/api/activity.d.ts +72 -0
  33. package/dist/cjs/api/activity.d.ts.map +1 -0
  34. package/dist/cjs/api/activity.js +138 -0
  35. package/dist/cjs/api/activity.js.map +7 -0
  36. package/dist/cjs/api/activityRows.d.ts +11 -0
  37. package/dist/cjs/api/activityRows.d.ts.map +1 -0
  38. package/dist/cjs/api/activityRows.js +139 -0
  39. package/dist/cjs/api/activityRows.js.map +7 -0
  40. package/dist/cjs/api/caip.d.ts +29 -0
  41. package/dist/cjs/api/caip.d.ts.map +1 -0
  42. package/dist/cjs/api/caip.js +61 -0
  43. package/dist/cjs/api/caip.js.map +7 -0
  44. package/dist/cjs/api/client.d.ts +173 -0
  45. package/dist/cjs/api/client.d.ts.map +1 -0
  46. package/dist/cjs/api/client.js +199 -0
  47. package/dist/cjs/api/client.js.map +7 -0
  48. package/dist/cjs/api/decimal.d.ts +21 -0
  49. package/dist/cjs/api/decimal.d.ts.map +1 -0
  50. package/dist/cjs/api/decimal.js +61 -0
  51. package/dist/cjs/api/decimal.js.map +7 -0
  52. package/dist/cjs/api/errors.d.ts +32 -0
  53. package/dist/cjs/api/errors.d.ts.map +1 -0
  54. package/dist/cjs/api/errors.js +80 -0
  55. package/dist/cjs/api/errors.js.map +7 -0
  56. package/dist/cjs/api/generated.d.ts +2068 -0
  57. package/dist/cjs/api/generated.d.ts.map +1 -0
  58. package/dist/cjs/api/generated.js +17 -0
  59. package/dist/cjs/api/generated.js.map +7 -0
  60. package/dist/cjs/api/http.d.ts +16 -0
  61. package/dist/cjs/api/http.d.ts.map +1 -0
  62. package/dist/cjs/api/http.js +65 -0
  63. package/dist/cjs/api/http.js.map +7 -0
  64. package/dist/cjs/api/index.d.ts +14 -0
  65. package/dist/cjs/api/index.d.ts.map +1 -0
  66. package/dist/cjs/api/index.js +73 -0
  67. package/dist/cjs/api/index.js.map +7 -0
  68. package/dist/cjs/api/positionHistory.d.ts +44 -0
  69. package/dist/cjs/api/positionHistory.d.ts.map +1 -0
  70. package/dist/cjs/api/positionHistory.js +144 -0
  71. package/dist/cjs/api/positionHistory.js.map +7 -0
  72. package/dist/cjs/attribution/erc8021.d.ts +9 -0
  73. package/dist/cjs/attribution/erc8021.d.ts.map +1 -0
  74. package/dist/cjs/attribution/erc8021.js +37 -0
  75. package/dist/cjs/attribution/erc8021.js.map +7 -0
  76. package/dist/cjs/attribution/index.d.ts +28 -0
  77. package/dist/cjs/attribution/index.d.ts.map +1 -0
  78. package/dist/cjs/attribution/index.js +70 -0
  79. package/dist/cjs/attribution/index.js.map +7 -0
  80. package/dist/cjs/client.d.ts +72 -0
  81. package/dist/cjs/client.d.ts.map +1 -0
  82. package/dist/cjs/client.js +80 -0
  83. package/dist/cjs/client.js.map +7 -0
  84. package/dist/cjs/constants.d.ts +16 -0
  85. package/dist/cjs/constants.d.ts.map +1 -0
  86. package/dist/cjs/constants.js +83 -0
  87. package/dist/cjs/constants.js.map +7 -0
  88. package/dist/cjs/errors.d.ts +85 -0
  89. package/dist/cjs/errors.d.ts.map +1 -0
  90. package/dist/cjs/errors.js +210 -0
  91. package/dist/cjs/errors.js.map +7 -0
  92. package/dist/cjs/evm/abis/erc20.d.ts +41 -0
  93. package/dist/cjs/evm/abis/erc20.d.ts.map +1 -0
  94. package/dist/cjs/evm/abis/erc20.js +57 -0
  95. package/dist/cjs/evm/abis/erc20.js.map +7 -0
  96. package/dist/cjs/evm/abis/erc4626.d.ts +105 -0
  97. package/dist/cjs/evm/abis/erc4626.d.ts.map +1 -0
  98. package/dist/cjs/evm/abis/erc4626.js +97 -0
  99. package/dist/cjs/evm/abis/erc4626.js.map +7 -0
  100. package/dist/cjs/evm/abis/multiDepositorVault.d.ts +1048 -0
  101. package/dist/cjs/evm/abis/multiDepositorVault.d.ts.map +1 -0
  102. package/dist/cjs/evm/abis/multiDepositorVault.js +614 -0
  103. package/dist/cjs/evm/abis/multiDepositorVault.js.map +7 -0
  104. package/dist/cjs/evm/abis/priceAndFeeCalculator.d.ts +910 -0
  105. package/dist/cjs/evm/abis/priceAndFeeCalculator.d.ts.map +1 -0
  106. package/dist/cjs/evm/abis/priceAndFeeCalculator.js +517 -0
  107. package/dist/cjs/evm/abis/priceAndFeeCalculator.js.map +7 -0
  108. package/dist/cjs/evm/abis/priceAndFeeCalculatorV2.d.ts +277 -0
  109. package/dist/cjs/evm/abis/priceAndFeeCalculatorV2.d.ts.map +1 -0
  110. package/dist/cjs/evm/abis/priceAndFeeCalculatorV2.js +166 -0
  111. package/dist/cjs/evm/abis/priceAndFeeCalculatorV2.js.map +7 -0
  112. package/dist/cjs/evm/abis/provisioner.d.ts +4984 -0
  113. package/dist/cjs/evm/abis/provisioner.d.ts.map +1 -0
  114. package/dist/cjs/evm/abis/provisioner.js +2785 -0
  115. package/dist/cjs/evm/abis/provisioner.js.map +7 -0
  116. package/dist/cjs/evm/abis/provisionerV2.d.ts +740 -0
  117. package/dist/cjs/evm/abis/provisionerV2.d.ts.map +1 -0
  118. package/dist/cjs/evm/abis/provisionerV2.js +320 -0
  119. package/dist/cjs/evm/abis/provisionerV2.js.map +7 -0
  120. package/dist/cjs/evm/adapters/aera.d.ts +6 -0
  121. package/dist/cjs/evm/adapters/aera.d.ts.map +1 -0
  122. package/dist/cjs/evm/adapters/aera.js +500 -0
  123. package/dist/cjs/evm/adapters/aera.js.map +7 -0
  124. package/dist/cjs/evm/adapters/index.d.ts +3 -0
  125. package/dist/cjs/evm/adapters/index.d.ts.map +1 -0
  126. package/dist/cjs/evm/adapters/index.js +41 -0
  127. package/dist/cjs/evm/adapters/index.js.map +7 -0
  128. package/dist/cjs/evm/adapters/morpho.d.ts +3 -0
  129. package/dist/cjs/evm/adapters/morpho.d.ts.map +1 -0
  130. package/dist/cjs/evm/adapters/morpho.js +103 -0
  131. package/dist/cjs/evm/adapters/morpho.js.map +7 -0
  132. package/dist/cjs/evm/adapters/types.d.ts +85 -0
  133. package/dist/cjs/evm/adapters/types.d.ts.map +1 -0
  134. package/dist/cjs/evm/adapters/types.js +17 -0
  135. package/dist/cjs/evm/adapters/types.js.map +7 -0
  136. package/dist/cjs/evm/aeraContracts/priceAndFeeCalculator.d.ts +46 -0
  137. package/dist/cjs/evm/aeraContracts/priceAndFeeCalculator.d.ts.map +1 -0
  138. package/dist/cjs/evm/aeraContracts/priceAndFeeCalculator.js +223 -0
  139. package/dist/cjs/evm/aeraContracts/priceAndFeeCalculator.js.map +7 -0
  140. package/dist/cjs/evm/aeraContracts/readOptions.d.ts +8 -0
  141. package/dist/cjs/evm/aeraContracts/readOptions.d.ts.map +1 -0
  142. package/dist/cjs/evm/aeraContracts/readOptions.js +31 -0
  143. package/dist/cjs/evm/aeraContracts/readOptions.js.map +7 -0
  144. package/dist/cjs/evm/aeraContracts/v1.d.ts +2317 -0
  145. package/dist/cjs/evm/aeraContracts/v1.d.ts.map +1 -0
  146. package/dist/cjs/evm/aeraContracts/v1.js +120 -0
  147. package/dist/cjs/evm/aeraContracts/v1.js.map +7 -0
  148. package/dist/cjs/evm/aeraContracts/v2.d.ts +4538 -0
  149. package/dist/cjs/evm/aeraContracts/v2.d.ts.map +1 -0
  150. package/dist/cjs/evm/aeraContracts/v2.js +449 -0
  151. package/dist/cjs/evm/aeraContracts/v2.js.map +7 -0
  152. package/dist/cjs/evm/aeraContracts.d.ts +33 -0
  153. package/dist/cjs/evm/aeraContracts.d.ts.map +1 -0
  154. package/dist/cjs/evm/aeraContracts.js +234 -0
  155. package/dist/cjs/evm/aeraContracts.js.map +7 -0
  156. package/dist/cjs/evm/deposit.d.ts +51 -0
  157. package/dist/cjs/evm/deposit.d.ts.map +1 -0
  158. package/dist/cjs/evm/deposit.js +142 -0
  159. package/dist/cjs/evm/deposit.js.map +7 -0
  160. package/dist/cjs/evm/depositQuote.d.ts +32 -0
  161. package/dist/cjs/evm/depositQuote.d.ts.map +1 -0
  162. package/dist/cjs/evm/depositQuote.js +97 -0
  163. package/dist/cjs/evm/depositQuote.js.map +7 -0
  164. package/dist/cjs/evm/depositReceiverApproval.d.ts +17 -0
  165. package/dist/cjs/evm/depositReceiverApproval.d.ts.map +1 -0
  166. package/dist/cjs/evm/depositReceiverApproval.js +71 -0
  167. package/dist/cjs/evm/depositReceiverApproval.js.map +7 -0
  168. package/dist/cjs/evm/index.d.ts +28 -0
  169. package/dist/cjs/evm/index.d.ts.map +1 -0
  170. package/dist/cjs/evm/index.js +116 -0
  171. package/dist/cjs/evm/index.js.map +7 -0
  172. package/dist/cjs/evm/operationMode.d.ts +9 -0
  173. package/dist/cjs/evm/operationMode.d.ts.map +1 -0
  174. package/dist/cjs/evm/operationMode.js +65 -0
  175. package/dist/cjs/evm/operationMode.js.map +7 -0
  176. package/dist/cjs/evm/tokenModes.d.ts +22 -0
  177. package/dist/cjs/evm/tokenModes.d.ts.map +1 -0
  178. package/dist/cjs/evm/tokenModes.js +47 -0
  179. package/dist/cjs/evm/tokenModes.js.map +7 -0
  180. package/dist/cjs/evm/types.d.ts +34 -0
  181. package/dist/cjs/evm/types.d.ts.map +1 -0
  182. package/dist/cjs/evm/types.js +32 -0
  183. package/dist/cjs/evm/types.js.map +7 -0
  184. package/dist/cjs/evm/userCurrentBalance.d.ts +69 -0
  185. package/dist/cjs/evm/userCurrentBalance.d.ts.map +1 -0
  186. package/dist/cjs/evm/userCurrentBalance.js +268 -0
  187. package/dist/cjs/evm/userCurrentBalance.js.map +7 -0
  188. package/dist/cjs/evm/vaults.d.ts +44 -0
  189. package/dist/cjs/evm/vaults.d.ts.map +1 -0
  190. package/dist/cjs/evm/vaults.js +78 -0
  191. package/dist/cjs/evm/vaults.js.map +7 -0
  192. package/dist/cjs/evm/withdraw.d.ts +75 -0
  193. package/dist/cjs/evm/withdraw.d.ts.map +1 -0
  194. package/dist/cjs/evm/withdraw.js +174 -0
  195. package/dist/cjs/evm/withdraw.js.map +7 -0
  196. package/dist/cjs/evm/withdrawQuote.d.ts +135 -0
  197. package/dist/cjs/evm/withdrawQuote.d.ts.map +1 -0
  198. package/dist/cjs/evm/withdrawQuote.js +257 -0
  199. package/dist/cjs/evm/withdrawQuote.js.map +7 -0
  200. package/dist/cjs/index.d.ts +31 -0
  201. package/dist/cjs/index.d.ts.map +1 -0
  202. package/dist/cjs/index.js +128 -0
  203. package/dist/cjs/index.js.map +7 -0
  204. package/dist/cjs/package.json +1 -0
  205. package/dist/cjs/privy/index.d.ts +52 -0
  206. package/dist/cjs/privy/index.d.ts.map +1 -0
  207. package/dist/cjs/privy/index.js +57 -0
  208. package/dist/cjs/privy/index.js.map +7 -0
  209. package/dist/client.d.ts +4 -2
  210. package/dist/client.d.ts.map +1 -1
  211. package/dist/constants.d.ts.map +1 -1
  212. package/dist/errors.d.ts +4 -1
  213. package/dist/errors.d.ts.map +1 -1
  214. package/dist/evm/adapters/aera.d.ts +1 -1
  215. package/dist/evm/adapters/aera.d.ts.map +1 -1
  216. package/dist/evm/adapters/index.d.ts +1 -1
  217. package/dist/evm/adapters/index.d.ts.map +1 -1
  218. package/dist/evm/adapters/morpho.d.ts +1 -1
  219. package/dist/evm/adapters/morpho.d.ts.map +1 -1
  220. package/dist/evm/adapters/types.d.ts +6 -3
  221. package/dist/evm/adapters/types.d.ts.map +1 -1
  222. package/dist/evm/aeraContracts/priceAndFeeCalculator.d.ts +1 -1
  223. package/dist/evm/aeraContracts/priceAndFeeCalculator.d.ts.map +1 -1
  224. package/dist/evm/aeraContracts/v1.d.ts +2 -2
  225. package/dist/evm/aeraContracts/v1.d.ts.map +1 -1
  226. package/dist/evm/aeraContracts/v2.d.ts +25 -4
  227. package/dist/evm/aeraContracts/v2.d.ts.map +1 -1
  228. package/dist/evm/aeraContracts.d.ts +2 -2
  229. package/dist/evm/aeraContracts.d.ts.map +1 -1
  230. package/dist/evm/deposit.d.ts +7 -4
  231. package/dist/evm/deposit.d.ts.map +1 -1
  232. package/dist/evm/depositQuote.d.ts +32 -0
  233. package/dist/evm/depositQuote.d.ts.map +1 -0
  234. package/dist/evm/depositReceiverApproval.d.ts +2 -2
  235. package/dist/evm/depositReceiverApproval.d.ts.map +1 -1
  236. package/dist/evm/index.d.ts +27 -25
  237. package/dist/evm/index.d.ts.map +1 -1
  238. package/dist/evm/index.js +86 -12
  239. package/dist/evm/index.js.map +7 -1
  240. package/dist/evm/tokenModes.d.ts +2 -2
  241. package/dist/evm/tokenModes.d.ts.map +1 -1
  242. package/dist/evm/userCurrentBalance.d.ts +21 -3
  243. package/dist/evm/userCurrentBalance.d.ts.map +1 -1
  244. package/dist/evm/vaults.d.ts +2 -9
  245. package/dist/evm/vaults.d.ts.map +1 -1
  246. package/dist/evm/withdraw.d.ts +5 -3
  247. package/dist/evm/withdraw.d.ts.map +1 -1
  248. package/dist/evm/withdrawQuote.d.ts +14 -6
  249. package/dist/evm/withdrawQuote.d.ts.map +1 -1
  250. package/dist/index.d.ts +30 -28
  251. package/dist/index.d.ts.map +1 -1
  252. package/dist/index.js +137 -14
  253. package/dist/index.js.map +7 -1
  254. package/dist/manifest/vaults.json +1958 -0
  255. package/dist/privy/index.d.ts +1 -1
  256. package/dist/privy/index.d.ts.map +1 -1
  257. package/dist/privy/index.js +39 -48
  258. package/dist/privy/index.js.map +7 -1
  259. package/manifest/vaults.json +22 -395
  260. package/package.json +43 -9
  261. package/src/api/activity.ts +18 -15
  262. package/src/api/activityRows.ts +143 -0
  263. package/src/api/caip.ts +3 -1
  264. package/src/api/client.ts +105 -6
  265. package/src/api/decimal.ts +1 -0
  266. package/src/api/generated.ts +570 -7
  267. package/src/api/http.ts +1 -0
  268. package/src/api/index.ts +8 -0
  269. package/src/api/positionHistory.ts +20 -5
  270. package/src/attribution/index.ts +6 -2
  271. package/src/client.ts +4 -1
  272. package/src/constants.ts +2 -0
  273. package/src/errors.ts +7 -0
  274. package/src/evm/adapters/aera.ts +40 -19
  275. package/src/evm/adapters/types.ts +3 -0
  276. package/src/evm/aeraContracts/v2.ts +124 -16
  277. package/src/evm/aeraContracts.ts +29 -14
  278. package/src/evm/deposit.ts +61 -18
  279. package/src/evm/depositQuote.ts +138 -0
  280. package/src/evm/depositReceiverApproval.ts +14 -9
  281. package/src/evm/index.ts +10 -1
  282. package/src/evm/userCurrentBalance.ts +155 -60
  283. package/src/evm/vaults.ts +0 -7
  284. package/src/evm/withdraw.ts +20 -1
  285. package/src/evm/withdrawQuote.ts +126 -51
  286. package/src/index.ts +11 -2
  287. package/dist/api/activity.js +0 -154
  288. package/dist/api/activity.js.map +0 -1
  289. package/dist/api/caip.js +0 -38
  290. package/dist/api/caip.js.map +0 -1
  291. package/dist/api/client.js +0 -119
  292. package/dist/api/client.js.map +0 -1
  293. package/dist/api/decimal.js +0 -44
  294. package/dist/api/decimal.js.map +0 -1
  295. package/dist/api/errors.js +0 -41
  296. package/dist/api/errors.js.map +0 -1
  297. package/dist/api/generated.js +0 -6
  298. package/dist/api/generated.js.map +0 -1
  299. package/dist/api/http.js +0 -39
  300. package/dist/api/http.js.map +0 -1
  301. package/dist/api/positionHistory.js +0 -126
  302. package/dist/api/positionHistory.js.map +0 -1
  303. package/dist/attribution/erc8021.js +0 -17
  304. package/dist/attribution/erc8021.js.map +0 -1
  305. package/dist/attribution/index.js +0 -45
  306. package/dist/attribution/index.js.map +0 -1
  307. package/dist/client.js +0 -72
  308. package/dist/client.js.map +0 -1
  309. package/dist/constants.js +0 -28
  310. package/dist/constants.js.map +0 -1
  311. package/dist/errors.js +0 -134
  312. package/dist/errors.js.map +0 -1
  313. package/dist/evm/abis/erc20.js +0 -30
  314. package/dist/evm/abis/erc20.js.map +0 -1
  315. package/dist/evm/abis/erc4626.js +0 -70
  316. package/dist/evm/abis/erc4626.js.map +0 -1
  317. package/dist/evm/abis/multiDepositorVault.js +0 -587
  318. package/dist/evm/abis/multiDepositorVault.js.map +0 -1
  319. package/dist/evm/abis/priceAndFeeCalculator.js +0 -490
  320. package/dist/evm/abis/priceAndFeeCalculator.js.map +0 -1
  321. package/dist/evm/abis/priceAndFeeCalculatorV2.js +0 -141
  322. package/dist/evm/abis/priceAndFeeCalculatorV2.js.map +0 -1
  323. package/dist/evm/abis/provisioner.js +0 -2768
  324. package/dist/evm/abis/provisioner.js.map +0 -1
  325. package/dist/evm/abis/provisionerV2.js +0 -295
  326. package/dist/evm/abis/provisionerV2.js.map +0 -1
  327. package/dist/evm/adapters/aera.js +0 -280
  328. package/dist/evm/adapters/aera.js.map +0 -1
  329. package/dist/evm/adapters/index.js +0 -14
  330. package/dist/evm/adapters/index.js.map +0 -1
  331. package/dist/evm/adapters/morpho.js +0 -79
  332. package/dist/evm/adapters/morpho.js.map +0 -1
  333. package/dist/evm/adapters/types.js +0 -2
  334. package/dist/evm/adapters/types.js.map +0 -1
  335. package/dist/evm/aeraContracts/priceAndFeeCalculator.js +0 -174
  336. package/dist/evm/aeraContracts/priceAndFeeCalculator.js.map +0 -1
  337. package/dist/evm/aeraContracts/readOptions.js +0 -4
  338. package/dist/evm/aeraContracts/readOptions.js.map +0 -1
  339. package/dist/evm/aeraContracts/v1.js +0 -59
  340. package/dist/evm/aeraContracts/v1.js.map +0 -1
  341. package/dist/evm/aeraContracts/v2.js +0 -273
  342. package/dist/evm/aeraContracts/v2.js.map +0 -1
  343. package/dist/evm/aeraContracts.js +0 -195
  344. package/dist/evm/aeraContracts.js.map +0 -1
  345. package/dist/evm/deposit.js +0 -109
  346. package/dist/evm/deposit.js.map +0 -1
  347. package/dist/evm/depositReceiverApproval.js +0 -32
  348. package/dist/evm/depositReceiverApproval.js.map +0 -1
  349. package/dist/evm/operationMode.js +0 -41
  350. package/dist/evm/operationMode.js.map +0 -1
  351. package/dist/evm/tokenModes.js +0 -34
  352. package/dist/evm/tokenModes.js.map +0 -1
  353. package/dist/evm/types.js +0 -5
  354. package/dist/evm/types.js.map +0 -1
  355. package/dist/evm/userCurrentBalance.js +0 -211
  356. package/dist/evm/userCurrentBalance.js.map +0 -1
  357. package/dist/evm/vaults.js +0 -75
  358. package/dist/evm/vaults.js.map +0 -1
  359. package/dist/evm/withdraw.js +0 -177
  360. package/dist/evm/withdraw.js.map +0 -1
  361. package/dist/evm/withdrawQuote.js +0 -164
  362. package/dist/evm/withdrawQuote.js.map +0 -1
package/src/api/http.ts CHANGED
@@ -39,6 +39,7 @@ export async function apiGet<T>(
39
39
 
40
40
  const fetchImpl = config.fetch ?? fetch;
41
41
  const response = await fetchImpl(url, {
42
+ redirect: 'error',
42
43
  headers: {
43
44
  accept: 'application/json',
44
45
  ...(config.apiKey ? { 'x-api-key': config.apiKey } : {}),
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';
@@ -1,3 +1,4 @@
1
+ import { activityLifecycles, orderActivityRows, requireSameToken } from './activityRows';
1
2
  import { GauntletSDKError } from '../errors';
2
3
  import type { GauntletApi, TokenRef, UserActivity } from './client';
3
4
  import { bigIntToDecimal, decimalToBigInt, sharesToBigInt } from './decimal';
@@ -57,8 +58,11 @@ export function buildPositionHistory(rows: UserActivity[]): PositionHistory {
57
58
  );
58
59
  }
59
60
 
60
- const ordered = [...rows].sort((a, b) => a.block_timestamp - b.block_timestamp);
61
- const token = ordered.find((r) => r.assets_delta.token)?.assets_delta.token ?? null;
61
+ const ordered = orderActivityRows(rows);
62
+ activityLifecycles(ordered);
63
+ const tokenRow = ordered.find((r) => r.assets_delta.token) ?? ordered[0];
64
+ const token = tokenRow.assets_delta.token ?? null;
65
+ for (const row of ordered) requireSameToken(tokenRow, row);
62
66
 
63
67
  let sharesBalance = 0n;
64
68
  let pendingDepositAssets = 0n;
@@ -95,9 +99,14 @@ export function buildPositionHistory(rows: UserActivity[]): PositionHistory {
95
99
  if (row.request_hash != null) pendingDepositByHash.set(row.request_hash, assetsDelta);
96
100
  break;
97
101
  case 'deposit_refunded':
98
- // Row carries the unwound request as a negative delta.
102
+ if (
103
+ row.request_hash == null ||
104
+ pendingDepositByHash.get(row.request_hash) !== -assetsDelta
105
+ ) {
106
+ throw new GauntletSDKError('The deposit refund does not match its escrow');
107
+ }
99
108
  pendingDepositAssets += assetsDelta;
100
- if (row.request_hash != null) pendingDepositByHash.delete(row.request_hash);
109
+ pendingDepositByHash.delete(row.request_hash);
101
110
  break;
102
111
  case 'withdraw':
103
112
  // Sync withdraws and async terminal solves both carry the asset
@@ -121,8 +130,11 @@ export function buildPositionHistory(rows: UserActivity[]): PositionHistory {
121
130
  break;
122
131
  }
123
132
  case 'withdraw_refunded':
133
+ if (row.request_hash == null || pendingRedeemByHash.get(row.request_hash) !== sharesDelta) {
134
+ throw new GauntletSDKError('The withdrawal refund does not match its escrow');
135
+ }
124
136
  pendingRedeemShares -= sharesDelta;
125
- if (row.request_hash != null) pendingRedeemByHash.delete(row.request_hash);
137
+ pendingRedeemByHash.delete(row.request_hash);
126
138
  break;
127
139
  case 'transfer_in':
128
140
  case 'transfer_out':
@@ -131,6 +143,9 @@ export function buildPositionHistory(rows: UserActivity[]): PositionHistory {
131
143
  throw new GauntletSDKError(`Unknown activity row type "${row.type}"`);
132
144
  }
133
145
 
146
+ if (sharesBalance < 0n || pendingDepositAssets < 0n || pendingRedeemShares < 0n) {
147
+ throw new GauntletSDKError('The activity history produces a negative position balance');
148
+ }
134
149
  points.push({
135
150
  timestamp: new Date(row.block_timestamp * 1000),
136
151
  txHash: row.tx_hash,
@@ -8,13 +8,14 @@ export { encodeBuilderCode } from './erc8021';
8
8
  export type PreparedPayloadWithAttribution = {
9
9
  type: string;
10
10
  to: Address;
11
+ chainId: number;
11
12
  data: Hex;
12
13
  account?: Address;
13
14
  };
14
15
 
15
16
  export type PreparedTx = {
16
17
  payload: PreparedPayloadWithAttribution;
17
- tx: TxStep;
18
+ tx: TxStep & { chainId: number };
18
19
  };
19
20
 
20
21
  /**
@@ -38,7 +39,8 @@ export async function buildAttribution(client: GauntletClient): Promise<Hex> {
38
39
 
39
40
  export async function encodeTransactionWithAttribution(
40
41
  client: GauntletClient,
41
- transaction: TxStep
42
+ transaction: TxStep,
43
+ chainId: number
42
44
  ): Promise<PreparedTx> {
43
45
  const customAttribution = await buildAttribution(client);
44
46
  const encodedTx = encodeFunctionData({
@@ -52,10 +54,12 @@ export async function encodeTransactionWithAttribution(
52
54
  type: transaction.type,
53
55
  account: transaction.account,
54
56
  to: transaction.address,
57
+ chainId,
55
58
  data: encodedTxWithAttribution,
56
59
  },
57
60
  tx: {
58
61
  ...transaction,
62
+ chainId,
59
63
  attribution: customAttribution,
60
64
  },
61
65
  };
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);
@@ -427,17 +430,35 @@ export const aeraAdapter: EvmProtocolAdapter = {
427
430
  throw new InvalidWithdrawParamsError();
428
431
  }
429
432
 
430
- const tokenOutBeforeTip = await getAsyncRedeemTokenOut(
431
- publicClient,
432
- runtime,
433
- vault.vaultAddress,
434
- asset.address,
435
- shares
436
- );
437
- minTokenOut = applySlippageDown(subtractSolverTip(tokenOutBeforeTip, solverTip), slippageBps);
433
+ const tokensOut =
434
+ 'amount' in params && params.amount != null
435
+ ? params.amount
436
+ : subtractSolverTip(
437
+ await getAsyncRedeemTokenOut(
438
+ publicClient,
439
+ runtime,
440
+ vault.vaultAddress,
441
+ asset.address,
442
+ shares
443
+ ),
444
+ solverTip
445
+ );
446
+ minTokenOut = applySlippageDown(tokensOut, slippageBps);
438
447
  maxUnitsIn = shares;
439
448
  }
440
449
 
450
+ if (params.maxShares !== undefined) {
451
+ if (
452
+ isAsync ||
453
+ typeof params.maxShares !== 'bigint' ||
454
+ params.maxShares <= 0n ||
455
+ (!isV2ExactTokenWithdraw && shares !== undefined && shares > params.maxShares)
456
+ ) {
457
+ throw new InvalidWithdrawParamsError();
458
+ }
459
+ if (maxUnitsIn > params.maxShares) maxUnitsIn = params.maxShares;
460
+ }
461
+
441
462
  const steps: EvmTxStep[] = [];
442
463
 
443
464
  if (isAsync) {
@@ -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 = {
@@ -55,6 +57,7 @@ export type AdapterWithdrawParams = {
55
57
  maxPriceAge?: bigint;
56
58
  aeraRuntime?: AeraRuntimeContracts;
57
59
  syncWithdrawQuote?: SyncWithdrawQuoteBounds;
60
+ maxShares?: bigint;
58
61
  } & (
59
62
  | { shares: bigint; amount?: never; entireAmount?: never }
60
63
  | { amount: bigint; shares?: never; entireAmount?: never }
@@ -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(
@@ -17,8 +17,6 @@ import { MAX_BPS } from '../constants';
17
17
  import { ContractVersion, type EvmVaultDeployment } from './types';
18
18
  import { readAtBlock } from './aeraContracts/readOptions';
19
19
 
20
- const contractVersionCache = new Map<string, ContractVersion>();
21
-
22
20
  const contractVersionAbi = [
23
21
  {
24
22
  type: 'function',
@@ -81,10 +79,6 @@ export function applySlippageUp(amount: bigint, slippageBps: number): bigint {
81
79
  return (amount * (MAX_BPS + BigInt(slippageBps)) + MAX_BPS - 1n) / MAX_BPS;
82
80
  }
83
81
 
84
- function contractVersionCacheKey(client: PublicClient, address: Address): string {
85
- return `${client.chain?.id ?? 'unknown'}:${address.toLowerCase()}`;
86
- }
87
-
88
82
  function isVersionUnavailableError(error: unknown): boolean {
89
83
  if (!(error instanceof ContractFunctionExecutionError) || error.functionName !== 'version') {
90
84
  return false;
@@ -122,15 +116,35 @@ export function getMultiDepositorVault<T extends Client>(
122
116
  });
123
117
  }
124
118
 
119
+ // Latest-block versions per client. Historical reads and failed reads are not cached.
120
+ const latestContractVersions = new WeakMap<PublicClient, Map<string, ContractVersion>>();
121
+
125
122
  export async function resolveContractVersion(
126
123
  client: PublicClient,
127
124
  address: Address,
128
125
  options: AeraReadOptions = {}
129
126
  ): Promise<ContractVersion> {
130
- const cacheKey = contractVersionCacheKey(client, address);
131
- const cached = contractVersionCache.get(cacheKey);
132
- if (cached) return cached;
127
+ if (options.blockNumber !== undefined) return readContractVersion(client, address, options);
133
128
 
129
+ let versions = latestContractVersions.get(client);
130
+ if (versions === undefined) {
131
+ versions = new Map();
132
+ latestContractVersions.set(client, versions);
133
+ }
134
+ const key = address.toLowerCase();
135
+ const cached = versions.get(key);
136
+ if (cached !== undefined) return cached;
137
+
138
+ const version = await readContractVersion(client, address, options);
139
+ versions.set(key, version);
140
+ return version;
141
+ }
142
+
143
+ async function readContractVersion(
144
+ client: PublicClient,
145
+ address: Address,
146
+ options: AeraReadOptions
147
+ ): Promise<ContractVersion> {
134
148
  try {
135
149
  const versionString = await client.readContract({
136
150
  address,
@@ -138,14 +152,15 @@ export async function resolveContractVersion(
138
152
  functionName: 'version',
139
153
  ...readAtBlock(options),
140
154
  });
141
- const version = versionString.startsWith('2.') ? ContractVersion.V2 : ContractVersion.V1;
142
- contractVersionCache.set(cacheKey, version);
143
-
144
- return version;
155
+ if (!/^[12]\./.test(versionString)) {
156
+ throw new UnsupportedFeatureError(`Aera: unsupported contract version ${versionString}`);
157
+ }
158
+ return versionString.startsWith('2.') ? ContractVersion.V2 : ContractVersion.V1;
145
159
  } catch (error) {
146
160
  if (!isVersionUnavailableError(error)) throw error;
147
161
 
148
- contractVersionCache.set(cacheKey, ContractVersion.V1);
162
+ const code = await client.getCode({ address, ...readAtBlock(options) });
163
+ if (code === undefined || code === '0x') throw error;
149
164
  return ContractVersion.V1;
150
165
  }
151
166
  }