@gearbox-protocol/sdk 14.12.0-next.66 → 14.12.0-next.67

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 (225) hide show
  1. package/dist/cjs/common-utils/index.js +2 -2
  2. package/dist/cjs/common-utils/utils/apy/calculate-safe-borrow-rate.js +3 -3
  3. package/dist/cjs/common-utils/utils/assets-math.js +7 -7
  4. package/dist/cjs/common-utils/utils/creditAccount/calc-health-factor.js +2 -2
  5. package/dist/cjs/common-utils/utils/creditAccount/debt.js +2 -2
  6. package/dist/cjs/common-utils/utils/creditAccount/quota-utils.js +5 -5
  7. package/dist/cjs/common-utils/utils/index.js +2 -2
  8. package/dist/cjs/common-utils/utils/strategies/leverage/calculate-max-leverage-factor.js +2 -2
  9. package/dist/cjs/common-utils/utils/strategies/leverage/calculate-max-strategy-debt.js +5 -5
  10. package/dist/cjs/common-utils/utils/strategies/strategy-info/calculate-total-points.js +2 -2
  11. package/dist/cjs/common-utils/utils/strategies/strategy-info/get-cm-you-can-earn.js +2 -2
  12. package/dist/cjs/common-utils/utils/validation/validate-open-account-pool-status.js +4 -4
  13. package/dist/cjs/model/history.js +28 -0
  14. package/dist/cjs/model/history.schema.js +84 -0
  15. package/dist/cjs/model/index.js +64 -0
  16. package/dist/cjs/model/liquidations.js +23 -0
  17. package/dist/cjs/model/liquidations.schema.js +91 -0
  18. package/dist/cjs/model/opportunities.js +55 -0
  19. package/dist/cjs/model/opportunities.schema.js +220 -0
  20. package/dist/cjs/model/package.json +1 -0
  21. package/dist/cjs/model/positions.js +1 -0
  22. package/dist/cjs/model/primitives.js +1 -0
  23. package/dist/cjs/model/primitives.schema.js +85 -0
  24. package/dist/cjs/new-sdk/AbstractNamespace.js +158 -0
  25. package/dist/cjs/new-sdk/GearboxSDK.js +122 -0
  26. package/dist/cjs/new-sdk/index.js +11 -0
  27. package/dist/cjs/new-sdk/opportunities/OpportunitiesNamespace.js +122 -0
  28. package/dist/cjs/new-sdk/opportunities/index.js +4 -0
  29. package/dist/cjs/new-sdk/opportunities/types.js +1 -0
  30. package/dist/cjs/new-sdk/package.json +1 -0
  31. package/dist/cjs/new-sdk/types.js +22 -0
  32. package/dist/cjs/new-sdk/utils/history.js +1 -0
  33. package/dist/cjs/new-sdk/utils/index.js +2 -0
  34. package/dist/cjs/offchain/GearboxAPI.js +33 -0
  35. package/dist/cjs/offchain/index.js +8 -0
  36. package/dist/cjs/offchain/opportunities/OffchainOpportunities.js +97 -0
  37. package/dist/cjs/offchain/opportunities/index.js +4 -0
  38. package/dist/cjs/offchain/package.json +1 -0
  39. package/dist/cjs/offchain/types.js +1 -0
  40. package/dist/cjs/preview/preview/buildDelayedPreview.js +5 -5
  41. package/dist/cjs/rewards/rewards/api.js +2 -2
  42. package/dist/cjs/rewards/rewards/extra-apy.js +2 -2
  43. package/dist/cjs/sdk/MultichainSDK.js +18 -2
  44. package/dist/cjs/sdk/OnchainSDK.js +8 -1
  45. package/dist/cjs/sdk/accounts/index.js +2 -0
  46. package/dist/cjs/sdk/accounts/liquidations/LiquidationsService.js +150 -106
  47. package/dist/cjs/sdk/accounts/liquidations/MultichainLiquidationsService.js +32 -38
  48. package/dist/cjs/sdk/accounts/liquidations/constants.js +13 -0
  49. package/dist/cjs/sdk/accounts/liquidations/index.js +2 -0
  50. package/dist/cjs/sdk/base/MultichainConstruct.js +80 -0
  51. package/dist/cjs/sdk/base/TokensMeta.js +51 -0
  52. package/dist/cjs/sdk/base/index.js +2 -0
  53. package/dist/cjs/sdk/chain/chains.js +76 -0
  54. package/dist/cjs/sdk/chain/index.js +4 -0
  55. package/dist/cjs/sdk/core/errors.js +13 -0
  56. package/dist/cjs/sdk/core/index.js +2 -1
  57. package/dist/cjs/sdk/index.js +25 -1
  58. package/dist/cjs/sdk/market/MarketConfiguratorContract.js +14 -0
  59. package/dist/cjs/sdk/market/MarketSuite.js +163 -0
  60. package/dist/cjs/sdk/market/credit/CreditManagerV310Contract.js +26 -0
  61. package/dist/cjs/sdk/market/credit/CreditSuite.js +102 -0
  62. package/dist/cjs/sdk/market/math.js +104 -0
  63. package/dist/cjs/sdk/market/oracle/PriceOracleBaseContract.js +52 -0
  64. package/dist/cjs/sdk/market/pool/LinearInterestRateModelContract.js +30 -0
  65. package/dist/cjs/sdk/market/pool/PoolQuotaKeeperV310Contract.js +26 -0
  66. package/dist/cjs/sdk/market/pool/PoolSuite.js +28 -0
  67. package/dist/cjs/sdk/market/pool/PoolV310Contract.js +27 -0
  68. package/dist/cjs/sdk/market/pool/math.js +44 -0
  69. package/dist/cjs/sdk/market/pricefeeds/AbstractPriceFeed.js +17 -0
  70. package/dist/cjs/sdk/opportunities/MultichainOpportunitiesService.js +60 -0
  71. package/dist/cjs/sdk/opportunities/OpportunitiesService.js +103 -0
  72. package/dist/cjs/sdk/opportunities/index.js +12 -0
  73. package/dist/cjs/sdk/types/multichain.js +1 -0
  74. package/dist/cjs/{common-utils → sdk}/utils/bigint-math.js +11 -11
  75. package/dist/cjs/sdk/utils/index.js +3 -0
  76. package/dist/cjs/sdk/utils/zod.js +12 -0
  77. package/dist/esm/common-utils/index.js +1 -1
  78. package/dist/esm/common-utils/utils/apy/calculate-safe-borrow-rate.js +1 -1
  79. package/dist/esm/common-utils/utils/assets-math.js +1 -1
  80. package/dist/esm/common-utils/utils/creditAccount/calc-health-factor.js +1 -1
  81. package/dist/esm/common-utils/utils/creditAccount/debt.js +1 -1
  82. package/dist/esm/common-utils/utils/creditAccount/quota-utils.js +1 -1
  83. package/dist/esm/common-utils/utils/index.js +1 -1
  84. package/dist/esm/common-utils/utils/strategies/leverage/calculate-max-leverage-factor.js +1 -1
  85. package/dist/esm/common-utils/utils/strategies/leverage/calculate-max-strategy-debt.js +1 -1
  86. package/dist/esm/common-utils/utils/strategies/strategy-info/calculate-total-points.js +1 -1
  87. package/dist/esm/common-utils/utils/strategies/strategy-info/get-cm-you-can-earn.js +1 -1
  88. package/dist/esm/common-utils/utils/validation/validate-open-account-pool-status.js +1 -1
  89. package/dist/esm/model/history.js +26 -0
  90. package/dist/esm/model/history.schema.js +76 -0
  91. package/dist/esm/model/index.js +9 -0
  92. package/dist/esm/model/liquidations.js +22 -0
  93. package/dist/esm/model/liquidations.schema.js +83 -0
  94. package/dist/esm/model/opportunities.js +51 -0
  95. package/dist/esm/model/opportunities.schema.js +198 -0
  96. package/dist/esm/model/package.json +1 -0
  97. package/dist/esm/model/positions.js +1 -0
  98. package/dist/esm/model/primitives.js +1 -0
  99. package/dist/esm/model/primitives.schema.js +75 -0
  100. package/dist/esm/new-sdk/AbstractNamespace.js +157 -0
  101. package/dist/esm/new-sdk/GearboxSDK.js +121 -0
  102. package/dist/esm/new-sdk/index.js +7 -0
  103. package/dist/esm/new-sdk/opportunities/OpportunitiesNamespace.js +121 -0
  104. package/dist/esm/new-sdk/opportunities/index.js +3 -0
  105. package/dist/esm/new-sdk/opportunities/types.js +1 -0
  106. package/dist/esm/new-sdk/package.json +1 -0
  107. package/dist/esm/new-sdk/types.js +21 -0
  108. package/dist/esm/new-sdk/utils/history.js +1 -0
  109. package/dist/esm/new-sdk/utils/index.js +2 -0
  110. package/dist/esm/offchain/GearboxAPI.js +32 -0
  111. package/dist/esm/offchain/index.js +5 -0
  112. package/dist/esm/offchain/opportunities/OffchainOpportunities.js +95 -0
  113. package/dist/esm/offchain/opportunities/index.js +2 -0
  114. package/dist/esm/offchain/package.json +1 -0
  115. package/dist/esm/offchain/types.js +1 -0
  116. package/dist/esm/preview/preview/buildDelayedPreview.js +1 -1
  117. package/dist/esm/rewards/rewards/api.js +1 -1
  118. package/dist/esm/rewards/rewards/extra-apy.js +1 -1
  119. package/dist/esm/sdk/MultichainSDK.js +18 -2
  120. package/dist/esm/sdk/OnchainSDK.js +8 -1
  121. package/dist/esm/sdk/accounts/index.js +2 -2
  122. package/dist/esm/sdk/accounts/liquidations/LiquidationsService.js +152 -108
  123. package/dist/esm/sdk/accounts/liquidations/MultichainLiquidationsService.js +32 -38
  124. package/dist/esm/sdk/accounts/liquidations/constants.js +12 -1
  125. package/dist/esm/sdk/accounts/liquidations/index.js +2 -2
  126. package/dist/esm/sdk/base/MultichainConstruct.js +79 -0
  127. package/dist/esm/sdk/base/TokensMeta.js +51 -0
  128. package/dist/esm/sdk/base/index.js +2 -1
  129. package/dist/esm/sdk/chain/chains.js +74 -2
  130. package/dist/esm/sdk/chain/index.js +2 -2
  131. package/dist/esm/sdk/core/errors.js +13 -1
  132. package/dist/esm/sdk/core/index.js +2 -2
  133. package/dist/esm/sdk/index.js +11 -5
  134. package/dist/esm/sdk/market/MarketConfiguratorContract.js +14 -0
  135. package/dist/esm/sdk/market/MarketSuite.js +163 -0
  136. package/dist/esm/sdk/market/credit/CreditManagerV310Contract.js +26 -0
  137. package/dist/esm/sdk/market/credit/CreditSuite.js +102 -0
  138. package/dist/esm/sdk/market/math.js +98 -0
  139. package/dist/esm/sdk/market/oracle/PriceOracleBaseContract.js +52 -0
  140. package/dist/esm/sdk/market/pool/LinearInterestRateModelContract.js +30 -0
  141. package/dist/esm/sdk/market/pool/PoolQuotaKeeperV310Contract.js +26 -0
  142. package/dist/esm/sdk/market/pool/PoolSuite.js +28 -0
  143. package/dist/esm/sdk/market/pool/PoolV310Contract.js +27 -0
  144. package/dist/esm/sdk/market/pool/math.js +41 -0
  145. package/dist/esm/sdk/market/pricefeeds/AbstractPriceFeed.js +17 -0
  146. package/dist/esm/sdk/opportunities/MultichainOpportunitiesService.js +59 -0
  147. package/dist/esm/sdk/opportunities/OpportunitiesService.js +102 -0
  148. package/dist/esm/sdk/opportunities/index.js +4 -0
  149. package/dist/esm/sdk/types/multichain.js +1 -0
  150. package/dist/esm/{common-utils → sdk}/utils/bigint-math.js +11 -11
  151. package/dist/esm/sdk/utils/index.js +3 -2
  152. package/dist/esm/sdk/utils/zod.js +13 -2
  153. package/dist/types/common-utils/index.d.ts +1 -1
  154. package/dist/types/common-utils/utils/index.d.ts +1 -1
  155. package/dist/types/model/history.d.ts +105 -0
  156. package/dist/types/model/history.schema.d.ts +66 -0
  157. package/dist/types/model/index.d.ts +9 -0
  158. package/dist/types/model/liquidations.d.ts +230 -0
  159. package/dist/types/model/liquidations.schema.d.ts +292 -0
  160. package/dist/types/model/opportunities.d.ts +543 -0
  161. package/dist/types/model/opportunities.schema.d.ts +1066 -0
  162. package/dist/types/model/positions.d.ts +11 -0
  163. package/dist/types/model/primitives.d.ts +193 -0
  164. package/dist/types/model/primitives.schema.d.ts +81 -0
  165. package/dist/types/new-sdk/AbstractNamespace.d.ts +119 -0
  166. package/dist/types/new-sdk/GearboxSDK.d.ts +78 -0
  167. package/dist/types/new-sdk/index.d.ts +9 -0
  168. package/dist/types/new-sdk/opportunities/OpportunitiesNamespace.d.ts +69 -0
  169. package/dist/types/new-sdk/opportunities/index.d.ts +3 -0
  170. package/dist/types/new-sdk/opportunities/types.d.ts +66 -0
  171. package/dist/types/new-sdk/types.d.ts +149 -0
  172. package/dist/types/new-sdk/utils/history.d.ts +44 -0
  173. package/dist/types/new-sdk/utils/index.d.ts +2 -0
  174. package/dist/types/offchain/GearboxAPI.d.ts +31 -0
  175. package/dist/types/offchain/index.d.ts +5 -0
  176. package/dist/types/offchain/opportunities/OffchainOpportunities.d.ts +69 -0
  177. package/dist/types/offchain/opportunities/index.d.ts +2 -0
  178. package/dist/types/offchain/types.d.ts +50 -0
  179. package/dist/types/sdk/MultichainSDK.d.ts +15 -2
  180. package/dist/types/sdk/OnchainSDK.d.ts +9 -3
  181. package/dist/types/sdk/accounts/index.d.ts +3 -3
  182. package/dist/types/sdk/accounts/liquidations/LiquidationsService.d.ts +24 -16
  183. package/dist/types/sdk/accounts/liquidations/MultichainLiquidationsService.d.ts +26 -20
  184. package/dist/types/sdk/accounts/liquidations/constants.d.ts +12 -1
  185. package/dist/types/sdk/accounts/liquidations/index.d.ts +3 -3
  186. package/dist/types/sdk/accounts/liquidations/types.d.ts +34 -309
  187. package/dist/types/sdk/base/MultichainConstruct.d.ts +57 -0
  188. package/dist/types/sdk/base/TokensMeta.d.ts +26 -0
  189. package/dist/types/sdk/base/index.d.ts +2 -1
  190. package/dist/types/sdk/chain/chains.d.ts +68 -1
  191. package/dist/types/sdk/chain/index.d.ts +2 -2
  192. package/dist/types/sdk/core/errors.d.ts +10 -1
  193. package/dist/types/sdk/core/index.d.ts +2 -2
  194. package/dist/types/sdk/index.d.ts +15 -8
  195. package/dist/types/sdk/market/MarketConfiguratorContract.d.ts +9 -0
  196. package/dist/types/sdk/market/MarketSuite.d.ts +109 -1
  197. package/dist/types/sdk/market/credit/CreditManagerV310Contract.d.ts +14 -0
  198. package/dist/types/sdk/market/credit/CreditSuite.d.ts +47 -0
  199. package/dist/types/sdk/market/credit/types.d.ts +22 -0
  200. package/dist/types/sdk/market/index.d.ts +2 -2
  201. package/dist/types/sdk/market/math.d.ts +74 -0
  202. package/dist/types/sdk/market/oracle/PriceOracleBaseContract.d.ts +23 -0
  203. package/dist/types/sdk/market/oracle/types.d.ts +46 -0
  204. package/dist/types/sdk/market/pool/LinearInterestRateModelContract.d.ts +12 -0
  205. package/dist/types/sdk/market/pool/PoolQuotaKeeperV310Contract.d.ts +22 -1
  206. package/dist/types/sdk/market/pool/PoolSuite.d.ts +23 -0
  207. package/dist/types/sdk/market/pool/PoolV310Contract.d.ts +18 -0
  208. package/dist/types/sdk/market/pool/math.d.ts +57 -0
  209. package/dist/types/sdk/market/pool/types.d.ts +23 -0
  210. package/dist/types/sdk/market/pricefeeds/AbstractPriceFeed.d.ts +6 -0
  211. package/dist/types/sdk/market/pricefeeds/types.d.ts +10 -0
  212. package/dist/types/sdk/opportunities/MultichainOpportunitiesService.d.ts +40 -0
  213. package/dist/types/sdk/opportunities/OpportunitiesService.d.ts +47 -0
  214. package/dist/types/sdk/opportunities/index.d.ts +4 -0
  215. package/dist/types/sdk/types/index.d.ts +2 -1
  216. package/dist/types/sdk/types/multichain.d.ts +65 -0
  217. package/dist/types/sdk/types/state.d.ts +1 -1
  218. package/dist/types/sdk/types/transactions.d.ts +3 -0
  219. package/dist/types/{common-utils → sdk}/utils/bigint-math.d.ts +7 -11
  220. package/dist/types/sdk/utils/index.d.ts +3 -2
  221. package/dist/types/sdk/utils/zod.d.ts +6 -2
  222. package/package.json +16 -1
  223. package/dist/cjs/sdk/accounts/liquidations/helpers.js +0 -201
  224. package/dist/esm/sdk/accounts/liquidations/helpers.js +0 -192
  225. package/dist/types/sdk/accounts/liquidations/helpers.d.ts +0 -140
@@ -63,6 +63,19 @@ const chains = {
63
63
  "0xa770ce584adb6491a2138da6eaec33243bdcd248": "Testnet Curator"
64
64
  },
65
65
  rwaFactories: [],
66
+ underlyingAssetTypes: {
67
+ "0x7f39C581F595B53c5cb19bD0b3f8dA6c935E2Ca0": "ETH",
68
+ "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2": "ETH",
69
+ "0x18084fbA666a33d37592fA2633fD49a74DD93a88": "BTC",
70
+ "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48": "Stable",
71
+ "0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599": "BTC"
72
+ },
73
+ rwaTokens: [
74
+ "0x17418038ecF73BA4026c4f428547BF099706F27B",
75
+ "0x51C2d74017390CbBd30550179A16A1c28F7210fc",
76
+ "0x238a700eD6165261Cf8b2e544ba797BC11e466Ba",
77
+ "0x7433806912Eae67919e66aea853d46Fa0aef98A8"
78
+ ],
66
79
  isPublic: true,
67
80
  wellKnownToken: {
68
81
  address: "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48",
@@ -153,6 +166,12 @@ const chains = {
153
166
  "0x16956912813ab9a38d95730b52a8cf53e860a7c5": "Tulipa",
154
167
  "0x7c6ee1bf9c1eb3ee55bdbdc1e8d0317aab718e0a": "UltraYield"
155
168
  },
169
+ underlyingAssetTypes: {
170
+ "0x3bd359C1119dA7Da1D913D1C4D2B7c461115433A": "ETH",
171
+ "0x754704Bc059F8C67012fEd69BC8A327a5aafb603": "Stable",
172
+ "0xe7cd86e13AC4309349F30B3435a9d337750fC82D": "Stable",
173
+ "0x00000000eFE302BEAA2b3e6e1b18d08D69a9012a": "Stable"
174
+ },
156
175
  rwaFactories: [],
157
176
  isPublic: true,
158
177
  wellKnownToken: {
@@ -224,6 +243,7 @@ const chains = {
224
243
  ...viem_chains.etherlink,
225
244
  network: "Etherlink",
226
245
  defaultMarketConfigurators: { "0x577424f0e6f50db668cc1bc76babb87e36732291": "Re7" },
246
+ underlyingAssetTypes: { "0x796Ea11Fa2dD751eD01b53C372fFDB4AAa8f00F9": "Stable" },
227
247
  rwaFactories: [],
228
248
  isPublic: true,
229
249
  wellKnownToken: {
@@ -270,6 +290,10 @@ const chains = {
270
290
  "0xce1cf71a28837daaa7b92d00ca4ef2fd649c2a67": "Hyperithm",
271
291
  "0x9655f82b585b11cee8a05576ed8efcf755cec04b": "TelosC"
272
292
  },
293
+ underlyingAssetTypes: {
294
+ "0xB8CE59FC3717ada4C02eaDF9682A9e934F625ebb": "Stable",
295
+ "0x5d3a1Ff2b6BAb83b63cd9AD0787074081a52ef34": "Stable"
296
+ },
273
297
  rwaFactories: [],
274
298
  isPublic: true,
275
299
  wellKnownToken: {
@@ -289,6 +313,10 @@ const chains = {
289
313
  blockTime: 200,
290
314
  network: "Somnia",
291
315
  defaultMarketConfigurators: { "0x1ca8b92aa7233a9f8f7ba031ac45c878141adff0": "Invariant Group" },
316
+ underlyingAssetTypes: {
317
+ "0x28BEc7E30E6faee657a03e19Bf1128AaD7632A00": "Stable",
318
+ "0x046EDe9564A72571df6F5e44d0405360c0f4dCab": "ETH"
319
+ },
292
320
  rwaFactories: [],
293
321
  isPublic: true,
294
322
  wellKnownToken: {
@@ -379,13 +407,61 @@ function findCuratorMarketConfigurator(curator, network) {
379
407
  };
380
408
  for (const [a, c] of require_sdk_utils_mappers.TypedObjectUtils.entries(all)) if (c === curator) return a;
381
409
  }
410
+ /**
411
+ * Looks up the {@link AssetType} of a token in hardcoded classifier.
412
+ * Not all tokens are classified, only underlyings, so the default answer is `undefined`.
413
+ *
414
+ * @param token - Token address
415
+ * @param network - Network the token lives on.
416
+ * @returns The asset type, or `undefined` when the token is not classified
417
+ **/
418
+ function getAssetType(token, network) {
419
+ const table = chains[network].underlyingAssetTypes;
420
+ if (!table) return;
421
+ for (const [a, assetType] of require_sdk_utils_mappers.TypedObjectUtils.entries(table)) if ((0, viem.isAddressEqual)(a, token)) return assetType;
422
+ }
423
+ /**
424
+ * Checks whether a token represents a real-world asset, per the curated list of
425
+ * a network.
426
+ *
427
+ * @param token - Token address.
428
+ * @param network - Network the token lives on.
429
+ **/
430
+ function isRWAToken(token, network) {
431
+ return !!chains[network].rwaTokens?.some((t) => (0, viem.isAddressEqual)(t, token));
432
+ }
433
+ /**
434
+ * Checks whether a pool is on the sunset list of a network.
435
+ *
436
+ * @param pool - Pool address.
437
+ * @param network - Network the pool lives on.
438
+ **/
439
+ function isSunsetPool(pool, network) {
440
+ return !!chains[network].sunsetPools?.some((p) => (0, viem.isAddressEqual)(p, pool));
441
+ }
442
+ /**
443
+ * Checks whether a strategy is on the sunset list of a network. Both halves of
444
+ * the strategy key must match: a credit manager can wind down one collateral
445
+ * and keep the rest.
446
+ *
447
+ * @param creditManager - Credit manager address.
448
+ * @param collateral - Target collateral of the strategy.
449
+ * @param network - Network the strategy lives on.
450
+ **/
451
+ function isSunsetStrategy(creditManager, collateral, network) {
452
+ return !!chains[network].sunsetStrategies?.some((s) => (0, viem.isAddressEqual)(s.creditManager, creditManager) && (0, viem.isAddressEqual)(s.collateral, collateral));
453
+ }
382
454
  //#endregion
383
455
  exports.NetworkType = NetworkType;
384
456
  exports.SUPPORTED_NETWORKS = SUPPORTED_NETWORKS;
385
457
  exports.chains = chains;
386
458
  exports.findCuratorMarketConfigurator = findCuratorMarketConfigurator;
459
+ exports.getAssetType = getAssetType;
387
460
  exports.getChain = getChain;
388
461
  exports.getCuratorName = getCuratorName;
389
462
  exports.getNetworkType = getNetworkType;
390
463
  exports.isPublicNetwork = isPublicNetwork;
464
+ exports.isRWAToken = isRWAToken;
465
+ exports.isSunsetPool = isSunsetPool;
466
+ exports.isSunsetStrategy = isSunsetStrategy;
391
467
  exports.isSupportedNetwork = isSupportedNetwork;
@@ -6,8 +6,12 @@ exports.SUPPORTED_NETWORKS = require_sdk_chain_chains.SUPPORTED_NETWORKS;
6
6
  exports.chains = require_sdk_chain_chains.chains;
7
7
  exports.detectNetwork = require_sdk_chain_detectNetwork.detectNetwork;
8
8
  exports.findCuratorMarketConfigurator = require_sdk_chain_chains.findCuratorMarketConfigurator;
9
+ exports.getAssetType = require_sdk_chain_chains.getAssetType;
9
10
  exports.getChain = require_sdk_chain_chains.getChain;
10
11
  exports.getCuratorName = require_sdk_chain_chains.getCuratorName;
11
12
  exports.getNetworkType = require_sdk_chain_chains.getNetworkType;
12
13
  exports.isPublicNetwork = require_sdk_chain_chains.isPublicNetwork;
14
+ exports.isRWAToken = require_sdk_chain_chains.isRWAToken;
15
+ exports.isSunsetPool = require_sdk_chain_chains.isSunsetPool;
16
+ exports.isSunsetStrategy = require_sdk_chain_chains.isSunsetStrategy;
13
17
  exports.isSupportedNetwork = require_sdk_chain_chains.isSupportedNetwork;
@@ -52,6 +52,18 @@ var SdkMissingChainStateError = class extends viem.BaseError {
52
52
  }
53
53
  };
54
54
  /**
55
+ * Thrown when a chain that is not configured in {@link MultichainSDK} is
56
+ * requested.
57
+ */
58
+ var ChainNotConfiguredError = class extends viem.BaseError {
59
+ name = "ChainNotConfiguredError";
60
+ network;
61
+ constructor(network) {
62
+ super(`Chain ${String(network)} is not configured in this MultichainSDK`);
63
+ this.network = network;
64
+ }
65
+ };
66
+ /**
55
67
  * Thrown by {@link MultichainSDK.syncState} when one or more per-chain syncs
56
68
  * fail. Wraps the individual errors keyed by network.
57
69
  */
@@ -65,6 +77,7 @@ var SdkSyncFailedError = class extends viem.BaseError {
65
77
  }
66
78
  };
67
79
  //#endregion
80
+ exports.ChainNotConfiguredError = ChainNotConfiguredError;
68
81
  exports.SdkAlreadyAttachedError = SdkAlreadyAttachedError;
69
82
  exports.SdkChainMismatchError = SdkChainMismatchError;
70
83
  exports.SdkMissingChainStateError = SdkMissingChainStateError;
@@ -1,9 +1,10 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
+ const require_sdk_core_errors = require("./errors.js");
2
3
  const require_sdk_core_AddressProviderV310Contract = require("./AddressProviderV310Contract.js");
3
4
  const require_sdk_core_createAddressProvider = require("./createAddressProvider.js");
4
- const require_sdk_core_errors = require("./errors.js");
5
5
  require("./types.js");
6
6
  exports.AddressProviderV310Contract = require_sdk_core_AddressProviderV310Contract.AddressProviderV310Contract;
7
+ exports.ChainNotConfiguredError = require_sdk_core_errors.ChainNotConfiguredError;
7
8
  exports.SdkAlreadyAttachedError = require_sdk_core_errors.SdkAlreadyAttachedError;
8
9
  exports.SdkChainMismatchError = require_sdk_core_errors.SdkChainMismatchError;
9
10
  exports.SdkMissingChainStateError = require_sdk_core_errors.SdkMissingChainStateError;
@@ -4,6 +4,7 @@ const require_sdk_utils_AddressSet = require("./utils/AddressSet.js");
4
4
  const require_sdk_utils_AssetsMap = require("./utils/AssetsMap.js");
5
5
  const require_sdk_utils_json = require("./utils/json.js");
6
6
  const require_sdk_utils_abi_decode = require("./utils/abi-decode.js");
7
+ const require_sdk_utils_bigint_math = require("./utils/bigint-math.js");
7
8
  const require_sdk_utils_bytes32ToString = require("./utils/bytes32ToString.js");
8
9
  const require_sdk_utils_childLogger = require("./utils/childLogger.js");
9
10
  const require_sdk_utils_createRawTx = require("./utils/createRawTx.js");
@@ -35,6 +36,8 @@ const require_sdk_base_ChainContractsRegister = require("./base/ChainContractsRe
35
36
  const require_sdk_base_Construct = require("./base/Construct.js");
36
37
  const require_sdk_base_BaseContract = require("./base/BaseContract.js");
37
38
  const require_sdk_base_errors = require("./base/errors.js");
39
+ const require_sdk_core_errors = require("./core/errors.js");
40
+ const require_sdk_base_MultichainConstruct = require("./base/MultichainConstruct.js");
38
41
  const require_sdk_base_PlaceholderContract = require("./base/PlaceholderContract.js");
39
42
  const require_sdk_base_SDKConstruct = require("./base/SDKConstruct.js");
40
43
  const require_sdk_base_token_types = require("./base/token-types.js");
@@ -45,6 +48,7 @@ const require_sdk_market_adapters_createAdapter = require("./market/adapters/cre
45
48
  const require_sdk_market_credit_CreditConfiguratorV310Contract = require("./market/credit/CreditConfiguratorV310Contract.js");
46
49
  const require_sdk_market_credit_CreditFacadeV310BaseContract = require("./market/credit/CreditFacadeV310BaseContract.js");
47
50
  const require_sdk_market_credit_CreditFacadeV310Contract = require("./market/credit/CreditFacadeV310Contract.js");
51
+ const require_sdk_market_math = require("./market/math.js");
48
52
  const require_sdk_market_credit_CreditManagerV310Contract = require("./market/credit/CreditManagerV310Contract.js");
49
53
  const require_sdk_market_credit_CreditSuite = require("./market/credit/CreditSuite.js");
50
54
  const require_sdk_utils_viem_simulateMulticall = require("./utils/viem/simulateMulticall.js");
@@ -117,8 +121,10 @@ const require_sdk_accounts_withdrawal_compressor_createWithdrawalCompressor = re
117
121
  require("./accounts/index.js");
118
122
  const require_sdk_core_AddressProviderV310Contract = require("./core/AddressProviderV310Contract.js");
119
123
  const require_sdk_core_createAddressProvider = require("./core/createAddressProvider.js");
120
- const require_sdk_core_errors = require("./core/errors.js");
121
124
  require("./core/index.js");
125
+ const require_sdk_opportunities_MultichainOpportunitiesService = require("./opportunities/MultichainOpportunitiesService.js");
126
+ const require_sdk_opportunities_OpportunitiesService = require("./opportunities/OpportunitiesService.js");
127
+ require("./opportunities/index.js");
122
128
  const require_sdk_plugins_BasePlugin = require("./plugins/BasePlugin.js");
123
129
  const require_sdk_plugins_errors = require("./plugins/errors.js");
124
130
  require("./plugins/index.js");
@@ -180,9 +186,11 @@ exports.BalancerStablePriceFeedContract = require_sdk_market_pricefeeds_Balancer
180
186
  exports.BalancerWeightedPriceFeedContract = require_sdk_market_pricefeeds_BalancerWeightedPriceFeed.BalancerWeightedPriceFeedContract;
181
187
  exports.BaseContract = require_sdk_base_BaseContract.BaseContract;
182
188
  exports.BasePlugin = require_sdk_plugins_BasePlugin.BasePlugin;
189
+ exports.BigIntMath = require_sdk_utils_bigint_math.BigIntMath;
183
190
  exports.BotPermissions = require_sdk_constants_bot_permissions.BotPermissions;
184
191
  exports.BoundedPriceFeedContract = require_sdk_market_pricefeeds_BoundedPriceFeed.BoundedPriceFeedContract;
185
192
  exports.ChainContractsRegister = require_sdk_base_ChainContractsRegister.ChainContractsRegister;
193
+ exports.ChainNotConfiguredError = require_sdk_core_errors.ChainNotConfiguredError;
186
194
  exports.CompositePriceFeedContract = require_sdk_market_pricefeeds_CompositePriceFeed.CompositePriceFeedContract;
187
195
  exports.Construct = require_sdk_base_Construct.Construct;
188
196
  exports.ContractParseError = require_sdk_base_BaseContract.ContractParseError;
@@ -197,6 +205,7 @@ exports.CurveStablePriceFeedContract = require_sdk_market_pricefeeds_CurveStable
197
205
  exports.CurveUSDPriceFeedContract = require_sdk_market_pricefeeds_CurveUSDPriceFeed.CurveUSDPriceFeedContract;
198
206
  exports.DELAYED_INTENT_TYPES = require_sdk_accounts_withdrawal_compressor_intent_codec.DELAYED_INTENT_TYPES;
199
207
  exports.DELAYED_INTENT_VERSION = require_sdk_accounts_withdrawal_compressor_intent_codec.DELAYED_INTENT_VERSION;
208
+ exports.DUST_THRESHOLD = require_sdk_accounts_liquidations_constants.DUST_THRESHOLD;
200
209
  exports.Erc4626PriceFeedContract = require_sdk_market_pricefeeds_Erc4626PriceFeed.Erc4626PriceFeedContract;
201
210
  exports.ExternalPriceFeedContract = require_sdk_market_pricefeeds_ExternalPriceFeed.ExternalPriceFeedContract;
202
211
  exports.GaugeContract = require_sdk_market_pool_GaugeContract.GaugeContract;
@@ -204,6 +213,7 @@ exports.IERC20ZapperContract = require_sdk_market_zapper_IERC20ZapperContract.IE
204
213
  exports.IETHZapperContract = require_sdk_market_zapper_IETHZapperContract.IETHZapperContract;
205
214
  exports.InvalidDelayedIntentError = require_sdk_accounts_withdrawal_compressor_errors.InvalidDelayedIntentError;
206
215
  exports.LEVERAGE_DECIMALS = require_sdk_constants_math.LEVERAGE_DECIMALS;
216
+ exports.LIQUIDATION_APPROVAL_BUFFER = require_sdk_accounts_liquidations_constants.LIQUIDATION_APPROVAL_BUFFER;
207
217
  exports.LIQUIDATION_COMPRESSOR_V313_ADDRESS = require_sdk_accounts_liquidations_constants.LIQUIDATION_COMPRESSOR_V313_ADDRESS;
208
218
  exports.LinearInterestRateModelContract = require_sdk_market_pool_LinearInterestRateModelContract.LinearInterestRateModelContract;
209
219
  exports.LiquidationsService = require_sdk_accounts_liquidations_LiquidationsService.LiquidationsService;
@@ -217,13 +227,16 @@ exports.MarketSuite = require_sdk_market_MarketSuite.MarketSuite;
217
227
  exports.MellowLRTPriceFeedContract = require_sdk_market_pricefeeds_MellowLRTPriceFeed.MellowLRTPriceFeedContract;
218
228
  exports.MidasLiquidatorContract = require_sdk_market_rwa_midas_MidasLiquidatorContract.MidasLiquidatorContract;
219
229
  exports.MissingSerializedParamsError = require_sdk_base_errors.MissingSerializedParamsError;
230
+ exports.MultichainConstruct = require_sdk_base_MultichainConstruct.MultichainConstruct;
220
231
  exports.MultichainLiquidationsService = require_sdk_accounts_liquidations_MultichainLiquidationsService.MultichainLiquidationsService;
232
+ exports.MultichainOpportunitiesService = require_sdk_opportunities_MultichainOpportunitiesService.MultichainOpportunitiesService;
221
233
  exports.MultichainSDK = require_sdk_MultichainSDK.MultichainSDK;
222
234
  exports.NATIVE_ADDRESS = require_sdk_constants_addresses.NATIVE_ADDRESS;
223
235
  exports.NOT_DEPLOYED = require_sdk_constants_addresses.NOT_DEPLOYED;
224
236
  exports.NO_VERSION = require_sdk_constants_address_provider.NO_VERSION;
225
237
  exports.NetworkType = require_sdk_chain_chains.NetworkType;
226
238
  exports.OnchainSDK = require_sdk_OnchainSDK.OnchainSDK;
239
+ exports.OpportunitiesService = require_sdk_opportunities_OpportunitiesService.OpportunitiesService;
227
240
  exports.PERCENTAGE_DECIMALS = require_sdk_constants_math.PERCENTAGE_DECIMALS;
228
241
  exports.PERCENTAGE_FACTOR = require_sdk_constants_math.PERCENTAGE_FACTOR;
229
242
  exports.PERCENTAGE_FACTOR_1KK = require_sdk_constants_math.PERCENTAGE_FACTOR_1KK;
@@ -290,8 +303,11 @@ exports.YearnPriceFeedContract = require_sdk_market_pricefeeds_YearnPriceFeed.Ye
290
303
  exports.ZapperContract = require_sdk_market_zapper_ZapperContract.ZapperContract;
291
304
  exports.ZeroPriceFeedContract = require_sdk_market_pricefeeds_ZeroPriceFeed.ZeroPriceFeedContract;
292
305
  exports.ZodAddress = require_sdk_utils_zod.ZodAddress;
306
+ exports.ZodHex = require_sdk_utils_zod.ZodHex;
307
+ exports.additionalBorrowApyBps = require_sdk_market_math.additionalBorrowApyBps;
293
308
  exports.assetsMap = require_sdk_router_helpers.assetsMap;
294
309
  exports.attachOptionsSchema = require_sdk_options.attachOptionsSchema;
310
+ exports.borrowApyBps = require_sdk_market_math.borrowApyBps;
295
311
  exports.botPermissionsToString = require_sdk_constants_bot_permissions.botPermissionsToString;
296
312
  exports.bytes32ToString = require_sdk_utils_bytes32ToString.bytes32ToString;
297
313
  exports.chains = require_sdk_chain_chains.chains;
@@ -328,6 +344,7 @@ exports.formatTimestamp = require_sdk_utils_formatter.formatTimestamp;
328
344
  exports.functionArgsToMap = require_sdk_utils_abi_decode.functionArgsToMap;
329
345
  exports.functionArgsToRecord = require_sdk_utils_abi_decode.functionArgsToRecord;
330
346
  exports.generateCastTraceCall = require_sdk_utils_viem_cast.generateCastTraceCall;
347
+ exports.getAssetType = require_sdk_chain_chains.getAssetType;
331
348
  exports.getCastTraceArgs = require_sdk_utils_viem_cast.getCastTraceArgs;
332
349
  exports.getChain = require_sdk_chain_chains.getChain;
333
350
  exports.getCuratorName = require_sdk_chain_chains.getCuratorName;
@@ -344,15 +361,20 @@ exports.isDust = require_sdk_utils_isDust.isDust;
344
361
  exports.isLPPriceFeed = require_sdk_market_pricefeeds_AbstractLPPriceFeed.isLPPriceFeed;
345
362
  exports.isPublicNetwork = require_sdk_chain_chains.isPublicNetwork;
346
363
  exports.isRWAFactory = require_sdk_market_rwa_types.isRWAFactory;
364
+ exports.isRWAToken = require_sdk_chain_chains.isRWAToken;
365
+ exports.isSunsetPool = require_sdk_chain_chains.isSunsetPool;
366
+ exports.isSunsetStrategy = require_sdk_chain_chains.isSunsetStrategy;
347
367
  exports.isSupportedNetwork = require_sdk_chain_chains.isSupportedNetwork;
348
368
  exports.isUpdatablePriceFeed = require_sdk_market_pricefeeds_isUpdatablePriceFeed.isUpdatablePriceFeed;
349
369
  exports.isV310 = require_sdk_constants_versions.isV310;
350
370
  exports.isVersionRange = require_sdk_constants_versions.isVersionRange;
351
371
  exports.json_parse = require_sdk_utils_json.json_parse;
352
372
  exports.json_stringify = require_sdk_utils_json.json_stringify;
373
+ exports.maxLeverage = require_sdk_market_math.maxLeverage;
353
374
  exports.numberWithCommas = require_sdk_utils_formatter.numberWithCommas;
354
375
  exports.onchainSDKOptionsSchema = require_sdk_options.onchainSDKOptionsSchema;
355
376
  exports.percentFmt = require_sdk_utils_formatter.percentFmt;
377
+ exports.rayToBps = require_sdk_market_math.rayToBps;
356
378
  exports.rayToNumber = require_sdk_utils_formatter.rayToNumber;
357
379
  exports.retry = require_sdk_utils_retry.retry;
358
380
  exports.sendRawTx = require_sdk_utils_viem_sendRawTx.sendRawTx;
@@ -369,4 +391,6 @@ exports.toPendingWithdrawal = require_sdk_accounts_withdrawal_compressor_Abstrac
369
391
  exports.toRequestableWithdrawal = require_sdk_accounts_withdrawal_compressor_AbstractWithdrawalCompressorContract.toRequestableWithdrawal;
370
392
  exports.toSignificant = require_sdk_utils_formatter.toSignificant;
371
393
  exports.toWithdrawalStatus = require_sdk_accounts_withdrawal_compressor_types.toWithdrawalStatus;
394
+ exports.usdToNumber = require_sdk_market_math.usdToNumber;
395
+ exports.utilizationBps = require_sdk_market_math.utilizationBps;
372
396
  exports.watchBlocksAsync = require_sdk_utils_viem_watchBlocksAsync.watchBlocksAsync;
@@ -1,5 +1,6 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
2
  const require_abi_310_generated = require("../../abi/310/generated.js");
3
+ const require_sdk_chain_chains = require("../chain/chains.js");
3
4
  const require_sdk_constants_address_provider = require("../constants/address-provider.js");
4
5
  require("../constants/index.js");
5
6
  const require_sdk_base_BaseContract = require("../base/BaseContract.js");
@@ -25,6 +26,19 @@ var MarketConfiguratorContract = class extends require_sdk_base_BaseContract.Bas
25
26
  });
26
27
  this.register.setAddressLabel(this.address, `Market configurator ${this.#curatorName}`);
27
28
  }
29
+ /**
30
+ * The entity operating this configurator, as the shared read model describes
31
+ * it. The curated per-chain table wins over the name the contract reports,
32
+ * because the two sources must agree across services and only the table is
33
+ * shared with the backend.
34
+ */
35
+ get curator() {
36
+ return {
37
+ address: this.address,
38
+ name: require_sdk_chain_chains.getCuratorName(this.address, this.networkType) ?? this.#curatorName ?? "Unknown",
39
+ url: null
40
+ };
41
+ }
28
42
  static async getPeripheryContractBatch(configurators, client, contract, blockNumber) {
29
43
  return await client.multicall({
30
44
  allowFailure: true,
@@ -1,15 +1,21 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
+ const require_sdk_utils_AddressMap = require("../utils/AddressMap.js");
3
+ const require_sdk_chain_chains = require("../chain/chains.js");
4
+ require("../utils/index.js");
2
5
  const require_sdk_base_SDKConstruct = require("../base/SDKConstruct.js");
3
6
  require("../base/index.js");
4
7
  const require_sdk_market_credit_CreditSuite = require("./credit/CreditSuite.js");
5
8
  require("./credit/index.js");
6
9
  const require_sdk_market_MarketConfiguratorContract = require("./MarketConfiguratorContract.js");
10
+ const require_model_opportunities = require("../../model/opportunities.js");
11
+ require("../../model/index.js");
7
12
  const require_sdk_market_loss_policy_createLossPolicy = require("./loss-policy/createLossPolicy.js");
8
13
  require("./loss-policy/index.js");
9
14
  const require_sdk_market_oracle_createPriceOracle = require("./oracle/createPriceOracle.js");
10
15
  require("./oracle/index.js");
11
16
  const require_sdk_market_pool_PoolSuite = require("./pool/PoolSuite.js");
12
17
  require("./pool/index.js");
18
+ let viem = require("viem");
13
19
  //#region src/sdk/market/MarketSuite.ts
14
20
  /**
15
21
  * Aggregates all SDK wrappers that make up one Gearbox market.
@@ -101,6 +107,163 @@ var MarketSuite = class extends require_sdk_base_SDKConstruct.SDKConstruct {
101
107
  return this.pool.rwaFactory;
102
108
  }
103
109
  /**
110
+ * {@inheritDoc IPoolContract.unwrappedUnderlying}
111
+ */
112
+ get unwrappedUnderlying() {
113
+ return this.pool.unwrappedUnderlying;
114
+ }
115
+ /**
116
+ * The market's underlying as the shared read model describes it.
117
+ *
118
+ * For an RWA market this is the token the underlying wraps rather than the
119
+ * wrapper itself, because only that token means anything to a reader. The
120
+ * wrapper converts one-for-one, so amounts denominated in it stay exact.
121
+ */
122
+ get underlyingToken() {
123
+ return this.tokensMeta.mustGetToken(this.unwrappedUnderlying);
124
+ }
125
+ /**
126
+ * {@inheritDoc MarketConfiguratorContract.curator}
127
+ */
128
+ get curator() {
129
+ return this.configurator.curator;
130
+ }
131
+ /**
132
+ * Every `(credit suite, collateral)` pair of this market that qualifies as a
133
+ * leveraged position.
134
+ */
135
+ get strategies() {
136
+ return this.creditManagers.flatMap((suite) => suite.strategyCollaterals.map((collateral) => ({
137
+ suite,
138
+ collateral
139
+ })));
140
+ }
141
+ /**
142
+ * Tokens a position can actually be built on in this market, deduplicated
143
+ * across its credit suites.
144
+ */
145
+ get collateralTokens() {
146
+ const seen = new require_sdk_utils_AddressMap.AddressMap(void 0, "collateralTokens");
147
+ for (const { collateral } of this.strategies) seen.upsert(collateral, this.tokensMeta.mustGetToken(collateral));
148
+ return seen.values();
149
+ }
150
+ /**
151
+ * Whether at least one of {@link collateralTokens} is a real-world-asset
152
+ * token. Read from a hardcoded per-chain list rather than from the chain.
153
+ */
154
+ get rwa() {
155
+ return this.strategies.some(({ collateral }) => require_sdk_chain_chains.isRWAToken(collateral, this.sdk.networkType));
156
+ }
157
+ /**
158
+ * Whether this market's pool is being wound down and should no longer be
159
+ * entered. Read from a hardcoded per-chain list.
160
+ */
161
+ get sunset() {
162
+ return require_sdk_chain_chains.isSunsetPool(this.pool.pool.address, this.sdk.networkType);
163
+ }
164
+ /**
165
+ * Quota configuration of every token the market quotes: how much of it the
166
+ * market accepts in total, and what holding it costs.
167
+ */
168
+ quotaAssets() {
169
+ const oracle = this.priceOracle;
170
+ const { underlying } = this;
171
+ return this.pool.pqk.quotas.entries().map(([token, quota]) => ({
172
+ token: this.tokensMeta.mustGetToken(token),
173
+ quotaRate: quota.rate,
174
+ limit: oracle.toAmount(underlying, quota.limit),
175
+ used: oracle.toAmount(underlying, quota.totalQuoted)
176
+ }));
177
+ }
178
+ /**
179
+ * Prices and feeds of a collateral token and the market's underlying.
180
+ *
181
+ * Pricing goes through the wrapper for an RWA market, since that is what the
182
+ * market's oracle knows.
183
+ *
184
+ * @param collateral - Collateral token to price.
185
+ */
186
+ priceFeedSummary(collateral) {
187
+ return this.priceOracle.priceFeedSummary(this.underlying, collateral);
188
+ }
189
+ /**
190
+ * Every opportunity this market offers: its pool, plus one row per
191
+ * `(credit manager, target collateral)` pair.
192
+ *
193
+ * @param totals - Resolves the summed worth of the credit accounts backing a
194
+ * strategy, which only a credit-account query can establish.
195
+ * @param filter - Optional narrowing. A filter naming a kind skips building
196
+ * the other kind entirely; every built row is then checked in full by
197
+ * {@link matchesOpportunityFilter}, so there is one definition of what each
198
+ * criterion means.
199
+ */
200
+ opportunities(totals, filter) {
201
+ const rows = [];
202
+ if (filter?.kind !== "strategy") rows.push(this.poolOpportunity());
203
+ if (filter?.kind !== "pool") for (const { suite, collateral } of this.strategies) rows.push(suite.strategyOpportunity(collateral, totals(suite.creditManager.address, collateral)));
204
+ return rows.filter((row) => require_model_opportunities.matchesOpportunityFilter(row, filter));
205
+ }
206
+ /**
207
+ * Passive lending into this market's pool, as the shared read model
208
+ * describes it.
209
+ */
210
+ poolOpportunity() {
211
+ const { pool } = this.pool;
212
+ const oracle = this.priceOracle;
213
+ return {
214
+ kind: "pool",
215
+ chainId: this.chainId,
216
+ pool: pool.address,
217
+ title: `${this.underlyingToken.symbol} Pool`,
218
+ curator: this.curator,
219
+ underlyingToken: this.underlyingToken,
220
+ totalSupply: {
221
+ value: pool.totalSupply,
222
+ valueUsd: oracle.safeUsdValue(pool.underlying, pool.totalAssets)
223
+ },
224
+ totalBorrow: oracle.toAmount(pool.underlying, pool.totalBorrowed),
225
+ utilization: pool.utilization,
226
+ collateralTokens: this.collateralTokens,
227
+ paused: pool.isPaused,
228
+ rwa: this.rwa,
229
+ sunset: this.sunset
230
+ };
231
+ }
232
+ /**
233
+ * {@link poolOpportunity} plus the data only its detail screen needs.
234
+ */
235
+ poolOpportunityDetail() {
236
+ return {
237
+ ...this.poolOpportunity(),
238
+ rateCurve: this.pool.rateCurve,
239
+ quotaAssets: this.quotaAssets()
240
+ };
241
+ }
242
+ /**
243
+ * Resolves a strategy of this market by its two halves.
244
+ *
245
+ * @param creditManager - Credit manager the position is opened in.
246
+ * @param collateral - Target collateral of the position.
247
+ * @throws If this market has no such credit manager, or if that manager does
248
+ * not accept the collateral as a strategy.
249
+ */
250
+ mustFindStrategy(creditManager, collateral) {
251
+ const strategy = this.strategies.find((s) => (0, viem.isAddressEqual)(s.suite.creditManager.address, creditManager) && (0, viem.isAddressEqual)(s.collateral, collateral));
252
+ if (!strategy) throw new Error(`${this.labelAddress(collateral)} is not a strategy collateral of credit manager ${this.labelAddress(creditManager)}`);
253
+ return strategy;
254
+ }
255
+ /**
256
+ * Detailed view of one leveraged position of this market.
257
+ *
258
+ * @param creditManager - Credit manager the position is opened in.
259
+ * @param collateral - Target collateral of the position.
260
+ * @param totalSupply - Summed worth of the credit accounts backing it.
261
+ * @throws If this market has no such strategy, see {@link mustFindStrategy}.
262
+ */
263
+ strategyOpportunityDetail(creditManager, collateral, totalSupply) {
264
+ return this.mustFindStrategy(creditManager, collateral).suite.strategyOpportunityDetail(collateral, totalSupply);
265
+ }
266
+ /**
104
267
  * Whether any child contract wrapper has observed events that require a
105
268
  * market resync.
106
269
  */
@@ -1,12 +1,16 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
2
  const require_abi_310_generated = require("../../../abi/310/generated.js");
3
3
  const require_sdk_utils_AddressMap = require("../../utils/AddressMap.js");
4
+ const require_sdk_constants_math = require("../../constants/math.js");
5
+ require("../../constants/index.js");
4
6
  const require_sdk_utils_formatter = require("../../utils/formatter.js");
5
7
  require("../../utils/index.js");
6
8
  const require_sdk_base_BaseContract = require("../../base/BaseContract.js");
7
9
  require("../../base/index.js");
8
10
  const require_sdk_market_adapters_createAdapter = require("../adapters/createAdapter.js");
9
11
  require("../adapters/index.js");
12
+ const require_sdk_market_math = require("../math.js");
13
+ let viem = require("viem");
10
14
  //#region src/sdk/market/credit/CreditManagerV310Contract.ts
11
15
  const abi = require_abi_310_generated.iCreditManagerV310Abi;
12
16
  var CreditManagerV310Contract = class extends require_sdk_base_BaseContract.BaseContract {
@@ -60,6 +64,28 @@ var CreditManagerV310Contract = class extends require_sdk_base_BaseContract.Base
60
64
  get collateralTokens() {
61
65
  return this.liquidationThresholds.keys();
62
66
  }
67
+ /**
68
+ * {@inheritDoc ICreditManagerContract.leverageableCollaterals}
69
+ */
70
+ get leverageableCollaterals() {
71
+ return this.collateralTokens.filter((token) => {
72
+ if ((0, viem.isAddressEqual)(token, this.underlying)) return false;
73
+ const lt = this.liquidationThresholds.get(token);
74
+ return !!lt && lt > 0 && lt < Number(10000n);
75
+ });
76
+ }
77
+ /**
78
+ * {@inheritDoc ICreditManagerContract.maxLeverage}
79
+ */
80
+ maxLeverage(collateral) {
81
+ return require_sdk_market_math.maxLeverage(this.liquidationThresholds.mustGet(collateral));
82
+ }
83
+ /**
84
+ * {@inheritDoc ICreditManagerContract.liquidationPremium}
85
+ */
86
+ get liquidationPremium() {
87
+ return Number(require_sdk_constants_math.PERCENTAGE_FACTOR) - this.liquidationDiscount;
88
+ }
63
89
  processLog(log) {
64
90
  switch (log.eventName) {
65
91
  case "SetCreditConfigurator": this.dirty = true;