@gearbox-protocol/sdk 17.0.0-next.4 → 17.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (364) hide show
  1. package/dist/cjs/dev/abi.js +14 -15
  2. package/dist/cjs/dev/claimFromFaucet.js +4 -8
  3. package/dist/cjs/dev/createAnvilClient.js +35 -17
  4. package/dist/cjs/dev/index.js +7 -2
  5. package/dist/cjs/dev/kycUtils.js +66 -58
  6. package/dist/cjs/dev/midasUtils.js +113 -16
  7. package/dist/cjs/dev/securitizeUtils.js +82 -42
  8. package/dist/cjs/dev/withdrawalUtils.js +3 -6
  9. package/dist/cjs/model/errors/index.js +2 -0
  10. package/dist/cjs/model/errors/operation-errors.js +19 -1
  11. package/dist/cjs/model/index.js +4 -2
  12. package/dist/cjs/model/rwa.js +4 -4
  13. package/dist/cjs/model/rwa.schema.js +4 -4
  14. package/dist/cjs/offchain/opportunities/OffchainOpportunities.js +1 -1
  15. package/dist/cjs/onchain/OnchainSDK.js +3 -3
  16. package/dist/cjs/onchain/accounts/CreditAccountsServiceV310.js +2 -17
  17. package/dist/cjs/onchain/accounts/intents/borrow.js +140 -0
  18. package/dist/cjs/onchain/accounts/intents/collateral-valuation.js +41 -0
  19. package/dist/cjs/onchain/accounts/intents/guards.js +15 -3
  20. package/dist/cjs/onchain/accounts/intents/index.js +107 -20
  21. package/dist/cjs/onchain/accounts/intents/leverage-band.js +2 -12
  22. package/dist/cjs/onchain/accounts/intents/maxBorrow.js +89 -0
  23. package/dist/cjs/onchain/accounts/intents/maxWithdrawCollateral.js +15 -41
  24. package/dist/cjs/onchain/accounts/intents/open-strategy.js +8 -46
  25. package/dist/cjs/onchain/accounts/intents/operations.js +0 -1
  26. package/dist/cjs/onchain/accounts/intents/realize.js +61 -4
  27. package/dist/cjs/onchain/accounts/intents/tail.js +1 -1
  28. package/dist/cjs/onchain/accounts/intents/testing/sdk-mock.js +1 -0
  29. package/dist/cjs/onchain/accounts/intents/utils/common.js +19 -0
  30. package/dist/cjs/onchain/accounts/intents/utils/credit-account-slice.js +21 -0
  31. package/dist/cjs/onchain/accounts/intents/utils/index.js +2 -0
  32. package/dist/cjs/onchain/accounts/intents/utils/price-impact.js +12 -9
  33. package/dist/cjs/onchain/accounts/intents/utils/router-path.js +4 -5
  34. package/dist/cjs/onchain/accounts/intents/withdraw-limits.js +97 -0
  35. package/dist/cjs/onchain/accounts/liquidations/LiquidationsService.js +1 -1
  36. package/dist/cjs/onchain/constants/address-provider.js +0 -2
  37. package/dist/cjs/onchain/constants/index.js +0 -1
  38. package/dist/cjs/onchain/core/createAddressProvider.js +2 -5
  39. package/dist/cjs/onchain/index.js +60 -43
  40. package/dist/cjs/onchain/market/adapters/abi/conctructorAbi.js +2 -2
  41. package/dist/cjs/onchain/market/adapters/contracts/AbstractAdapter.js +6 -0
  42. package/dist/cjs/onchain/market/adapters/contracts/MidasGatewayAdapterContract.js +49 -5
  43. package/dist/cjs/onchain/market/credit/CreditSuite.js +26 -9
  44. package/dist/cjs/onchain/market/index.js +50 -38
  45. package/dist/cjs/onchain/market/oracle/PriceOracleBaseContract.js +3 -3
  46. package/dist/cjs/onchain/market/pricefeeds/AbstractPriceFeed.js +0 -5
  47. package/dist/cjs/onchain/market/pricefeeds/PriceFeedRegistry.js +127 -0
  48. package/dist/cjs/onchain/market/pricefeeds/{BalancerStablePriceFeed.js → feeds/BalancerStablePriceFeed.js} +4 -4
  49. package/dist/cjs/onchain/market/pricefeeds/{BalancerWeightedPriceFeed.js → feeds/BalancerWeightedPriceFeed.js} +4 -4
  50. package/dist/cjs/onchain/market/pricefeeds/{BoundedPriceFeed.js → feeds/BoundedPriceFeed.js} +4 -4
  51. package/dist/cjs/onchain/market/pricefeeds/{CompositePriceFeed.js → feeds/CompositePriceFeed.js} +4 -4
  52. package/dist/cjs/onchain/market/pricefeeds/{ConstantPriceFeed.js → feeds/ConstantPriceFeed.js} +3 -3
  53. package/dist/cjs/onchain/market/pricefeeds/{CurveCryptoPriceFeed.js → feeds/CurveCryptoPriceFeed.js} +4 -4
  54. package/dist/cjs/onchain/market/pricefeeds/{CurveStablePriceFeed.js → feeds/CurveStablePriceFeed.js} +4 -4
  55. package/dist/cjs/onchain/market/pricefeeds/{CurveUSDPriceFeed.js → feeds/CurveUSDPriceFeed.js} +4 -4
  56. package/dist/cjs/onchain/market/pricefeeds/{Erc4626PriceFeed.js → feeds/Erc4626PriceFeed.js} +4 -4
  57. package/dist/cjs/onchain/market/pricefeeds/{ExternalPriceFeed.js → feeds/ExternalPriceFeed.js} +4 -4
  58. package/dist/cjs/onchain/market/pricefeeds/{MellowLRTPriceFeed.js → feeds/MellowLRTPriceFeed.js} +4 -4
  59. package/dist/cjs/onchain/market/pricefeeds/{PendleTWAPPTPriceFeed.js → feeds/PendleTWAPPTPriceFeed.js} +4 -4
  60. package/dist/cjs/onchain/market/pricefeeds/{PythPriceFeed.js → feeds/PythPriceFeed.js} +3 -3
  61. package/dist/cjs/onchain/market/pricefeeds/{RedstonePriceFeed.js → feeds/RedstonePriceFeed.js} +6 -6
  62. package/dist/cjs/onchain/market/pricefeeds/{WstETHPriceFeed.js → feeds/WstETHPriceFeed.js} +4 -4
  63. package/dist/cjs/onchain/market/pricefeeds/{YearnPriceFeed.js → feeds/YearnPriceFeed.js} +4 -4
  64. package/dist/cjs/onchain/market/pricefeeds/{ZeroPriceFeed.js → feeds/ZeroPriceFeed.js} +4 -4
  65. package/dist/cjs/onchain/market/pricefeeds/feeds/index.js +35 -0
  66. package/dist/cjs/onchain/market/pricefeeds/index.js +51 -39
  67. package/dist/cjs/onchain/market/pricefeeds/updates/UpdatablePriceFeedRegistry.js +189 -0
  68. package/dist/cjs/onchain/market/pricefeeds/{getRawPriceUpdates.js → updates/getRawPriceUpdates.js} +2 -2
  69. package/dist/cjs/onchain/market/pricefeeds/updates/index.js +8 -0
  70. package/dist/cjs/onchain/market/pricefeeds/{isUpdatablePriceFeed.js → updates/isUpdatablePriceFeed.js} +1 -1
  71. package/dist/cjs/onchain/market/pricefeeds/updates/updatableDependencies.js +14 -0
  72. package/dist/cjs/onchain/market/rwa/RWARegistry.js +4 -7
  73. package/dist/cjs/onchain/market/rwa/index.js +1 -0
  74. package/dist/cjs/onchain/market/rwa/midas/MidasDegenNFT.js +45 -5
  75. package/dist/cjs/onchain/market/rwa/securitize/SecuritizeDegenNFT.js +56 -12
  76. package/dist/cjs/onchain/market/rwa/securitize/SecuritizeRWAFactory.js +0 -37
  77. package/dist/cjs/onchain/opportunities/MultichainOpportunitiesService.js +8 -2
  78. package/dist/cjs/onchain/opportunities/OpportunitiesService.js +16 -4
  79. package/dist/cjs/onchain/positions/calcHealthFactor.js +3 -3
  80. package/dist/cjs/onchain/preview/index.js +2 -0
  81. package/dist/cjs/onchain/preview/parse/parseRWAFactoryOperationCalldata.js +2 -2
  82. package/dist/cjs/onchain/preview/preview/index.js +2 -0
  83. package/dist/cjs/onchain/preview/preview/midasGreenlistsAccount.js +17 -0
  84. package/dist/cjs/onchain/preview/preview/previewOpenStrategyPosition.js +13 -16
  85. package/dist/cjs/onchain/preview/preview/previewOperation.js +19 -11
  86. package/dist/cjs/onchain/preview/preview/replayMulticall.js +4 -3
  87. package/dist/cjs/onchain/validation/bundles/checkCollateralFunding.js +3 -3
  88. package/dist/cjs/onchain/validation/bundles/checkCreditOperation.js +11 -9
  89. package/dist/cjs/onchain/validation/bundles/{checkDraw.js → checkIncreaseDebt.js} +10 -10
  90. package/dist/cjs/onchain/validation/bundles/{checkQuotasAsked.js → checkIncreaseQuota.js} +3 -3
  91. package/dist/cjs/onchain/validation/bundles/checkMidasAccountGreenlist.js +44 -0
  92. package/dist/cjs/onchain/validation/bundles/checkRWAOpenRequirements.js +9 -9
  93. package/dist/cjs/onchain/validation/bundles/checkRWAOpening.js +18 -8
  94. package/dist/cjs/onchain/validation/bundles/index.js +6 -4
  95. package/dist/cjs/onchain/validation/checkOperation.js +0 -1
  96. package/dist/cjs/onchain/validation/checks/checkBorrowLimit.js +1 -1
  97. package/dist/cjs/onchain/validation/checks/checkPoolLiquidity.js +1 -1
  98. package/dist/cjs/onchain/validation/checks/checkReservePriceLimited.js +30 -0
  99. package/dist/cjs/onchain/validation/checks/index.js +2 -0
  100. package/dist/cjs/onchain/validation/index.js +8 -4
  101. package/dist/cjs/permissionless/utils/price-update/get-price-update-tx.js +2 -2
  102. package/dist/cjs/permissionless/utils/price-update/get-updatable-feeds.js +2 -2
  103. package/dist/cjs/sdk/execute/ExecuteApi.js +67 -7
  104. package/dist/cjs/sdk/opportunities/OpportunitiesNamespace.js +9 -3
  105. package/dist/cjs/sdk/prepare/PrepareApi.js +89 -14
  106. package/dist/esm/dev/abi.js +14 -15
  107. package/dist/esm/dev/claimFromFaucet.js +4 -8
  108. package/dist/esm/dev/createAnvilClient.js +36 -19
  109. package/dist/esm/dev/index.js +4 -4
  110. package/dist/esm/dev/kycUtils.js +66 -59
  111. package/dist/esm/dev/midasUtils.js +112 -18
  112. package/dist/esm/dev/securitizeUtils.js +84 -44
  113. package/dist/esm/dev/withdrawalUtils.js +3 -6
  114. package/dist/esm/model/errors/index.js +2 -2
  115. package/dist/esm/model/errors/operation-errors.js +18 -2
  116. package/dist/esm/model/index.js +4 -4
  117. package/dist/esm/model/rwa.js +4 -4
  118. package/dist/esm/model/rwa.schema.js +5 -5
  119. package/dist/esm/offchain/opportunities/OffchainOpportunities.js +1 -1
  120. package/dist/esm/onchain/OnchainSDK.js +3 -3
  121. package/dist/esm/onchain/accounts/CreditAccountsServiceV310.js +2 -17
  122. package/dist/esm/onchain/accounts/intents/borrow.js +138 -0
  123. package/dist/esm/onchain/accounts/intents/collateral-valuation.js +40 -0
  124. package/dist/esm/onchain/accounts/intents/guards.js +15 -3
  125. package/dist/esm/onchain/accounts/intents/index.js +107 -20
  126. package/dist/esm/onchain/accounts/intents/leverage-band.js +2 -12
  127. package/dist/esm/onchain/accounts/intents/maxBorrow.js +87 -0
  128. package/dist/esm/onchain/accounts/intents/maxWithdrawCollateral.js +15 -41
  129. package/dist/esm/onchain/accounts/intents/open-strategy.js +8 -46
  130. package/dist/esm/onchain/accounts/intents/operations.js +0 -1
  131. package/dist/esm/onchain/accounts/intents/realize.js +61 -4
  132. package/dist/esm/onchain/accounts/intents/tail.js +1 -1
  133. package/dist/esm/onchain/accounts/intents/testing/sdk-mock.js +1 -0
  134. package/dist/esm/onchain/accounts/intents/utils/common.js +19 -1
  135. package/dist/esm/onchain/accounts/intents/utils/credit-account-slice.js +21 -1
  136. package/dist/esm/onchain/accounts/intents/utils/index.js +3 -3
  137. package/dist/esm/onchain/accounts/intents/utils/price-impact.js +12 -9
  138. package/dist/esm/onchain/accounts/intents/utils/router-path.js +4 -5
  139. package/dist/esm/onchain/accounts/intents/withdraw-limits.js +95 -0
  140. package/dist/esm/onchain/accounts/liquidations/LiquidationsService.js +1 -1
  141. package/dist/esm/onchain/constants/address-provider.js +1 -2
  142. package/dist/esm/onchain/constants/index.js +2 -2
  143. package/dist/esm/onchain/core/createAddressProvider.js +2 -5
  144. package/dist/esm/onchain/index.js +32 -24
  145. package/dist/esm/onchain/market/adapters/abi/conctructorAbi.js +2 -2
  146. package/dist/esm/onchain/market/adapters/contracts/AbstractAdapter.js +6 -0
  147. package/dist/esm/onchain/market/adapters/contracts/MidasGatewayAdapterContract.js +50 -6
  148. package/dist/esm/onchain/market/credit/CreditSuite.js +26 -9
  149. package/dist/esm/onchain/market/index.js +26 -21
  150. package/dist/esm/onchain/market/oracle/PriceOracleBaseContract.js +1 -1
  151. package/dist/esm/onchain/market/pricefeeds/AbstractPriceFeed.js +0 -5
  152. package/dist/esm/onchain/market/pricefeeds/PriceFeedRegistry.js +126 -0
  153. package/dist/esm/onchain/market/pricefeeds/{BalancerStablePriceFeed.js → feeds/BalancerStablePriceFeed.js} +4 -4
  154. package/dist/esm/onchain/market/pricefeeds/{BalancerWeightedPriceFeed.js → feeds/BalancerWeightedPriceFeed.js} +4 -4
  155. package/dist/esm/onchain/market/pricefeeds/{BoundedPriceFeed.js → feeds/BoundedPriceFeed.js} +4 -4
  156. package/dist/esm/onchain/market/pricefeeds/{CompositePriceFeed.js → feeds/CompositePriceFeed.js} +4 -4
  157. package/dist/esm/onchain/market/pricefeeds/{ConstantPriceFeed.js → feeds/ConstantPriceFeed.js} +3 -3
  158. package/dist/esm/onchain/market/pricefeeds/{CurveCryptoPriceFeed.js → feeds/CurveCryptoPriceFeed.js} +4 -4
  159. package/dist/esm/onchain/market/pricefeeds/{CurveStablePriceFeed.js → feeds/CurveStablePriceFeed.js} +4 -4
  160. package/dist/esm/onchain/market/pricefeeds/{CurveUSDPriceFeed.js → feeds/CurveUSDPriceFeed.js} +4 -4
  161. package/dist/esm/onchain/market/pricefeeds/{Erc4626PriceFeed.js → feeds/Erc4626PriceFeed.js} +4 -4
  162. package/dist/esm/onchain/market/pricefeeds/{ExternalPriceFeed.js → feeds/ExternalPriceFeed.js} +4 -4
  163. package/dist/esm/onchain/market/pricefeeds/{MellowLRTPriceFeed.js → feeds/MellowLRTPriceFeed.js} +4 -4
  164. package/dist/esm/onchain/market/pricefeeds/{PendleTWAPPTPriceFeed.js → feeds/PendleTWAPPTPriceFeed.js} +4 -4
  165. package/dist/esm/onchain/market/pricefeeds/{PythPriceFeed.js → feeds/PythPriceFeed.js} +3 -3
  166. package/dist/esm/onchain/market/pricefeeds/{RedstonePriceFeed.js → feeds/RedstonePriceFeed.js} +6 -6
  167. package/dist/esm/onchain/market/pricefeeds/{WstETHPriceFeed.js → feeds/WstETHPriceFeed.js} +4 -4
  168. package/dist/esm/onchain/market/pricefeeds/{YearnPriceFeed.js → feeds/YearnPriceFeed.js} +4 -4
  169. package/dist/esm/onchain/market/pricefeeds/{ZeroPriceFeed.js → feeds/ZeroPriceFeed.js} +4 -4
  170. package/dist/esm/onchain/market/pricefeeds/feeds/index.js +18 -0
  171. package/dist/esm/onchain/market/pricefeeds/index.js +27 -21
  172. package/dist/esm/onchain/market/pricefeeds/updates/UpdatablePriceFeedRegistry.js +188 -0
  173. package/dist/esm/onchain/market/pricefeeds/{getRawPriceUpdates.js → updates/getRawPriceUpdates.js} +2 -2
  174. package/dist/esm/onchain/market/pricefeeds/updates/index.js +5 -1
  175. package/dist/esm/onchain/market/pricefeeds/{isUpdatablePriceFeed.js → updates/isUpdatablePriceFeed.js} +1 -1
  176. package/dist/esm/onchain/market/pricefeeds/updates/updatableDependencies.js +13 -0
  177. package/dist/esm/onchain/market/rwa/RWARegistry.js +4 -8
  178. package/dist/esm/onchain/market/rwa/index.js +2 -2
  179. package/dist/esm/onchain/market/rwa/midas/MidasDegenNFT.js +45 -5
  180. package/dist/esm/onchain/market/rwa/securitize/SecuritizeDegenNFT.js +55 -10
  181. package/dist/esm/onchain/market/rwa/securitize/SecuritizeRWAFactory.js +0 -37
  182. package/dist/esm/onchain/opportunities/MultichainOpportunitiesService.js +8 -2
  183. package/dist/esm/onchain/opportunities/OpportunitiesService.js +16 -4
  184. package/dist/esm/onchain/positions/calcHealthFactor.js +3 -3
  185. package/dist/esm/onchain/preview/index.js +2 -1
  186. package/dist/esm/onchain/preview/parse/parseRWAFactoryOperationCalldata.js +2 -2
  187. package/dist/esm/onchain/preview/preview/index.js +2 -1
  188. package/dist/esm/onchain/preview/preview/midasGreenlistsAccount.js +16 -0
  189. package/dist/esm/onchain/preview/preview/previewOpenStrategyPosition.js +14 -17
  190. package/dist/esm/onchain/preview/preview/previewOperation.js +19 -11
  191. package/dist/esm/onchain/preview/preview/replayMulticall.js +4 -3
  192. package/dist/esm/onchain/validation/bundles/checkCollateralFunding.js +3 -3
  193. package/dist/esm/onchain/validation/bundles/checkCreditOperation.js +11 -9
  194. package/dist/esm/onchain/validation/bundles/checkIncreaseDebt.js +27 -0
  195. package/dist/esm/onchain/validation/bundles/{checkQuotasAsked.js → checkIncreaseQuota.js} +3 -3
  196. package/dist/esm/onchain/validation/bundles/checkMidasAccountGreenlist.js +43 -0
  197. package/dist/esm/onchain/validation/bundles/checkRWAOpenRequirements.js +9 -9
  198. package/dist/esm/onchain/validation/bundles/checkRWAOpening.js +18 -8
  199. package/dist/esm/onchain/validation/bundles/index.js +4 -3
  200. package/dist/esm/onchain/validation/checkOperation.js +0 -1
  201. package/dist/esm/onchain/validation/checks/checkBorrowLimit.js +1 -1
  202. package/dist/esm/onchain/validation/checks/checkPoolLiquidity.js +1 -1
  203. package/dist/esm/onchain/validation/checks/checkReservePriceLimited.js +29 -0
  204. package/dist/esm/onchain/validation/checks/index.js +2 -1
  205. package/dist/esm/onchain/validation/index.js +5 -3
  206. package/dist/esm/permissionless/utils/price-update/get-price-update-tx.js +1 -1
  207. package/dist/esm/permissionless/utils/price-update/get-updatable-feeds.js +1 -1
  208. package/dist/esm/sdk/execute/ExecuteApi.js +67 -7
  209. package/dist/esm/sdk/opportunities/OpportunitiesNamespace.js +9 -3
  210. package/dist/esm/sdk/prepare/PrepareApi.js +94 -19
  211. package/dist/types/dev/abi.d.ts +13 -15
  212. package/dist/types/dev/claimFromFaucet.d.ts +0 -1
  213. package/dist/types/dev/createAnvilClient.d.ts +10 -3
  214. package/dist/types/dev/index.d.ts +4 -4
  215. package/dist/types/dev/kycUtils.d.ts +15 -24
  216. package/dist/types/dev/midasUtils.d.ts +35 -4
  217. package/dist/types/dev/securitizeUtils.d.ts +3 -9
  218. package/dist/types/model/errors/index.d.ts +2 -2
  219. package/dist/types/model/errors/operation-errors.d.ts +62 -7
  220. package/dist/types/model/index.d.ts +5 -5
  221. package/dist/types/model/opportunities.d.ts +6 -7
  222. package/dist/types/model/previews.d.ts +25 -19
  223. package/dist/types/model/rwa.d.ts +47 -27
  224. package/dist/types/model/rwa.schema.d.ts +3 -3
  225. package/dist/types/offchain/opportunities/OffchainOpportunities.d.ts +1 -2
  226. package/dist/types/offchain/opportunities/types.d.ts +1 -4
  227. package/dist/types/onchain/OnchainSDK.d.ts +2 -2
  228. package/dist/types/onchain/accounts/index.d.ts +5 -4
  229. package/dist/types/onchain/accounts/intents/borrow.d.ts +141 -0
  230. package/dist/types/onchain/accounts/intents/collateral-valuation.d.ts +42 -0
  231. package/dist/types/onchain/accounts/intents/guards.d.ts +18 -2
  232. package/dist/types/onchain/accounts/intents/index.d.ts +103 -15
  233. package/dist/types/onchain/accounts/intents/maxBorrow.d.ts +54 -0
  234. package/dist/types/onchain/accounts/intents/maxWithdrawCollateral.d.ts +3 -8
  235. package/dist/types/onchain/accounts/intents/open-strategy.d.ts +3 -17
  236. package/dist/types/onchain/accounts/intents/testing/sdk-mock.d.ts +2 -0
  237. package/dist/types/onchain/accounts/intents/tests/open-strategy.fixtures.d.ts +2 -2
  238. package/dist/types/onchain/accounts/intents/types.d.ts +51 -6
  239. package/dist/types/onchain/accounts/intents/utils/common.d.ts +15 -1
  240. package/dist/types/onchain/accounts/intents/utils/credit-account-slice.d.ts +14 -1
  241. package/dist/types/onchain/accounts/intents/utils/index.d.ts +3 -3
  242. package/dist/types/onchain/accounts/intents/utils/price-impact.d.ts +4 -1
  243. package/dist/types/onchain/accounts/intents/utils/router-path.d.ts +2 -5
  244. package/dist/types/onchain/accounts/intents/withdraw-limits.d.ts +80 -0
  245. package/dist/types/onchain/accounts/types.d.ts +4 -2
  246. package/dist/types/onchain/constants/address-provider.d.ts +1 -2
  247. package/dist/types/onchain/constants/index.d.ts +2 -2
  248. package/dist/types/onchain/index.d.ts +40 -31
  249. package/dist/types/onchain/market/adapters/contracts/AbstractAdapter.d.ts +6 -0
  250. package/dist/types/onchain/market/adapters/contracts/MidasGatewayAdapterContract.d.ts +20 -4
  251. package/dist/types/onchain/market/adapters/types.d.ts +8 -0
  252. package/dist/types/onchain/market/credit/CreditSuite.d.ts +13 -3
  253. package/dist/types/onchain/market/index.d.ts +29 -24
  254. package/dist/types/onchain/market/oracle/PriceOracleBaseContract.d.ts +2 -1
  255. package/dist/types/onchain/market/oracle/types.d.ts +2 -1
  256. package/dist/types/onchain/market/pool/types.d.ts +1 -1
  257. package/dist/types/onchain/market/pricefeeds/AbstractPriceFeed.d.ts +1 -2
  258. package/dist/types/onchain/market/pricefeeds/PriceFeedRegistry.d.ts +60 -0
  259. package/dist/types/onchain/market/pricefeeds/feeds/BalancerStablePriceFeed.d.ts +12 -0
  260. package/dist/types/onchain/market/pricefeeds/{BalancerWeightedPriceFeed.d.ts → feeds/BalancerWeightedPriceFeed.d.ts} +7 -7
  261. package/dist/types/onchain/market/pricefeeds/feeds/BoundedPriceFeed.d.ts +15 -0
  262. package/dist/types/onchain/market/pricefeeds/{CompositePriceFeed.d.ts → feeds/CompositePriceFeed.d.ts} +6 -6
  263. package/dist/types/onchain/market/pricefeeds/{ConstantPriceFeed.d.ts → feeds/ConstantPriceFeed.d.ts} +6 -6
  264. package/dist/types/onchain/market/pricefeeds/feeds/CurveCryptoPriceFeed.d.ts +12 -0
  265. package/dist/types/onchain/market/pricefeeds/feeds/CurveStablePriceFeed.d.ts +12 -0
  266. package/dist/types/onchain/market/pricefeeds/feeds/CurveUSDPriceFeed.d.ts +12 -0
  267. package/dist/types/onchain/market/pricefeeds/feeds/Erc4626PriceFeed.d.ts +12 -0
  268. package/dist/types/onchain/market/pricefeeds/feeds/ExternalPriceFeed.d.ts +11 -0
  269. package/dist/types/onchain/market/pricefeeds/feeds/MellowLRTPriceFeed.d.ts +12 -0
  270. package/dist/types/onchain/market/pricefeeds/{PendleTWAPPTPriceFeed.d.ts → feeds/PendleTWAPPTPriceFeed.d.ts} +3 -3
  271. package/dist/types/onchain/market/pricefeeds/{PythPriceFeed.d.ts → feeds/PythPriceFeed.d.ts} +3 -3
  272. package/dist/types/onchain/market/pricefeeds/{RedstonePriceFeed.d.ts → feeds/RedstonePriceFeed.d.ts} +9 -9
  273. package/dist/types/onchain/market/pricefeeds/feeds/WstETHPriceFeed.d.ts +12 -0
  274. package/dist/types/onchain/market/pricefeeds/feeds/YearnPriceFeed.d.ts +12 -0
  275. package/dist/types/onchain/market/pricefeeds/feeds/ZeroPriceFeed.d.ts +11 -0
  276. package/dist/types/onchain/market/pricefeeds/feeds/index.d.ts +18 -0
  277. package/dist/types/onchain/market/pricefeeds/index.d.ts +28 -22
  278. package/dist/types/onchain/market/pricefeeds/types.d.ts +1 -31
  279. package/dist/types/onchain/market/pricefeeds/updates/RedstoneUpdater.d.ts +1 -1
  280. package/dist/types/onchain/market/pricefeeds/updates/UpdatablePriceFeedRegistry.d.ts +106 -0
  281. package/dist/types/onchain/market/pricefeeds/updates/getRawPriceUpdates.d.ts +6 -0
  282. package/dist/types/onchain/market/pricefeeds/updates/index.d.ts +7 -3
  283. package/dist/types/onchain/market/pricefeeds/updates/isUpdatablePriceFeed.d.ts +6 -0
  284. package/dist/types/onchain/market/pricefeeds/updates/types.d.ts +56 -2
  285. package/dist/types/onchain/market/pricefeeds/updates/updatableDependencies.d.ts +10 -0
  286. package/dist/types/onchain/market/rwa/RWARegistry.d.ts +2 -1
  287. package/dist/types/onchain/market/rwa/index.d.ts +3 -3
  288. package/dist/types/onchain/market/rwa/midas/MidasDegenNFT.d.ts +19 -4
  289. package/dist/types/onchain/market/rwa/securitize/SecuritizeDegenNFT.d.ts +24 -4
  290. package/dist/types/onchain/market/rwa/securitize/SecuritizeRWAFactory.d.ts +2 -14
  291. package/dist/types/onchain/market/rwa/types.d.ts +39 -37
  292. package/dist/types/onchain/opportunities/MultichainOpportunitiesService.d.ts +5 -1
  293. package/dist/types/onchain/opportunities/OpportunitiesService.d.ts +10 -3
  294. package/dist/types/onchain/opportunities/types.d.ts +6 -1
  295. package/dist/types/onchain/preview/index.d.ts +2 -1
  296. package/dist/types/onchain/preview/preview/index.d.ts +2 -1
  297. package/dist/types/onchain/preview/preview/midasGreenlistsAccount.d.ts +13 -0
  298. package/dist/types/onchain/preview/preview/previewOpenStrategyPosition.d.ts +5 -3
  299. package/dist/types/onchain/preview/preview/replayMulticall.d.ts +8 -7
  300. package/dist/types/onchain/validation/bundles/checkCreditOperation.d.ts +5 -4
  301. package/dist/types/onchain/validation/bundles/{checkDraw.d.ts → checkIncreaseDebt.d.ts} +7 -7
  302. package/dist/types/onchain/validation/bundles/{checkQuotasAsked.d.ts → checkIncreaseQuota.d.ts} +3 -3
  303. package/dist/types/onchain/validation/bundles/checkMidasAccountGreenlist.d.ts +22 -0
  304. package/dist/types/onchain/validation/bundles/checkRWAOpenRequirements.d.ts +2 -2
  305. package/dist/types/onchain/validation/bundles/checkRWAOpening.d.ts +9 -7
  306. package/dist/types/onchain/validation/bundles/index.d.ts +5 -4
  307. package/dist/types/onchain/validation/checks/checkBorrowLimit.d.ts +1 -1
  308. package/dist/types/onchain/validation/checks/checkDebtLimits.d.ts +2 -2
  309. package/dist/types/onchain/validation/checks/checkPoolLiquidity.d.ts +1 -1
  310. package/dist/types/onchain/validation/checks/checkReservePriceLimited.d.ts +31 -0
  311. package/dist/types/onchain/validation/checks/index.d.ts +2 -1
  312. package/dist/types/onchain/validation/index.d.ts +6 -4
  313. package/dist/types/onchain/validation/raise.d.ts +2 -2
  314. package/dist/types/sdk/execute/index.d.ts +2 -2
  315. package/dist/types/sdk/execute/types.d.ts +48 -6
  316. package/dist/types/sdk/index.d.ts +5 -4
  317. package/dist/types/sdk/opportunities/OpportunitiesNamespace.d.ts +5 -1
  318. package/dist/types/sdk/opportunities/types.d.ts +9 -3
  319. package/dist/types/sdk/prepare/PrepareApi.d.ts +16 -4
  320. package/dist/types/sdk/prepare/index.d.ts +4 -3
  321. package/dist/types/sdk/prepare/types.d.ts +200 -66
  322. package/package.json +1 -1
  323. package/dist/cjs/onchain/accounts/utils/midasUtils.js +0 -70
  324. package/dist/cjs/onchain/market/pricefeeds/PriceFeedsRegister.js +0 -301
  325. package/dist/cjs/plugins/degen-distributors/DegenDistributorsPlugin.js +0 -61
  326. package/dist/cjs/plugins/degen-distributors/index.js +0 -4
  327. package/dist/cjs/plugins/degen-distributors/package.json +0 -1
  328. package/dist/cjs/plugins/degen-distributors/types.js +0 -1
  329. package/dist/cjs/plugins/delayed-withdrawal/DelayedWithdrawalPlugin.js +0 -114
  330. package/dist/cjs/plugins/delayed-withdrawal/index.js +0 -4
  331. package/dist/cjs/plugins/delayed-withdrawal/package.json +0 -1
  332. package/dist/cjs/plugins/delayed-withdrawal/types.js +0 -1
  333. package/dist/esm/onchain/accounts/utils/midasUtils.js +0 -69
  334. package/dist/esm/onchain/market/pricefeeds/PriceFeedsRegister.js +0 -300
  335. package/dist/esm/onchain/validation/bundles/checkDraw.js +0 -27
  336. package/dist/esm/plugins/degen-distributors/DegenDistributorsPlugin.js +0 -60
  337. package/dist/esm/plugins/degen-distributors/index.js +0 -3
  338. package/dist/esm/plugins/degen-distributors/package.json +0 -1
  339. package/dist/esm/plugins/degen-distributors/types.js +0 -1
  340. package/dist/esm/plugins/delayed-withdrawal/DelayedWithdrawalPlugin.js +0 -113
  341. package/dist/esm/plugins/delayed-withdrawal/index.js +0 -3
  342. package/dist/esm/plugins/delayed-withdrawal/package.json +0 -1
  343. package/dist/esm/plugins/delayed-withdrawal/types.js +0 -1
  344. package/dist/types/onchain/accounts/utils/midasUtils.d.ts +0 -38
  345. package/dist/types/onchain/market/pricefeeds/BalancerStablePriceFeed.d.ts +0 -12
  346. package/dist/types/onchain/market/pricefeeds/BoundedPriceFeed.d.ts +0 -15
  347. package/dist/types/onchain/market/pricefeeds/CurveCryptoPriceFeed.d.ts +0 -12
  348. package/dist/types/onchain/market/pricefeeds/CurveStablePriceFeed.d.ts +0 -12
  349. package/dist/types/onchain/market/pricefeeds/CurveUSDPriceFeed.d.ts +0 -12
  350. package/dist/types/onchain/market/pricefeeds/Erc4626PriceFeed.d.ts +0 -12
  351. package/dist/types/onchain/market/pricefeeds/ExternalPriceFeed.d.ts +0 -11
  352. package/dist/types/onchain/market/pricefeeds/MellowLRTPriceFeed.d.ts +0 -12
  353. package/dist/types/onchain/market/pricefeeds/PriceFeedsRegister.d.ts +0 -180
  354. package/dist/types/onchain/market/pricefeeds/WstETHPriceFeed.d.ts +0 -12
  355. package/dist/types/onchain/market/pricefeeds/YearnPriceFeed.d.ts +0 -12
  356. package/dist/types/onchain/market/pricefeeds/ZeroPriceFeed.d.ts +0 -11
  357. package/dist/types/onchain/market/pricefeeds/getRawPriceUpdates.d.ts +0 -5
  358. package/dist/types/onchain/market/pricefeeds/isUpdatablePriceFeed.d.ts +0 -5
  359. package/dist/types/plugins/degen-distributors/DegenDistributorsPlugin.d.ts +0 -25
  360. package/dist/types/plugins/degen-distributors/index.d.ts +0 -3
  361. package/dist/types/plugins/degen-distributors/types.d.ts +0 -8
  362. package/dist/types/plugins/delayed-withdrawal/DelayedWithdrawalPlugin.d.ts +0 -25
  363. package/dist/types/plugins/delayed-withdrawal/index.d.ts +0 -3
  364. package/dist/types/plugins/delayed-withdrawal/types.d.ts +0 -10
@@ -1,26 +1,32 @@
1
- import { isUpdatablePriceFeed } from "./isUpdatablePriceFeed.js";
2
1
  import { PriceFeedRef } from "./PriceFeedRef.js";
3
2
  import { AbstractPriceFeedContract, PartialPriceFeedInitError } from "./AbstractPriceFeed.js";
4
3
  import { AbstractLPPriceFeedContract, isLPPriceFeed } from "./AbstractLPPriceFeed.js";
5
- import { BalancerStablePriceFeedContract } from "./BalancerStablePriceFeed.js";
6
- import { BalancerWeightedPriceFeedContract } from "./BalancerWeightedPriceFeed.js";
7
- import { BoundedPriceFeedContract } from "./BoundedPriceFeed.js";
8
- import { CompositePriceFeedContract } from "./CompositePriceFeed.js";
9
- import { CurveCryptoPriceFeedContract } from "./CurveCryptoPriceFeed.js";
10
- import { CurveStablePriceFeedContract } from "./CurveStablePriceFeed.js";
11
- import { CurveUSDPriceFeedContract } from "./CurveUSDPriceFeed.js";
12
- import { Erc4626PriceFeedContract } from "./Erc4626PriceFeed.js";
13
- import { ExternalPriceFeedContract } from "./ExternalPriceFeed.js";
14
- import { getRawPriceUpdates } from "./getRawPriceUpdates.js";
15
- import { MellowLRTPriceFeedContract } from "./MellowLRTPriceFeed.js";
16
- import { PendleTWAPPTPriceFeed } from "./PendleTWAPPTPriceFeed.js";
17
- import { PythPriceFeed } from "./PythPriceFeed.js";
18
- import { RedstonePriceFeedContract } from "./RedstonePriceFeed.js";
4
+ import { BalancerStablePriceFeedContract } from "./feeds/BalancerStablePriceFeed.js";
5
+ import { BalancerWeightedPriceFeedContract } from "./feeds/BalancerWeightedPriceFeed.js";
6
+ import { BoundedPriceFeedContract } from "./feeds/BoundedPriceFeed.js";
7
+ import { CompositePriceFeedContract } from "./feeds/CompositePriceFeed.js";
8
+ import { ConstantPriceFeedContract } from "./feeds/ConstantPriceFeed.js";
9
+ import { CurveCryptoPriceFeedContract } from "./feeds/CurveCryptoPriceFeed.js";
10
+ import { CurveStablePriceFeedContract } from "./feeds/CurveStablePriceFeed.js";
11
+ import { CurveUSDPriceFeedContract } from "./feeds/CurveUSDPriceFeed.js";
12
+ import { Erc4626PriceFeedContract } from "./feeds/Erc4626PriceFeed.js";
13
+ import { ExternalPriceFeedContract } from "./feeds/ExternalPriceFeed.js";
14
+ import { MellowLRTPriceFeedContract } from "./feeds/MellowLRTPriceFeed.js";
15
+ import { PendleTWAPPTPriceFeed } from "./feeds/PendleTWAPPTPriceFeed.js";
16
+ import { PythPriceFeed } from "./feeds/PythPriceFeed.js";
17
+ import { RedstonePriceFeedContract } from "./feeds/RedstonePriceFeed.js";
18
+ import { WstETHPriceFeedContract } from "./feeds/WstETHPriceFeed.js";
19
+ import { YearnPriceFeedContract } from "./feeds/YearnPriceFeed.js";
20
+ import { ZeroPriceFeedContract } from "./feeds/ZeroPriceFeed.js";
21
+ import "./feeds/index.js";
22
+ import { PriceFeedRegistry } from "./PriceFeedRegistry.js";
23
+ import "./types.js";
19
24
  import { fetchRedstonePayloads } from "./updates/fetchRedstonePayloads.js";
25
+ import { getRawPriceUpdates } from "./updates/getRawPriceUpdates.js";
26
+ import { isUpdatablePriceFeed } from "./updates/isUpdatablePriceFeed.js";
27
+ import { PriceUpdatesCache } from "./updates/PriceUpdatesCache.js";
28
+ import { RedstoneOptions, RedstoneUpdater } from "./updates/RedstoneUpdater.js";
29
+ import { updatableDependencies } from "./updates/updatableDependencies.js";
30
+ import { UpdatablePriceFeedRegistry } from "./updates/UpdatablePriceFeedRegistry.js";
20
31
  import "./updates/index.js";
21
- import { WstETHPriceFeedContract } from "./WstETHPriceFeed.js";
22
- import { YearnPriceFeedContract } from "./YearnPriceFeed.js";
23
- import { ZeroPriceFeedContract } from "./ZeroPriceFeed.js";
24
- import { PriceFeedRegister } from "./PriceFeedsRegister.js";
25
- import "./types.js";
26
- export { AbstractLPPriceFeedContract, AbstractPriceFeedContract, BalancerStablePriceFeedContract, BalancerWeightedPriceFeedContract, BoundedPriceFeedContract, CompositePriceFeedContract, CurveCryptoPriceFeedContract, CurveStablePriceFeedContract, CurveUSDPriceFeedContract, Erc4626PriceFeedContract, ExternalPriceFeedContract, MellowLRTPriceFeedContract, PartialPriceFeedInitError, PendleTWAPPTPriceFeed, PriceFeedRef, PriceFeedRegister, PythPriceFeed, RedstonePriceFeedContract, WstETHPriceFeedContract, YearnPriceFeedContract, ZeroPriceFeedContract, fetchRedstonePayloads, getRawPriceUpdates, isLPPriceFeed, isUpdatablePriceFeed };
32
+ export { AbstractLPPriceFeedContract, AbstractPriceFeedContract, BalancerStablePriceFeedContract, BalancerWeightedPriceFeedContract, BoundedPriceFeedContract, CompositePriceFeedContract, ConstantPriceFeedContract, CurveCryptoPriceFeedContract, CurveStablePriceFeedContract, CurveUSDPriceFeedContract, Erc4626PriceFeedContract, ExternalPriceFeedContract, MellowLRTPriceFeedContract, PartialPriceFeedInitError, PendleTWAPPTPriceFeed, PriceFeedRef, PriceFeedRegistry, PriceUpdatesCache, PythPriceFeed, RedstoneOptions, RedstonePriceFeedContract, RedstoneUpdater, UpdatablePriceFeedRegistry, WstETHPriceFeedContract, YearnPriceFeedContract, ZeroPriceFeedContract, fetchRedstonePayloads, getRawPriceUpdates, isLPPriceFeed, isUpdatablePriceFeed, updatableDependencies };
@@ -0,0 +1,188 @@
1
+ import { createRawTx } from "../../../utils/createRawTx.js";
2
+ import { AP_PRICE_FEED_COMPRESSOR, AP_PRICE_FEED_STORE } from "../../../constants/address-provider.js";
3
+ import { ADDRESS_0X0 } from "../../../constants/addresses.js";
4
+ import { VERSION_RANGE_310 } from "../../../constants/versions.js";
5
+ import "../../../constants/index.js";
6
+ import "../../../utils/index.js";
7
+ import { priceFeedCompressorAbi } from "../../../../abi/compressors/priceFeedCompressor.js";
8
+ import { PriceFeedRegistry } from "../PriceFeedRegistry.js";
9
+ import { getRawPriceUpdates } from "./getRawPriceUpdates.js";
10
+ import { isUpdatablePriceFeed } from "./isUpdatablePriceFeed.js";
11
+ import { RedstoneUpdater } from "./RedstoneUpdater.js";
12
+ import { Hooks } from "../../../utils/internal/Hooks.js";
13
+ import "../../../utils/internal/index.js";
14
+ import { updatableDependencies } from "./updatableDependencies.js";
15
+ import { parseAbi } from "viem";
16
+ //#region src/onchain/market/pricefeeds/updates/UpdatablePriceFeedRegistry.ts
17
+ /**
18
+ * {@link PriceFeedRegistry} that also orchestrates off-chain price updates
19
+ * (Redstone, etc.).
20
+ **/
21
+ var UpdatablePriceFeedRegistry = class extends PriceFeedRegistry {
22
+ #hooks = new Hooks();
23
+ #updaters;
24
+ #latestUpdate;
25
+ constructor(sdk, opts = {}) {
26
+ super(sdk);
27
+ this.#updaters = [new RedstoneUpdater(sdk, opts.redstone)];
28
+ }
29
+ /**
30
+ * @internal
31
+ * Registers a callback for price-feed registry lifecycle events.
32
+ * @param event - Event name.
33
+ * @param handler - Callback to invoke.
34
+ **/
35
+ addHook = this.#hooks.addHook.bind(this.#hooks);
36
+ /**
37
+ * @internal
38
+ * Removes a previously registered hook.
39
+ * @param event - Event name.
40
+ * @param handler - Callback to remove.
41
+ **/
42
+ removeHook = this.#hooks.removeHook.bind(this.#hooks);
43
+ /**
44
+ * Generates transactions to push fresh off-chain prices to updatable feeds.
45
+ *
46
+ * @param priceFeeds - Top-level price feeds whose updatable dependencies
47
+ * will be resolved, or a filter (`{ main: true }` / `{ reserve: true }`)
48
+ * to gather feeds from all oracles. When omitted, all registered feeds
49
+ * are used.
50
+ **/
51
+ async generatePriceFeedsUpdateTxs(priceFeeds) {
52
+ let updateables = this.feeds;
53
+ let filterRemark = "";
54
+ if (priceFeeds) {
55
+ if (Array.isArray(priceFeeds)) updateables = priceFeeds.flatMap((pf) => updatableDependencies(pf));
56
+ else if ("main" in priceFeeds && priceFeeds.main) {
57
+ filterRemark = " main";
58
+ updateables = this.sdk.marketRegister.priceOracles.flatMap((o) => o.mainPriceFeeds.values()).flatMap((pf) => updatableDependencies(pf.priceFeed));
59
+ } else if ("reserve" in priceFeeds && priceFeeds.reserve) {
60
+ filterRemark = " reserve";
61
+ updateables = this.sdk.marketRegister.priceOracles.flatMap((o) => o.reservePriceFeeds.values()).flatMap((pf) => updatableDependencies(pf.priceFeed));
62
+ }
63
+ }
64
+ return this.#generateUpdateTxs(updateables, filterRemark);
65
+ }
66
+ /**
67
+ * Similar to {@link generatePriceFeedsUpdateTxs}, but returns raw structures instead of transactions
68
+ * @param priceFeeds
69
+ * @returns
70
+ */
71
+ async generatePriceFeedsUpdates(priceFeeds) {
72
+ const updates = await this.generatePriceFeedsUpdateTxs(priceFeeds);
73
+ return getRawPriceUpdates(updates);
74
+ }
75
+ /**
76
+ * Similar to {@link generatePriceFeedsUpdates}, but returns raw transaction to PriceFeedStore.updatePrices
77
+ * @param priceFeeds
78
+ * @returns
79
+ */
80
+ async getPriceFeedStoreUpdateTx(priceFeeds) {
81
+ const pfs = this.sdk.addressProvider.getAddress(AP_PRICE_FEED_STORE);
82
+ const updates = await this.generatePriceFeedsUpdates(priceFeeds);
83
+ return createRawTx(pfs, {
84
+ abi: parseAbi(["function updatePrices((address,bytes)[])"]),
85
+ functionName: "updatePrices",
86
+ args: [updates.map((u) => [u.priceFeed, u.data])]
87
+ });
88
+ }
89
+ /**
90
+ * Similar to {@link generatePriceFeedsUpdateTxs}, but will generate necessary price update transactions for external price feeds (not known to sdk)
91
+ * This does not add feeds to this registry, so they won't be implicitly included in future generatePriceFeedsUpdateTxs calls
92
+ * @param feeds
93
+ * @param block
94
+ * @returns
95
+ */
96
+ async generateExternalPriceFeedsUpdateTxs(feeds, block) {
97
+ const [priceFeedCompressorAddress] = this.sdk.addressProvider.mustGetLatest(AP_PRICE_FEED_COMPRESSOR, VERSION_RANGE_310);
98
+ const blockParam = block ?? { blockNumber: this.sdk.currentBlock };
99
+ const leaves = (await this.client.readContract({
100
+ address: priceFeedCompressorAddress,
101
+ abi: priceFeedCompressorAbi,
102
+ functionName: "loadPriceFeedTree",
103
+ args: [feeds],
104
+ ...blockParam,
105
+ gas: this.sdk.gasLimit
106
+ })).map((node) => this.get(node.baseParams.addr) ?? this.create(node)).filter(isUpdatablePriceFeed);
107
+ return this.#generateUpdateTxs(leaves, "");
108
+ }
109
+ /**
110
+ * Similar to {@link generateExternalPriceFeedsUpdateTxs}, but returns raw structures instead of transactions
111
+ * @param feeds
112
+ * @param block
113
+ * @returns
114
+ */
115
+ async generateExternalPriceFeedsUpdates(feeds, block) {
116
+ const updates = await this.generateExternalPriceFeedsUpdateTxs(feeds, block);
117
+ return getRawPriceUpdates(updates);
118
+ }
119
+ /**
120
+ * Loads PARTIAL information about all updatable price feeds from MarketCompressor
121
+ * Discovered price feeds are not saved anywhere in PriceFeedRegistry, and can later be used to load price feed updates
122
+ */
123
+ async getPartialUpdatablePriceFeeds(configurators) {
124
+ const [priceFeedCompressorAddress] = this.sdk.addressProvider.mustGetLatest(AP_PRICE_FEED_COMPRESSOR, VERSION_RANGE_310);
125
+ this.logger?.debug({ configurators }, `calling getUpdatablePriceFeeds in block ${this.sdk.currentBlock}`);
126
+ const result = await this.client.readContract({
127
+ address: priceFeedCompressorAddress,
128
+ abi: priceFeedCompressorAbi,
129
+ functionName: "getUpdatablePriceFeeds",
130
+ args: [{
131
+ configurators,
132
+ pools: [],
133
+ underlying: ADDRESS_0X0
134
+ }],
135
+ blockNumber: this.sdk.currentBlock,
136
+ gas: this.sdk.gasLimit
137
+ });
138
+ this.logger?.debug(`loaded ${result.length} partial updatable price feeds in block ${this.sdk.currentBlock}`);
139
+ return result.map((baseParams) => this.create({ baseParams }));
140
+ }
141
+ /**
142
+ * @internal
143
+ * Diagnostic snapshot of the most recent price-update round, or
144
+ * `undefined` if no updates have been generated yet.
145
+ **/
146
+ get latestUpdate() {
147
+ return this.#latestUpdate;
148
+ }
149
+ /**
150
+ * @internal
151
+ * Returns true if any of the updaters are in historical mode
152
+ */
153
+ get historical() {
154
+ return this.#updaters.some((u) => u.historical);
155
+ }
156
+ async #generateUpdateTxs(updateables, filterRemark) {
157
+ if (updateables.length === 0) return {
158
+ txs: [],
159
+ timestamp: 0
160
+ };
161
+ const txs = [];
162
+ const latestUpdate = {
163
+ updates: [],
164
+ timestamp: Math.floor(Date.now() / 1e3)
165
+ };
166
+ const updates = (await Promise.all(this.#updaters.map((u) => u.getUpdateTxs([...updateables]).catch(() => [])))).flat();
167
+ let maxTimestamp = 0;
168
+ for (const tx of updates) {
169
+ const { data } = tx;
170
+ const { timestamp } = data;
171
+ if (timestamp > maxTimestamp) maxTimestamp = timestamp;
172
+ txs.push(tx);
173
+ latestUpdate.updates.push(data);
174
+ }
175
+ txs.sort((a, b) => a.raw.to.toLowerCase().localeCompare(b.raw.to.toLowerCase()));
176
+ const result = {
177
+ txs,
178
+ timestamp: maxTimestamp
179
+ };
180
+ const tsDelta = BigInt(maxTimestamp) - this.sdk.timestamp;
181
+ this.logger?.debug(`generated ${txs.length}${filterRemark} price feed update transactions, timestamp: ${maxTimestamp} (delta ${tsDelta})`);
182
+ if (txs.length) await this.#hooks.triggerHooks("updatesGenerated", result);
183
+ this.#latestUpdate = latestUpdate;
184
+ return result;
185
+ }
186
+ };
187
+ //#endregion
188
+ export { UpdatablePriceFeedRegistry };
@@ -1,6 +1,6 @@
1
- import { iUpdatablePriceFeedAbi } from "../../../abi/iUpdatablePriceFeed.js";
1
+ import { iUpdatablePriceFeedAbi } from "../../../../abi/iUpdatablePriceFeed.js";
2
2
  import { decodeFunctionData } from "viem";
3
- //#region src/onchain/market/pricefeeds/getRawPriceUpdates.ts
3
+ //#region src/onchain/market/pricefeeds/updates/getRawPriceUpdates.ts
4
4
  function getRawPriceUpdates(updates) {
5
5
  return updates.txs.map((tx) => {
6
6
  const data = decodeFunctionData({
@@ -1,4 +1,8 @@
1
1
  import { fetchRedstonePayloads } from "./fetchRedstonePayloads.js";
2
+ import { getRawPriceUpdates } from "./getRawPriceUpdates.js";
3
+ import { isUpdatablePriceFeed } from "./isUpdatablePriceFeed.js";
2
4
  import { PriceUpdatesCache } from "./PriceUpdatesCache.js";
3
5
  import { RedstoneOptions, RedstoneUpdater } from "./RedstoneUpdater.js";
4
- export { PriceUpdatesCache, RedstoneOptions, RedstoneUpdater, fetchRedstonePayloads };
6
+ import { updatableDependencies } from "./updatableDependencies.js";
7
+ import { UpdatablePriceFeedRegistry } from "./UpdatablePriceFeedRegistry.js";
8
+ export { PriceUpdatesCache, RedstoneOptions, RedstoneUpdater, UpdatablePriceFeedRegistry, fetchRedstonePayloads, getRawPriceUpdates, isUpdatablePriceFeed, updatableDependencies };
@@ -1,4 +1,4 @@
1
- //#region src/onchain/market/pricefeeds/isUpdatablePriceFeed.ts
1
+ //#region src/onchain/market/pricefeeds/updates/isUpdatablePriceFeed.ts
2
2
  function isUpdatablePriceFeed(pf) {
3
3
  return pf.updatable;
4
4
  }
@@ -0,0 +1,13 @@
1
+ import { isUpdatablePriceFeed } from "./isUpdatablePriceFeed.js";
2
+ //#region src/onchain/market/pricefeeds/updates/updatableDependencies.ts
3
+ /**
4
+ * Collects updatable feeds in this feed's dependency tree, including this
5
+ * feed itself when it is updatable.
6
+ **/
7
+ function updatableDependencies(feed) {
8
+ if (!feed.loaded) return [feed];
9
+ const underlying = feed.underlyingPriceFeeds.flatMap((ref) => updatableDependencies(ref.priceFeed));
10
+ return isUpdatablePriceFeed(feed) ? [feed, ...underlying] : underlying;
11
+ }
12
+ //#endregion
13
+ export { updatableDependencies };
@@ -1,8 +1,5 @@
1
1
  import { AddressMap } from "../../utils/AddressMap.js";
2
2
  import { bytes32ToString } from "../../utils/bytes32ToString.js";
3
- import { AP_RWA_COMPRESSOR } from "../../constants/address-provider.js";
4
- import { VERSION_RANGE_310 } from "../../constants/versions.js";
5
- import "../../constants/index.js";
6
3
  import "../../utils/index.js";
7
4
  import { SDKConstruct } from "../../base/SDKConstruct.js";
8
5
  import { RWA_ON_DEMAND_LP_MONOPOLIZED, RWA_UNDERLYING_DEFAULT, RWA_UNDERLYING_ON_DEMAND } from "../../base/token-types.js";
@@ -14,6 +11,7 @@ import { SecuritizeRWAFactory } from "./securitize/SecuritizeRWAFactory.js";
14
11
  import "./securitize/index.js";
15
12
  import { decodeAbiParameters } from "viem";
16
13
  //#region src/onchain/market/rwa/RWARegistry.ts
14
+ const RWA_COMPRESSOR_ADDRESS = "0x9Bff226505632930BA1897E7943e90A2f7D0D9f7";
17
15
  /**
18
16
  * Registry of RWA underlying tokens and RWA factory contracts.
19
17
  *
@@ -41,11 +39,10 @@ var RWARegistry = class extends SDKConstruct {
41
39
  getLoadMulticalls(configurators, rwaFactories = []) {
42
40
  this.#requestedFactories = rwaFactories;
43
41
  if (!rwaFactories.length) return [];
44
- const [rwaCompressorAddress] = this.sdk.addressProvider.mustGetLatest(AP_RWA_COMPRESSOR, VERSION_RANGE_310);
45
42
  return [{
46
43
  call: {
47
44
  abi: iRWACompressorAbi,
48
- address: rwaCompressorAddress,
45
+ address: RWA_COMPRESSOR_ADDRESS,
49
46
  functionName: "getRWAMarketsData",
50
47
  args: [configurators, rwaFactories]
51
48
  },
@@ -83,10 +80,9 @@ var RWARegistry = class extends SDKConstruct {
83
80
  let factories = this.#factories.values();
84
81
  if (factories_?.length) factories = factories_.map((f) => this.#factories.mustGet(f));
85
82
  if (!factories.length) return [];
86
- const [rwaCompressorAddress] = this.sdk.addressProvider.mustGetLatest(AP_RWA_COMPRESSOR, VERSION_RANGE_310);
87
83
  const resp = await this.client.readContract({
88
84
  abi: iRWACompressorAbi,
89
- address: rwaCompressorAddress,
85
+ address: RWA_COMPRESSOR_ADDRESS,
90
86
  functionName: "getRWAInvestorData",
91
87
  args: [investor, factories.map((f) => f.address)],
92
88
  blockNumber
@@ -284,4 +280,4 @@ var RWARegistry = class extends SDKConstruct {
284
280
  }
285
281
  };
286
282
  //#endregion
287
- export { RWARegistry };
283
+ export { RWARegistry, RWA_COMPRESSOR_ADDRESS };
@@ -7,6 +7,6 @@ import { SecuritizeDegenNFT } from "./securitize/SecuritizeDegenNFT.js";
7
7
  import { SecuritizeLiquidatorContract } from "./securitize/SecuritizeLiquidatorContract.js";
8
8
  import { SecuritizeRWAFactory } from "./securitize/SecuritizeRWAFactory.js";
9
9
  import "./securitize/index.js";
10
- import { RWARegistry } from "./RWARegistry.js";
10
+ import { RWARegistry, RWA_COMPRESSOR_ADDRESS } from "./RWARegistry.js";
11
11
  import { isRWAFactory } from "./types.js";
12
- export { DEGEN_NFT_MIDAS, DEGEN_NFT_SECURITIZE, MidasDegenNFT, MidasLiquidatorContract, PHANTOM_TOKEN_MIDAS_REDEMPTION, PHANTOM_TOKEN_SECURITIZE_REDEMPTION, RWARegistry, RWA_LIQUIDATOR_MIDAS, RWA_LIQUIDATOR_SECURITIZE, SecuritizeDegenNFT, SecuritizeLiquidatorContract, SecuritizeRWAFactory, isRWAFactory };
12
+ export { DEGEN_NFT_MIDAS, DEGEN_NFT_SECURITIZE, MidasDegenNFT, MidasLiquidatorContract, PHANTOM_TOKEN_MIDAS_REDEMPTION, PHANTOM_TOKEN_SECURITIZE_REDEMPTION, RWARegistry, RWA_COMPRESSOR_ADDRESS, RWA_LIQUIDATOR_MIDAS, RWA_LIQUIDATOR_SECURITIZE, SecuritizeDegenNFT, SecuritizeLiquidatorContract, SecuritizeRWAFactory, isRWAFactory };
@@ -5,14 +5,23 @@ import "../../adapters/abi/index.js";
5
5
  import { iMidasDegenNFTAbi } from "../../../../abi/rwa/iMidasDegenNFT.js";
6
6
  import "./constants.js";
7
7
  import { iMidasAccessControlAbi } from "../../../../abi/rwa/iMidasAccessControl.js";
8
+ import { KYC_REGISTRATION_LINKS } from "../../../../model/rwa.js";
9
+ import "../../../../model/index.js";
8
10
  import { decodeAbiParameters } from "viem";
9
11
  //#region src/onchain/market/rwa/midas/MidasDegenNFT.ts
10
12
  const abi = iMidasDegenNFTAbi;
13
+ /**
14
+ * Midas is an RWA protocol without a factory: accounts open through the plain
15
+ * facade. Only a Permissioned-mode gateway deploys a degen NFT, so a Midas
16
+ * strategy that does not require KYC has no NFT at all.
17
+ */
11
18
  var MidasDegenNFT = class extends BaseContract {
12
19
  protocol = "midas";
20
+ registrationLink = KYC_REGISTRATION_LINKS.midas;
13
21
  gateway;
14
22
  accessControl;
15
23
  greenlistedRole;
24
+ #mToken;
16
25
  constructor(sdk, baseParams) {
17
26
  super(sdk, {
18
27
  ...baseParams,
@@ -30,9 +39,26 @@ var MidasDegenNFT = class extends BaseContract {
30
39
  this.accessControl = accessControl;
31
40
  this.greenlistedRole = greenlistedRole;
32
41
  }
33
- /** Same predicate `MidasDegenNFT.burn` reverts on; the mToken rides along in the batch. */
34
- async checkKyc(wallet, _targetCollateral) {
35
- const [eligible, token] = await this.client.multicall({
42
+ async getTokens() {
43
+ return [await this.#mTokenAddress()];
44
+ }
45
+ /**
46
+ * Same predicate `MidasDegenNFT.burn` reverts on; the mToken rides along in
47
+ * the batch until it is cached.
48
+ */
49
+ async getOpenAccountRequirements(wallet, _props) {
50
+ const token = this.#mToken;
51
+ if (token !== void 0) return {
52
+ protocol: "midas",
53
+ token,
54
+ greenlisted: await this.client.readContract({
55
+ abi: iMidasAccessControlAbi,
56
+ address: this.accessControl,
57
+ functionName: "hasRole",
58
+ args: [this.greenlistedRole, wallet]
59
+ })
60
+ };
61
+ const [greenlisted, mToken] = await this.client.multicall({
36
62
  allowFailure: false,
37
63
  contracts: [{
38
64
  abi: iMidasAccessControlAbi,
@@ -45,11 +71,25 @@ var MidasDegenNFT = class extends BaseContract {
45
71
  functionName: "mToken"
46
72
  }]
47
73
  });
74
+ this.#mToken = mToken;
48
75
  return {
49
- eligible,
50
- token
76
+ protocol: "midas",
77
+ token: mToken,
78
+ greenlisted
51
79
  };
52
80
  }
81
+ isRegistered(requirements) {
82
+ return requirements.greenlisted;
83
+ }
84
+ getMissingRequirements() {}
85
+ async #mTokenAddress() {
86
+ if (this.#mToken === void 0) this.#mToken = await this.client.readContract({
87
+ abi: iMidasGatewayV311Abi,
88
+ address: this.gateway,
89
+ functionName: "mToken"
90
+ });
91
+ return this.#mToken;
92
+ }
53
93
  };
54
94
  //#endregion
55
95
  export { MidasDegenNFT };
@@ -1,13 +1,23 @@
1
+ import { AddressSet } from "../../../utils/AddressSet.js";
2
+ import "../../../utils/index.js";
1
3
  import { BaseContract } from "../../../base/BaseContract.js";
2
4
  import "../../../base/index.js";
5
+ import { KYC_REGISTRATION_LINKS } from "../../../../model/rwa.js";
6
+ import "../../../../model/index.js";
3
7
  import { DEGEN_NFT_SECURITIZE } from "./constants.js";
4
8
  import { iSecuritizeDegenNFTAbi } from "../../../../abi/rwa/iSecuritizeDegenNFT.js";
5
- import { isAddressEqual } from "viem";
6
9
  //#region src/onchain/market/rwa/securitize/SecuritizeDegenNFT.ts
7
10
  const abi = iSecuritizeDegenNFTAbi;
11
+ /**
12
+ * Securitize always has a factory, which deploys this NFT. DS-token data,
13
+ * registrars and cached signatures live here; the factory only builds txs
14
+ * and looks up investor/wallet addresses.
15
+ */
8
16
  var SecuritizeDegenNFT = class extends BaseContract {
9
17
  protocol = "securitize";
18
+ registrationLink = KYC_REGISTRATION_LINKS.securitize;
10
19
  factory;
20
+ #sdk;
11
21
  constructor(sdk, address, factory) {
12
22
  super(sdk, {
13
23
  addr: address,
@@ -16,19 +26,54 @@ var SecuritizeDegenNFT = class extends BaseContract {
16
26
  name: "SecuritizeDegenNFT",
17
27
  abi
18
28
  });
29
+ this.#sdk = sdk;
19
30
  this.factory = factory;
20
31
  }
21
- /** Registration on Securitize is the only KYC step; pending EIP-712 signatures are not. */
22
- async checkKyc(wallet, targetCollateral) {
23
- const { factory } = this;
24
- if (!factory.getTokens().some((t) => isAddressEqual(t, targetCollateral))) return {
25
- eligible: true,
26
- token: targetCollateral
32
+ async getTokens() {
33
+ return this.factory.getTokens();
34
+ }
35
+ /**
36
+ * Registration on Securitize is the protocol-side KYC step; pending
37
+ * EIP-712 signatures are tx-side leftover, not KYC.
38
+ */
39
+ async getOpenAccountRequirements(wallet, props) {
40
+ const tokensToRegister = new AddressSet(this.factory.getTokens()).has(props.tokenOutAddress) ? new AddressSet([props.tokenOutAddress]) : new AddressSet();
41
+ if (tokensToRegister.size === 0) return {
42
+ protocol: "securitize",
43
+ factory: this.factory.address,
44
+ securitizeTokensToRegister: [],
45
+ tokensToRegister: [],
46
+ requiredSignatures: []
47
+ };
48
+ const [investorData] = await this.#sdk.rwa.getInvestorData(wallet, [this.factory.address]);
49
+ const registredTokens = new AddressSet(investorData.registeredTokens);
50
+ const signedTokens = new AddressSet(investorData.cachedSignatures.map((s) => s.token));
51
+ const unsignedTokens = tokensToRegister.difference(signedTokens);
52
+ const securitizeTokensToRegister = tokensToRegister.difference(registredTokens);
53
+ const requiredSignatures = investorData.registerVaultMessages.filter((m) => unsignedTokens.has(m.message.token));
54
+ return {
55
+ protocol: "securitize",
56
+ factory: this.factory.address,
57
+ securitizeTokensToRegister: Array.from(securitizeTokensToRegister),
58
+ tokensToRegister: Array.from(tokensToRegister),
59
+ requiredSignatures
27
60
  };
28
- const req = await factory.getOpenAccountRequirements(wallet, { tokenOutAddress: targetCollateral });
61
+ }
62
+ isRegistered(requirements) {
63
+ return requirements.securitizeTokensToRegister.length === 0;
64
+ }
65
+ /**
66
+ * A required signature is omitted when `providedArgs.signaturesToCache`
67
+ * already carries a signature for the same token: the transaction caches it
68
+ * on-chain as part of the operation.
69
+ */
70
+ getMissingRequirements(requirements, providedArgs) {
71
+ const providedTokens = new AddressSet((providedArgs?.signaturesToCache ?? []).map((s) => s.token));
72
+ const requiredSignatures = requirements.requiredSignatures.filter((message) => !providedTokens.has(message.message.token));
73
+ if (requiredSignatures.length === 0) return;
29
74
  return {
30
- eligible: !req || req.securitizeTokensToRegister.length === 0,
31
- token: req?.securitizeTokensToRegister[0] ?? targetCollateral
75
+ protocol: "securitize",
76
+ requiredSignatures
32
77
  };
33
78
  }
34
79
  };
@@ -1,5 +1,4 @@
1
1
  import { AddressMap } from "../../../utils/AddressMap.js";
2
- import { AddressSet } from "../../../utils/AddressSet.js";
3
2
  import "../../../utils/index.js";
4
3
  import { BaseContract } from "../../../base/BaseContract.js";
5
4
  import "../../../base/index.js";
@@ -11,7 +10,6 @@ import { decodeAbiParameters } from "viem";
11
10
  //#region src/onchain/market/rwa/securitize/SecuritizeRWAFactory.ts
12
11
  const abi = iSecuritizeRWAFactoryAbi;
13
12
  var SecuritizeRWAFactory = class extends BaseContract {
14
- #sdk;
15
13
  #investorCache = new AddressMap();
16
14
  degenNFT;
17
15
  owner;
@@ -23,7 +21,6 @@ var SecuritizeRWAFactory = class extends BaseContract {
23
21
  name: "SecuritizeRWAFactory",
24
22
  abi
25
23
  });
26
- this.#sdk = sdk;
27
24
  const decoded = decodeAbiParameters([
28
25
  {
29
26
  name: "owner",
@@ -184,40 +181,6 @@ var SecuritizeRWAFactory = class extends BaseContract {
184
181
  });
185
182
  }
186
183
  /**
187
- * {@inheritDoc IRWAFactory.getOpenAccountRequirements}
188
- */
189
- async getOpenAccountRequirements(investor, props) {
190
- const [investorData] = await this.#sdk.rwa.getInvestorData(investor, [this.address]);
191
- const tokensToRegister = new AddressSet([props.tokenOutAddress]);
192
- const registredTokens = new AddressSet(investorData.registeredTokens);
193
- const signedTokens = new AddressSet(investorData.cachedSignatures.map((s) => s.token));
194
- const unsignedTokens = tokensToRegister.difference(signedTokens);
195
- const securitizeTokensToRegister = tokensToRegister.difference(registredTokens);
196
- const requiredSignatures = investorData.registerVaultMessages.filter((m) => unsignedTokens.has(m.message.token));
197
- return {
198
- type: RWA_FACTORY_SECURITIZE,
199
- securitizeTokensToRegister: Array.from(securitizeTokensToRegister),
200
- tokensToRegister: Array.from(tokensToRegister),
201
- requiredSignatures
202
- };
203
- }
204
- /**
205
- * {@inheritDoc IRWAFactory.getMissingRequirements}
206
- *
207
- * A required signature is omitted when `providedArgs.signaturesToCache`
208
- * already carries a signature for the same token: the transaction caches it
209
- * on-chain as part of the operation.
210
- */
211
- getMissingRequirements(requirements, providedArgs) {
212
- const providedTokens = new AddressSet((providedArgs?.signaturesToCache ?? []).map((s) => s.token));
213
- const requiredSignatures = requirements.requiredSignatures.filter((message) => !providedTokens.has(message.message.token));
214
- if (requiredSignatures.length === 0) return;
215
- return {
216
- type: RWA_FACTORY_SECURITIZE,
217
- requiredSignatures
218
- };
219
- }
220
- /**
221
184
  * {@inheritDoc IRWAFactory.openCreditAccount}
222
185
  */
223
186
  openCreditAccount(creditManager, calls, args) {
@@ -37,12 +37,18 @@ var MultichainOpportunitiesService = class extends MultichainConstruct {
37
37
  *
38
38
  * See {@link MultichainOpportunitiesService.getPool}.
39
39
  **/
40
- async getStrategy(key, wallet) {
40
+ async getStrategy(key) {
41
41
  return this.queryChain({
42
42
  network: key.chainId,
43
- run: (sdk) => sdk.opportunities.getStrategy(key, wallet)
43
+ run: (sdk) => sdk.opportunities.getStrategy(key)
44
44
  });
45
45
  }
46
+ /**
47
+ * {@inheritDoc OpportunitiesService.isEligibleForStrategy}
48
+ **/
49
+ async isEligibleForStrategy(key, wallet) {
50
+ return this.sdk.chain(key.chainId).opportunities.isEligibleForStrategy(key, wallet);
51
+ }
46
52
  };
47
53
  //#endregion
48
54
  export { MultichainOpportunitiesService };
@@ -36,22 +36,34 @@ var OpportunitiesService = class extends SDKConstruct {
36
36
  * A single strategy opportunity plus the rate curve of the pool it borrows
37
37
  * from and the price feeds its liquidation price depends on.
38
38
  *
39
- * @param wallet - When given, `kyc` says whether this wallet must register
40
- * with the strategy's KYC provider first; `null` otherwise.
39
+ * `kyc` is the strategy's KYC gate, independent of any wallet.
41
40
  *
42
41
  * @throws If the credit manager is unknown, or does not currently offer a
43
42
  * strategy.
44
43
  **/
45
- async getStrategy(key, wallet) {
44
+ async getStrategy(key) {
46
45
  const suite = this.sdk.marketRegister.findCreditManager(key.creditManager);
47
46
  const detail = suite.strategyOpportunityDetail();
48
47
  if (!detail) throw new Error(`credit manager ${key.creditManager} does not currently offer a strategy`);
49
- const kyc = wallet ? await suite.kycRequirement(wallet, detail.targetCollateral.address) : null;
48
+ const kyc = await suite.kycRequirement(detail.targetCollateral.address);
50
49
  return {
51
50
  ...detail,
52
51
  kyc
53
52
  };
54
53
  }
54
+ /**
55
+ * Whether `wallet` may open this strategy today: `true` when it is not
56
+ * KYC-gated or the wallet already passed the gate.
57
+ *
58
+ * @throws If the credit manager is unknown, or does not currently offer a
59
+ * strategy.
60
+ **/
61
+ async isEligibleForStrategy(key, wallet) {
62
+ const suite = this.sdk.marketRegister.findCreditManager(key.creditManager);
63
+ const opportunity = suite.strategyOpportunity();
64
+ if (!opportunity) throw new Error(`credit manager ${key.creditManager} does not currently offer a strategy`);
65
+ return suite.isEligibleForStrategy(wallet, opportunity.targetCollateral.address);
66
+ }
55
67
  };
56
68
  //#endregion
57
69
  export { OpportunitiesService };
@@ -35,7 +35,7 @@ function calcHealthFactor(props) {
35
35
  const scale = 10n ** BigInt(decimalsByToken.get(token) ?? 18);
36
36
  return amount * price / scale;
37
37
  };
38
- const assetMoney = snapshot.assets.reduce((acc, { token, balance }) => {
38
+ const assetValue = snapshot.assets.reduce((acc, { token, balance }) => {
39
39
  if (balance <= 10n) return acc;
40
40
  const lt = BigInt(lts.get(token) ?? 0);
41
41
  const tokenLtWeighted = (convertToUSD(token, balance, true) ?? 0n) * lt;
@@ -44,8 +44,8 @@ function calcHealthFactor(props) {
44
44
  const quotaWeighted = (convertToUSD(underlying, quotaBalance) ?? 0n) * PERCENTAGE_FACTOR;
45
45
  return acc + (quota ? BigIntMath.min(quotaWeighted, tokenLtWeighted) : tokenLtWeighted);
46
46
  }, 0n);
47
- const borrowedMoney = convertToUSD(underlying, snapshot.totalDebt) ?? 0n;
48
- const hf = borrowedMoney > 0n ? assetMoney / borrowedMoney : 0n;
47
+ const borrowedValue = convertToUSD(underlying, snapshot.totalDebt) ?? 0n;
48
+ const hf = borrowedValue > 0n ? assetValue / borrowedValue : 0n;
49
49
  return Number(hf);
50
50
  }
51
51
  //#endregion