@gearbox-protocol/sdk 14.12.0-next.72 → 14.12.0-next.74

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 (67) hide show
  1. package/dist/cjs/dev/AccountOpener.js +2 -5
  2. package/dist/cjs/sdk/accounts/CreditAccountsServiceV310.js +49 -533
  3. package/dist/cjs/sdk/accounts/index.js +0 -4
  4. package/dist/cjs/sdk/accounts/intents/operations/unwrap-rwa-collateral/index.js +1 -1
  5. package/dist/cjs/sdk/accounts/intents/operations/wrap-rwa-collateral/index.js +1 -1
  6. package/dist/cjs/sdk/accounts/intents/testing/sdk-mock.js +2 -2
  7. package/dist/cjs/sdk/accounts/liquidations/LiquidationsService.js +3 -3
  8. package/dist/cjs/sdk/accounts/liquidations/constants.js +0 -2
  9. package/dist/cjs/sdk/accounts/liquidations/index.js +0 -2
  10. package/dist/cjs/sdk/constants/index.js +1 -0
  11. package/dist/cjs/sdk/constants/math.js +5 -0
  12. package/dist/cjs/sdk/index.js +8 -4
  13. package/dist/cjs/sdk/market/MarketRegister.js +10 -0
  14. package/dist/cjs/sdk/market/credit/CreditFacadeV310Contract.js +181 -0
  15. package/dist/cjs/sdk/market/credit/CreditSuite.js +107 -1
  16. package/dist/cjs/sdk/{accounts → market/credit}/dominantCollateral.js +18 -4
  17. package/dist/cjs/sdk/market/credit/index.js +3 -0
  18. package/dist/cjs/sdk/market/index.js +3 -0
  19. package/dist/cjs/sdk/market/math.js +59 -0
  20. package/dist/cjs/sdk/market/oracle/PriceOracleV310Contract.js +2 -9
  21. package/dist/cjs/sdk/opportunities/index.js +4 -0
  22. package/dist/esm/dev/AccountOpener.js +2 -5
  23. package/dist/esm/sdk/accounts/CreditAccountsServiceV310.js +50 -534
  24. package/dist/esm/sdk/accounts/index.js +1 -3
  25. package/dist/esm/sdk/accounts/intents/operations/unwrap-rwa-collateral/index.js +1 -1
  26. package/dist/esm/sdk/accounts/intents/operations/wrap-rwa-collateral/index.js +1 -1
  27. package/dist/esm/sdk/accounts/intents/testing/sdk-mock.js +2 -2
  28. package/dist/esm/sdk/accounts/liquidations/LiquidationsService.js +2 -2
  29. package/dist/esm/sdk/accounts/liquidations/constants.js +1 -2
  30. package/dist/esm/sdk/accounts/liquidations/index.js +1 -2
  31. package/dist/esm/sdk/constants/index.js +2 -2
  32. package/dist/esm/sdk/constants/math.js +5 -1
  33. package/dist/esm/sdk/index.js +4 -5
  34. package/dist/esm/sdk/market/MarketRegister.js +10 -0
  35. package/dist/esm/sdk/market/credit/CreditFacadeV310Contract.js +181 -0
  36. package/dist/esm/sdk/market/credit/CreditSuite.js +108 -2
  37. package/dist/esm/sdk/{accounts → market/credit}/dominantCollateral.js +18 -5
  38. package/dist/esm/sdk/market/credit/index.js +2 -1
  39. package/dist/esm/sdk/market/index.js +2 -1
  40. package/dist/esm/sdk/market/math.js +56 -1
  41. package/dist/esm/sdk/market/oracle/PriceOracleV310Contract.js +3 -10
  42. package/dist/esm/sdk/opportunities/index.js +2 -2
  43. package/dist/types/sdk/OnchainSDK.d.ts +1 -1
  44. package/dist/types/sdk/accounts/CreditAccountsServiceV310.d.ts +11 -78
  45. package/dist/types/sdk/accounts/index.d.ts +2 -4
  46. package/dist/types/sdk/accounts/liquidations/constants.d.ts +1 -2
  47. package/dist/types/sdk/accounts/liquidations/index.d.ts +1 -2
  48. package/dist/types/sdk/accounts/types.d.ts +42 -346
  49. package/dist/types/sdk/constants/index.d.ts +2 -2
  50. package/dist/types/sdk/constants/math.d.ts +5 -1
  51. package/dist/types/sdk/index.d.ts +10 -11
  52. package/dist/types/sdk/market/MarketRegister.d.ts +7 -0
  53. package/dist/types/sdk/market/credit/CreditFacadeV310Contract.d.ts +47 -2
  54. package/dist/types/sdk/market/credit/CreditSuite.d.ts +24 -2
  55. package/dist/types/sdk/{accounts → market/credit}/dominantCollateral.d.ts +13 -6
  56. package/dist/types/sdk/market/credit/index.d.ts +3 -2
  57. package/dist/types/sdk/market/credit/types.d.ts +112 -2
  58. package/dist/types/sdk/market/index.d.ts +3 -2
  59. package/dist/types/sdk/market/math.d.ts +60 -1
  60. package/dist/types/sdk/market/oracle/PriceOracleV310Contract.d.ts +1 -0
  61. package/dist/types/sdk/market/rwa/securitize/SecuritizeRWAFactory.d.ts +1 -1
  62. package/dist/types/sdk/market/rwa/types.d.ts +1 -1
  63. package/dist/types/sdk/opportunities/index.d.ts +2 -2
  64. package/package.json +1 -1
  65. package/dist/cjs/sdk/accounts/constants.js +0 -12
  66. package/dist/esm/sdk/accounts/constants.js +0 -11
  67. package/dist/types/sdk/accounts/constants.d.ts +0 -11
@@ -1,6 +1,4 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
- const require_sdk_accounts_constants = require("./constants.js");
3
- const require_sdk_accounts_dominantCollateral = require("./dominantCollateral.js");
4
2
  const require_sdk_accounts_CreditAccountsServiceV310 = require("./CreditAccountsServiceV310.js");
5
3
  const require_sdk_accounts_intents_operations_claim_delayed_index = require("./intents/operations/claim-delayed/index.js");
6
4
  const require_sdk_accounts_intents_index = require("./intents/index.js");
@@ -26,7 +24,6 @@ exports.CreditAccountOperationsService = require_sdk_accounts_intents_index.Cred
26
24
  exports.CreditAccountsServiceV310 = require_sdk_accounts_CreditAccountsServiceV310.CreditAccountsServiceV310;
27
25
  exports.DELAYED_INTENT_TYPES = require_sdk_accounts_withdrawal_compressor_intent_codec.DELAYED_INTENT_TYPES;
28
26
  exports.DELAYED_INTENT_VERSION = require_sdk_accounts_withdrawal_compressor_intent_codec.DELAYED_INTENT_VERSION;
29
- exports.DUST_THRESHOLD = require_sdk_accounts_constants.DUST_THRESHOLD;
30
27
  exports.InvalidDelayedIntentError = require_sdk_accounts_withdrawal_compressor_errors.InvalidDelayedIntentError;
31
28
  exports.LIQUIDATION_APPROVAL_BUFFER = require_sdk_accounts_liquidations_constants.LIQUIDATION_APPROVAL_BUFFER;
32
29
  exports.LIQUIDATION_COMPRESSOR_V313_ADDRESS = require_sdk_accounts_liquidations_constants.LIQUIDATION_COMPRESSOR_V313_ADDRESS;
@@ -39,7 +36,6 @@ exports.WithdrawalCompressorV313Contract = require_sdk_accounts_withdrawal_compr
39
36
  exports.createRedemptionLogger = require_sdk_accounts_withdrawal_compressor_createRedemptionLogger.createRedemptionLogger;
40
37
  exports.createWithdrawalCompressor = require_sdk_accounts_withdrawal_compressor_createWithdrawalCompressor.createWithdrawalCompressor;
41
38
  exports.decodeDelayedIntent = require_sdk_accounts_withdrawal_compressor_intent_codec.decodeDelayedIntent;
42
- exports.dominantCollateral = require_sdk_accounts_dominantCollateral.dominantCollateral;
43
39
  exports.encodeDelayedIntent = require_sdk_accounts_withdrawal_compressor_intent_codec.encodeDelayedIntent;
44
40
  exports.getWithdrawalCompressorAddress = require_sdk_accounts_withdrawal_compressor_addresses.getWithdrawalCompressorAddress;
45
41
  exports.iCreditAccountAbi = require_sdk_accounts_withdrawal_compressor_AbstractWithdrawalCompressorContract.iCreditAccountAbi;
@@ -3,7 +3,7 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
3
  /** One-to-one swap op (withdraw resume conversion legs). */
4
4
  async function buildUnwrapRwaCollateralOperation(input, option) {
5
5
  if (option.kind === "onchain") {
6
- const calls = await input.sdk.accounts.getRWAUnwrapCalls(input.amountIn, input.creditAccount.creditManager);
6
+ const calls = await input.sdk.accounts.assembleRWAUnwrapCalls(input.amountIn, input.creditAccount.creditManager);
7
7
  if (!calls) throw new Error("unwrapRwaCollateral: no wrap calls found");
8
8
  return {
9
9
  type: "unwrapRwaCollateral",
@@ -3,7 +3,7 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
3
  /** One-to-one wrap op (decrease-leverage resume repay from rwa.asset). */
4
4
  async function buildWrapRwaCollateralOperation(input, option) {
5
5
  if (option.kind === "onchain") {
6
- const calls = await input.sdk.accounts.getRWAWrapCalls(input.amountIn, input.creditAccount.creditManager);
6
+ const calls = await input.sdk.accounts.assembleRWAWrapCalls(input.amountIn, input.creditAccount.creditManager);
7
7
  if (!calls) throw new Error("wrapRwaCollateral: no wrap calls found");
8
8
  return {
9
9
  type: "wrapRwaCollateral",
@@ -164,8 +164,8 @@ function buildMockSdk(args) {
164
164
  prepareUpdateQuotas: vitest.vi.fn(() => [CA_OP_CALLS.changeQuota]),
165
165
  assembleClaimDelayedCalls: vitest.vi.fn(({ claimableNow }) => [...claimableNow.claimCalls]),
166
166
  assembleCloseCreditAccountCalls: vitest.vi.fn(async () => [MOCK_CLOSE_CALL]),
167
- getRWAWrapCalls: vitest.vi.fn(async () => [MOCK_RWA_WRAP_CALL]),
168
- getRWAUnwrapCalls: vitest.vi.fn(async () => [MOCK_RWA_UNWRAP_CALL])
167
+ assembleRWAWrapCalls: vitest.vi.fn(async () => [MOCK_RWA_WRAP_CALL]),
168
+ assembleRWAUnwrapCalls: vitest.vi.fn(async () => [MOCK_RWA_UNWRAP_CALL])
169
169
  }
170
170
  };
171
171
  }
@@ -10,6 +10,7 @@ require("../../utils/index.js");
10
10
  const require_sdk_base_SDKConstruct = require("../../base/SDKConstruct.js");
11
11
  require("../../base/index.js");
12
12
  const require_sdk_market_math = require("../../market/math.js");
13
+ const require_sdk_market_credit_dominantCollateral = require("../../market/credit/dominantCollateral.js");
13
14
  const require_model_liquidations = require("../../../model/liquidations.js");
14
15
  require("../../../model/index.js");
15
16
  const require_sdk_market_rwa_midas_constants = require("../../market/rwa/midas/constants.js");
@@ -18,8 +19,7 @@ require("../../market/rwa/midas/index.js");
18
19
  const require_sdk_market_rwa_securitize_constants = require("../../market/rwa/securitize/constants.js");
19
20
  const require_sdk_market_rwa_securitize_SecuritizeLiquidatorContract = require("../../market/rwa/securitize/SecuritizeLiquidatorContract.js");
20
21
  require("../../market/rwa/securitize/index.js");
21
- require("../constants.js");
22
- const require_sdk_accounts_dominantCollateral = require("../dominantCollateral.js");
22
+ require("../../market/index.js");
23
23
  const require_sdk_accounts_liquidations_constants = require("./constants.js");
24
24
  //#region src/sdk/accounts/liquidations/LiquidationsService.ts
25
25
  /**
@@ -282,7 +282,7 @@ var LiquidationsService = class extends require_sdk_base_SDKConstruct.SDKConstru
282
282
  };
283
283
  }
284
284
  #mainAsset(ca, market, fallback) {
285
- const asset = require_sdk_accounts_dominantCollateral.dominantCollateral(ca, market);
285
+ const asset = require_sdk_market_credit_dominantCollateral.dominantCollateral(ca, market);
286
286
  if (!asset) return fallback;
287
287
  return this.sdk.withdrawalCompressor?.getWithdrawalSourceToken(asset) ?? asset;
288
288
  }
@@ -1,5 +1,4 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
- const require_sdk_accounts_constants = require("../constants.js");
3
2
  //#region src/sdk/accounts/liquidations/constants.ts
4
3
  const LIQUIDATION_COMPRESSOR_V313_ADDRESS = "0xB70C4500a0afF02107eB983a348F22492fB6dC94";
5
4
  /**
@@ -9,6 +8,5 @@ const LIQUIDATION_COMPRESSOR_V313_ADDRESS = "0xB70C4500a0afF02107eB983a348F22492
9
8
  **/
10
9
  const LIQUIDATION_APPROVAL_BUFFER = 50n;
11
10
  //#endregion
12
- exports.DUST_THRESHOLD = require_sdk_accounts_constants.DUST_THRESHOLD;
13
11
  exports.LIQUIDATION_APPROVAL_BUFFER = LIQUIDATION_APPROVAL_BUFFER;
14
12
  exports.LIQUIDATION_COMPRESSOR_V313_ADDRESS = LIQUIDATION_COMPRESSOR_V313_ADDRESS;
@@ -1,10 +1,8 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
- const require_sdk_accounts_constants = require("../constants.js");
3
2
  const require_sdk_accounts_liquidations_constants = require("./constants.js");
4
3
  const require_sdk_accounts_liquidations_LiquidationsService = require("./LiquidationsService.js");
5
4
  const require_sdk_accounts_liquidations_MultichainLiquidationsService = require("./MultichainLiquidationsService.js");
6
5
  require("./types.js");
7
- exports.DUST_THRESHOLD = require_sdk_accounts_constants.DUST_THRESHOLD;
8
6
  exports.LIQUIDATION_APPROVAL_BUFFER = require_sdk_accounts_liquidations_constants.LIQUIDATION_APPROVAL_BUFFER;
9
7
  exports.LIQUIDATION_COMPRESSOR_V313_ADDRESS = require_sdk_accounts_liquidations_constants.LIQUIDATION_COMPRESSOR_V313_ADDRESS;
10
8
  exports.LiquidationsService = require_sdk_accounts_liquidations_LiquidationsService.LiquidationsService;
@@ -44,6 +44,7 @@ exports.AP_ZAPPER_REGISTER = require_sdk_constants_address_provider.AP_ZAPPER_RE
44
44
  exports.AP_ZERO_PRICE_FEED = require_sdk_constants_address_provider.AP_ZERO_PRICE_FEED;
45
45
  exports.BLOCKS_PER_WEEK_BY_NETWORK = require_sdk_constants_networks.BLOCKS_PER_WEEK_BY_NETWORK;
46
46
  exports.BotPermissions = require_sdk_constants_bot_permissions.BotPermissions;
47
+ exports.DUST_THRESHOLD = require_sdk_constants_math.DUST_THRESHOLD;
47
48
  exports.LEVERAGE_DECIMALS = require_sdk_constants_math.LEVERAGE_DECIMALS;
48
49
  exports.MAX_INT = require_sdk_constants_math.MAX_INT;
49
50
  exports.MAX_UINT16 = require_sdk_constants_math.MAX_UINT16;
@@ -17,7 +17,12 @@ const PERCENTAGE_FACTOR = 10000n;
17
17
  const PERCENTAGE_FACTOR_1KK = PERCENTAGE_FACTOR * PERCENTAGE_DECIMALS;
18
18
  const LEVERAGE_DECIMALS = 100n;
19
19
  const SLIPPAGE_DECIMALS = 100n;
20
+ /**
21
+ * Token balances at or below this threshold are treated as dust and ignored.
22
+ **/
23
+ const DUST_THRESHOLD = 10n;
20
24
  //#endregion
25
+ exports.DUST_THRESHOLD = DUST_THRESHOLD;
21
26
  exports.LEVERAGE_DECIMALS = LEVERAGE_DECIMALS;
22
27
  exports.MAX_INT = MAX_INT;
23
28
  exports.MAX_UINT16 = MAX_UINT16;
@@ -50,6 +50,7 @@ const require_sdk_market_credit_CreditFacadeV310BaseContract = require("./market
50
50
  const require_sdk_market_credit_CreditFacadeV310Contract = require("./market/credit/CreditFacadeV310Contract.js");
51
51
  const require_sdk_market_math = require("./market/math.js");
52
52
  const require_sdk_market_credit_CreditManagerV310Contract = require("./market/credit/CreditManagerV310Contract.js");
53
+ const require_sdk_market_credit_dominantCollateral = require("./market/credit/dominantCollateral.js");
53
54
  const require_sdk_market_credit_CreditSuite = require("./market/credit/CreditSuite.js");
54
55
  const require_sdk_utils_viem_simulateMulticall = require("./utils/viem/simulateMulticall.js");
55
56
  const require_sdk_utils_viem_simulateWithPriceUpdates = require("./utils/viem/simulateWithPriceUpdates.js");
@@ -103,8 +104,6 @@ const require_sdk_market_rwa_securitize_SecuritizeRWAFactory = require("./market
103
104
  const require_sdk_market_rwa_RWARegistry = require("./market/rwa/RWARegistry.js");
104
105
  const require_sdk_market_rwa_types = require("./market/rwa/types.js");
105
106
  require("./market/index.js");
106
- const require_sdk_accounts_constants = require("./accounts/constants.js");
107
- const require_sdk_accounts_dominantCollateral = require("./accounts/dominantCollateral.js");
108
107
  const require_sdk_accounts_CreditAccountsServiceV310 = require("./accounts/CreditAccountsServiceV310.js");
109
108
  const require_sdk_accounts_intents_operations_claim_delayed_index = require("./accounts/intents/operations/claim-delayed/index.js");
110
109
  const require_sdk_accounts_intents_index = require("./accounts/intents/index.js");
@@ -213,7 +212,7 @@ exports.CurveStablePriceFeedContract = require_sdk_market_pricefeeds_CurveStable
213
212
  exports.CurveUSDPriceFeedContract = require_sdk_market_pricefeeds_CurveUSDPriceFeed.CurveUSDPriceFeedContract;
214
213
  exports.DELAYED_INTENT_TYPES = require_sdk_accounts_withdrawal_compressor_intent_codec.DELAYED_INTENT_TYPES;
215
214
  exports.DELAYED_INTENT_VERSION = require_sdk_accounts_withdrawal_compressor_intent_codec.DELAYED_INTENT_VERSION;
216
- exports.DUST_THRESHOLD = require_sdk_accounts_constants.DUST_THRESHOLD;
215
+ exports.DUST_THRESHOLD = require_sdk_constants_math.DUST_THRESHOLD;
217
216
  exports.Erc4626PriceFeedContract = require_sdk_market_pricefeeds_Erc4626PriceFeed.Erc4626PriceFeedContract;
218
217
  exports.ExternalPriceFeedContract = require_sdk_market_pricefeeds_ExternalPriceFeed.ExternalPriceFeedContract;
219
218
  exports.GaugeContract = require_sdk_market_pool_GaugeContract.GaugeContract;
@@ -246,6 +245,7 @@ exports.NO_VERSION = require_sdk_constants_address_provider.NO_VERSION;
246
245
  exports.NetworkType = require_sdk_chain_chains.NetworkType;
247
246
  exports.OnchainSDK = require_sdk_OnchainSDK.OnchainSDK;
248
247
  exports.OpportunitiesService = require_sdk_opportunities_OpportunitiesService.OpportunitiesService;
248
+ exports.PARTIAL_LIQUIDATION_BUFFER_BPS = require_sdk_market_math.PARTIAL_LIQUIDATION_BUFFER_BPS;
249
249
  exports.PERCENTAGE_DECIMALS = require_sdk_constants_math.PERCENTAGE_DECIMALS;
250
250
  exports.PERCENTAGE_FACTOR = require_sdk_constants_math.PERCENTAGE_FACTOR;
251
251
  exports.PERCENTAGE_FACTOR_1KK = require_sdk_constants_math.PERCENTAGE_FACTOR_1KK;
@@ -333,7 +333,7 @@ exports.createZapper = require_sdk_market_zapper_createZapper.createZapper;
333
333
  exports.creditFacadeV310Abi = require_sdk_market_credit_CreditFacadeV310BaseContract.creditFacadeV310Abi;
334
334
  exports.decodeDelayedIntent = require_sdk_accounts_withdrawal_compressor_intent_codec.decodeDelayedIntent;
335
335
  exports.detectNetwork = require_sdk_chain_detectNetwork.detectNetwork;
336
- exports.dominantCollateral = require_sdk_accounts_dominantCollateral.dominantCollateral;
336
+ exports.dominantCollateral = require_sdk_market_credit_dominantCollateral.dominantCollateral;
337
337
  exports.encodeDelayedIntent = require_sdk_accounts_withdrawal_compressor_intent_codec.encodeDelayedIntent;
338
338
  exports.estimateRawTxGas = require_sdk_utils_viem_sendRawTx.estimateRawTxGas;
339
339
  exports.etherscanApiUrl = require_sdk_utils_etherscan.etherscanApiUrl;
@@ -383,8 +383,12 @@ exports.isVersionRange = require_sdk_constants_versions.isVersionRange;
383
383
  exports.json_parse = require_sdk_utils_json.json_parse;
384
384
  exports.json_stringify = require_sdk_utils_json.json_stringify;
385
385
  exports.maxLeverage = require_sdk_market_math.maxLeverage;
386
+ exports.minSeizedAmount = require_sdk_market_math.minSeizedAmount;
387
+ exports.mustGetDominantCollateral = require_sdk_market_credit_dominantCollateral.mustGetDominantCollateral;
386
388
  exports.numberWithCommas = require_sdk_utils_formatter.numberWithCommas;
387
389
  exports.onchainSDKOptionsSchema = require_sdk_options.onchainSDKOptionsSchema;
390
+ exports.optimalHFForPartialLiquidation = require_sdk_market_math.optimalHFForPartialLiquidation;
391
+ exports.optimalRepaidAmount = require_sdk_market_math.optimalRepaidAmount;
388
392
  exports.percentFmt = require_sdk_utils_formatter.percentFmt;
389
393
  exports.positionLeverage = require_sdk_market_math.positionLeverage;
390
394
  exports.primaryInstantOutput = require_sdk_accounts_intents_operations_claim_delayed_index.primaryInstantOutput;
@@ -12,6 +12,7 @@ require("../utils/viem/index.js");
12
12
  const require_sdk_market_MarketConfiguratorContract = require("./MarketConfiguratorContract.js");
13
13
  const require_sdk_market_MarketSuite = require("./MarketSuite.js");
14
14
  const require_sdk_market_ZapperRegister = require("./ZapperRegister.js");
15
+ let viem = require("viem");
15
16
  //#region src/sdk/market/MarketRegister.ts
16
17
  /**
17
18
  * Central registry of all Gearbox markets on the current chain.
@@ -180,6 +181,15 @@ var MarketRegister = class extends require_sdk_market_ZapperRegister.ZapperRegis
180
181
  throw new Error(`cannot find credit manager ${creditManager}`);
181
182
  }
182
183
  /**
184
+ * Finds a credit facade by its on-chain address.
185
+ * @param creditFacade - Credit facade contract address.
186
+ * @throws If no loaded market contains the given credit facade.
187
+ **/
188
+ findCreditFacade(creditFacade) {
189
+ for (const cm of this.creditManagers) if ((0, viem.isAddressEqual)(cm.creditFacade.address, creditFacade)) return cm.creditFacade;
190
+ throw new Error(`cannot find credit facade ${creditFacade}`);
191
+ }
192
+ /**
183
193
  * Finds the market that contains the given credit manager.
184
194
  * @param creditManager - Credit manager contract address.
185
195
  * @throws If no loaded market contains the given credit manager.
@@ -1,9 +1,12 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
+ const require_sdk_utils_AssetsMap = require("../../utils/AssetsMap.js");
2
3
  const require_sdk_constants_addresses = require("../../constants/addresses.js");
4
+ const require_sdk_constants_math = require("../../constants/math.js");
3
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_market_credit_CreditFacadeV310BaseContract = require("./CreditFacadeV310BaseContract.js");
9
+ let viem = require("viem");
7
10
  //#region src/sdk/market/credit/CreditFacadeV310Contract.ts
8
11
  var CreditFacadeV310Contract = class extends require_sdk_market_credit_CreditFacadeV310BaseContract.CreditFacadeV310BaseContract {
9
12
  underlying;
@@ -108,6 +111,184 @@ var CreditFacadeV310Contract = class extends require_sdk_market_credit_CreditFac
108
111
  ]
109
112
  });
110
113
  }
114
+ /**
115
+ * {@inheritDoc ICreditFacadeContract.prepareIncreaseDebt}
116
+ */
117
+ prepareIncreaseDebt(amount) {
118
+ return {
119
+ target: this.address,
120
+ callData: (0, viem.encodeFunctionData)({
121
+ abi: this.abi,
122
+ functionName: "increaseDebt",
123
+ args: [amount]
124
+ })
125
+ };
126
+ }
127
+ /**
128
+ * {@inheritDoc ICreditFacadeContract.prepareChangeDebt}
129
+ */
130
+ prepareChangeDebt(change, isDecrease) {
131
+ return {
132
+ target: this.address,
133
+ callData: (0, viem.encodeFunctionData)({
134
+ abi: this.abi,
135
+ functionName: isDecrease ? "decreaseDebt" : "increaseDebt",
136
+ args: [change]
137
+ })
138
+ };
139
+ }
140
+ /**
141
+ * {@inheritDoc ICreditFacadeContract.prepareDecreaseDebtFull}
142
+ */
143
+ prepareDecreaseDebtFull() {
144
+ return {
145
+ target: this.address,
146
+ callData: (0, viem.encodeFunctionData)({
147
+ abi: this.abi,
148
+ functionName: "decreaseDebt",
149
+ args: [require_sdk_constants_math.MAX_UINT256]
150
+ })
151
+ };
152
+ }
153
+ /**
154
+ * {@inheritDoc ICreditFacadeContract.prepareWithdrawCollateral}
155
+ */
156
+ prepareWithdrawCollateral(token, amount, to) {
157
+ return {
158
+ target: this.address,
159
+ callData: (0, viem.encodeFunctionData)({
160
+ abi: this.abi,
161
+ functionName: "withdrawCollateral",
162
+ args: [
163
+ token,
164
+ amount,
165
+ to
166
+ ]
167
+ })
168
+ };
169
+ }
170
+ /**
171
+ * {@inheritDoc ICreditFacadeContract.prepareAddCollateral}
172
+ */
173
+ prepareAddCollateral(assets, permits) {
174
+ return assets.map(({ token, balance }) => {
175
+ const p = permits[token];
176
+ if (p) return {
177
+ target: this.address,
178
+ callData: (0, viem.encodeFunctionData)({
179
+ abi: this.abi,
180
+ functionName: "addCollateralWithPermit",
181
+ args: [
182
+ token,
183
+ balance,
184
+ p.deadline,
185
+ p.v,
186
+ p.r,
187
+ p.s
188
+ ]
189
+ })
190
+ };
191
+ return {
192
+ target: this.address,
193
+ callData: (0, viem.encodeFunctionData)({
194
+ abi: this.abi,
195
+ functionName: "addCollateral",
196
+ args: [token, balance]
197
+ })
198
+ };
199
+ });
200
+ }
201
+ /**
202
+ * {@inheritDoc ICreditFacadeContract.prepareUpdateQuotas}
203
+ */
204
+ prepareUpdateQuotas({ averageQuota, minQuota }) {
205
+ const minRecord = new require_sdk_utils_AssetsMap.AssetsMap(minQuota);
206
+ return averageQuota.map((q) => {
207
+ const minBalance = minRecord.get(q.token);
208
+ const min = minBalance && minBalance > 0n ? minBalance : 0n;
209
+ return {
210
+ target: this.address,
211
+ callData: (0, viem.encodeFunctionData)({
212
+ abi: this.abi,
213
+ functionName: "updateQuota",
214
+ args: [
215
+ q.token,
216
+ q.balance,
217
+ min
218
+ ]
219
+ })
220
+ };
221
+ });
222
+ }
223
+ /**
224
+ * {@inheritDoc ICreditFacadeContract.prepareDisableQuotas}
225
+ */
226
+ prepareDisableQuotas(tokens) {
227
+ return tokens.filter((t) => t.quota > 0n).map((t) => ({
228
+ target: this.address,
229
+ callData: (0, viem.encodeFunctionData)({
230
+ abi: this.abi,
231
+ functionName: "updateQuota",
232
+ args: [
233
+ t.token,
234
+ require_sdk_constants_math.MIN_INT96,
235
+ 0n
236
+ ]
237
+ })
238
+ }));
239
+ }
240
+ /**
241
+ * {@inheritDoc ICreditFacadeContract.prepareSetBotPermissions}
242
+ */
243
+ prepareSetBotPermissions(bot, permissions) {
244
+ return {
245
+ target: this.address,
246
+ callData: (0, viem.encodeFunctionData)({
247
+ abi: this.abi,
248
+ functionName: "setBotPermissions",
249
+ args: [bot, permissions]
250
+ })
251
+ };
252
+ }
253
+ /**
254
+ * {@inheritDoc ICreditFacadeContract.prepareOnDemandPriceUpdates}
255
+ */
256
+ prepareOnDemandPriceUpdates(updates) {
257
+ return {
258
+ target: this.address,
259
+ callData: (0, viem.encodeFunctionData)({
260
+ abi: this.abi,
261
+ functionName: "onDemandPriceUpdates",
262
+ args: [updates]
263
+ })
264
+ };
265
+ }
266
+ /**
267
+ * {@inheritDoc ICreditFacadeContract.prepareStoreExpectedBalances}
268
+ */
269
+ prepareStoreExpectedBalances(deltas) {
270
+ return {
271
+ target: this.address,
272
+ callData: (0, viem.encodeFunctionData)({
273
+ abi: this.abi,
274
+ functionName: "storeExpectedBalances",
275
+ args: [deltas]
276
+ })
277
+ };
278
+ }
279
+ /**
280
+ * {@inheritDoc ICreditFacadeContract.prepareCompareBalances}
281
+ */
282
+ prepareCompareBalances() {
283
+ return {
284
+ target: this.address,
285
+ callData: (0, viem.encodeFunctionData)({
286
+ abi: this.abi,
287
+ functionName: "compareBalances",
288
+ args: []
289
+ })
290
+ };
291
+ }
111
292
  };
112
293
  //#endregion
113
294
  exports.CreditFacadeV310Contract = CreditFacadeV310Contract;
@@ -1,14 +1,17 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
+ const require_sdk_utils_AddressMap = require("../../utils/AddressMap.js");
2
3
  const require_sdk_utils_bigint_math = require("../../utils/bigint-math.js");
3
4
  const require_sdk_chain_chains = require("../../chain/chains.js");
4
- require("../../constants/math.js");
5
+ const require_sdk_constants_math = require("../../constants/math.js");
5
6
  require("../../constants/index.js");
7
+ require("../../utils/index.js");
6
8
  const require_sdk_base_SDKConstruct = require("../../base/SDKConstruct.js");
7
9
  require("../../base/index.js");
8
10
  const require_sdk_market_math = require("../math.js");
9
11
  const require_sdk_market_credit_createCreditConfigurator = require("./createCreditConfigurator.js");
10
12
  const require_sdk_market_credit_createCreditFacade = require("./createCreditFacade.js");
11
13
  const require_sdk_market_credit_createCreditManager = require("./createCreditManager.js");
14
+ const require_sdk_market_credit_dominantCollateral = require("./dominantCollateral.js");
12
15
  //#region src/sdk/market/credit/CreditSuite.ts
13
16
  /**
14
17
  * SDK aggregate for one credit-manager branch inside a market.
@@ -116,6 +119,20 @@ var CreditSuite = class extends require_sdk_base_SDKConstruct.SDKConstruct {
116
119
  return expirationDate > 0 ? expirationDate : null;
117
120
  }
118
121
  /**
122
+ * Liquidation fee pair in effect right now, resolving {@link isExpired} once
123
+ * for both.
124
+ */
125
+ liquidationFees() {
126
+ const cm = this.creditManager;
127
+ return this.isExpired ? {
128
+ feeLiquidation: cm.feeLiquidationExpired,
129
+ liquidationDiscount: cm.liquidationDiscountExpired
130
+ } : {
131
+ feeLiquidation: cm.feeLiquidation,
132
+ liquidationDiscount: cm.liquidationDiscount
133
+ };
134
+ }
135
+ /**
119
136
  * Whether this suite can be used right now. A paused pool blocks borrowing,
120
137
  * so the suite is unusable even when its own facade is live.
121
138
  */
@@ -200,6 +217,95 @@ var CreditSuite = class extends require_sdk_base_SDKConstruct.SDKConstruct {
200
217
  };
201
218
  }
202
219
  /**
220
+ * Everything a partial liquidation of credit account needs, with any parameter the
221
+ * caller pinned down taken as given and the rest derived from current state.
222
+ *
223
+ * @param ca - Credit account to partially liquidate.
224
+ * @param overrides - Parameters to use instead of the derived defaults.
225
+ * @throws If a derived `tokenOut` cannot be picked, or if the seized token is
226
+ * not a collateral token of this credit manager.
227
+ */
228
+ partialLiquidationParams(ca, overrides = {}) {
229
+ const tokenOut = overrides.tokenOut ?? this.#bestTokenOut(ca);
230
+ const optimalHF = overrides.optimalHF ?? this.optimalHFForPartialLiquidation(ca);
231
+ const repaidAmount = overrides.repaidAmount ?? this.#optimalRepaidAmount(ca, tokenOut, optimalHF);
232
+ return {
233
+ tokenOut,
234
+ optimalHF,
235
+ repaidAmount,
236
+ minSeizedAmount: overrides.minSeizedAmount ?? this.#minSeizedAmount(tokenOut, repaidAmount)
237
+ };
238
+ }
239
+ /**
240
+ * Health factor a partial liquidation of `ca` should target, in basis points.
241
+ *
242
+ * @param ca - Credit account to partially liquidate.
243
+ */
244
+ optimalHFForPartialLiquidation(ca) {
245
+ return require_sdk_market_math.optimalHFForPartialLiquidation(this.#borrowRate(ca));
246
+ }
247
+ /**
248
+ * Collateral token a partial liquidation seizes by default.
249
+ *
250
+ * Ported from solidity:
251
+ * https://github.com/Gearbox-protocol/router-v3/blob/main/contracts/liquidation/AbstractLiquidator.sol#L270
252
+ */
253
+ #bestTokenOut(ca) {
254
+ return require_sdk_market_credit_dominantCollateral.mustGetDominantCollateral(ca, this.market);
255
+ }
256
+ /**
257
+ * Minimum amount of `token` that must be seized when repaying `repaidAmount`
258
+ * of underlying.
259
+ */
260
+ #minSeizedAmount(token, repaidAmount) {
261
+ const { market } = this;
262
+ const tokenAmount = market.priceOracle.convert(market.underlying, token, repaidAmount);
263
+ return require_sdk_market_math.minSeizedAmount(tokenAmount, this.liquidationFees().liquidationDiscount);
264
+ }
265
+ /**
266
+ * Amount of underlying to repay to bring `ca`'s health factor close to
267
+ * `optimalHF` by seizing `token`.
268
+ *
269
+ * @throws If `token` is not a collateral token of this credit manager.
270
+ */
271
+ #optimalRepaidAmount(ca, token, optimalHF) {
272
+ const { creditManager: cm, market } = this;
273
+ const { feeLiquidation, liquidationDiscount } = this.liquidationFees();
274
+ const ltTokenOut = cm.liquidationThresholds.get(token);
275
+ if (ltTokenOut === void 0) throw new Error(`token ${this.labelAddress(token)} is not a collateral token in credit manager ${this.labelAddress(cm.address)}`);
276
+ return require_sdk_market_math.optimalRepaidAmount({
277
+ totalDebt: ca.debt + ca.accruedInterest + ca.accruedFees,
278
+ twvUnderlying: market.priceOracle.convertFromUSD(market.underlying, ca.twvUSD),
279
+ minDebt: this.creditFacade.minDebt,
280
+ optimalHF,
281
+ discount: BigInt(liquidationDiscount) - BigInt(feeLiquidation),
282
+ ltTokenOut: BigInt(ltTokenOut)
283
+ });
284
+ }
285
+ /**
286
+ * Blended annual cost of credit account's debt, in basis points: base interest weighted
287
+ * by the account's share of its own total debt, plus the quota rates of the
288
+ * collaterals it actually holds, both marked up by the interest fee.
289
+ */
290
+ #borrowRate(ca) {
291
+ const { creditManager } = this;
292
+ const { pool } = this.market;
293
+ const { feeInterest } = creditManager;
294
+ const { baseInterestRate } = pool.pool;
295
+ const baseRateWithFee = baseInterestRate * (BigInt(feeInterest) + require_sdk_constants_math.PERCENTAGE_FACTOR);
296
+ const totalDebt = ca.debt + ca.accruedInterest + ca.accruedFees;
297
+ const r = ca.debt * baseRateWithFee / (totalDebt * require_sdk_constants_math.RAY);
298
+ const caTokens = new require_sdk_utils_AddressMap.AddressMap(ca.tokens.map((t) => [t.token, t]));
299
+ let qr = 0n;
300
+ for (const t of creditManager.collateralTokens) {
301
+ const b = caTokens.get(t);
302
+ if (b) qr += b.quota * BigInt(pool.pqk.quotas.get(t)?.rate ?? 0);
303
+ }
304
+ qr = qr * (BigInt(feeInterest) + require_sdk_constants_math.PERCENTAGE_FACTOR) / require_sdk_constants_math.PERCENTAGE_FACTOR;
305
+ qr /= totalDebt;
306
+ return r + qr;
307
+ }
308
+ /**
203
309
  * Whether the facade, manager, or configurator has observed logs that require
204
310
  * a credit-suite resync.
205
311
  */
@@ -1,8 +1,9 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
- const require_sdk_utils_hex = require("../utils/hex.js");
3
- require("../utils/index.js");
4
- require("./constants.js");
5
- //#region src/sdk/accounts/dominantCollateral.ts
2
+ require("../../constants/math.js");
3
+ require("../../constants/index.js");
4
+ const require_sdk_utils_hex = require("../../utils/hex.js");
5
+ require("../../utils/index.js");
6
+ //#region src/sdk/market/credit/dominantCollateral.ts
6
7
  /**
7
8
  * The account's dominant collateral: the most valuable enabled non-underlying
8
9
  * token it holds above dust, by USD value.
@@ -29,5 +30,18 @@ function dominantCollateral(account, market) {
29
30
  }
30
31
  return dominant;
31
32
  }
33
+ /**
34
+ * {@link dominantCollateral}, for callers that cannot proceed without one, such
35
+ * as picking the collateral a partial liquidation seizes.
36
+ *
37
+ * @throws If the account holds no enabled non-underlying collateral the oracle
38
+ * can price.
39
+ **/
40
+ function mustGetDominantCollateral(account, market) {
41
+ const collateral = dominantCollateral(account, market);
42
+ if (!collateral) throw new Error(`cannot determine tokenOut for partial liquidation of ${market.sdk.labelAddress(account.creditAccount)}: no enabled non-underlying collateral with value`);
43
+ return collateral;
44
+ }
32
45
  //#endregion
33
46
  exports.dominantCollateral = dominantCollateral;
47
+ exports.mustGetDominantCollateral = mustGetDominantCollateral;
@@ -3,6 +3,7 @@ const require_sdk_market_credit_CreditConfiguratorV310Contract = require("./Cred
3
3
  const require_sdk_market_credit_CreditFacadeV310BaseContract = require("./CreditFacadeV310BaseContract.js");
4
4
  const require_sdk_market_credit_CreditFacadeV310Contract = require("./CreditFacadeV310Contract.js");
5
5
  const require_sdk_market_credit_CreditManagerV310Contract = require("./CreditManagerV310Contract.js");
6
+ const require_sdk_market_credit_dominantCollateral = require("./dominantCollateral.js");
6
7
  const require_sdk_market_credit_CreditSuite = require("./CreditSuite.js");
7
8
  require("./types.js");
8
9
  exports.CreditConfiguratorV310Contract = require_sdk_market_credit_CreditConfiguratorV310Contract.CreditConfiguratorV310Contract;
@@ -11,3 +12,5 @@ exports.CreditFacadeV310Contract = require_sdk_market_credit_CreditFacadeV310Con
11
12
  exports.CreditManagerV310Contract = require_sdk_market_credit_CreditManagerV310Contract.CreditManagerV310Contract;
12
13
  exports.CreditSuite = require_sdk_market_credit_CreditSuite.CreditSuite;
13
14
  exports.creditFacadeV310Abi = require_sdk_market_credit_CreditFacadeV310BaseContract.creditFacadeV310Abi;
15
+ exports.dominantCollateral = require_sdk_market_credit_dominantCollateral.dominantCollateral;
16
+ exports.mustGetDominantCollateral = require_sdk_market_credit_dominantCollateral.mustGetDominantCollateral;
@@ -6,6 +6,7 @@ const require_sdk_market_credit_CreditConfiguratorV310Contract = require("./cred
6
6
  const require_sdk_market_credit_CreditFacadeV310BaseContract = require("./credit/CreditFacadeV310BaseContract.js");
7
7
  const require_sdk_market_credit_CreditFacadeV310Contract = require("./credit/CreditFacadeV310Contract.js");
8
8
  const require_sdk_market_credit_CreditManagerV310Contract = require("./credit/CreditManagerV310Contract.js");
9
+ const require_sdk_market_credit_dominantCollateral = require("./credit/dominantCollateral.js");
9
10
  const require_sdk_market_credit_CreditSuite = require("./credit/CreditSuite.js");
10
11
  require("./credit/index.js");
11
12
  const require_sdk_market_pricefeeds_isUpdatablePriceFeed = require("./pricefeeds/isUpdatablePriceFeed.js");
@@ -112,9 +113,11 @@ exports.createAdapter = require_sdk_market_adapters_createAdapter.createAdapter;
112
113
  exports.createPriceOracle = require_sdk_market_oracle_createPriceOracle.createPriceOracle;
113
114
  exports.createZapper = require_sdk_market_zapper_createZapper.createZapper;
114
115
  exports.creditFacadeV310Abi = require_sdk_market_credit_CreditFacadeV310BaseContract.creditFacadeV310Abi;
116
+ exports.dominantCollateral = require_sdk_market_credit_dominantCollateral.dominantCollateral;
115
117
  exports.fetchPythPayloads = require_sdk_market_pricefeeds_updates_fetchPythPayloads.fetchPythPayloads;
116
118
  exports.fetchRedstonePayloads = require_sdk_market_pricefeeds_updates_fetchRedstonePayloads.fetchRedstonePayloads;
117
119
  exports.getRawPriceUpdates = require_sdk_market_pricefeeds_getRawPriceUpdates.getRawPriceUpdates;
118
120
  exports.isLPPriceFeed = require_sdk_market_pricefeeds_AbstractLPPriceFeed.isLPPriceFeed;
119
121
  exports.isRWAFactory = require_sdk_market_rwa_types.isRWAFactory;
120
122
  exports.isUpdatablePriceFeed = require_sdk_market_pricefeeds_isUpdatablePriceFeed.isUpdatablePriceFeed;
123
+ exports.mustGetDominantCollateral = require_sdk_market_credit_dominantCollateral.mustGetDominantCollateral;