@gearbox-protocol/sdk 15.1.0-next.1 → 15.1.0-next.10

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 (444) hide show
  1. package/dist/cjs/abi/iExpirable.js +15 -0
  2. package/dist/cjs/common-utils/utils/apy/get-single-quota-borrow-rate.js +2 -0
  3. package/dist/cjs/common-utils/utils/creditAccount/calc-health-factor.js +24 -22
  4. package/dist/cjs/common-utils/utils/creditAccount/calc-quota-borrow-rate.js +2 -0
  5. package/dist/cjs/common-utils/utils/creditAccount/get-time-to-liquidation.js +8 -5
  6. package/dist/cjs/common-utils/utils/creditAccount/liquidation-price.js +21 -11
  7. package/dist/cjs/dev/AccountOpener.js +0 -1
  8. package/dist/cjs/dev/compareOpportunities.js +218 -0
  9. package/dist/cjs/model/charts.js +147 -0
  10. package/dist/cjs/model/charts.schema.js +240 -0
  11. package/dist/cjs/model/index.js +35 -22
  12. package/dist/cjs/model/liquidations.schema.js +1 -1
  13. package/dist/cjs/model/notices.schema.js +25 -0
  14. package/dist/cjs/model/opportunities.schema.js +1 -1
  15. package/dist/cjs/model/positions.schema.js +48 -2
  16. package/dist/cjs/new-sdk/AbstractNamespace.js +34 -4
  17. package/dist/cjs/new-sdk/GearboxSDK.js +72 -3
  18. package/dist/cjs/new-sdk/execute/ExecuteApi.js +95 -0
  19. package/dist/cjs/new-sdk/execute/index.js +3 -0
  20. package/dist/cjs/new-sdk/index.js +7 -0
  21. package/dist/cjs/new-sdk/opportunities/OpportunitiesNamespace.js +29 -6
  22. package/dist/cjs/new-sdk/positions/PositionsNamespace.js +3 -6
  23. package/dist/cjs/new-sdk/simulate/SimulateApi.js +361 -0
  24. package/dist/cjs/new-sdk/simulate/index.js +4 -0
  25. package/dist/cjs/new-sdk/utils/index.js +0 -1
  26. package/dist/cjs/offchain/AbstractOffchainNamespace.js +10 -7
  27. package/dist/cjs/offchain/GearboxAPI.js +7 -0
  28. package/dist/cjs/offchain/index.js +3 -0
  29. package/dist/cjs/offchain/notices/OffchainNotices.js +27 -0
  30. package/dist/cjs/offchain/notices/index.js +3 -0
  31. package/dist/cjs/offchain/opportunities/OffchainOpportunities.js +4 -8
  32. package/dist/cjs/offchain/positions/OffchainPositions.js +12 -12
  33. package/dist/cjs/preview/preview/CreditAccountState.js +14 -1
  34. package/dist/cjs/preview/preview/buildDelayedPreview.js +16 -6
  35. package/dist/cjs/preview/preview/previewAdjustCreditAccount.js +9 -2
  36. package/dist/cjs/preview/preview/previewOpenCreditAccount.js +11 -3
  37. package/dist/cjs/preview/preview/previewOperation.js +1 -1
  38. package/dist/cjs/sdk/MultichainSDK.js +3 -4
  39. package/dist/cjs/sdk/OnchainSDK.js +42 -13
  40. package/dist/cjs/sdk/accounts/CreditAccountsServiceV310.js +2 -8
  41. package/dist/cjs/sdk/accounts/credit-account-compressor/CreditAccountCompressor.js +2 -90
  42. package/dist/cjs/sdk/accounts/index.js +5 -2
  43. package/dist/cjs/sdk/accounts/intents/guards.js +114 -0
  44. package/dist/cjs/sdk/accounts/intents/index.js +216 -358
  45. package/dist/cjs/sdk/accounts/intents/math.js +56 -0
  46. package/dist/cjs/sdk/accounts/intents/open-strategy.js +133 -0
  47. package/dist/cjs/sdk/accounts/intents/operations.js +165 -0
  48. package/dist/cjs/sdk/accounts/intents/plan.js +373 -0
  49. package/dist/cjs/sdk/accounts/intents/realize.js +301 -0
  50. package/dist/cjs/sdk/accounts/intents/testing/delayed.js +50 -0
  51. package/dist/cjs/sdk/accounts/intents/testing/market.js +166 -0
  52. package/dist/cjs/sdk/accounts/intents/testing/sdk-mock.js +194 -35
  53. package/dist/cjs/sdk/accounts/intents/tests/add-collateral.fixtures.js +123 -0
  54. package/dist/cjs/sdk/accounts/intents/tests/adjust-leverage.fixtures.js +254 -0
  55. package/dist/cjs/sdk/accounts/intents/tests/deposit.fixtures.js +324 -0
  56. package/dist/cjs/sdk/accounts/intents/tests/finish-decrease-leverage.fixtures.js +242 -0
  57. package/dist/cjs/sdk/accounts/intents/tests/finish-withdraw.fixtures.js +383 -0
  58. package/dist/cjs/sdk/accounts/intents/tests/open-strategy.fixtures.js +133 -0
  59. package/dist/cjs/sdk/accounts/intents/tests/withdraw-asset.fixtures.js +131 -0
  60. package/dist/cjs/sdk/accounts/intents/tests/withdraw.fixtures.js +426 -0
  61. package/dist/cjs/sdk/accounts/intents/types.js +16 -0
  62. package/dist/cjs/sdk/accounts/intents/utils/adjust-state-to-snapshot.js +18 -0
  63. package/dist/cjs/sdk/accounts/intents/utils/credit-account-slice.js +45 -0
  64. package/dist/cjs/sdk/accounts/intents/utils/index.js +17 -8
  65. package/dist/cjs/sdk/accounts/intents/utils/ledger.js +94 -0
  66. package/dist/cjs/sdk/accounts/intents/utils/pick-token.js +72 -0
  67. package/dist/cjs/sdk/accounts/intents/utils/quotas-for-update.js +27 -0
  68. package/dist/cjs/sdk/accounts/intents/utils/router-path.js +86 -0
  69. package/dist/cjs/sdk/accounts/intents/view.js +38 -0
  70. package/dist/cjs/sdk/accounts/liquidations/LiquidationsService.js +0 -3
  71. package/dist/cjs/sdk/accounts/withdrawal-compressor/AbstractWithdrawalCompressorContract.js +29 -18
  72. package/dist/cjs/sdk/base/BaseContract.js +1 -1
  73. package/dist/cjs/sdk/base/TokensMeta.js +78 -27
  74. package/dist/cjs/sdk/index.js +30 -7
  75. package/dist/cjs/sdk/market/MarketRegister.js +16 -7
  76. package/dist/cjs/sdk/market/ZapperRegister.js +56 -25
  77. package/dist/cjs/sdk/market/credit/CreditManagerV310Contract.js +1 -12
  78. package/dist/cjs/sdk/market/credit/CreditSuite.js +28 -9
  79. package/dist/cjs/sdk/market/credit/index.js +3 -0
  80. package/dist/cjs/sdk/market/credit/isStrategyCollateral.js +50 -0
  81. package/dist/cjs/sdk/market/index.js +17 -0
  82. package/dist/cjs/sdk/market/math.js +57 -44
  83. package/dist/cjs/sdk/market/oracle/PriceOracleBaseContract.js +10 -3
  84. package/dist/cjs/sdk/market/pool/PoolV310Contract.js +15 -1
  85. package/dist/cjs/sdk/market/rwa/RWARegistry.js +22 -0
  86. package/dist/cjs/sdk/opportunities/index.js +0 -13
  87. package/dist/cjs/sdk/options.js +1 -5
  88. package/dist/cjs/sdk/pools/PoolService.js +132 -3
  89. package/dist/cjs/sdk/pools/index.js +2 -0
  90. package/dist/cjs/sdk/positions/PositionsService.js +213 -1
  91. package/dist/cjs/sdk/positions/calcBorrowRate.js +43 -0
  92. package/dist/cjs/sdk/positions/calcHealthFactor.js +52 -0
  93. package/dist/cjs/sdk/positions/calcLiquidationPrice.js +23 -0
  94. package/dist/cjs/sdk/positions/calcLiquidationPriceForTarget.js +30 -0
  95. package/dist/cjs/sdk/positions/calcTimeToLiquidationMs.js +19 -0
  96. package/dist/cjs/sdk/positions/index.js +12 -1
  97. package/dist/cjs/sdk/positions/types.js +31 -0
  98. package/dist/cjs/sdk/utils/abi-decode.js +2 -2
  99. package/dist/cjs/sdk/utils/viem/executeMulticallBatches.js +32 -0
  100. package/dist/cjs/sdk/utils/viem/index.js +2 -0
  101. package/dist/esm/abi/iExpirable.js +14 -0
  102. package/dist/esm/common-utils/utils/apy/get-single-quota-borrow-rate.js +2 -0
  103. package/dist/esm/common-utils/utils/creditAccount/calc-health-factor.js +24 -22
  104. package/dist/esm/common-utils/utils/creditAccount/calc-quota-borrow-rate.js +2 -0
  105. package/dist/esm/common-utils/utils/creditAccount/get-time-to-liquidation.js +8 -5
  106. package/dist/esm/common-utils/utils/creditAccount/liquidation-price.js +21 -11
  107. package/dist/esm/dev/AccountOpener.js +1 -2
  108. package/dist/esm/dev/compareOpportunities.js +216 -0
  109. package/dist/esm/dev/withdrawalUtils.js +1 -1
  110. package/dist/esm/model/charts.js +140 -0
  111. package/dist/esm/model/charts.schema.js +226 -0
  112. package/dist/esm/model/index.js +9 -7
  113. package/dist/esm/model/liquidations.schema.js +1 -1
  114. package/dist/esm/model/notices.schema.js +23 -0
  115. package/dist/esm/model/opportunities.schema.js +1 -1
  116. package/dist/esm/model/positions.schema.js +46 -4
  117. package/dist/esm/new-sdk/AbstractNamespace.js +34 -4
  118. package/dist/esm/new-sdk/GearboxSDK.js +72 -4
  119. package/dist/esm/new-sdk/execute/ExecuteApi.js +94 -0
  120. package/dist/esm/new-sdk/execute/index.js +2 -0
  121. package/dist/esm/new-sdk/index.js +6 -2
  122. package/dist/esm/new-sdk/opportunities/OpportunitiesNamespace.js +29 -6
  123. package/dist/esm/new-sdk/positions/PositionsNamespace.js +3 -6
  124. package/dist/esm/new-sdk/simulate/SimulateApi.js +360 -0
  125. package/dist/esm/new-sdk/simulate/index.js +3 -0
  126. package/dist/esm/new-sdk/utils/index.js +0 -1
  127. package/dist/esm/offchain/AbstractOffchainNamespace.js +10 -7
  128. package/dist/esm/offchain/GearboxAPI.js +7 -0
  129. package/dist/esm/offchain/index.js +3 -1
  130. package/dist/esm/offchain/notices/OffchainNotices.js +26 -0
  131. package/dist/esm/offchain/notices/index.js +2 -0
  132. package/dist/esm/offchain/opportunities/OffchainOpportunities.js +4 -8
  133. package/dist/esm/offchain/positions/OffchainPositions.js +12 -12
  134. package/dist/esm/plugins/adapters/contracts/ERC4626AdapterContract.js +1 -1
  135. package/dist/esm/preview/preview/CreditAccountState.js +14 -1
  136. package/dist/esm/preview/preview/buildDelayedPreview.js +16 -6
  137. package/dist/esm/preview/preview/previewAdjustCreditAccount.js +9 -2
  138. package/dist/esm/preview/preview/previewOpenCreditAccount.js +11 -3
  139. package/dist/esm/preview/preview/previewOperation.js +1 -1
  140. package/dist/esm/preview/simulate/simulatePoolOperation.js +1 -1
  141. package/dist/esm/preview/trace/extractTransfers.js +1 -1
  142. package/dist/esm/sdk/MultichainSDK.js +3 -4
  143. package/dist/esm/sdk/OnchainSDK.js +42 -13
  144. package/dist/esm/sdk/accounts/CreditAccountsServiceV310.js +4 -10
  145. package/dist/esm/sdk/accounts/credit-account-compressor/CreditAccountCompressor.js +2 -90
  146. package/dist/esm/sdk/accounts/index.js +3 -2
  147. package/dist/esm/sdk/accounts/intents/guards.js +108 -0
  148. package/dist/esm/sdk/accounts/intents/index.js +214 -358
  149. package/dist/esm/sdk/accounts/intents/math.js +51 -0
  150. package/dist/esm/sdk/accounts/intents/open-strategy.js +132 -0
  151. package/dist/esm/sdk/accounts/intents/operations.js +153 -0
  152. package/dist/esm/sdk/accounts/intents/plan.js +361 -0
  153. package/dist/esm/sdk/accounts/intents/realize.js +300 -0
  154. package/dist/esm/sdk/accounts/intents/testing/delayed.js +38 -0
  155. package/dist/esm/sdk/accounts/intents/testing/market.js +148 -0
  156. package/dist/esm/sdk/accounts/intents/testing/sdk-mock.js +194 -35
  157. package/dist/esm/sdk/accounts/intents/tests/add-collateral.fixtures.js +110 -0
  158. package/dist/esm/sdk/accounts/intents/tests/adjust-leverage.fixtures.js +234 -0
  159. package/dist/esm/sdk/accounts/intents/tests/deposit.fixtures.js +302 -0
  160. package/dist/esm/sdk/accounts/intents/tests/finish-decrease-leverage.fixtures.js +220 -0
  161. package/dist/esm/sdk/accounts/intents/tests/finish-withdraw.fixtures.js +355 -0
  162. package/dist/esm/sdk/accounts/intents/tests/open-strategy.fixtures.js +119 -0
  163. package/dist/esm/sdk/accounts/intents/tests/withdraw-asset.fixtures.js +117 -0
  164. package/dist/esm/sdk/accounts/intents/tests/withdraw.fixtures.js +402 -0
  165. package/dist/esm/sdk/accounts/intents/types.js +16 -1
  166. package/dist/esm/sdk/accounts/intents/utils/adjust-state-to-snapshot.js +17 -0
  167. package/dist/esm/sdk/accounts/intents/utils/credit-account-slice.js +43 -0
  168. package/dist/esm/sdk/accounts/intents/utils/index.js +9 -7
  169. package/dist/esm/sdk/accounts/intents/utils/ledger.js +93 -0
  170. package/dist/esm/sdk/accounts/intents/utils/pick-token.js +68 -0
  171. package/dist/esm/sdk/accounts/intents/utils/quotas-for-update.js +27 -1
  172. package/dist/esm/sdk/accounts/intents/utils/router-path.js +85 -0
  173. package/dist/esm/sdk/accounts/intents/view.js +37 -0
  174. package/dist/esm/sdk/accounts/liquidations/LiquidationsService.js +1 -4
  175. package/dist/esm/sdk/accounts/withdrawal-compressor/AbstractWithdrawalCompressorContract.js +29 -18
  176. package/dist/esm/sdk/accounts/withdrawal-compressor/RedemptionLoggerV310Contract.js +1 -1
  177. package/dist/esm/sdk/accounts/withdrawal-compressor/WithdrawalCompressorV310Contract.js +1 -1
  178. package/dist/esm/sdk/accounts/withdrawal-compressor/WithdrawalCompressorV311Contract.js +1 -1
  179. package/dist/esm/sdk/accounts/withdrawal-compressor/WithdrawalCompressorV313Contract.js +1 -1
  180. package/dist/esm/sdk/base/BaseContract.js +1 -1
  181. package/dist/esm/sdk/base/TokensMeta.js +80 -29
  182. package/dist/esm/sdk/chain/detectNetwork.js +1 -1
  183. package/dist/esm/sdk/core/createAddressProvider.js +1 -1
  184. package/dist/esm/sdk/index.js +13 -4
  185. package/dist/esm/sdk/market/MarketRegister.js +16 -7
  186. package/dist/esm/sdk/market/ZapperRegister.js +56 -25
  187. package/dist/esm/sdk/market/credit/CreditFacadeV310BaseContract.js +1 -1
  188. package/dist/esm/sdk/market/credit/CreditManagerV310Contract.js +2 -13
  189. package/dist/esm/sdk/market/credit/CreditSuite.js +29 -10
  190. package/dist/esm/sdk/market/credit/index.js +2 -1
  191. package/dist/esm/sdk/market/credit/isStrategyCollateral.js +48 -0
  192. package/dist/esm/sdk/market/index.js +3 -1
  193. package/dist/esm/sdk/market/math.js +52 -40
  194. package/dist/esm/sdk/market/oracle/PriceOracleBaseContract.js +10 -3
  195. package/dist/esm/sdk/market/pool/PoolV310Contract.js +17 -3
  196. package/dist/esm/sdk/market/rwa/RWARegistry.js +22 -0
  197. package/dist/esm/sdk/market/zapper/IETHZapperContract.js +1 -1
  198. package/dist/esm/sdk/market/zapper/ZapperContract.js +1 -1
  199. package/dist/esm/sdk/opportunities/index.js +1 -2
  200. package/dist/esm/sdk/options.js +1 -5
  201. package/dist/esm/sdk/pools/PoolService.js +133 -6
  202. package/dist/esm/sdk/pools/index.js +2 -2
  203. package/dist/esm/sdk/positions/PositionsService.js +213 -1
  204. package/dist/esm/sdk/positions/calcBorrowRate.js +42 -0
  205. package/dist/esm/sdk/positions/calcHealthFactor.js +51 -0
  206. package/dist/esm/sdk/positions/calcLiquidationPrice.js +22 -0
  207. package/dist/esm/sdk/positions/calcLiquidationPriceForTarget.js +29 -0
  208. package/dist/esm/sdk/positions/calcTimeToLiquidationMs.js +18 -0
  209. package/dist/esm/sdk/positions/index.js +7 -2
  210. package/dist/esm/sdk/positions/types.js +31 -1
  211. package/dist/esm/sdk/utils/abi-decode.js +2 -2
  212. package/dist/esm/sdk/utils/viem/executeMulticallBatches.js +31 -0
  213. package/dist/esm/sdk/utils/viem/index.js +2 -1
  214. package/dist/esm/sdk/utils/viem/simulateWithPriceUpdates.js +1 -1
  215. package/dist/types/abi/iExpirable.d.ts +14 -0
  216. package/dist/types/common-utils/utils/apy/get-single-quota-borrow-rate.d.ts +2 -0
  217. package/dist/types/common-utils/utils/creditAccount/calc-health-factor.d.ts +3 -0
  218. package/dist/types/common-utils/utils/creditAccount/calc-quota-borrow-rate.d.ts +2 -0
  219. package/dist/types/common-utils/utils/creditAccount/get-time-to-liquidation.d.ts +6 -1
  220. package/dist/types/common-utils/utils/creditAccount/liquidation-price.d.ts +3 -0
  221. package/dist/types/dev/compareOpportunities.d.ts +153 -0
  222. package/dist/types/model/charts.d.ts +349 -0
  223. package/dist/types/model/charts.schema.d.ts +364 -0
  224. package/dist/types/model/index.d.ts +8 -6
  225. package/dist/types/model/notices.d.ts +29 -0
  226. package/dist/types/model/notices.schema.d.ts +23 -0
  227. package/dist/types/model/opportunities.d.ts +9 -9
  228. package/dist/types/model/positions.d.ts +133 -7
  229. package/dist/types/model/positions.schema.d.ts +128 -1
  230. package/dist/types/new-sdk/AbstractNamespace.d.ts +15 -2
  231. package/dist/types/new-sdk/GearboxSDK.d.ts +14 -2
  232. package/dist/types/new-sdk/execute/ExecuteApi.d.ts +108 -0
  233. package/dist/types/new-sdk/execute/index.d.ts +2 -0
  234. package/dist/types/new-sdk/index.d.ts +8 -4
  235. package/dist/types/new-sdk/opportunities/OpportunitiesNamespace.d.ts +19 -7
  236. package/dist/types/new-sdk/opportunities/types.d.ts +30 -9
  237. package/dist/types/new-sdk/positions/PositionsNamespace.d.ts +4 -5
  238. package/dist/types/new-sdk/positions/types.d.ts +9 -9
  239. package/dist/types/new-sdk/simulate/SimulateApi.d.ts +90 -0
  240. package/dist/types/new-sdk/simulate/index.d.ts +3 -0
  241. package/dist/types/new-sdk/simulate/types.d.ts +508 -0
  242. package/dist/types/new-sdk/types.d.ts +35 -1
  243. package/dist/types/new-sdk/utils/index.d.ts +1 -2
  244. package/dist/types/offchain/AbstractOffchainNamespace.d.ts +5 -21
  245. package/dist/types/offchain/GearboxAPI.d.ts +6 -0
  246. package/dist/types/offchain/index.d.ts +4 -2
  247. package/dist/types/offchain/notices/OffchainNotices.d.ts +19 -0
  248. package/dist/types/offchain/notices/index.d.ts +2 -0
  249. package/dist/types/offchain/opportunities/OffchainOpportunities.d.ts +8 -4
  250. package/dist/types/offchain/positions/OffchainPositions.d.ts +8 -6
  251. package/dist/types/preview/preview/CreditAccountState.d.ts +6 -0
  252. package/dist/types/preview/preview/buildDelayedPreview.d.ts +5 -1
  253. package/dist/types/preview/preview/types.d.ts +4 -2
  254. package/dist/types/sdk/MultichainSDK.d.ts +0 -5
  255. package/dist/types/sdk/OnchainSDK.d.ts +1 -5
  256. package/dist/types/sdk/accounts/CreditAccountsServiceV310.d.ts +1 -7
  257. package/dist/types/sdk/accounts/credit-account-compressor/CreditAccountCompressor.d.ts +3 -12
  258. package/dist/types/sdk/accounts/credit-account-compressor/index.d.ts +2 -2
  259. package/dist/types/sdk/accounts/credit-account-compressor/types.d.ts +1 -19
  260. package/dist/types/sdk/accounts/index.d.ts +7 -5
  261. package/dist/types/sdk/accounts/intents/guards.d.ts +72 -0
  262. package/dist/types/sdk/accounts/intents/index.d.ts +130 -15
  263. package/dist/types/sdk/accounts/intents/math.d.ts +46 -0
  264. package/dist/types/sdk/accounts/intents/open-strategy.d.ts +64 -0
  265. package/dist/types/sdk/accounts/intents/operations.d.ts +215 -0
  266. package/dist/types/sdk/accounts/intents/plan.d.ts +189 -0
  267. package/dist/types/sdk/accounts/intents/realize.d.ts +35 -0
  268. package/dist/types/sdk/accounts/intents/testing/delayed.d.ts +50 -0
  269. package/dist/types/sdk/accounts/intents/testing/expect.d.ts +17 -21
  270. package/dist/types/sdk/accounts/intents/testing/market.d.ts +91 -0
  271. package/dist/types/sdk/accounts/intents/testing/sdk-mock.d.ts +64 -16
  272. package/dist/types/sdk/accounts/intents/tests/add-collateral.fixtures.d.ts +45 -0
  273. package/dist/types/sdk/accounts/intents/tests/adjust-leverage.fixtures.d.ts +56 -0
  274. package/dist/types/sdk/accounts/intents/tests/deposit.fixtures.d.ts +64 -0
  275. package/dist/types/sdk/accounts/intents/tests/finish-decrease-leverage.fixtures.d.ts +107 -0
  276. package/dist/types/sdk/accounts/intents/tests/finish-withdraw.fixtures.d.ts +136 -0
  277. package/dist/types/sdk/accounts/intents/tests/open-strategy.fixtures.d.ts +56 -0
  278. package/dist/types/sdk/accounts/intents/tests/withdraw-asset.fixtures.d.ts +60 -0
  279. package/dist/types/sdk/accounts/intents/tests/withdraw.fixtures.d.ts +79 -0
  280. package/dist/types/sdk/accounts/intents/types.d.ts +369 -43
  281. package/dist/types/sdk/accounts/intents/utils/adjust-state-to-snapshot.d.ts +13 -0
  282. package/dist/types/sdk/accounts/intents/utils/assemble-operation-calls.d.ts +1 -1
  283. package/dist/types/sdk/accounts/intents/utils/credit-account-slice.d.ts +29 -0
  284. package/dist/types/sdk/accounts/intents/utils/index.d.ts +7 -5
  285. package/dist/types/sdk/accounts/intents/utils/ledger.d.ts +41 -0
  286. package/dist/types/sdk/accounts/intents/utils/pick-token.d.ts +55 -0
  287. package/dist/types/sdk/accounts/intents/utils/quotas-for-update.d.ts +15 -4
  288. package/dist/types/sdk/accounts/intents/utils/router-path.d.ts +70 -0
  289. package/dist/types/sdk/accounts/intents/view.d.ts +15 -0
  290. package/dist/types/sdk/accounts/types.d.ts +17 -14
  291. package/dist/types/sdk/accounts/withdrawal-compressor/AbstractWithdrawalCompressorContract.d.ts +6 -0
  292. package/dist/types/sdk/accounts/withdrawal-compressor/types.d.ts +18 -0
  293. package/dist/types/sdk/base/TokensMeta.d.ts +44 -1
  294. package/dist/types/sdk/base/index.d.ts +2 -2
  295. package/dist/types/sdk/base/token-types.d.ts +12 -1
  296. package/dist/types/sdk/index.d.ts +28 -19
  297. package/dist/types/sdk/market/MarketRegister.d.ts +7 -3
  298. package/dist/types/sdk/market/ZapperRegister.d.ts +20 -2
  299. package/dist/types/sdk/market/credit/CreditManagerV310Contract.d.ts +0 -4
  300. package/dist/types/sdk/market/credit/CreditSuite.d.ts +6 -3
  301. package/dist/types/sdk/market/credit/index.d.ts +2 -1
  302. package/dist/types/sdk/market/credit/isStrategyCollateral.d.ts +74 -0
  303. package/dist/types/sdk/market/credit/types.d.ts +2 -9
  304. package/dist/types/sdk/market/index.d.ts +4 -2
  305. package/dist/types/sdk/market/math.d.ts +44 -34
  306. package/dist/types/sdk/market/oracle/PriceOracleBaseContract.d.ts +6 -2
  307. package/dist/types/sdk/market/oracle/types.d.ts +10 -2
  308. package/dist/types/sdk/market/pool/PoolV310Contract.d.ts +5 -0
  309. package/dist/types/sdk/market/pool/types.d.ts +5 -0
  310. package/dist/types/sdk/market/rwa/RWARegistry.d.ts +13 -0
  311. package/dist/types/sdk/market/types.d.ts +5 -1
  312. package/dist/types/sdk/opportunities/index.d.ts +1 -2
  313. package/dist/types/sdk/options.d.ts +0 -1
  314. package/dist/types/sdk/pools/PoolService.d.ts +32 -2
  315. package/dist/types/sdk/pools/index.d.ts +3 -3
  316. package/dist/types/sdk/pools/types.d.ts +109 -4
  317. package/dist/types/sdk/positions/PositionsService.d.ts +33 -2
  318. package/dist/types/sdk/positions/calcBorrowRate.d.ts +40 -0
  319. package/dist/types/sdk/positions/calcHealthFactor.d.ts +55 -0
  320. package/dist/types/sdk/positions/calcLiquidationPrice.d.ts +12 -0
  321. package/dist/types/sdk/positions/calcLiquidationPriceForTarget.d.ts +43 -0
  322. package/dist/types/sdk/positions/calcTimeToLiquidationMs.d.ts +16 -0
  323. package/dist/types/sdk/positions/index.d.ts +7 -2
  324. package/dist/types/sdk/positions/types.d.ts +58 -1
  325. package/dist/types/sdk/types/state.d.ts +6 -0
  326. package/dist/types/sdk/utils/viem/executeMulticallBatches.d.ts +39 -0
  327. package/dist/types/sdk/utils/viem/index.d.ts +3 -2
  328. package/package.json +2 -1
  329. package/dist/cjs/model/history.js +0 -53
  330. package/dist/cjs/model/history.schema.js +0 -128
  331. package/dist/cjs/sdk/accounts/intents/intents/index.js +0 -14
  332. package/dist/cjs/sdk/accounts/intents/intents/resume/add-collateral/add-collateral.fixtures.js +0 -121
  333. package/dist/cjs/sdk/accounts/intents/intents/resume/add-collateral/add-collateral.js +0 -15
  334. package/dist/cjs/sdk/accounts/intents/intents/resume/close/close.fixtures.js +0 -108
  335. package/dist/cjs/sdk/accounts/intents/intents/resume/close/close.js +0 -51
  336. package/dist/cjs/sdk/accounts/intents/intents/resume/decrease-leverage/decrease-leverage.fixtures.js +0 -130
  337. package/dist/cjs/sdk/accounts/intents/intents/resume/decrease-leverage/decrease-leverage.js +0 -83
  338. package/dist/cjs/sdk/accounts/intents/intents/resume/deposit/deposit.fixtures.js +0 -117
  339. package/dist/cjs/sdk/accounts/intents/intents/resume/deposit/deposit.js +0 -15
  340. package/dist/cjs/sdk/accounts/intents/intents/resume/increase-leverage/increase-leverage.fixtures.js +0 -95
  341. package/dist/cjs/sdk/accounts/intents/intents/resume/increase-leverage/increase-leverage.js +0 -15
  342. package/dist/cjs/sdk/accounts/intents/intents/resume/index.js +0 -13
  343. package/dist/cjs/sdk/accounts/intents/intents/resume/withdraw/withdraw.fixtures.js +0 -138
  344. package/dist/cjs/sdk/accounts/intents/intents/resume/withdraw/withdraw.js +0 -161
  345. package/dist/cjs/sdk/accounts/intents/operations/add-collateral/index.js +0 -17
  346. package/dist/cjs/sdk/accounts/intents/operations/claim-delayed/index.js +0 -54
  347. package/dist/cjs/sdk/accounts/intents/operations/close-credit-account/index.js +0 -26
  348. package/dist/cjs/sdk/accounts/intents/operations/decrease-debt/index.js +0 -12
  349. package/dist/cjs/sdk/accounts/intents/operations/increase-debt/index.js +0 -12
  350. package/dist/cjs/sdk/accounts/intents/operations/index.js +0 -27
  351. package/dist/cjs/sdk/accounts/intents/operations/quota-update/index.js +0 -22
  352. package/dist/cjs/sdk/accounts/intents/operations/repay-credit-account/index.js +0 -22
  353. package/dist/cjs/sdk/accounts/intents/operations/start-delayed-withdrawal/index.js +0 -18
  354. package/dist/cjs/sdk/accounts/intents/operations/swap/index.js +0 -18
  355. package/dist/cjs/sdk/accounts/intents/operations/unwrap-rwa-collateral/index.js +0 -27
  356. package/dist/cjs/sdk/accounts/intents/operations/withdraw-collateral/index.js +0 -43
  357. package/dist/cjs/sdk/accounts/intents/operations/wrap-rwa-collateral/index.js +0 -27
  358. package/dist/cjs/sdk/accounts/intents/quoters/close.js +0 -58
  359. package/dist/cjs/sdk/accounts/intents/quoters/index.js +0 -7
  360. package/dist/cjs/sdk/accounts/intents/quoters/swap.js +0 -79
  361. package/dist/cjs/sdk/accounts/intents/testing/expect.js +0 -167
  362. package/dist/cjs/sdk/accounts/intents/testing/resume.js +0 -172
  363. package/dist/cjs/sdk/accounts/intents/utils/simulate-adjust-state.js +0 -39
  364. package/dist/cjs/sdk/accounts/intents/utils/simulate-assets.js +0 -69
  365. package/dist/cjs/sdk/accounts/intents/utils/with-quota-update.js +0 -13
  366. package/dist/esm/model/history.js +0 -49
  367. package/dist/esm/model/history.schema.js +0 -116
  368. package/dist/esm/sdk/accounts/intents/intents/index.js +0 -8
  369. package/dist/esm/sdk/accounts/intents/intents/resume/add-collateral/add-collateral.fixtures.js +0 -107
  370. package/dist/esm/sdk/accounts/intents/intents/resume/add-collateral/add-collateral.js +0 -14
  371. package/dist/esm/sdk/accounts/intents/intents/resume/close/close.fixtures.js +0 -94
  372. package/dist/esm/sdk/accounts/intents/intents/resume/close/close.js +0 -50
  373. package/dist/esm/sdk/accounts/intents/intents/resume/decrease-leverage/decrease-leverage.fixtures.js +0 -114
  374. package/dist/esm/sdk/accounts/intents/intents/resume/decrease-leverage/decrease-leverage.js +0 -82
  375. package/dist/esm/sdk/accounts/intents/intents/resume/deposit/deposit.fixtures.js +0 -110
  376. package/dist/esm/sdk/accounts/intents/intents/resume/deposit/deposit.js +0 -14
  377. package/dist/esm/sdk/accounts/intents/intents/resume/increase-leverage/increase-leverage.fixtures.js +0 -88
  378. package/dist/esm/sdk/accounts/intents/intents/resume/increase-leverage/increase-leverage.js +0 -14
  379. package/dist/esm/sdk/accounts/intents/intents/resume/index.js +0 -7
  380. package/dist/esm/sdk/accounts/intents/intents/resume/withdraw/withdraw.fixtures.js +0 -121
  381. package/dist/esm/sdk/accounts/intents/intents/resume/withdraw/withdraw.js +0 -160
  382. package/dist/esm/sdk/accounts/intents/operations/add-collateral/index.js +0 -16
  383. package/dist/esm/sdk/accounts/intents/operations/claim-delayed/index.js +0 -52
  384. package/dist/esm/sdk/accounts/intents/operations/close-credit-account/index.js +0 -25
  385. package/dist/esm/sdk/accounts/intents/operations/decrease-debt/index.js +0 -11
  386. package/dist/esm/sdk/accounts/intents/operations/increase-debt/index.js +0 -11
  387. package/dist/esm/sdk/accounts/intents/operations/index.js +0 -14
  388. package/dist/esm/sdk/accounts/intents/operations/quota-update/index.js +0 -21
  389. package/dist/esm/sdk/accounts/intents/operations/repay-credit-account/index.js +0 -21
  390. package/dist/esm/sdk/accounts/intents/operations/start-delayed-withdrawal/index.js +0 -17
  391. package/dist/esm/sdk/accounts/intents/operations/swap/index.js +0 -17
  392. package/dist/esm/sdk/accounts/intents/operations/unwrap-rwa-collateral/index.js +0 -26
  393. package/dist/esm/sdk/accounts/intents/operations/withdraw-collateral/index.js +0 -42
  394. package/dist/esm/sdk/accounts/intents/operations/wrap-rwa-collateral/index.js +0 -26
  395. package/dist/esm/sdk/accounts/intents/quoters/close.js +0 -56
  396. package/dist/esm/sdk/accounts/intents/quoters/index.js +0 -3
  397. package/dist/esm/sdk/accounts/intents/quoters/swap.js +0 -77
  398. package/dist/esm/sdk/accounts/intents/testing/expect.js +0 -162
  399. package/dist/esm/sdk/accounts/intents/testing/resume.js +0 -157
  400. package/dist/esm/sdk/accounts/intents/utils/simulate-adjust-state.js +0 -38
  401. package/dist/esm/sdk/accounts/intents/utils/simulate-assets.js +0 -68
  402. package/dist/esm/sdk/accounts/intents/utils/with-quota-update.js +0 -12
  403. package/dist/types/model/history.d.ts +0 -153
  404. package/dist/types/model/history.schema.d.ts +0 -95
  405. package/dist/types/new-sdk/utils/history.d.ts +0 -18
  406. package/dist/types/sdk/accounts/intents/intents/index.d.ts +0 -8
  407. package/dist/types/sdk/accounts/intents/intents/resume/add-collateral/add-collateral.d.ts +0 -13
  408. package/dist/types/sdk/accounts/intents/intents/resume/add-collateral/add-collateral.fixtures.d.ts +0 -38
  409. package/dist/types/sdk/accounts/intents/intents/resume/close/close.d.ts +0 -26
  410. package/dist/types/sdk/accounts/intents/intents/resume/close/close.fixtures.d.ts +0 -63
  411. package/dist/types/sdk/accounts/intents/intents/resume/decrease-leverage/decrease-leverage.d.ts +0 -26
  412. package/dist/types/sdk/accounts/intents/intents/resume/decrease-leverage/decrease-leverage.fixtures.d.ts +0 -86
  413. package/dist/types/sdk/accounts/intents/intents/resume/deposit/deposit.d.ts +0 -13
  414. package/dist/types/sdk/accounts/intents/intents/resume/deposit/deposit.fixtures.d.ts +0 -48
  415. package/dist/types/sdk/accounts/intents/intents/resume/increase-leverage/increase-leverage.d.ts +0 -13
  416. package/dist/types/sdk/accounts/intents/intents/resume/increase-leverage/increase-leverage.fixtures.d.ts +0 -46
  417. package/dist/types/sdk/accounts/intents/intents/resume/index.d.ts +0 -7
  418. package/dist/types/sdk/accounts/intents/intents/resume/withdraw/withdraw.d.ts +0 -33
  419. package/dist/types/sdk/accounts/intents/intents/resume/withdraw/withdraw.fixtures.d.ts +0 -68
  420. package/dist/types/sdk/accounts/intents/operations/add-collateral/index.d.ts +0 -23
  421. package/dist/types/sdk/accounts/intents/operations/claim-delayed/index.d.ts +0 -55
  422. package/dist/types/sdk/accounts/intents/operations/close-credit-account/index.d.ts +0 -22
  423. package/dist/types/sdk/accounts/intents/operations/decrease-debt/index.d.ts +0 -18
  424. package/dist/types/sdk/accounts/intents/operations/increase-debt/index.d.ts +0 -18
  425. package/dist/types/sdk/accounts/intents/operations/index.d.ts +0 -14
  426. package/dist/types/sdk/accounts/intents/operations/quota-update/index.d.ts +0 -24
  427. package/dist/types/sdk/accounts/intents/operations/repay-credit-account/index.d.ts +0 -31
  428. package/dist/types/sdk/accounts/intents/operations/start-delayed-withdrawal/index.d.ts +0 -23
  429. package/dist/types/sdk/accounts/intents/operations/swap/index.d.ts +0 -28
  430. package/dist/types/sdk/accounts/intents/operations/types.d.ts +0 -21
  431. package/dist/types/sdk/accounts/intents/operations/unwrap-rwa-collateral/index.d.ts +0 -30
  432. package/dist/types/sdk/accounts/intents/operations/withdraw-collateral/index.d.ts +0 -36
  433. package/dist/types/sdk/accounts/intents/operations/wrap-rwa-collateral/index.d.ts +0 -30
  434. package/dist/types/sdk/accounts/intents/quoters/close.d.ts +0 -43
  435. package/dist/types/sdk/accounts/intents/quoters/index.d.ts +0 -3
  436. package/dist/types/sdk/accounts/intents/quoters/swap.d.ts +0 -43
  437. package/dist/types/sdk/accounts/intents/testing/resume.d.ts +0 -84
  438. package/dist/types/sdk/accounts/intents/utils/simulate-adjust-state.d.ts +0 -19
  439. package/dist/types/sdk/accounts/intents/utils/simulate-assets.d.ts +0 -21
  440. package/dist/types/sdk/accounts/intents/utils/with-quota-update.d.ts +0 -16
  441. /package/dist/cjs/{new-sdk/utils/history.js → model/notices.js} +0 -0
  442. /package/dist/cjs/{sdk/accounts/intents/operations → new-sdk/simulate}/types.js +0 -0
  443. /package/dist/esm/{new-sdk/utils/history.js → model/notices.js} +0 -0
  444. /package/dist/esm/{sdk/accounts/intents/operations → new-sdk/simulate}/types.js +0 -0
@@ -1,7 +1,7 @@
1
- import { AddressSet } from "../utils/AddressSet.js";
2
1
  import { ierc20Abi } from "../../abi/iERC20.js";
2
+ import { AddressSet } from "../utils/AddressSet.js";
3
3
  import "../constants/addresses.js";
4
- import { RAY } from "../constants/math.js";
4
+ import { PERCENTAGE_FACTOR, RAY } from "../constants/math.js";
5
5
  import "../constants/index.js";
6
6
  import { hexEq } from "../utils/hex.js";
7
7
  import "../utils/index.js";
@@ -14,6 +14,12 @@ import { IERC20ZapperContract } from "../market/zapper/IERC20ZapperContract.js";
14
14
  import { IETHZapperContract } from "../market/zapper/IETHZapperContract.js";
15
15
  import "../market/index.js";
16
16
  //#region src/sdk/pools/PoolService.ts
17
+ /**
18
+ * Haircut on reported pool liquidity, so a withdrawal sized against the reported
19
+ * figure is not defeated by rounding in the share conversion.
20
+ */
21
+ const LIQUIDITY_SAFETY_NUM = 99999n;
22
+ const LIQUIDITY_SAFETY_DENOM = 100000n;
17
23
  var PoolService = class extends SDKConstruct {
18
24
  /**
19
25
  * {@inheritDoc IPoolsService.getDepositTokensIn}
@@ -115,10 +121,87 @@ var PoolService = class extends SDKConstruct {
115
121
  return this.#withdrawalTokensOut(pool, tokenIn, true);
116
122
  }
117
123
  /**
124
+ * {@inheritDoc IPoolsService.simulateDeposit}
125
+ */
126
+ simulateDeposit(props) {
127
+ const { pool: poolAddr, amount } = props;
128
+ const { pool } = this.sdk.marketRegister.findByPool(poolAddr);
129
+ const tokenIn = props.tokenIn ?? pool.underlying;
130
+ const tokenOut = this.#resolveTokenOut(props.tokenOut, () => this.getDepositTokensOut(poolAddr, tokenIn), {
131
+ poolAddr,
132
+ tokenIn,
133
+ operation: "deposit"
134
+ });
135
+ const { zapper } = this.getDepositMetadata(poolAddr, tokenIn, tokenOut);
136
+ return {
137
+ tokenIn: {
138
+ token: tokenIn,
139
+ balance: amount
140
+ },
141
+ tokenOut: {
142
+ token: tokenOut,
143
+ balance: toShares(pool.pool, amount)
144
+ },
145
+ zapper: zapper?.baseParams.addr
146
+ };
147
+ }
148
+ /**
149
+ * {@inheritDoc IPoolsService.simulateWithdraw}
150
+ */
151
+ simulateWithdraw(props) {
152
+ const { pool: poolAddr, amount } = props;
153
+ const { pool } = this.sdk.marketRegister.findByPool(poolAddr);
154
+ const tokenIn = props.tokenIn ?? poolAddr;
155
+ const tokenOut = this.#resolveTokenOut(props.tokenOut, () => this.getWithdrawalTokensOut(poolAddr, tokenIn), {
156
+ poolAddr,
157
+ tokenIn,
158
+ operation: "withdrawal"
159
+ });
160
+ const { zapper } = this.getWithdrawalMetadata(poolAddr, tokenIn, tokenOut);
161
+ return {
162
+ tokenIn: {
163
+ token: tokenIn,
164
+ balance: toSharesUp(pool.pool, amount)
165
+ },
166
+ tokenOut: {
167
+ token: tokenOut,
168
+ balance: amount
169
+ },
170
+ zapper: zapper?.baseParams.addr,
171
+ availableLiquidity: pool.pool.availableLiquidity * LIQUIDITY_SAFETY_NUM / LIQUIDITY_SAFETY_DENOM
172
+ };
173
+ }
174
+ /**
175
+ * {@inheritDoc IPoolsService.simulateRedeem}
176
+ */
177
+ simulateRedeem(props) {
178
+ const { pool: poolAddr, amount } = props;
179
+ const { pool } = this.sdk.marketRegister.findByPool(poolAddr);
180
+ const tokenIn = props.tokenIn ?? poolAddr;
181
+ const tokenOut = this.#resolveTokenOut(props.tokenOut, () => this.getWithdrawalTokensOut(poolAddr, tokenIn), {
182
+ poolAddr,
183
+ tokenIn,
184
+ operation: "withdrawal"
185
+ });
186
+ const { zapper } = this.getWithdrawalMetadata(poolAddr, tokenIn, tokenOut);
187
+ return {
188
+ tokenIn: {
189
+ token: tokenIn,
190
+ balance: amount
191
+ },
192
+ tokenOut: {
193
+ token: tokenOut,
194
+ balance: toAssets(pool.pool, amount)
195
+ },
196
+ zapper: zapper?.baseParams.addr,
197
+ availableLiquidity: pool.pool.availableLiquidity * LIQUIDITY_SAFETY_NUM / LIQUIDITY_SAFETY_DENOM
198
+ };
199
+ }
200
+ /**
118
201
  * {@inheritDoc IPoolsService.removeLiquidity}
119
202
  */
120
203
  removeLiquidity(props) {
121
- const { pool, amount, meta, wallet, permit } = props;
204
+ const { pool, amount, meta, wallet, permit, mode = "withdraw" } = props;
122
205
  const underlying = this.#describeUnderlying(pool);
123
206
  if (this.sdk.tokensMeta.isRWAUnderlying(underlying)) {
124
207
  if (underlying.contractType === "RWA_UNDERLYING::ON_DEMAND") {
@@ -139,8 +222,10 @@ var PoolService = class extends SDKConstruct {
139
222
  };
140
223
  }
141
224
  }
225
+ const poolContract = this.sdk.marketRegister.findByPool(pool).pool.pool;
142
226
  if (meta.zapper instanceof IETHZapperContract || meta.zapper instanceof IERC20ZapperContract) {
143
- const tx = permit ? meta.zapper.redeemWithPermit(amount, wallet, permit.deadline, permit.v, permit.r, permit.s) : meta.zapper.redeem(amount, wallet);
227
+ const shares = mode === "withdraw" ? toSharesUp(poolContract, amount) : amount;
228
+ const tx = permit ? meta.zapper.redeemWithPermit(shares, wallet, permit.deadline, permit.v, permit.r, permit.s) : meta.zapper.redeem(shares, wallet);
144
229
  return {
145
230
  tx,
146
231
  calls: [{
@@ -149,7 +234,7 @@ var PoolService = class extends SDKConstruct {
149
234
  }]
150
235
  };
151
236
  }
152
- const tx = this.sdk.marketRegister.findByPool(pool).pool.pool.redeem(amount, wallet, wallet);
237
+ const tx = mode === "withdraw" ? poolContract.withdraw(amount, wallet, wallet) : poolContract.redeem(amount, wallet, wallet);
153
238
  return {
154
239
  tx,
155
240
  calls: [{
@@ -309,6 +394,18 @@ var PoolService = class extends SDKConstruct {
309
394
  type
310
395
  };
311
396
  }
397
+ /**
398
+ * Picks the route output when the caller left it open.
399
+ *
400
+ * Only an unambiguous single route can be defaulted: with several outputs the
401
+ * choice is the caller's, and with none there is no route to preview.
402
+ */
403
+ #resolveTokenOut(requested, candidates, ctx) {
404
+ if (requested) return requested;
405
+ const options = candidates();
406
+ if (options.length !== 1) throw new Error(`tokenOut is required: ${options.length} ${ctx.operation} routes from ${this.labelAddress(ctx.tokenIn)} on pool ${this.labelAddress(ctx.poolAddr)}`);
407
+ return options[0];
408
+ }
312
409
  #describeUnderlying(pool) {
313
410
  const market = this.sdk.marketRegister.findByPool(pool);
314
411
  return this.sdk.tokensMeta.mustGet(market.underlying);
@@ -328,5 +425,35 @@ var PoolService = class extends SDKConstruct {
328
425
  };
329
426
  }
330
427
  };
428
+ /**
429
+ * Shares minted for `assets`, as `previewDeposit` would report them.
430
+ *
431
+ * Both directions convert through the diesel rate — underlying per RAY of
432
+ * shares — because that is the rate the pool itself divides by, and the only
433
+ * exact one the SDK holds: `totalAssets` is this rate multiplied out, so
434
+ * converting back through it costs a wei on large amounts. Rounds down, as
435
+ * minting does.
436
+ */
437
+ function toShares(pool, assets) {
438
+ const { dieselRate } = pool;
439
+ return dieselRate === 0n ? assets : assets * RAY / dieselRate;
440
+ }
441
+ /**
442
+ * Shares a withdrawal of `assets` burns, as `previewWithdraw` would report
443
+ * them: {@link toShares} rounded the other way, since the burn has to cover
444
+ * the payout the caller asked for.
445
+ */
446
+ function toSharesUp(pool, assets) {
447
+ const { dieselRate } = pool;
448
+ return dieselRate === 0n ? assets : (assets * RAY + dieselRate - 1n) / dieselRate;
449
+ }
450
+ /**
451
+ * Underlying paid out for `shares`, as `previewRedeem` would report it:
452
+ * {@link toShares} run backwards, less the pool's withdrawal fee.
453
+ */
454
+ function toAssets(pool, shares) {
455
+ const { dieselRate, withdrawFee } = pool;
456
+ return (dieselRate === 0n ? shares : shares * dieselRate / RAY) * (PERCENTAGE_FACTOR - withdrawFee) / PERCENTAGE_FACTOR;
457
+ }
331
458
  //#endregion
332
- export { PoolService };
459
+ export { PoolService, toShares, toSharesUp };
@@ -1,3 +1,3 @@
1
- import { PoolService } from "./PoolService.js";
1
+ import { PoolService, toShares, toSharesUp } from "./PoolService.js";
2
2
  import "./types.js";
3
- export { PoolService };
3
+ export { PoolService, toShares, toSharesUp };
@@ -1,8 +1,20 @@
1
+ import { AddressMap } from "../utils/AddressMap.js";
2
+ import "../constants/math.js";
3
+ import "../constants/index.js";
4
+ import "../utils/index.js";
1
5
  import { SDKConstruct } from "../base/SDKConstruct.js";
2
6
  import "../base/index.js";
7
+ import { calcBorrowApy, calcPositionLeverage, healthFactorBps, usdToNumber } from "../market/math.js";
8
+ import { dominantCollateral } from "../market/credit/dominantCollateral.js";
3
9
  import { isFilterSet } from "../../model/filters.js";
4
10
  import { matchesPositionFilter } from "../../model/positions.js";
5
11
  import "../../model/index.js";
12
+ import "../market/index.js";
13
+ import { calcBorrowRate } from "./calcBorrowRate.js";
14
+ import { calcHealthFactor } from "./calcHealthFactor.js";
15
+ import { calcLiquidationPrice } from "./calcLiquidationPrice.js";
16
+ import { calcTimeToLiquidationMs } from "./calcTimeToLiquidationMs.js";
17
+ import { accountSnapshotFromCreditAccountData } from "./types.js";
6
18
  //#region src/sdk/positions/PositionsService.ts
7
19
  /**
8
20
  * The `positions` read model of one chain: everything a wallet holds in the
@@ -27,7 +39,7 @@ var PositionsService = class extends SDKConstruct {
27
39
  wallet,
28
40
  blockNumber
29
41
  }) : Promise.resolve([]),
30
- wanted("strategy") ? this.sdk.accounts.listPositions({
42
+ wanted("strategy") ? this.listStrategyPositions({
31
43
  owner: wallet,
32
44
  includeZeroDebt: !isFilterSet(isZeroDebt) || isZeroDebt,
33
45
  blockNumber
@@ -43,6 +55,206 @@ var PositionsService = class extends SDKConstruct {
43
55
  ...liquidation
44
56
  ].filter((row) => matchesPositionFilter(row, filter));
45
57
  }
58
+ /**
59
+ * Describes all credit accounts of a wallet as strategy positions.
60
+ *
61
+ * @param props - {@link ListStrategyPositionsProps}
62
+ **/
63
+ async listStrategyPositions(props) {
64
+ const { owner, includeZeroDebt, blockNumber } = props;
65
+ const describable = (await this.sdk.accounts.getBorrowerCreditAccounts(owner, { includeZeroDebt }, blockNumber)).filter((ca) => {
66
+ if (!ca.success) this.logger?.warn(`cannot describe position of ${this.labelAddress(ca.creditAccount)}: collateral computation failed`);
67
+ return ca.success;
68
+ });
69
+ const withdrawals = await Promise.all(describable.map((ca) => this.#accountWithdrawals(ca, blockNumber)));
70
+ return describable.map((ca, i) => this.#toStrategyPosition(ca, withdrawals[i] ?? new AddressMap()));
71
+ }
72
+ /**
73
+ * Health factor of an account state, in basis points (`10000` = 1.0).
74
+ **/
75
+ healthFactor(snapshot, options) {
76
+ const data = this.#marketData(snapshot);
77
+ return calcHealthFactor({
78
+ snapshot,
79
+ underlying: data.underlying,
80
+ decimals: data.decimals,
81
+ prices: data.prices,
82
+ reservePrices: data.reservePrices,
83
+ safePrices: options?.safePrices,
84
+ liquidationThresholds: data.liquidationThresholds,
85
+ activeQuotas: data.activeQuotas
86
+ });
87
+ }
88
+ /**
89
+ * Cost of an account state's debt, broken down into the pool's base rate
90
+ * and per-token quota rates.
91
+ **/
92
+ borrowRate(snapshot) {
93
+ const data = this.#marketData(snapshot);
94
+ return calcBorrowRate({
95
+ snapshot,
96
+ baseInterestRate: data.baseInterestRate,
97
+ feeInterest: data.feeInterest,
98
+ quotaRates: data.quotaRates
99
+ });
100
+ }
101
+ /**
102
+ * Estimated milliseconds until the account's health factor decays to
103
+ * `10000` under its current borrow rate, or `null` when the debt carries
104
+ * no rate (or the account is already liquidatable).
105
+ **/
106
+ timeToLiquidation(snapshot) {
107
+ const data = this.#marketData(snapshot);
108
+ return calcTimeToLiquidationMs(calcHealthFactor({
109
+ snapshot,
110
+ underlying: data.underlying,
111
+ decimals: data.decimals,
112
+ prices: data.prices,
113
+ liquidationThresholds: data.liquidationThresholds,
114
+ activeQuotas: data.activeQuotas
115
+ }), BigInt(calcBorrowRate({
116
+ snapshot,
117
+ baseInterestRate: data.baseInterestRate,
118
+ feeInterest: data.feeInterest,
119
+ quotaRates: data.quotaRates
120
+ }).totalOnDebt));
121
+ }
122
+ /**
123
+ * Price of the single non-underlying collateral at which the account
124
+ * becomes liquidatable, or `null` when the account holds zero or several
125
+ * non-underlying assets.
126
+ **/
127
+ liquidationPrice(snapshot) {
128
+ const data = this.#marketData(snapshot);
129
+ return calcLiquidationPrice({
130
+ snapshot,
131
+ underlying: data.underlying,
132
+ decimals: data.decimals,
133
+ liquidationThresholds: data.liquidationThresholds
134
+ });
135
+ }
136
+ /**
137
+ * Builds one strategy position from an account snapshot.
138
+ *
139
+ * @param withdrawals - Delayed withdrawals of the account, keyed by the
140
+ * phantom token that represents them on it.
141
+ **/
142
+ #toStrategyPosition(ca, withdrawals) {
143
+ const suite = this.sdk.marketRegister.findCreditManager(ca.creditManager);
144
+ const { market } = suite;
145
+ const { priceOracle } = market;
146
+ const { pool } = market.pool;
147
+ const token = this.sdk.tokensMeta.mustGetToken(market.unwrappedUnderlying);
148
+ const totalDebtValue = ca.debt + ca.accruedInterest + ca.accruedFees;
149
+ const collateral = dominantCollateral(ca, market);
150
+ const snapshot = accountSnapshotFromCreditAccountData(ca);
151
+ const borrowRate = this.borrowRate(snapshot);
152
+ const timeToLiquidation = this.timeToLiquidation(snapshot);
153
+ const liquidationPrice = this.liquidationPrice(snapshot);
154
+ return {
155
+ kind: "strategy",
156
+ chainId: this.sdk.chainId,
157
+ creditManager: ca.creditManager,
158
+ creditAccount: ca.creditAccount,
159
+ name: collateral ? suite.strategyName(collateral) : token.symbol,
160
+ targetCollateral: collateral ? this.sdk.tokensMeta.mustGetToken(collateral) : null,
161
+ leverage: calcPositionLeverage(ca.totalValue, totalDebtValue),
162
+ borrowApy: calcBorrowApy(pool.baseInterestRate, suite.creditManager.feeInterest),
163
+ totalDebt: {
164
+ token,
165
+ value: totalDebtValue,
166
+ valueUsd: usdToNumber(ca.totalDebtUSD)
167
+ },
168
+ totalValue: {
169
+ token,
170
+ value: ca.totalValue,
171
+ valueUsd: usdToNumber(ca.totalValueUSD)
172
+ },
173
+ healthFactor: healthFactorBps(ca.healthFactor),
174
+ borrowRate,
175
+ timeToLiquidation,
176
+ liquidationPrice,
177
+ collaterals: ca.tokens.flatMap((t) => {
178
+ if ((t.mask & ca.enabledTokensMask) === 0n || t.balance <= 10n) return [];
179
+ return [{
180
+ collateral: priceOracle.toTokenAmount(t.token, t.balance),
181
+ quota: priceOracle.toTokenAmount(market.underlying, t.quota),
182
+ withdrawals: withdrawals.get(t.token) ?? []
183
+ }];
184
+ })
185
+ };
186
+ }
187
+ /**
188
+ * Delayed withdrawals of one account, keyed by the phantom token that
189
+ * represents them on it, so that each collateral row can pick up its own.
190
+ **/
191
+ async #accountWithdrawals(ca, blockNumber) {
192
+ const compressor = this.sdk.withdrawalCompressor;
193
+ const byPhantomToken = new AddressMap(void 0, "accountWithdrawals");
194
+ const holdsPhantomToken = ca.tokens.some((t) => t.balance > 10n && compressor?.getWithdrawalSourceToken(t.token) !== void 0);
195
+ if (!compressor || !holdsPhantomToken) return byPhantomToken;
196
+ const { priceOracle } = this.sdk.marketRegister.findByCreditManager(ca.creditManager);
197
+ const { claimable, pending } = await compressor.getCurrentWithdrawals(ca.creditAccount, blockNumber);
198
+ const add = (w, outputs, claimableAt) => {
199
+ const assets = outputs.map((o) => ({
200
+ isDelayed: true,
201
+ ...priceOracle.toTokenAmount(o.token, o.amount),
202
+ redeemer: w.redeemer,
203
+ claimableAt: claimableAt === void 0 ? void 0 : Number(claimableAt)
204
+ }));
205
+ byPhantomToken.upsert(w.withdrawalPhantomToken, [...byPhantomToken.get(w.withdrawalPhantomToken) ?? [], ...assets]);
206
+ };
207
+ for (const w of claimable) add(w, w.outputs);
208
+ for (const w of pending) add(w, w.expectedOutputs, w.claimableAt);
209
+ return byPhantomToken;
210
+ }
211
+ /**
212
+ * Collects decimals, prices and thresholds for the snapshot's tokens plus
213
+ * the market underlying, even when the account holds no underlying balance.
214
+ **/
215
+ #marketData(snapshot) {
216
+ const market = this.sdk.marketRegister.findByCreditManager(snapshot.creditManager);
217
+ const cm = this.sdk.marketRegister.findCreditManager(snapshot.creditManager).creditManager;
218
+ const { priceOracle } = market;
219
+ const underlying = market.pool.underlying;
220
+ const { pqk, pool } = market.pool;
221
+ const tokens = [underlying];
222
+ for (const a of snapshot.assets) tokens.push(a.token);
223
+ for (const q of snapshot.quotas) tokens.push(q.token);
224
+ const decimals = {};
225
+ const prices = {};
226
+ const reservePrices = {};
227
+ const liquidationThresholds = {};
228
+ const activeQuotas = {};
229
+ const quotaRates = {};
230
+ for (const token of tokens) {
231
+ const meta = this.sdk.tokensMeta.get(token);
232
+ if (meta) decimals[token] = meta.decimals;
233
+ try {
234
+ prices[token] = priceOracle.mainPrice(token);
235
+ } catch {}
236
+ try {
237
+ reservePrices[token] = priceOracle.reservePrice(token);
238
+ } catch {}
239
+ const lt = cm.liquidationThresholds.get(token);
240
+ if (lt !== void 0) liquidationThresholds[token] = lt;
241
+ if (pqk.hasActiveQuota(token)) {
242
+ activeQuotas[token] = true;
243
+ quotaRates[token] = pqk.quotaRate(token);
244
+ }
245
+ }
246
+ return {
247
+ underlying,
248
+ decimals,
249
+ prices,
250
+ reservePrices,
251
+ liquidationThresholds,
252
+ activeQuotas,
253
+ quotaRates,
254
+ baseInterestRate: pool.baseInterestRate,
255
+ feeInterest: cm.feeInterest
256
+ };
257
+ }
46
258
  };
47
259
  //#endregion
48
260
  export { PositionsService };
@@ -0,0 +1,42 @@
1
+ import { AddressMap } from "../utils/AddressMap.js";
2
+ import { PERCENTAGE_FACTOR } from "../constants/math.js";
3
+ import { calcBorrowApy } from "../market/math.js";
4
+ //#region src/sdk/positions/calcBorrowRate.ts
5
+ /**
6
+ * Cost of an account state's debt, broken down into the pool's base rate and
7
+ * per-token quota rates.
8
+ *
9
+ * The base rate is the market's current borrow APY (the pool's base rate plus
10
+ * the credit manager's interest fee) — the same value `borrowApy` reports on
11
+ * a position; it is not recomputed for the projected pool liquidity. Quota
12
+ * contributions are `quotaBalance * quotaRate` with the interest fee on top,
13
+ * normalized against the total value (`total`, `quotas`) and against the
14
+ * debt (`totalOnDebt`, the rate the debt itself grows at). Formulas are in
15
+ * parity with the frontend's `BorrowRateUtils`.
16
+ **/
17
+ function calcBorrowRate(props) {
18
+ const { snapshot, baseInterestRate, feeInterest, quotaRates } = props;
19
+ const { quotas, totalDebt, totalValue } = snapshot;
20
+ const rates = new AddressMap(Object.entries(quotaRates));
21
+ const base = calcBorrowApy(baseInterestRate, feeInterest);
22
+ const fee = PERCENTAGE_FACTOR + BigInt(feeInterest);
23
+ let quotaRateSum = 0n;
24
+ const perQuota = {};
25
+ for (const q of quotas) {
26
+ if (q.balance <= 10n) continue;
27
+ const rate = rates.get(q.token);
28
+ const rateBalance = rate === void 0 ? 0n : q.balance * BigInt(rate);
29
+ quotaRateSum += rateBalance;
30
+ const withFee = rateBalance * fee / PERCENTAGE_FACTOR;
31
+ perQuota[q.token] = totalValue > 0n ? Number(withFee / totalValue) : 0;
32
+ }
33
+ const quotaRateSumWithFee = quotaRateSum * fee / PERCENTAGE_FACTOR;
34
+ return {
35
+ total: totalValue > 0n ? Number(totalDebt * BigInt(base) / totalValue) + Number(quotaRateSumWithFee / totalValue) : 0,
36
+ totalOnDebt: totalDebt > 0n ? base + Number(quotaRateSumWithFee / totalDebt) : 0,
37
+ base,
38
+ quotas: perQuota
39
+ };
40
+ }
41
+ //#endregion
42
+ export { calcBorrowRate };
@@ -0,0 +1,51 @@
1
+ import { AddressMap } from "../utils/AddressMap.js";
2
+ import { BigIntMath } from "../utils/bigint-math.js";
3
+ import { MAX_UINT16, PERCENTAGE_FACTOR } from "../constants/math.js";
4
+ import { isAddressEqual } from "viem";
5
+ //#region src/sdk/positions/calcHealthFactor.ts
6
+ /**
7
+ * Health factor of an account state, in basis points (`10000` = 1.0).
8
+ *
9
+ * Collateral is valued under liquidation thresholds, with quoted tokens
10
+ * capped by their quota, and compared against the debt's value. An account
11
+ * with no debt reports `65535` (`MAX_UINT16`), the contract's own sentinel
12
+ * scaled down. Formulas are in parity with the legacy `calcHealthFactor`.
13
+ * Tokens with no price in {@link CalcHealthFactorProps.prices} contribute
14
+ * nothing.
15
+ **/
16
+ function calcHealthFactor(props) {
17
+ const { snapshot, underlying, decimals, prices, reservePrices = {}, safePrices = false, liquidationThresholds, activeQuotas } = props;
18
+ if (snapshot.totalDebt === 0n) return Number(MAX_UINT16);
19
+ const decimalsByToken = new AddressMap(Object.entries(decimals));
20
+ const pricesByToken = new AddressMap(Object.entries(prices));
21
+ const reservePricesByToken = new AddressMap(Object.entries(reservePrices));
22
+ const lts = new AddressMap(Object.entries(liquidationThresholds));
23
+ const active = new AddressMap(Object.entries(activeQuotas));
24
+ const priceOf = (token, forCollateral) => {
25
+ const main = pricesByToken.get(token);
26
+ if (!safePrices || !forCollateral) return main;
27
+ const reserve = reservePricesByToken.get(token);
28
+ if (main !== void 0 && reserve !== void 0) return BigIntMath.min(main, reserve);
29
+ return main ?? reserve;
30
+ };
31
+ const convertToUSD = (token, amount, forCollateral = false) => {
32
+ const price = priceOf(token, forCollateral);
33
+ if (price === void 0) return null;
34
+ const scale = 10n ** BigInt(decimalsByToken.get(token) ?? 18);
35
+ return amount * price / scale;
36
+ };
37
+ const assetMoney = snapshot.assets.reduce((acc, { token, balance }) => {
38
+ if (balance <= 10n) return acc;
39
+ const lt = BigInt(lts.get(token) ?? 0);
40
+ const tokenLtWeighted = (convertToUSD(token, balance, true) ?? 0n) * lt;
41
+ const quota = snapshot.quotas.find((q) => isAddressEqual(q.token, token));
42
+ const quotaBalance = quota && (active.get(token) ?? false) ? quota.balance : 0n;
43
+ const quotaWeighted = (convertToUSD(underlying, quotaBalance) ?? 0n) * PERCENTAGE_FACTOR;
44
+ return acc + (quota ? BigIntMath.min(quotaWeighted, tokenLtWeighted) : tokenLtWeighted);
45
+ }, 0n);
46
+ const borrowedMoney = convertToUSD(underlying, snapshot.totalDebt) ?? 0n;
47
+ const hf = borrowedMoney > 0n ? assetMoney / borrowedMoney : 0n;
48
+ return Number(hf);
49
+ }
50
+ //#endregion
51
+ export { calcHealthFactor };
@@ -0,0 +1,22 @@
1
+ import "../constants/math.js";
2
+ import { calcLiquidationPriceForTarget } from "./calcLiquidationPriceForTarget.js";
3
+ import { isAddressEqual } from "viem";
4
+ //#region src/sdk/positions/calcLiquidationPrice.ts
5
+ /**
6
+ * Liquidation price of an account state's target collateral, in the oracle's
7
+ * 8-decimal (`PRICE_DECIMALS`) fixed point.
8
+ *
9
+ * As the frontend does, a liquidation price only exists when the account
10
+ * holds exactly one non-dust non-underlying asset; otherwise `null`.
11
+ **/
12
+ function calcLiquidationPrice(props) {
13
+ const { snapshot, underlying } = props;
14
+ const targets = snapshot.assets.filter((a) => a.balance > 10n && !isAddressEqual(a.token, underlying));
15
+ if (targets.length !== 1) return null;
16
+ return calcLiquidationPriceForTarget({
17
+ ...props,
18
+ targetToken: targets[0].token
19
+ });
20
+ }
21
+ //#endregion
22
+ export { calcLiquidationPrice };
@@ -0,0 +1,29 @@
1
+ import { AddressMap } from "../utils/AddressMap.js";
2
+ import { PERCENTAGE_FACTOR, PRICE_DECIMALS, WAD } from "../constants/math.js";
3
+ import { isAddressEqual } from "viem";
4
+ //#region src/sdk/positions/calcLiquidationPriceForTarget.ts
5
+ /**
6
+ * Liquidation price of an explicitly named collateral token, in
7
+ * `PRICE_DECIMALS` fixed point; `0n` when the account holds none of it or the
8
+ * token has no liquidation threshold. Formula is in parity with the legacy
9
+ * `liquidationPrice`: the effective debt (debt less the underlying balance's
10
+ * contribution under its threshold) over the threshold-weighted target
11
+ * balance.
12
+ **/
13
+ function calcLiquidationPriceForTarget(props) {
14
+ const { snapshot, targetToken, underlying, decimals, liquidationThresholds } = props;
15
+ const decimalsByToken = new AddressMap(Object.entries(decimals));
16
+ const lts = new AddressMap(Object.entries(liquidationThresholds));
17
+ const underlyingDecimals = decimalsByToken.get(underlying) ?? 18;
18
+ const underlyingBalance = snapshot.assets.find((a) => isAddressEqual(a.token, underlying))?.balance ?? 0n;
19
+ const ltUnderlying = BigInt(lts.get(underlying) ?? 0);
20
+ const effectiveDebt = (snapshot.totalDebt - underlyingBalance * ltUnderlying / PERCENTAGE_FACTOR) * WAD / 10n ** BigInt(underlyingDecimals);
21
+ const targetDecimals = decimalsByToken.get(targetToken) ?? 18;
22
+ const targetBalance = snapshot.assets.find((a) => isAddressEqual(a.token, targetToken))?.balance ?? 0n;
23
+ const effectiveTargetBalance = targetBalance * WAD / 10n ** BigInt(targetDecimals);
24
+ const lpLT = BigInt(lts.get(targetToken) ?? 0);
25
+ if (targetBalance <= 10n || lpLT <= 0n) return 0n;
26
+ return effectiveDebt * PRICE_DECIMALS * PERCENTAGE_FACTOR / (effectiveTargetBalance * lpLT);
27
+ }
28
+ //#endregion
29
+ export { calcLiquidationPriceForTarget };
@@ -0,0 +1,18 @@
1
+ import { PERCENTAGE_FACTOR, SECONDS_PER_YEAR } from "../constants/math.js";
2
+ //#region src/sdk/positions/calcTimeToLiquidationMs.ts
3
+ /**
4
+ * Estimated milliseconds until `healthFactorBps` decays to `10000` (1.0)
5
+ * while the debt grows at `totalBorrowRateOnDebt`, in the same `Bps` scale
6
+ * (`10000` = 100%) as {@link BorrowRateBreakdown.totalOnDebt} reports it —
7
+ * not the legacy `PERCENTAGE_FACTOR_1KK` (`1_000_000` = 100%) scale the
8
+ * pre-rewrite frontend fed into its own `getTimeToLiquidation`.
9
+ *
10
+ * `null` when the account is already at or under the liquidation threshold,
11
+ * or when the debt carries no borrow rate at all.
12
+ **/
13
+ function calcTimeToLiquidationMs(healthFactorBps, totalBorrowRateOnDebt) {
14
+ if (BigInt(healthFactorBps) <= 10000n || totalBorrowRateOnDebt === 0n) return null;
15
+ return (BigInt(healthFactorBps) - PERCENTAGE_FACTOR) * (BigInt(SECONDS_PER_YEAR) * PERCENTAGE_FACTOR / totalBorrowRateOnDebt) * 1000n / PERCENTAGE_FACTOR;
16
+ }
17
+ //#endregion
18
+ export { calcTimeToLiquidationMs };
@@ -1,4 +1,9 @@
1
+ import { calcBorrowRate } from "./calcBorrowRate.js";
2
+ import { calcHealthFactor } from "./calcHealthFactor.js";
3
+ import { calcLiquidationPriceForTarget } from "./calcLiquidationPriceForTarget.js";
4
+ import { calcLiquidationPrice } from "./calcLiquidationPrice.js";
5
+ import { calcTimeToLiquidationMs } from "./calcTimeToLiquidationMs.js";
1
6
  import { MultichainPositionsService } from "./MultichainPositionsService.js";
7
+ import { accountSnapshotFromCreditAccountData } from "./types.js";
2
8
  import { PositionsService } from "./PositionsService.js";
3
- import "./types.js";
4
- export { MultichainPositionsService, PositionsService };
9
+ export { MultichainPositionsService, PositionsService, accountSnapshotFromCreditAccountData, calcBorrowRate, calcHealthFactor, calcLiquidationPrice, calcLiquidationPriceForTarget, calcTimeToLiquidationMs };
@@ -1 +1,31 @@
1
- export {};
1
+ import "../constants/math.js";
2
+ //#region src/sdk/positions/types.ts
3
+ /**
4
+ * Builds an {@link AccountSnapshot} from on-chain credit account data: the
5
+ * enabled, above-dust tokens become assets and quotas, and `totalDebt` is
6
+ * principal plus accrued interest and fees.
7
+ **/
8
+ function accountSnapshotFromCreditAccountData(ca) {
9
+ const assets = [];
10
+ const quotas = [];
11
+ for (const t of ca.tokens) {
12
+ if ((t.mask & ca.enabledTokensMask) === 0n || t.balance <= 10n) continue;
13
+ assets.push({
14
+ token: t.token,
15
+ balance: t.balance
16
+ });
17
+ quotas.push({
18
+ token: t.token,
19
+ balance: t.quota
20
+ });
21
+ }
22
+ return {
23
+ creditManager: ca.creditManager,
24
+ assets,
25
+ quotas,
26
+ totalDebt: ca.debt + ca.accruedInterest + ca.accruedFees,
27
+ totalValue: ca.totalValue
28
+ };
29
+ }
30
+ //#endregion
31
+ export { accountSnapshotFromCreditAccountData };
@@ -27,7 +27,7 @@ function functionArgsToMap(abi, functionName, args) {
27
27
  name: functionName,
28
28
  args
29
29
  });
30
- if (!abiItem || abiItem.type !== "function") throw new AbiFunctionNotFoundError(functionName);
30
+ if (abiItem?.type !== "function") throw new AbiFunctionNotFoundError(functionName);
31
31
  const namedArgs = {};
32
32
  if (Array.isArray(args)) args.forEach((value, i) => {
33
33
  const input = abiItem.inputs?.[i];
@@ -50,7 +50,7 @@ function functionArgsToRecord(abi, functionName, args) {
50
50
  name: functionName,
51
51
  args
52
52
  });
53
- if (!abiItem || abiItem.type !== "function") throw new AbiFunctionNotFoundError(functionName);
53
+ if (abiItem?.type !== "function") throw new AbiFunctionNotFoundError(functionName);
54
54
  const namedArgs = {};
55
55
  if (Array.isArray(args)) args.forEach((value, i) => {
56
56
  const key = (abiItem.inputs?.[i])?.name || `${i}`;