@gearbox-protocol/sdk 14.12.0-next.73 → 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,5 +1,3 @@
1
- import { DUST_THRESHOLD } from "./constants.js";
2
- import { dominantCollateral } from "./dominantCollateral.js";
3
1
  import { CreditAccountsServiceV310 } from "./CreditAccountsServiceV310.js";
4
2
  import { primaryInstantOutput } from "./intents/operations/claim-delayed/index.js";
5
3
  import { CreditAccountOperationsService } from "./intents/index.js";
@@ -20,4 +18,4 @@ import { toWithdrawalStatus } from "./withdrawal-compressor/types.js";
20
18
  import { WithdrawalCompressorV313Contract } from "./withdrawal-compressor/WithdrawalCompressorV313Contract.js";
21
19
  import { createWithdrawalCompressor } from "./withdrawal-compressor/createWithdrawalCompressor.js";
22
20
  import "./withdrawal-compressor/index.js";
23
- export { AbstractWithdrawalCompressorContract, CreditAccountOperationsService, CreditAccountsServiceV310, DELAYED_INTENT_TYPES, DELAYED_INTENT_VERSION, DUST_THRESHOLD, InvalidDelayedIntentError, LIQUIDATION_APPROVAL_BUFFER, LIQUIDATION_COMPRESSOR_V313_ADDRESS, LiquidationsService, MultichainLiquidationsService, RedemptionLoggerV310Contract, WithdrawalCompressorV310Contract, WithdrawalCompressorV311Contract, WithdrawalCompressorV313Contract, createRedemptionLogger, createWithdrawalCompressor, decodeDelayedIntent, dominantCollateral, encodeDelayedIntent, getWithdrawalCompressorAddress, iCreditAccountAbi, primaryInstantOutput, toClaimableWithdrawal, toPendingWithdrawal, toRequestableWithdrawal, toWithdrawalStatus };
21
+ export { AbstractWithdrawalCompressorContract, CreditAccountOperationsService, CreditAccountsServiceV310, DELAYED_INTENT_TYPES, DELAYED_INTENT_VERSION, InvalidDelayedIntentError, LIQUIDATION_APPROVAL_BUFFER, LIQUIDATION_COMPRESSOR_V313_ADDRESS, LiquidationsService, MultichainLiquidationsService, RedemptionLoggerV310Contract, WithdrawalCompressorV310Contract, WithdrawalCompressorV311Contract, WithdrawalCompressorV313Contract, createRedemptionLogger, createWithdrawalCompressor, decodeDelayedIntent, encodeDelayedIntent, getWithdrawalCompressorAddress, iCreditAccountAbi, primaryInstantOutput, toClaimableWithdrawal, toPendingWithdrawal, toRequestableWithdrawal, toWithdrawalStatus };
@@ -2,7 +2,7 @@
2
2
  /** One-to-one swap op (withdraw resume conversion legs). */
3
3
  async function buildUnwrapRwaCollateralOperation(input, option) {
4
4
  if (option.kind === "onchain") {
5
- const calls = await input.sdk.accounts.getRWAUnwrapCalls(input.amountIn, input.creditAccount.creditManager);
5
+ const calls = await input.sdk.accounts.assembleRWAUnwrapCalls(input.amountIn, input.creditAccount.creditManager);
6
6
  if (!calls) throw new Error("unwrapRwaCollateral: no wrap calls found");
7
7
  return {
8
8
  type: "unwrapRwaCollateral",
@@ -2,7 +2,7 @@
2
2
  /** One-to-one wrap op (decrease-leverage resume repay from rwa.asset). */
3
3
  async function buildWrapRwaCollateralOperation(input, option) {
4
4
  if (option.kind === "onchain") {
5
- const calls = await input.sdk.accounts.getRWAWrapCalls(input.amountIn, input.creditAccount.creditManager);
5
+ const calls = await input.sdk.accounts.assembleRWAWrapCalls(input.amountIn, input.creditAccount.creditManager);
6
6
  if (!calls) throw new Error("wrapRwaCollateral: no wrap calls found");
7
7
  return {
8
8
  type: "wrapRwaCollateral",
@@ -163,8 +163,8 @@ function buildMockSdk(args) {
163
163
  prepareUpdateQuotas: vi.fn(() => [CA_OP_CALLS.changeQuota]),
164
164
  assembleClaimDelayedCalls: vi.fn(({ claimableNow }) => [...claimableNow.claimCalls]),
165
165
  assembleCloseCreditAccountCalls: vi.fn(async () => [MOCK_CLOSE_CALL]),
166
- getRWAWrapCalls: vi.fn(async () => [MOCK_RWA_WRAP_CALL]),
167
- getRWAUnwrapCalls: vi.fn(async () => [MOCK_RWA_UNWRAP_CALL])
166
+ assembleRWAWrapCalls: vi.fn(async () => [MOCK_RWA_WRAP_CALL]),
167
+ assembleRWAUnwrapCalls: vi.fn(async () => [MOCK_RWA_UNWRAP_CALL])
168
168
  }
169
169
  };
170
170
  }
@@ -9,6 +9,7 @@ import "../../utils/index.js";
9
9
  import { SDKConstruct } from "../../base/SDKConstruct.js";
10
10
  import "../../base/index.js";
11
11
  import { usdToNumber } from "../../market/math.js";
12
+ import { dominantCollateral } from "../../market/credit/dominantCollateral.js";
12
13
  import { matchesLiquidatableAccountFilter } from "../../../model/liquidations.js";
13
14
  import "../../../model/index.js";
14
15
  import { RWA_LIQUIDATOR_MIDAS } from "../../market/rwa/midas/constants.js";
@@ -17,8 +18,7 @@ import "../../market/rwa/midas/index.js";
17
18
  import { RWA_LIQUIDATOR_SECURITIZE } from "../../market/rwa/securitize/constants.js";
18
19
  import { SecuritizeLiquidatorContract } from "../../market/rwa/securitize/SecuritizeLiquidatorContract.js";
19
20
  import "../../market/rwa/securitize/index.js";
20
- import "../constants.js";
21
- import { dominantCollateral } from "../dominantCollateral.js";
21
+ import "../../market/index.js";
22
22
  import { LIQUIDATION_APPROVAL_BUFFER, LIQUIDATION_COMPRESSOR_V313_ADDRESS } from "./constants.js";
23
23
  //#region src/sdk/accounts/liquidations/LiquidationsService.ts
24
24
  /**
@@ -1,4 +1,3 @@
1
- import { DUST_THRESHOLD } from "../constants.js";
2
1
  //#region src/sdk/accounts/liquidations/constants.ts
3
2
  const LIQUIDATION_COMPRESSOR_V313_ADDRESS = "0xB70C4500a0afF02107eB983a348F22492fB6dC94";
4
3
  /**
@@ -8,4 +7,4 @@ const LIQUIDATION_COMPRESSOR_V313_ADDRESS = "0xB70C4500a0afF02107eB983a348F22492
8
7
  **/
9
8
  const LIQUIDATION_APPROVAL_BUFFER = 50n;
10
9
  //#endregion
11
- export { DUST_THRESHOLD, LIQUIDATION_APPROVAL_BUFFER, LIQUIDATION_COMPRESSOR_V313_ADDRESS };
10
+ export { LIQUIDATION_APPROVAL_BUFFER, LIQUIDATION_COMPRESSOR_V313_ADDRESS };
@@ -1,6 +1,5 @@
1
- import { DUST_THRESHOLD } from "../constants.js";
2
1
  import { LIQUIDATION_APPROVAL_BUFFER, LIQUIDATION_COMPRESSOR_V313_ADDRESS } from "./constants.js";
3
2
  import { LiquidationsService } from "./LiquidationsService.js";
4
3
  import { MultichainLiquidationsService } from "./MultichainLiquidationsService.js";
5
4
  import "./types.js";
6
- export { DUST_THRESHOLD, LIQUIDATION_APPROVAL_BUFFER, LIQUIDATION_COMPRESSOR_V313_ADDRESS, LiquidationsService, MultichainLiquidationsService };
5
+ export { LIQUIDATION_APPROVAL_BUFFER, LIQUIDATION_COMPRESSOR_V313_ADDRESS, LiquidationsService, MultichainLiquidationsService };
@@ -1,8 +1,8 @@
1
1
  import { ADDRESS_PROVIDER_V310, AP_ACCOUNT_FACTORY, AP_ACL, AP_BOT_LIST, AP_BYTECODE_REPOSITORY, AP_CONTRACTS_REGISTER, AP_CONTROLLER_TIMELOCK, AP_CREDIT_ACCOUNT_COMPRESSOR, AP_CREDIT_SUITE_COMPRESSOR, AP_DATA_COMPRESSOR, AP_DELEVERAGE_BOT_HV, AP_DELEVERAGE_BOT_LV, AP_DELEVERAGE_BOT_PEGGED, AP_GAUGE_COMPRESSOR, AP_GEAR_STAKING, AP_GEAR_TOKEN, AP_INFLATION_ATTACK_BLOCKER, AP_INSOLVENCY_CHECKER, AP_MARKET_COMPRESSOR, AP_MARKET_CONFIGURATOR, AP_PARTIAL_LIQUIDATION_BOT, AP_PERIPHERY_COMPRESSOR, AP_PRICE_FEED_COMPRESSOR, AP_PRICE_FEED_STORE, AP_PRICE_ORACLE, AP_REDEMPTION_LOGGER, AP_REWARDS_COMPRESSOR, AP_ROUTER, AP_RWA_COMPRESSOR, AP_TOKEN_COMPRESSOR, AP_TREASURY, AP_WETH_GATEWAY, AP_WETH_TOKEN, AP_ZAPPER_REGISTER, AP_ZERO_PRICE_FEED, NO_VERSION } from "./address-provider.js";
2
2
  import { ADDRESS_0X0, MULTICALL_ADDRESS, NATIVE_ADDRESS, NOT_DEPLOYED } from "./addresses.js";
3
3
  import { BotPermissions, botPermissionsToString } from "./bot-permissions.js";
4
- import { LEVERAGE_DECIMALS, MAX_INT, MAX_UINT16, MAX_UINT256, MIN_INT96, PERCENTAGE_DECIMALS, PERCENTAGE_FACTOR, PERCENTAGE_FACTOR_1KK, PRICE_DECIMALS, PRICE_DECIMALS_POW, RAY, RAY_DECIMALS_POW, SECONDS_PER_YEAR, SLIPPAGE_DECIMALS, WAD, WAD_DECIMALS_POW, halfRAY } from "./math.js";
4
+ import { DUST_THRESHOLD, LEVERAGE_DECIMALS, MAX_INT, MAX_UINT16, MAX_UINT256, MIN_INT96, PERCENTAGE_DECIMALS, PERCENTAGE_FACTOR, PERCENTAGE_FACTOR_1KK, PRICE_DECIMALS, PRICE_DECIMALS_POW, RAY, RAY_DECIMALS_POW, SECONDS_PER_YEAR, SLIPPAGE_DECIMALS, WAD, WAD_DECIMALS_POW, halfRAY } from "./math.js";
5
5
  import { BLOCKS_PER_WEEK_BY_NETWORK, RAMP_DURATION_BY_NETWORK } from "./networks.js";
6
6
  import { PERIPHERY_CONTRACTS } from "./periphery.js";
7
7
  import { VERSION_RANGE_310, isV310, isVersionRange } from "./versions.js";
8
- export { ADDRESS_0X0, ADDRESS_PROVIDER_V310, AP_ACCOUNT_FACTORY, AP_ACL, AP_BOT_LIST, AP_BYTECODE_REPOSITORY, AP_CONTRACTS_REGISTER, AP_CONTROLLER_TIMELOCK, AP_CREDIT_ACCOUNT_COMPRESSOR, AP_CREDIT_SUITE_COMPRESSOR, AP_DATA_COMPRESSOR, AP_DELEVERAGE_BOT_HV, AP_DELEVERAGE_BOT_LV, AP_DELEVERAGE_BOT_PEGGED, AP_GAUGE_COMPRESSOR, AP_GEAR_STAKING, AP_GEAR_TOKEN, AP_INFLATION_ATTACK_BLOCKER, AP_INSOLVENCY_CHECKER, AP_MARKET_COMPRESSOR, AP_MARKET_CONFIGURATOR, AP_PARTIAL_LIQUIDATION_BOT, AP_PERIPHERY_COMPRESSOR, AP_PRICE_FEED_COMPRESSOR, AP_PRICE_FEED_STORE, AP_PRICE_ORACLE, AP_REDEMPTION_LOGGER, AP_REWARDS_COMPRESSOR, AP_ROUTER, AP_RWA_COMPRESSOR, AP_TOKEN_COMPRESSOR, AP_TREASURY, AP_WETH_GATEWAY, AP_WETH_TOKEN, AP_ZAPPER_REGISTER, AP_ZERO_PRICE_FEED, BLOCKS_PER_WEEK_BY_NETWORK, BotPermissions, LEVERAGE_DECIMALS, MAX_INT, MAX_UINT16, MAX_UINT256, MIN_INT96, MULTICALL_ADDRESS, NATIVE_ADDRESS, NOT_DEPLOYED, NO_VERSION, PERCENTAGE_DECIMALS, PERCENTAGE_FACTOR, PERCENTAGE_FACTOR_1KK, PERIPHERY_CONTRACTS, PRICE_DECIMALS, PRICE_DECIMALS_POW, RAMP_DURATION_BY_NETWORK, RAY, RAY_DECIMALS_POW, SECONDS_PER_YEAR, SLIPPAGE_DECIMALS, VERSION_RANGE_310, WAD, WAD_DECIMALS_POW, botPermissionsToString, halfRAY, isV310, isVersionRange };
8
+ export { ADDRESS_0X0, ADDRESS_PROVIDER_V310, AP_ACCOUNT_FACTORY, AP_ACL, AP_BOT_LIST, AP_BYTECODE_REPOSITORY, AP_CONTRACTS_REGISTER, AP_CONTROLLER_TIMELOCK, AP_CREDIT_ACCOUNT_COMPRESSOR, AP_CREDIT_SUITE_COMPRESSOR, AP_DATA_COMPRESSOR, AP_DELEVERAGE_BOT_HV, AP_DELEVERAGE_BOT_LV, AP_DELEVERAGE_BOT_PEGGED, AP_GAUGE_COMPRESSOR, AP_GEAR_STAKING, AP_GEAR_TOKEN, AP_INFLATION_ATTACK_BLOCKER, AP_INSOLVENCY_CHECKER, AP_MARKET_COMPRESSOR, AP_MARKET_CONFIGURATOR, AP_PARTIAL_LIQUIDATION_BOT, AP_PERIPHERY_COMPRESSOR, AP_PRICE_FEED_COMPRESSOR, AP_PRICE_FEED_STORE, AP_PRICE_ORACLE, AP_REDEMPTION_LOGGER, AP_REWARDS_COMPRESSOR, AP_ROUTER, AP_RWA_COMPRESSOR, AP_TOKEN_COMPRESSOR, AP_TREASURY, AP_WETH_GATEWAY, AP_WETH_TOKEN, AP_ZAPPER_REGISTER, AP_ZERO_PRICE_FEED, BLOCKS_PER_WEEK_BY_NETWORK, BotPermissions, DUST_THRESHOLD, LEVERAGE_DECIMALS, MAX_INT, MAX_UINT16, MAX_UINT256, MIN_INT96, MULTICALL_ADDRESS, NATIVE_ADDRESS, NOT_DEPLOYED, NO_VERSION, PERCENTAGE_DECIMALS, PERCENTAGE_FACTOR, PERCENTAGE_FACTOR_1KK, PERIPHERY_CONTRACTS, PRICE_DECIMALS, PRICE_DECIMALS_POW, RAMP_DURATION_BY_NETWORK, RAY, RAY_DECIMALS_POW, SECONDS_PER_YEAR, SLIPPAGE_DECIMALS, VERSION_RANGE_310, WAD, WAD_DECIMALS_POW, botPermissionsToString, halfRAY, isV310, isVersionRange };
@@ -16,5 +16,9 @@ const PERCENTAGE_FACTOR = 10000n;
16
16
  const PERCENTAGE_FACTOR_1KK = PERCENTAGE_FACTOR * PERCENTAGE_DECIMALS;
17
17
  const LEVERAGE_DECIMALS = 100n;
18
18
  const SLIPPAGE_DECIMALS = 100n;
19
+ /**
20
+ * Token balances at or below this threshold are treated as dust and ignored.
21
+ **/
22
+ const DUST_THRESHOLD = 10n;
19
23
  //#endregion
20
- export { LEVERAGE_DECIMALS, MAX_INT, MAX_UINT16, MAX_UINT256, MIN_INT96, PERCENTAGE_DECIMALS, PERCENTAGE_FACTOR, PERCENTAGE_FACTOR_1KK, PRICE_DECIMALS, PRICE_DECIMALS_POW, RAY, RAY_DECIMALS_POW, SECONDS_PER_YEAR, SLIPPAGE_DECIMALS, WAD, WAD_DECIMALS_POW, halfRAY };
24
+ export { DUST_THRESHOLD, LEVERAGE_DECIMALS, MAX_INT, MAX_UINT16, MAX_UINT256, MIN_INT96, PERCENTAGE_DECIMALS, PERCENTAGE_FACTOR, PERCENTAGE_FACTOR_1KK, PRICE_DECIMALS, PRICE_DECIMALS_POW, RAY, RAY_DECIMALS_POW, SECONDS_PER_YEAR, SLIPPAGE_DECIMALS, WAD, WAD_DECIMALS_POW, halfRAY };
@@ -15,7 +15,7 @@ import { etherscanApiUrl, etherscanUrl } from "./utils/etherscan.js";
15
15
  import { ADDRESS_PROVIDER_V310, AP_ACCOUNT_FACTORY, AP_ACL, AP_BOT_LIST, AP_BYTECODE_REPOSITORY, AP_CONTRACTS_REGISTER, AP_CONTROLLER_TIMELOCK, AP_CREDIT_ACCOUNT_COMPRESSOR, AP_CREDIT_SUITE_COMPRESSOR, AP_DATA_COMPRESSOR, AP_DELEVERAGE_BOT_HV, AP_DELEVERAGE_BOT_LV, AP_DELEVERAGE_BOT_PEGGED, AP_GAUGE_COMPRESSOR, AP_GEAR_STAKING, AP_GEAR_TOKEN, AP_INFLATION_ATTACK_BLOCKER, AP_INSOLVENCY_CHECKER, AP_MARKET_COMPRESSOR, AP_MARKET_CONFIGURATOR, AP_PARTIAL_LIQUIDATION_BOT, AP_PERIPHERY_COMPRESSOR, AP_PRICE_FEED_COMPRESSOR, AP_PRICE_FEED_STORE, AP_PRICE_ORACLE, AP_REDEMPTION_LOGGER, AP_REWARDS_COMPRESSOR, AP_ROUTER, AP_RWA_COMPRESSOR, AP_TOKEN_COMPRESSOR, AP_TREASURY, AP_WETH_GATEWAY, AP_WETH_TOKEN, AP_ZAPPER_REGISTER, AP_ZERO_PRICE_FEED, NO_VERSION } from "./constants/address-provider.js";
16
16
  import { ADDRESS_0X0, MULTICALL_ADDRESS, NATIVE_ADDRESS, NOT_DEPLOYED } from "./constants/addresses.js";
17
17
  import { BotPermissions, botPermissionsToString } from "./constants/bot-permissions.js";
18
- import { LEVERAGE_DECIMALS, MAX_INT, MAX_UINT16, MAX_UINT256, MIN_INT96, PERCENTAGE_DECIMALS, PERCENTAGE_FACTOR, PERCENTAGE_FACTOR_1KK, PRICE_DECIMALS, PRICE_DECIMALS_POW, RAY, RAY_DECIMALS_POW, SECONDS_PER_YEAR, SLIPPAGE_DECIMALS, WAD, WAD_DECIMALS_POW, halfRAY } from "./constants/math.js";
18
+ import { DUST_THRESHOLD, LEVERAGE_DECIMALS, MAX_INT, MAX_UINT16, MAX_UINT256, MIN_INT96, PERCENTAGE_DECIMALS, PERCENTAGE_FACTOR, PERCENTAGE_FACTOR_1KK, PRICE_DECIMALS, PRICE_DECIMALS_POW, RAY, RAY_DECIMALS_POW, SECONDS_PER_YEAR, SLIPPAGE_DECIMALS, WAD, WAD_DECIMALS_POW, halfRAY } from "./constants/math.js";
19
19
  import { BLOCKS_PER_WEEK_BY_NETWORK, RAMP_DURATION_BY_NETWORK } from "./constants/networks.js";
20
20
  import { PERIPHERY_CONTRACTS } from "./constants/periphery.js";
21
21
  import { VERSION_RANGE_310, isV310, isVersionRange } from "./constants/versions.js";
@@ -47,8 +47,9 @@ import { createAdapter } from "./market/adapters/createAdapter.js";
47
47
  import { CreditConfiguratorV310Contract } from "./market/credit/CreditConfiguratorV310Contract.js";
48
48
  import { CreditFacadeV310BaseContract, creditFacadeV310Abi as abi } from "./market/credit/CreditFacadeV310BaseContract.js";
49
49
  import { CreditFacadeV310Contract } from "./market/credit/CreditFacadeV310Contract.js";
50
- import { additionalBorrowApyBps, borrowApyBps, healthFactorBps, maxLeverage, positionLeverage, rayToBps, usdToNumber, utilizationBps } from "./market/math.js";
50
+ import { PARTIAL_LIQUIDATION_BUFFER_BPS, additionalBorrowApyBps, borrowApyBps, healthFactorBps, maxLeverage, minSeizedAmount, optimalHFForPartialLiquidation, optimalRepaidAmount, positionLeverage, rayToBps, usdToNumber, utilizationBps } from "./market/math.js";
51
51
  import { CreditManagerV310Contract } from "./market/credit/CreditManagerV310Contract.js";
52
+ import { dominantCollateral, mustGetDominantCollateral } from "./market/credit/dominantCollateral.js";
52
53
  import { CreditSuite } from "./market/credit/CreditSuite.js";
53
54
  import { simulateMulticall } from "./utils/viem/simulateMulticall.js";
54
55
  import { SimulateWithPriceUpdatesError, getSimulateWithPriceUpdatesError, simulateWithPriceUpdates } from "./utils/viem/simulateWithPriceUpdates.js";
@@ -102,8 +103,6 @@ import { SecuritizeRWAFactory } from "./market/rwa/securitize/SecuritizeRWAFacto
102
103
  import { RWARegistry } from "./market/rwa/RWARegistry.js";
103
104
  import { RWA_FACTORY_TYPES, isRWAFactory } from "./market/rwa/types.js";
104
105
  import "./market/index.js";
105
- import { DUST_THRESHOLD } from "./accounts/constants.js";
106
- import { dominantCollateral } from "./accounts/dominantCollateral.js";
107
106
  import { CreditAccountsServiceV310 } from "./accounts/CreditAccountsServiceV310.js";
108
107
  import { primaryInstantOutput } from "./accounts/intents/operations/claim-delayed/index.js";
109
108
  import { CreditAccountOperationsService } from "./accounts/intents/index.js";
@@ -144,4 +143,4 @@ import { OnchainSDK, STATE_VERSION } from "./OnchainSDK.js";
144
143
  import { MultichainSDK } from "./MultichainSDK.js";
145
144
  import { attachOptionsSchema, onchainSDKOptionsSchema } from "./options.js";
146
145
  import "./types/index.js";
147
- export { ADDRESS_0X0, ADDRESS_PROVIDER_V310, AP_ACCOUNT_FACTORY, AP_ACL, AP_BOT_LIST, AP_BYTECODE_REPOSITORY, AP_CONTRACTS_REGISTER, AP_CONTROLLER_TIMELOCK, AP_CREDIT_ACCOUNT_COMPRESSOR, AP_CREDIT_SUITE_COMPRESSOR, AP_DATA_COMPRESSOR, AP_DELEVERAGE_BOT_HV, AP_DELEVERAGE_BOT_LV, AP_DELEVERAGE_BOT_PEGGED, AP_GAUGE_COMPRESSOR, AP_GEAR_STAKING, AP_GEAR_TOKEN, AP_INFLATION_ATTACK_BLOCKER, AP_INSOLVENCY_CHECKER, AP_MARKET_COMPRESSOR, AP_MARKET_CONFIGURATOR, AP_PARTIAL_LIQUIDATION_BOT, AP_PERIPHERY_COMPRESSOR, AP_PRICE_FEED_COMPRESSOR, AP_PRICE_FEED_STORE, AP_PRICE_ORACLE, AP_REDEMPTION_LOGGER, AP_REWARDS_COMPRESSOR, AP_ROUTER, AP_RWA_COMPRESSOR, AP_TOKEN_COMPRESSOR, AP_TREASURY, AP_WETH_GATEWAY, AP_WETH_TOKEN, AP_ZAPPER_REGISTER, AP_ZERO_PRICE_FEED, AbstractLPPriceFeedContract, AbstractPriceFeedContract, AbstractWithdrawalCompressorContract, AddressMap, AddressProviderV310Contract, AddressSet, AssetsMap, BLOCKS_PER_WEEK_BY_NETWORK, BalancerStablePriceFeedContract, BalancerWeightedPriceFeedContract, BaseContract, BasePlugin, BigIntMath, BotPermissions, BoundedPriceFeedContract, ChainContractsRegister, ChainNotConfiguredError, CompositePriceFeedContract, Construct, ContractParseError, CreditAccountOperationsService, CreditAccountsServiceV310, CreditConfiguratorV310Contract, CreditFacadeV310BaseContract, CreditFacadeV310Contract, CreditManagerV310Contract, CreditSuite, CurveCryptoPriceFeedContract, CurveStablePriceFeedContract, CurveUSDPriceFeedContract, DELAYED_INTENT_TYPES, DELAYED_INTENT_VERSION, DUST_THRESHOLD, Erc4626PriceFeedContract, ExternalPriceFeedContract, GaugeContract, IERC20ZapperContract, IETHZapperContract, InvalidDelayedIntentError, LEVERAGE_DECIMALS, LIQUIDATION_APPROVAL_BUFFER, LIQUIDATION_COMPRESSOR_V313_ADDRESS, LinearInterestRateModelContract, LiquidationsService, MAX_INT, MAX_UINT16, MAX_UINT256, MIN_INT96, MULTICALL_ADDRESS, MarketRegister, MarketSuite, MellowLRTPriceFeedContract, MidasLiquidatorContract, MissingSerializedParamsError, MultichainConstruct, MultichainLiquidationsService, MultichainOpportunitiesService, MultichainPositionsService, MultichainSDK, NATIVE_ADDRESS, NOT_DEPLOYED, NO_VERSION, NetworkType, OnchainSDK, OpportunitiesService, PERCENTAGE_DECIMALS, PERCENTAGE_FACTOR, PERCENTAGE_FACTOR_1KK, PERIPHERY_CONTRACTS, PHANTOM_TOKEN_CONTRACT_TYPES, PHANTOM_TOKEN_MIDAS_REDEMPTION, PHANTOM_TOKEN_SECURITIZE_REDEMPTION, PRICE_DECIMALS, PRICE_DECIMALS_POW, PartialPriceFeedInitError, PendleTWAPPTPriceFeed, PlaceholderAdapterContract, PlaceholderContract, PluginStateVersionError, PoolService, PoolSuite, PoolV310Contract, PositionsService, PriceFeedRef, PriceFeedRegister, PriceOracleV310Contract, PythPriceFeed, RAMP_DURATION_BY_NETWORK, RAY, RAY_DECIMALS_POW, RWARegistry, RWA_FACTORY_SECURITIZE, RWA_FACTORY_TYPES, RWA_LIQUIDATOR_MIDAS, RWA_LIQUIDATOR_SECURITIZE, RWA_ON_DEMAND_LP_MONOPOLIZED, RWA_UNDERLYING_DEFAULT, RWA_UNDERLYING_ON_DEMAND, RedemptionLoggerV310Contract, RedstonePriceFeedContract, RouterV310Contract, SDKConstruct, SECONDS_PER_YEAR, SECURITIZE_REGISTER_VAULT_TYPES, SLIPPAGE_DECIMALS, STATE_VERSION, SUPPORTED_NETWORKS, SdkAlreadyAttachedError, SdkChainMismatchError, SdkMissingChainStateError, SdkNotAttachedError, SdkStateVersionMismatchError, SdkSyncFailedError, SecuritizeLiquidatorContract, SecuritizeRWAFactory, SimulateWithPriceUpdatesError, SimulationError, TokensMeta, TypedObjectUtils, UnsupportedZapperFunctionError, VERSION_RANGE_310, VotingContractStatus, WAD, WAD_DECIMALS_POW, WithdrawalCompressorV310Contract, WithdrawalCompressorV311Contract, WithdrawalCompressorV313Contract, WstETHPriceFeedContract, YearnPriceFeedContract, ZapperContract, ZeroPriceFeedContract, ZodAddress, ZodHex, additionalBorrowApyBps, assetsMap, attachOptionsSchema, borrowApyBps, botPermissionsToString, bytes32ToString, chains, childLogger, createAdapter, createAddressProvider, createPriceOracle, createRawTx, createRedemptionLogger, createRouter, createWithdrawalCompressor, createZapper, abi as creditFacadeV310Abi, decodeDelayedIntent, detectNetwork, dominantCollateral, encodeDelayedIntent, estimateRawTxGas, etherscanApiUrl, etherscanUrl, executeDelegatedMulticalls, fetchPythPayloads, fetchRedstonePayloads, filterDust, filterDustUSD, findCuratorMarketConfigurator, fmtBinaryMask, formatBN, formatBNvalue, formatDuration, formatLeverage, formatNumberToString_, formatPercentage, formatTimestamp, functionArgsToMap, functionArgsToRecord, generateCastTraceCall, getAssetType, getCastTraceArgs, getChain, getCuratorName, getFunctionSignature, getNetworkType, getRawPriceUpdates, getSimulateWithPriceUpdatesError, getWithdrawalCompressorAddress, halfRAY, healthFactorBps, hexEq, hydrateAddressProvider, iCreditAccountAbi, isDust, isLPPriceFeed, isPublicNetwork, isRWAFactory, isRWAToken, isSunsetPool, isSunsetStrategy, isSupportedNetwork, isUpdatablePriceFeed, isV310, isVersionRange, json_parse, json_stringify, maxLeverage, numberWithCommas, onchainSDKOptionsSchema, percentFmt, positionLeverage, primaryInstantOutput, rayToBps, rayToNumber, retry, sendRawTx, shortAddress, shortHash, simulateCall, simulateMulticall, simulateWithPriceUpdates, toAddress, toBN, toBigInt, toClaimableWithdrawal, toPendingWithdrawal, toRequestableWithdrawal, toSignificant, toWithdrawalStatus, usdToNumber, utilizationBps, watchBlocksAsync };
146
+ export { ADDRESS_0X0, ADDRESS_PROVIDER_V310, AP_ACCOUNT_FACTORY, AP_ACL, AP_BOT_LIST, AP_BYTECODE_REPOSITORY, AP_CONTRACTS_REGISTER, AP_CONTROLLER_TIMELOCK, AP_CREDIT_ACCOUNT_COMPRESSOR, AP_CREDIT_SUITE_COMPRESSOR, AP_DATA_COMPRESSOR, AP_DELEVERAGE_BOT_HV, AP_DELEVERAGE_BOT_LV, AP_DELEVERAGE_BOT_PEGGED, AP_GAUGE_COMPRESSOR, AP_GEAR_STAKING, AP_GEAR_TOKEN, AP_INFLATION_ATTACK_BLOCKER, AP_INSOLVENCY_CHECKER, AP_MARKET_COMPRESSOR, AP_MARKET_CONFIGURATOR, AP_PARTIAL_LIQUIDATION_BOT, AP_PERIPHERY_COMPRESSOR, AP_PRICE_FEED_COMPRESSOR, AP_PRICE_FEED_STORE, AP_PRICE_ORACLE, AP_REDEMPTION_LOGGER, AP_REWARDS_COMPRESSOR, AP_ROUTER, AP_RWA_COMPRESSOR, AP_TOKEN_COMPRESSOR, AP_TREASURY, AP_WETH_GATEWAY, AP_WETH_TOKEN, AP_ZAPPER_REGISTER, AP_ZERO_PRICE_FEED, AbstractLPPriceFeedContract, AbstractPriceFeedContract, AbstractWithdrawalCompressorContract, AddressMap, AddressProviderV310Contract, AddressSet, AssetsMap, BLOCKS_PER_WEEK_BY_NETWORK, BalancerStablePriceFeedContract, BalancerWeightedPriceFeedContract, BaseContract, BasePlugin, BigIntMath, BotPermissions, BoundedPriceFeedContract, ChainContractsRegister, ChainNotConfiguredError, CompositePriceFeedContract, Construct, ContractParseError, CreditAccountOperationsService, CreditAccountsServiceV310, CreditConfiguratorV310Contract, CreditFacadeV310BaseContract, CreditFacadeV310Contract, CreditManagerV310Contract, CreditSuite, CurveCryptoPriceFeedContract, CurveStablePriceFeedContract, CurveUSDPriceFeedContract, DELAYED_INTENT_TYPES, DELAYED_INTENT_VERSION, DUST_THRESHOLD, Erc4626PriceFeedContract, ExternalPriceFeedContract, GaugeContract, IERC20ZapperContract, IETHZapperContract, InvalidDelayedIntentError, LEVERAGE_DECIMALS, LIQUIDATION_APPROVAL_BUFFER, LIQUIDATION_COMPRESSOR_V313_ADDRESS, LinearInterestRateModelContract, LiquidationsService, MAX_INT, MAX_UINT16, MAX_UINT256, MIN_INT96, MULTICALL_ADDRESS, MarketRegister, MarketSuite, MellowLRTPriceFeedContract, MidasLiquidatorContract, MissingSerializedParamsError, MultichainConstruct, MultichainLiquidationsService, MultichainOpportunitiesService, MultichainPositionsService, MultichainSDK, NATIVE_ADDRESS, NOT_DEPLOYED, NO_VERSION, NetworkType, OnchainSDK, OpportunitiesService, PARTIAL_LIQUIDATION_BUFFER_BPS, PERCENTAGE_DECIMALS, PERCENTAGE_FACTOR, PERCENTAGE_FACTOR_1KK, PERIPHERY_CONTRACTS, PHANTOM_TOKEN_CONTRACT_TYPES, PHANTOM_TOKEN_MIDAS_REDEMPTION, PHANTOM_TOKEN_SECURITIZE_REDEMPTION, PRICE_DECIMALS, PRICE_DECIMALS_POW, PartialPriceFeedInitError, PendleTWAPPTPriceFeed, PlaceholderAdapterContract, PlaceholderContract, PluginStateVersionError, PoolService, PoolSuite, PoolV310Contract, PositionsService, PriceFeedRef, PriceFeedRegister, PriceOracleV310Contract, PythPriceFeed, RAMP_DURATION_BY_NETWORK, RAY, RAY_DECIMALS_POW, RWARegistry, RWA_FACTORY_SECURITIZE, RWA_FACTORY_TYPES, RWA_LIQUIDATOR_MIDAS, RWA_LIQUIDATOR_SECURITIZE, RWA_ON_DEMAND_LP_MONOPOLIZED, RWA_UNDERLYING_DEFAULT, RWA_UNDERLYING_ON_DEMAND, RedemptionLoggerV310Contract, RedstonePriceFeedContract, RouterV310Contract, SDKConstruct, SECONDS_PER_YEAR, SECURITIZE_REGISTER_VAULT_TYPES, SLIPPAGE_DECIMALS, STATE_VERSION, SUPPORTED_NETWORKS, SdkAlreadyAttachedError, SdkChainMismatchError, SdkMissingChainStateError, SdkNotAttachedError, SdkStateVersionMismatchError, SdkSyncFailedError, SecuritizeLiquidatorContract, SecuritizeRWAFactory, SimulateWithPriceUpdatesError, SimulationError, TokensMeta, TypedObjectUtils, UnsupportedZapperFunctionError, VERSION_RANGE_310, VotingContractStatus, WAD, WAD_DECIMALS_POW, WithdrawalCompressorV310Contract, WithdrawalCompressorV311Contract, WithdrawalCompressorV313Contract, WstETHPriceFeedContract, YearnPriceFeedContract, ZapperContract, ZeroPriceFeedContract, ZodAddress, ZodHex, additionalBorrowApyBps, assetsMap, attachOptionsSchema, borrowApyBps, botPermissionsToString, bytes32ToString, chains, childLogger, createAdapter, createAddressProvider, createPriceOracle, createRawTx, createRedemptionLogger, createRouter, createWithdrawalCompressor, createZapper, abi as creditFacadeV310Abi, decodeDelayedIntent, detectNetwork, dominantCollateral, encodeDelayedIntent, estimateRawTxGas, etherscanApiUrl, etherscanUrl, executeDelegatedMulticalls, fetchPythPayloads, fetchRedstonePayloads, filterDust, filterDustUSD, findCuratorMarketConfigurator, fmtBinaryMask, formatBN, formatBNvalue, formatDuration, formatLeverage, formatNumberToString_, formatPercentage, formatTimestamp, functionArgsToMap, functionArgsToRecord, generateCastTraceCall, getAssetType, getCastTraceArgs, getChain, getCuratorName, getFunctionSignature, getNetworkType, getRawPriceUpdates, getSimulateWithPriceUpdatesError, getWithdrawalCompressorAddress, halfRAY, healthFactorBps, hexEq, hydrateAddressProvider, iCreditAccountAbi, isDust, isLPPriceFeed, isPublicNetwork, isRWAFactory, isRWAToken, isSunsetPool, isSunsetStrategy, isSupportedNetwork, isUpdatablePriceFeed, isV310, isVersionRange, json_parse, json_stringify, maxLeverage, minSeizedAmount, mustGetDominantCollateral, numberWithCommas, onchainSDKOptionsSchema, optimalHFForPartialLiquidation, optimalRepaidAmount, percentFmt, positionLeverage, primaryInstantOutput, rayToBps, rayToNumber, retry, sendRawTx, shortAddress, shortHash, simulateCall, simulateMulticall, simulateWithPriceUpdates, toAddress, toBN, toBigInt, toClaimableWithdrawal, toPendingWithdrawal, toRequestableWithdrawal, toSignificant, toWithdrawalStatus, usdToNumber, utilizationBps, watchBlocksAsync };
@@ -11,6 +11,7 @@ import "../utils/viem/index.js";
11
11
  import { MarketConfiguratorContract } from "./MarketConfiguratorContract.js";
12
12
  import { MarketSuite } from "./MarketSuite.js";
13
13
  import { ZapperRegister } from "./ZapperRegister.js";
14
+ import { isAddressEqual } from "viem";
14
15
  //#region src/sdk/market/MarketRegister.ts
15
16
  /**
16
17
  * Central registry of all Gearbox markets on the current chain.
@@ -179,6 +180,15 @@ var MarketRegister = class extends ZapperRegister {
179
180
  throw new Error(`cannot find credit manager ${creditManager}`);
180
181
  }
181
182
  /**
183
+ * Finds a credit facade by its on-chain address.
184
+ * @param creditFacade - Credit facade contract address.
185
+ * @throws If no loaded market contains the given credit facade.
186
+ **/
187
+ findCreditFacade(creditFacade) {
188
+ for (const cm of this.creditManagers) if (isAddressEqual(cm.creditFacade.address, creditFacade)) return cm.creditFacade;
189
+ throw new Error(`cannot find credit facade ${creditFacade}`);
190
+ }
191
+ /**
182
192
  * Finds the market that contains the given credit manager.
183
193
  * @param creditManager - Credit manager contract address.
184
194
  * @throws If no loaded market contains the given credit manager.
@@ -1,8 +1,11 @@
1
+ import { AssetsMap } from "../../utils/AssetsMap.js";
1
2
  import { ADDRESS_0X0 } from "../../constants/addresses.js";
3
+ import { MAX_UINT256, MIN_INT96 } from "../../constants/math.js";
2
4
  import "../../constants/index.js";
3
5
  import { fmtBinaryMask, formatBNvalue, formatTimestamp } from "../../utils/formatter.js";
4
6
  import "../../utils/index.js";
5
7
  import { CreditFacadeV310BaseContract } from "./CreditFacadeV310BaseContract.js";
8
+ import { encodeFunctionData } from "viem";
6
9
  //#region src/sdk/market/credit/CreditFacadeV310Contract.ts
7
10
  var CreditFacadeV310Contract = class extends CreditFacadeV310BaseContract {
8
11
  underlying;
@@ -107,6 +110,184 @@ var CreditFacadeV310Contract = class extends CreditFacadeV310BaseContract {
107
110
  ]
108
111
  });
109
112
  }
113
+ /**
114
+ * {@inheritDoc ICreditFacadeContract.prepareIncreaseDebt}
115
+ */
116
+ prepareIncreaseDebt(amount) {
117
+ return {
118
+ target: this.address,
119
+ callData: encodeFunctionData({
120
+ abi: this.abi,
121
+ functionName: "increaseDebt",
122
+ args: [amount]
123
+ })
124
+ };
125
+ }
126
+ /**
127
+ * {@inheritDoc ICreditFacadeContract.prepareChangeDebt}
128
+ */
129
+ prepareChangeDebt(change, isDecrease) {
130
+ return {
131
+ target: this.address,
132
+ callData: encodeFunctionData({
133
+ abi: this.abi,
134
+ functionName: isDecrease ? "decreaseDebt" : "increaseDebt",
135
+ args: [change]
136
+ })
137
+ };
138
+ }
139
+ /**
140
+ * {@inheritDoc ICreditFacadeContract.prepareDecreaseDebtFull}
141
+ */
142
+ prepareDecreaseDebtFull() {
143
+ return {
144
+ target: this.address,
145
+ callData: encodeFunctionData({
146
+ abi: this.abi,
147
+ functionName: "decreaseDebt",
148
+ args: [MAX_UINT256]
149
+ })
150
+ };
151
+ }
152
+ /**
153
+ * {@inheritDoc ICreditFacadeContract.prepareWithdrawCollateral}
154
+ */
155
+ prepareWithdrawCollateral(token, amount, to) {
156
+ return {
157
+ target: this.address,
158
+ callData: encodeFunctionData({
159
+ abi: this.abi,
160
+ functionName: "withdrawCollateral",
161
+ args: [
162
+ token,
163
+ amount,
164
+ to
165
+ ]
166
+ })
167
+ };
168
+ }
169
+ /**
170
+ * {@inheritDoc ICreditFacadeContract.prepareAddCollateral}
171
+ */
172
+ prepareAddCollateral(assets, permits) {
173
+ return assets.map(({ token, balance }) => {
174
+ const p = permits[token];
175
+ if (p) return {
176
+ target: this.address,
177
+ callData: encodeFunctionData({
178
+ abi: this.abi,
179
+ functionName: "addCollateralWithPermit",
180
+ args: [
181
+ token,
182
+ balance,
183
+ p.deadline,
184
+ p.v,
185
+ p.r,
186
+ p.s
187
+ ]
188
+ })
189
+ };
190
+ return {
191
+ target: this.address,
192
+ callData: encodeFunctionData({
193
+ abi: this.abi,
194
+ functionName: "addCollateral",
195
+ args: [token, balance]
196
+ })
197
+ };
198
+ });
199
+ }
200
+ /**
201
+ * {@inheritDoc ICreditFacadeContract.prepareUpdateQuotas}
202
+ */
203
+ prepareUpdateQuotas({ averageQuota, minQuota }) {
204
+ const minRecord = new AssetsMap(minQuota);
205
+ return averageQuota.map((q) => {
206
+ const minBalance = minRecord.get(q.token);
207
+ const min = minBalance && minBalance > 0n ? minBalance : 0n;
208
+ return {
209
+ target: this.address,
210
+ callData: encodeFunctionData({
211
+ abi: this.abi,
212
+ functionName: "updateQuota",
213
+ args: [
214
+ q.token,
215
+ q.balance,
216
+ min
217
+ ]
218
+ })
219
+ };
220
+ });
221
+ }
222
+ /**
223
+ * {@inheritDoc ICreditFacadeContract.prepareDisableQuotas}
224
+ */
225
+ prepareDisableQuotas(tokens) {
226
+ return tokens.filter((t) => t.quota > 0n).map((t) => ({
227
+ target: this.address,
228
+ callData: encodeFunctionData({
229
+ abi: this.abi,
230
+ functionName: "updateQuota",
231
+ args: [
232
+ t.token,
233
+ MIN_INT96,
234
+ 0n
235
+ ]
236
+ })
237
+ }));
238
+ }
239
+ /**
240
+ * {@inheritDoc ICreditFacadeContract.prepareSetBotPermissions}
241
+ */
242
+ prepareSetBotPermissions(bot, permissions) {
243
+ return {
244
+ target: this.address,
245
+ callData: encodeFunctionData({
246
+ abi: this.abi,
247
+ functionName: "setBotPermissions",
248
+ args: [bot, permissions]
249
+ })
250
+ };
251
+ }
252
+ /**
253
+ * {@inheritDoc ICreditFacadeContract.prepareOnDemandPriceUpdates}
254
+ */
255
+ prepareOnDemandPriceUpdates(updates) {
256
+ return {
257
+ target: this.address,
258
+ callData: encodeFunctionData({
259
+ abi: this.abi,
260
+ functionName: "onDemandPriceUpdates",
261
+ args: [updates]
262
+ })
263
+ };
264
+ }
265
+ /**
266
+ * {@inheritDoc ICreditFacadeContract.prepareStoreExpectedBalances}
267
+ */
268
+ prepareStoreExpectedBalances(deltas) {
269
+ return {
270
+ target: this.address,
271
+ callData: encodeFunctionData({
272
+ abi: this.abi,
273
+ functionName: "storeExpectedBalances",
274
+ args: [deltas]
275
+ })
276
+ };
277
+ }
278
+ /**
279
+ * {@inheritDoc ICreditFacadeContract.prepareCompareBalances}
280
+ */
281
+ prepareCompareBalances() {
282
+ return {
283
+ target: this.address,
284
+ callData: encodeFunctionData({
285
+ abi: this.abi,
286
+ functionName: "compareBalances",
287
+ args: []
288
+ })
289
+ };
290
+ }
110
291
  };
111
292
  //#endregion
112
293
  export { CreditFacadeV310Contract };
@@ -1,13 +1,16 @@
1
+ import { AddressMap } from "../../utils/AddressMap.js";
1
2
  import { BigIntMath } from "../../utils/bigint-math.js";
2
3
  import { isSunsetStrategy } from "../../chain/chains.js";
3
- import "../../constants/math.js";
4
+ import { PERCENTAGE_FACTOR, RAY } from "../../constants/math.js";
4
5
  import "../../constants/index.js";
6
+ import "../../utils/index.js";
5
7
  import { SDKConstruct } from "../../base/SDKConstruct.js";
6
8
  import "../../base/index.js";
7
- import { additionalBorrowApyBps, borrowApyBps } from "../math.js";
9
+ import { additionalBorrowApyBps, borrowApyBps, minSeizedAmount, optimalHFForPartialLiquidation, optimalRepaidAmount } from "../math.js";
8
10
  import createCreditConfigurator from "./createCreditConfigurator.js";
9
11
  import createCreditFacade from "./createCreditFacade.js";
10
12
  import createCreditManager from "./createCreditManager.js";
13
+ import { mustGetDominantCollateral } from "./dominantCollateral.js";
11
14
  //#region src/sdk/market/credit/CreditSuite.ts
12
15
  /**
13
16
  * SDK aggregate for one credit-manager branch inside a market.
@@ -115,6 +118,20 @@ var CreditSuite = class extends SDKConstruct {
115
118
  return expirationDate > 0 ? expirationDate : null;
116
119
  }
117
120
  /**
121
+ * Liquidation fee pair in effect right now, resolving {@link isExpired} once
122
+ * for both.
123
+ */
124
+ liquidationFees() {
125
+ const cm = this.creditManager;
126
+ return this.isExpired ? {
127
+ feeLiquidation: cm.feeLiquidationExpired,
128
+ liquidationDiscount: cm.liquidationDiscountExpired
129
+ } : {
130
+ feeLiquidation: cm.feeLiquidation,
131
+ liquidationDiscount: cm.liquidationDiscount
132
+ };
133
+ }
134
+ /**
118
135
  * Whether this suite can be used right now. A paused pool blocks borrowing,
119
136
  * so the suite is unusable even when its own facade is live.
120
137
  */
@@ -199,6 +216,95 @@ var CreditSuite = class extends SDKConstruct {
199
216
  };
200
217
  }
201
218
  /**
219
+ * Everything a partial liquidation of credit account needs, with any parameter the
220
+ * caller pinned down taken as given and the rest derived from current state.
221
+ *
222
+ * @param ca - Credit account to partially liquidate.
223
+ * @param overrides - Parameters to use instead of the derived defaults.
224
+ * @throws If a derived `tokenOut` cannot be picked, or if the seized token is
225
+ * not a collateral token of this credit manager.
226
+ */
227
+ partialLiquidationParams(ca, overrides = {}) {
228
+ const tokenOut = overrides.tokenOut ?? this.#bestTokenOut(ca);
229
+ const optimalHF = overrides.optimalHF ?? this.optimalHFForPartialLiquidation(ca);
230
+ const repaidAmount = overrides.repaidAmount ?? this.#optimalRepaidAmount(ca, tokenOut, optimalHF);
231
+ return {
232
+ tokenOut,
233
+ optimalHF,
234
+ repaidAmount,
235
+ minSeizedAmount: overrides.minSeizedAmount ?? this.#minSeizedAmount(tokenOut, repaidAmount)
236
+ };
237
+ }
238
+ /**
239
+ * Health factor a partial liquidation of `ca` should target, in basis points.
240
+ *
241
+ * @param ca - Credit account to partially liquidate.
242
+ */
243
+ optimalHFForPartialLiquidation(ca) {
244
+ return optimalHFForPartialLiquidation(this.#borrowRate(ca));
245
+ }
246
+ /**
247
+ * Collateral token a partial liquidation seizes by default.
248
+ *
249
+ * Ported from solidity:
250
+ * https://github.com/Gearbox-protocol/router-v3/blob/main/contracts/liquidation/AbstractLiquidator.sol#L270
251
+ */
252
+ #bestTokenOut(ca) {
253
+ return mustGetDominantCollateral(ca, this.market);
254
+ }
255
+ /**
256
+ * Minimum amount of `token` that must be seized when repaying `repaidAmount`
257
+ * of underlying.
258
+ */
259
+ #minSeizedAmount(token, repaidAmount) {
260
+ const { market } = this;
261
+ const tokenAmount = market.priceOracle.convert(market.underlying, token, repaidAmount);
262
+ return minSeizedAmount(tokenAmount, this.liquidationFees().liquidationDiscount);
263
+ }
264
+ /**
265
+ * Amount of underlying to repay to bring `ca`'s health factor close to
266
+ * `optimalHF` by seizing `token`.
267
+ *
268
+ * @throws If `token` is not a collateral token of this credit manager.
269
+ */
270
+ #optimalRepaidAmount(ca, token, optimalHF) {
271
+ const { creditManager: cm, market } = this;
272
+ const { feeLiquidation, liquidationDiscount } = this.liquidationFees();
273
+ const ltTokenOut = cm.liquidationThresholds.get(token);
274
+ if (ltTokenOut === void 0) throw new Error(`token ${this.labelAddress(token)} is not a collateral token in credit manager ${this.labelAddress(cm.address)}`);
275
+ return optimalRepaidAmount({
276
+ totalDebt: ca.debt + ca.accruedInterest + ca.accruedFees,
277
+ twvUnderlying: market.priceOracle.convertFromUSD(market.underlying, ca.twvUSD),
278
+ minDebt: this.creditFacade.minDebt,
279
+ optimalHF,
280
+ discount: BigInt(liquidationDiscount) - BigInt(feeLiquidation),
281
+ ltTokenOut: BigInt(ltTokenOut)
282
+ });
283
+ }
284
+ /**
285
+ * Blended annual cost of credit account's debt, in basis points: base interest weighted
286
+ * by the account's share of its own total debt, plus the quota rates of the
287
+ * collaterals it actually holds, both marked up by the interest fee.
288
+ */
289
+ #borrowRate(ca) {
290
+ const { creditManager } = this;
291
+ const { pool } = this.market;
292
+ const { feeInterest } = creditManager;
293
+ const { baseInterestRate } = pool.pool;
294
+ const baseRateWithFee = baseInterestRate * (BigInt(feeInterest) + PERCENTAGE_FACTOR);
295
+ const totalDebt = ca.debt + ca.accruedInterest + ca.accruedFees;
296
+ const r = ca.debt * baseRateWithFee / (totalDebt * RAY);
297
+ const caTokens = new AddressMap(ca.tokens.map((t) => [t.token, t]));
298
+ let qr = 0n;
299
+ for (const t of creditManager.collateralTokens) {
300
+ const b = caTokens.get(t);
301
+ if (b) qr += b.quota * BigInt(pool.pqk.quotas.get(t)?.rate ?? 0);
302
+ }
303
+ qr = qr * (BigInt(feeInterest) + PERCENTAGE_FACTOR) / PERCENTAGE_FACTOR;
304
+ qr /= totalDebt;
305
+ return r + qr;
306
+ }
307
+ /**
202
308
  * Whether the facade, manager, or configurator has observed logs that require
203
309
  * a credit-suite resync.
204
310
  */
@@ -1,7 +1,8 @@
1
- import { hexEq } from "../utils/hex.js";
2
- import "../utils/index.js";
3
- import "./constants.js";
4
- //#region src/sdk/accounts/dominantCollateral.ts
1
+ import "../../constants/math.js";
2
+ import "../../constants/index.js";
3
+ import { hexEq } from "../../utils/hex.js";
4
+ import "../../utils/index.js";
5
+ //#region src/sdk/market/credit/dominantCollateral.ts
5
6
  /**
6
7
  * The account's dominant collateral: the most valuable enabled non-underlying
7
8
  * token it holds above dust, by USD value.
@@ -28,5 +29,17 @@ function dominantCollateral(account, market) {
28
29
  }
29
30
  return dominant;
30
31
  }
32
+ /**
33
+ * {@link dominantCollateral}, for callers that cannot proceed without one, such
34
+ * as picking the collateral a partial liquidation seizes.
35
+ *
36
+ * @throws If the account holds no enabled non-underlying collateral the oracle
37
+ * can price.
38
+ **/
39
+ function mustGetDominantCollateral(account, market) {
40
+ const collateral = dominantCollateral(account, market);
41
+ if (!collateral) throw new Error(`cannot determine tokenOut for partial liquidation of ${market.sdk.labelAddress(account.creditAccount)}: no enabled non-underlying collateral with value`);
42
+ return collateral;
43
+ }
31
44
  //#endregion
32
- export { dominantCollateral };
45
+ export { dominantCollateral, mustGetDominantCollateral };
@@ -2,6 +2,7 @@ import { CreditConfiguratorV310Contract } from "./CreditConfiguratorV310Contract
2
2
  import { CreditFacadeV310BaseContract, creditFacadeV310Abi as abi } from "./CreditFacadeV310BaseContract.js";
3
3
  import { CreditFacadeV310Contract } from "./CreditFacadeV310Contract.js";
4
4
  import { CreditManagerV310Contract } from "./CreditManagerV310Contract.js";
5
+ import { dominantCollateral, mustGetDominantCollateral } from "./dominantCollateral.js";
5
6
  import { CreditSuite } from "./CreditSuite.js";
6
7
  import "./types.js";
7
- export { CreditConfiguratorV310Contract, CreditFacadeV310BaseContract, CreditFacadeV310Contract, CreditManagerV310Contract, CreditSuite, abi as creditFacadeV310Abi };
8
+ export { CreditConfiguratorV310Contract, CreditFacadeV310BaseContract, CreditFacadeV310Contract, CreditManagerV310Contract, CreditSuite, abi as creditFacadeV310Abi, dominantCollateral, mustGetDominantCollateral };
@@ -5,6 +5,7 @@ import { CreditConfiguratorV310Contract } from "./credit/CreditConfiguratorV310C
5
5
  import { CreditFacadeV310BaseContract, creditFacadeV310Abi as abi } from "./credit/CreditFacadeV310BaseContract.js";
6
6
  import { CreditFacadeV310Contract } from "./credit/CreditFacadeV310Contract.js";
7
7
  import { CreditManagerV310Contract } from "./credit/CreditManagerV310Contract.js";
8
+ import { dominantCollateral, mustGetDominantCollateral } from "./credit/dominantCollateral.js";
8
9
  import { CreditSuite } from "./credit/CreditSuite.js";
9
10
  import "./credit/index.js";
10
11
  import { isUpdatablePriceFeed } from "./pricefeeds/isUpdatablePriceFeed.js";
@@ -58,4 +59,4 @@ import { RWARegistry } from "./rwa/RWARegistry.js";
58
59
  import { RWA_FACTORY_TYPES, isRWAFactory } from "./rwa/types.js";
59
60
  import "./rwa/index.js";
60
61
  import "./types.js";
61
- export { AbstractLPPriceFeedContract, AbstractPriceFeedContract, BalancerStablePriceFeedContract, BalancerWeightedPriceFeedContract, BoundedPriceFeedContract, CompositePriceFeedContract, CreditConfiguratorV310Contract, CreditFacadeV310BaseContract, CreditFacadeV310Contract, CreditManagerV310Contract, CreditSuite, CurveCryptoPriceFeedContract, CurveStablePriceFeedContract, CurveUSDPriceFeedContract, Erc4626PriceFeedContract, ExternalPriceFeedContract, GaugeContract, IERC20ZapperContract, IETHZapperContract, LinearInterestRateModelContract, MarketRegister, MarketSuite, MellowLRTPriceFeedContract, MidasLiquidatorContract, PHANTOM_TOKEN_MIDAS_REDEMPTION, PHANTOM_TOKEN_SECURITIZE_REDEMPTION, PartialPriceFeedInitError, PendleTWAPPTPriceFeed, PlaceholderAdapterContract, PoolSuite, PoolV310Contract, PriceFeedRef, PriceFeedRegister, PriceOracleV310Contract, PythPriceFeed, RWARegistry, RWA_FACTORY_SECURITIZE, RWA_FACTORY_TYPES, RWA_LIQUIDATOR_MIDAS, RWA_LIQUIDATOR_SECURITIZE, RedstonePriceFeedContract, SECURITIZE_REGISTER_VAULT_TYPES, SecuritizeLiquidatorContract, SecuritizeRWAFactory, UnsupportedZapperFunctionError, WstETHPriceFeedContract, YearnPriceFeedContract, ZapperContract, ZeroPriceFeedContract, createAdapter, createPriceOracle, createZapper, abi as creditFacadeV310Abi, fetchPythPayloads, fetchRedstonePayloads, getRawPriceUpdates, isLPPriceFeed, isRWAFactory, isUpdatablePriceFeed };
62
+ export { AbstractLPPriceFeedContract, AbstractPriceFeedContract, BalancerStablePriceFeedContract, BalancerWeightedPriceFeedContract, BoundedPriceFeedContract, CompositePriceFeedContract, CreditConfiguratorV310Contract, CreditFacadeV310BaseContract, CreditFacadeV310Contract, CreditManagerV310Contract, CreditSuite, CurveCryptoPriceFeedContract, CurveStablePriceFeedContract, CurveUSDPriceFeedContract, Erc4626PriceFeedContract, ExternalPriceFeedContract, GaugeContract, IERC20ZapperContract, IETHZapperContract, LinearInterestRateModelContract, MarketRegister, MarketSuite, MellowLRTPriceFeedContract, MidasLiquidatorContract, PHANTOM_TOKEN_MIDAS_REDEMPTION, PHANTOM_TOKEN_SECURITIZE_REDEMPTION, PartialPriceFeedInitError, PendleTWAPPTPriceFeed, PlaceholderAdapterContract, PoolSuite, PoolV310Contract, PriceFeedRef, PriceFeedRegister, PriceOracleV310Contract, PythPriceFeed, RWARegistry, RWA_FACTORY_SECURITIZE, RWA_FACTORY_TYPES, RWA_LIQUIDATOR_MIDAS, RWA_LIQUIDATOR_SECURITIZE, RedstonePriceFeedContract, SECURITIZE_REGISTER_VAULT_TYPES, SecuritizeLiquidatorContract, SecuritizeRWAFactory, UnsupportedZapperFunctionError, WstETHPriceFeedContract, YearnPriceFeedContract, ZapperContract, ZeroPriceFeedContract, createAdapter, createPriceOracle, createZapper, abi as creditFacadeV310Abi, dominantCollateral, fetchPythPayloads, fetchRedstonePayloads, getRawPriceUpdates, isLPPriceFeed, isRWAFactory, isUpdatablePriceFeed, mustGetDominantCollateral };