@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.
- package/dist/cjs/dev/AccountOpener.js +2 -5
- package/dist/cjs/sdk/accounts/CreditAccountsServiceV310.js +49 -533
- package/dist/cjs/sdk/accounts/index.js +0 -4
- package/dist/cjs/sdk/accounts/intents/operations/unwrap-rwa-collateral/index.js +1 -1
- package/dist/cjs/sdk/accounts/intents/operations/wrap-rwa-collateral/index.js +1 -1
- package/dist/cjs/sdk/accounts/intents/testing/sdk-mock.js +2 -2
- package/dist/cjs/sdk/accounts/liquidations/LiquidationsService.js +3 -3
- package/dist/cjs/sdk/accounts/liquidations/constants.js +0 -2
- package/dist/cjs/sdk/accounts/liquidations/index.js +0 -2
- package/dist/cjs/sdk/constants/index.js +1 -0
- package/dist/cjs/sdk/constants/math.js +5 -0
- package/dist/cjs/sdk/index.js +8 -4
- package/dist/cjs/sdk/market/MarketRegister.js +10 -0
- package/dist/cjs/sdk/market/credit/CreditFacadeV310Contract.js +181 -0
- package/dist/cjs/sdk/market/credit/CreditSuite.js +107 -1
- package/dist/cjs/sdk/{accounts → market/credit}/dominantCollateral.js +18 -4
- package/dist/cjs/sdk/market/credit/index.js +3 -0
- package/dist/cjs/sdk/market/index.js +3 -0
- package/dist/cjs/sdk/market/math.js +59 -0
- package/dist/cjs/sdk/market/oracle/PriceOracleV310Contract.js +2 -9
- package/dist/cjs/sdk/opportunities/index.js +4 -0
- package/dist/esm/dev/AccountOpener.js +2 -5
- package/dist/esm/sdk/accounts/CreditAccountsServiceV310.js +50 -534
- package/dist/esm/sdk/accounts/index.js +1 -3
- package/dist/esm/sdk/accounts/intents/operations/unwrap-rwa-collateral/index.js +1 -1
- package/dist/esm/sdk/accounts/intents/operations/wrap-rwa-collateral/index.js +1 -1
- package/dist/esm/sdk/accounts/intents/testing/sdk-mock.js +2 -2
- package/dist/esm/sdk/accounts/liquidations/LiquidationsService.js +2 -2
- package/dist/esm/sdk/accounts/liquidations/constants.js +1 -2
- package/dist/esm/sdk/accounts/liquidations/index.js +1 -2
- package/dist/esm/sdk/constants/index.js +2 -2
- package/dist/esm/sdk/constants/math.js +5 -1
- package/dist/esm/sdk/index.js +4 -5
- package/dist/esm/sdk/market/MarketRegister.js +10 -0
- package/dist/esm/sdk/market/credit/CreditFacadeV310Contract.js +181 -0
- package/dist/esm/sdk/market/credit/CreditSuite.js +108 -2
- package/dist/esm/sdk/{accounts → market/credit}/dominantCollateral.js +18 -5
- package/dist/esm/sdk/market/credit/index.js +2 -1
- package/dist/esm/sdk/market/index.js +2 -1
- package/dist/esm/sdk/market/math.js +56 -1
- package/dist/esm/sdk/market/oracle/PriceOracleV310Contract.js +3 -10
- package/dist/esm/sdk/opportunities/index.js +2 -2
- package/dist/types/sdk/OnchainSDK.d.ts +1 -1
- package/dist/types/sdk/accounts/CreditAccountsServiceV310.d.ts +11 -78
- package/dist/types/sdk/accounts/index.d.ts +2 -4
- package/dist/types/sdk/accounts/liquidations/constants.d.ts +1 -2
- package/dist/types/sdk/accounts/liquidations/index.d.ts +1 -2
- package/dist/types/sdk/accounts/types.d.ts +42 -346
- package/dist/types/sdk/constants/index.d.ts +2 -2
- package/dist/types/sdk/constants/math.d.ts +5 -1
- package/dist/types/sdk/index.d.ts +10 -11
- package/dist/types/sdk/market/MarketRegister.d.ts +7 -0
- package/dist/types/sdk/market/credit/CreditFacadeV310Contract.d.ts +47 -2
- package/dist/types/sdk/market/credit/CreditSuite.d.ts +24 -2
- package/dist/types/sdk/{accounts → market/credit}/dominantCollateral.d.ts +13 -6
- package/dist/types/sdk/market/credit/index.d.ts +3 -2
- package/dist/types/sdk/market/credit/types.d.ts +112 -2
- package/dist/types/sdk/market/index.d.ts +3 -2
- package/dist/types/sdk/market/math.d.ts +60 -1
- package/dist/types/sdk/market/oracle/PriceOracleV310Contract.d.ts +1 -0
- package/dist/types/sdk/market/rwa/securitize/SecuritizeRWAFactory.d.ts +1 -1
- package/dist/types/sdk/market/rwa/types.d.ts +1 -1
- package/dist/types/sdk/opportunities/index.d.ts +2 -2
- package/package.json +1 -1
- package/dist/cjs/sdk/accounts/constants.js +0 -12
- package/dist/esm/sdk/accounts/constants.js +0 -11
- 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,
|
|
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.
|
|
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.
|
|
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
|
-
|
|
167
|
-
|
|
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 "
|
|
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 {
|
|
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 {
|
|
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 };
|
package/dist/esm/sdk/index.js
CHANGED
|
@@ -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
|
|
2
|
-
import "
|
|
3
|
-
import "
|
|
4
|
-
|
|
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 };
|