@gearbox-protocol/sdk 17.6.1 → 17.6.2
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/onchain/accounts/intents/borrow.js +1 -1
- package/dist/cjs/onchain/accounts/intents/math.js +2 -3
- package/dist/cjs/onchain/accounts/intents/open-strategy.js +1 -1
- package/dist/cjs/onchain/accounts/intents/plan.js +5 -6
- package/dist/cjs/onchain/accounts/intents/view.js +3 -4
- package/dist/esm/onchain/accounts/intents/borrow.js +1 -1
- package/dist/esm/onchain/accounts/intents/math.js +2 -3
- package/dist/esm/onchain/accounts/intents/open-strategy.js +1 -1
- package/dist/esm/onchain/accounts/intents/plan.js +5 -6
- package/dist/esm/onchain/accounts/intents/view.js +3 -4
- package/dist/types/onchain/accounts/intents/math.d.ts +1 -3
- package/dist/types/onchain/accounts/intents/plan.d.ts +0 -3
- package/dist/types/onchain/validation/checks/checkDebtLimits.d.ts +1 -1
- package/package.json +1 -1
|
@@ -55,7 +55,7 @@ async function buildBorrowState(props) {
|
|
|
55
55
|
totalDebt: market.toUnderlyingAmount(debt),
|
|
56
56
|
netValue: market.toUnderlyingAmount(margin - debt)
|
|
57
57
|
});
|
|
58
|
-
require_onchain_accounts_intents_math.assertDebtLimits(sdk, debt, suite.creditFacade, underlying
|
|
58
|
+
require_onchain_accounts_intents_math.assertDebtLimits(sdk, debt, suite.creditFacade, underlying);
|
|
59
59
|
require_onchain_accounts_intents_guards.assertCanBorrow(sdk, suite, debt);
|
|
60
60
|
const account = existing ?? require_onchain_accounts_intents_utils_credit_account_slice.unopenedAccountSlice({
|
|
61
61
|
creditManager,
|
|
@@ -56,14 +56,13 @@ function assertLeverageAtLeastOne(leverage) {
|
|
|
56
56
|
* Rejects a debt the facade would revert on: zero is always fine (no loan at
|
|
57
57
|
* all), anything else has to sit inside `[minDebt, maxDebt]`.
|
|
58
58
|
*/
|
|
59
|
-
function assertDebtLimits(sdk, debt, debtLimits, underlying
|
|
59
|
+
function assertDebtLimits(sdk, debt, debtLimits, underlying) {
|
|
60
60
|
require_onchain_validation_raise.raise(require_onchain_validation_checks_checkDebtLimits.checkDebtLimits({
|
|
61
61
|
debt,
|
|
62
62
|
minDebt: debtLimits.minDebt,
|
|
63
63
|
maxDebt: debtLimits.maxDebt,
|
|
64
64
|
underlying: require_onchain_validation_helpers_token.toToken(sdk, underlying),
|
|
65
|
-
allowZero: true
|
|
66
|
-
maxBorrowAmount
|
|
65
|
+
allowZero: true
|
|
67
66
|
}), debt > debtLimits.maxDebt ? `debt ${debt} exceeds maxDebt ${debtLimits.maxDebt}` : `debt ${debt} is below minDebt ${debtLimits.minDebt}`);
|
|
68
67
|
}
|
|
69
68
|
//#endregion
|
|
@@ -45,7 +45,7 @@ async function buildOpenStrategyState(props) {
|
|
|
45
45
|
creditFacade: suite.creditFacade.address,
|
|
46
46
|
underlying
|
|
47
47
|
});
|
|
48
|
-
require_onchain_accounts_intents_math.assertDebtLimits(sdk, debt, suite.creditFacade, underlying
|
|
48
|
+
require_onchain_accounts_intents_math.assertDebtLimits(sdk, debt, suite.creditFacade, underlying);
|
|
49
49
|
require_onchain_accounts_intents_guards.assertCanBorrow(sdk, suite, debt);
|
|
50
50
|
const paths = require_onchain_accounts_intents_utils_router_path.createRouterPaths({
|
|
51
51
|
sdk,
|
|
@@ -43,7 +43,7 @@ function planDeposit(intent, view) {
|
|
|
43
43
|
const aU = view.price(intent.token, U, intent.amount);
|
|
44
44
|
const debtDelta = intent.targetLeverage === void 0 ? require_onchain_accounts_intents_math.proportionalDebt(view, aU) : require_onchain_accounts_intents_math.debtForLeverage(view.collateral + aU, intent.targetLeverage) - view.debt;
|
|
45
45
|
if (debtDelta < 0n) throw new require_onchain_validation_raise.IntentPreviewError(require_model_errors_operation_errors.leverageOutOfRange(), `deposit: target leverage ${intent.targetLeverage} would require repaying debt`);
|
|
46
|
-
require_onchain_accounts_intents_math.assertDebtLimits(view.sdk, view.debt + debtDelta, view.debtLimits, U
|
|
46
|
+
require_onchain_accounts_intents_math.assertDebtLimits(view.sdk, view.debt + debtDelta, view.debtLimits, U);
|
|
47
47
|
const T = intent.positionToken ?? positionToken(view, "deposit");
|
|
48
48
|
const depositStays = require_onchain_accounts_intents_utils_common.eq(intent.token, T);
|
|
49
49
|
return [
|
|
@@ -74,12 +74,11 @@ function planRepay(intent, view) {
|
|
|
74
74
|
if (view.debt <= 0n) throw new require_onchain_validation_raise.IntentPreviewError(require_model_errors_operation_errors.debtOutOfRange({
|
|
75
75
|
requested: require_onchain_validation_helpers_token.toTokenAmount(view.sdk, U, view.debt),
|
|
76
76
|
minDebt: require_onchain_validation_helpers_token.toTokenAmount(view.sdk, U, view.debtLimits.minDebt),
|
|
77
|
-
maxDebt: require_onchain_validation_helpers_token.toTokenAmount(view.sdk, U, view.debtLimits.maxDebt)
|
|
78
|
-
maxBorrowAmount: view.maxBorrowAmount
|
|
77
|
+
maxDebt: require_onchain_validation_helpers_token.toTokenAmount(view.sdk, U, view.debtLimits.maxDebt)
|
|
79
78
|
}), "repay: the account owes nothing");
|
|
80
79
|
const funding = everything(intent.amount) ? view.price(U, intent.token, withMargin(view.debt)) : intent.amount;
|
|
81
80
|
const repaid = min(view.price(intent.token, U, funding), view.debt);
|
|
82
|
-
require_onchain_accounts_intents_math.assertDebtLimits(view.sdk, view.debt - repaid, view.debtLimits, view.underlying
|
|
81
|
+
require_onchain_accounts_intents_math.assertDebtLimits(view.sdk, view.debt - repaid, view.debtLimits, view.underlying);
|
|
83
82
|
return [
|
|
84
83
|
add(intent.token, funding, intent.value),
|
|
85
84
|
...fundsInU ? [] : [convert(intent.token, U, funding)],
|
|
@@ -308,7 +307,7 @@ function withdrawShape(intent, view) {
|
|
|
308
307
|
};
|
|
309
308
|
}
|
|
310
309
|
const dD = require_onchain_accounts_intents_math.proportionalDebt(view, WU);
|
|
311
|
-
require_onchain_accounts_intents_math.assertDebtLimits(view.sdk, view.debt - dD, view.debtLimits, view.underlying
|
|
310
|
+
require_onchain_accounts_intents_math.assertDebtLimits(view.sdk, view.debt - dD, view.debtLimits, view.underlying);
|
|
312
311
|
return {
|
|
313
312
|
U,
|
|
314
313
|
T,
|
|
@@ -327,7 +326,7 @@ function leverageShape(intent, view) {
|
|
|
327
326
|
require_onchain_accounts_intents_math.assertLeverageAtLeastOne(intent.targetLeverage);
|
|
328
327
|
if (view.collateral <= 0n) throw new require_onchain_validation_raise.IntentPreviewError(require_model_errors_operation_errors.insufficientBalance(), "adjustLeverage: account has no collateral to lever");
|
|
329
328
|
const target = require_onchain_accounts_intents_math.debtForLeverage(view.collateral, intent.targetLeverage);
|
|
330
|
-
require_onchain_accounts_intents_math.assertDebtLimits(view.sdk, target, view.debtLimits, view.underlying
|
|
329
|
+
require_onchain_accounts_intents_math.assertDebtLimits(view.sdk, target, view.debtLimits, view.underlying);
|
|
331
330
|
return {
|
|
332
331
|
U: view.underlying,
|
|
333
332
|
delta: target - view.debt
|
|
@@ -13,7 +13,7 @@ function accountView(creditAccount, sdk) {
|
|
|
13
13
|
const { underlying, creditManager } = creditAccount;
|
|
14
14
|
const oracle = sdk.marketRegister.findByCreditManager(creditManager).priceOracle;
|
|
15
15
|
const price = (from, to, amount) => oracle.safeConvert(from, to, amount).value;
|
|
16
|
-
const
|
|
16
|
+
const { creditFacade } = sdk.marketRegister.findCreditManager(creditManager);
|
|
17
17
|
let totalValue = 0n;
|
|
18
18
|
for (const t of creditAccount.tokens) totalValue += price(t.token, underlying, t.balance);
|
|
19
19
|
return {
|
|
@@ -23,10 +23,9 @@ function accountView(creditAccount, sdk) {
|
|
|
23
23
|
debt: creditAccount.totalDebt,
|
|
24
24
|
collateral: totalValue - creditAccount.totalDebt,
|
|
25
25
|
debtLimits: {
|
|
26
|
-
minDebt:
|
|
27
|
-
maxDebt:
|
|
26
|
+
minDebt: creditFacade.minDebt,
|
|
27
|
+
maxDebt: creditFacade.maxDebt
|
|
28
28
|
},
|
|
29
|
-
maxBorrowAmount: creditSuite.maxBorrowAmount(),
|
|
30
29
|
balanceOf: (token) => creditAccount.tokens.find((t) => require_onchain_accounts_intents_utils_common.eq(t.token, token))?.balance ?? 0n,
|
|
31
30
|
price,
|
|
32
31
|
fattest: (exclude) => require_onchain_accounts_intents_utils_pick_token.pickFattestNonPhantomToken({
|
|
@@ -54,7 +54,7 @@ async function buildBorrowState(props) {
|
|
|
54
54
|
totalDebt: market.toUnderlyingAmount(debt),
|
|
55
55
|
netValue: market.toUnderlyingAmount(margin - debt)
|
|
56
56
|
});
|
|
57
|
-
assertDebtLimits(sdk, debt, suite.creditFacade, underlying
|
|
57
|
+
assertDebtLimits(sdk, debt, suite.creditFacade, underlying);
|
|
58
58
|
assertCanBorrow(sdk, suite, debt);
|
|
59
59
|
const account = existing ?? unopenedAccountSlice({
|
|
60
60
|
creditManager,
|
|
@@ -55,14 +55,13 @@ function assertLeverageAtLeastOne(leverage) {
|
|
|
55
55
|
* Rejects a debt the facade would revert on: zero is always fine (no loan at
|
|
56
56
|
* all), anything else has to sit inside `[minDebt, maxDebt]`.
|
|
57
57
|
*/
|
|
58
|
-
function assertDebtLimits(sdk, debt, debtLimits, underlying
|
|
58
|
+
function assertDebtLimits(sdk, debt, debtLimits, underlying) {
|
|
59
59
|
raise(checkDebtLimits({
|
|
60
60
|
debt,
|
|
61
61
|
minDebt: debtLimits.minDebt,
|
|
62
62
|
maxDebt: debtLimits.maxDebt,
|
|
63
63
|
underlying: toToken(sdk, underlying),
|
|
64
|
-
allowZero: true
|
|
65
|
-
maxBorrowAmount
|
|
64
|
+
allowZero: true
|
|
66
65
|
}), debt > debtLimits.maxDebt ? `debt ${debt} exceeds maxDebt ${debtLimits.maxDebt}` : `debt ${debt} is below minDebt ${debtLimits.minDebt}`);
|
|
67
66
|
}
|
|
68
67
|
//#endregion
|
|
@@ -44,7 +44,7 @@ async function buildOpenStrategyState(props) {
|
|
|
44
44
|
creditFacade: suite.creditFacade.address,
|
|
45
45
|
underlying
|
|
46
46
|
});
|
|
47
|
-
assertDebtLimits(sdk, debt, suite.creditFacade, underlying
|
|
47
|
+
assertDebtLimits(sdk, debt, suite.creditFacade, underlying);
|
|
48
48
|
assertCanBorrow(sdk, suite, debt);
|
|
49
49
|
const paths = createRouterPaths({
|
|
50
50
|
sdk,
|
|
@@ -42,7 +42,7 @@ function planDeposit(intent, view) {
|
|
|
42
42
|
const aU = view.price(intent.token, U, intent.amount);
|
|
43
43
|
const debtDelta = intent.targetLeverage === void 0 ? proportionalDebt(view, aU) : debtForLeverage(view.collateral + aU, intent.targetLeverage) - view.debt;
|
|
44
44
|
if (debtDelta < 0n) throw new IntentPreviewError(leverageOutOfRange(), `deposit: target leverage ${intent.targetLeverage} would require repaying debt`);
|
|
45
|
-
assertDebtLimits(view.sdk, view.debt + debtDelta, view.debtLimits, U
|
|
45
|
+
assertDebtLimits(view.sdk, view.debt + debtDelta, view.debtLimits, U);
|
|
46
46
|
const T = intent.positionToken ?? positionToken(view, "deposit");
|
|
47
47
|
const depositStays = eq(intent.token, T);
|
|
48
48
|
return [
|
|
@@ -73,12 +73,11 @@ function planRepay(intent, view) {
|
|
|
73
73
|
if (view.debt <= 0n) throw new IntentPreviewError(debtOutOfRange({
|
|
74
74
|
requested: toTokenAmount(view.sdk, U, view.debt),
|
|
75
75
|
minDebt: toTokenAmount(view.sdk, U, view.debtLimits.minDebt),
|
|
76
|
-
maxDebt: toTokenAmount(view.sdk, U, view.debtLimits.maxDebt)
|
|
77
|
-
maxBorrowAmount: view.maxBorrowAmount
|
|
76
|
+
maxDebt: toTokenAmount(view.sdk, U, view.debtLimits.maxDebt)
|
|
78
77
|
}), "repay: the account owes nothing");
|
|
79
78
|
const funding = everything(intent.amount) ? view.price(U, intent.token, withMargin(view.debt)) : intent.amount;
|
|
80
79
|
const repaid = min(view.price(intent.token, U, funding), view.debt);
|
|
81
|
-
assertDebtLimits(view.sdk, view.debt - repaid, view.debtLimits, view.underlying
|
|
80
|
+
assertDebtLimits(view.sdk, view.debt - repaid, view.debtLimits, view.underlying);
|
|
82
81
|
return [
|
|
83
82
|
add(intent.token, funding, intent.value),
|
|
84
83
|
...fundsInU ? [] : [convert(intent.token, U, funding)],
|
|
@@ -307,7 +306,7 @@ function withdrawShape(intent, view) {
|
|
|
307
306
|
};
|
|
308
307
|
}
|
|
309
308
|
const dD = proportionalDebt(view, WU);
|
|
310
|
-
assertDebtLimits(view.sdk, view.debt - dD, view.debtLimits, view.underlying
|
|
309
|
+
assertDebtLimits(view.sdk, view.debt - dD, view.debtLimits, view.underlying);
|
|
311
310
|
return {
|
|
312
311
|
U,
|
|
313
312
|
T,
|
|
@@ -326,7 +325,7 @@ function leverageShape(intent, view) {
|
|
|
326
325
|
assertLeverageAtLeastOne(intent.targetLeverage);
|
|
327
326
|
if (view.collateral <= 0n) throw new IntentPreviewError(insufficientBalance(), "adjustLeverage: account has no collateral to lever");
|
|
328
327
|
const target = debtForLeverage(view.collateral, intent.targetLeverage);
|
|
329
|
-
assertDebtLimits(view.sdk, target, view.debtLimits, view.underlying
|
|
328
|
+
assertDebtLimits(view.sdk, target, view.debtLimits, view.underlying);
|
|
330
329
|
return {
|
|
331
330
|
U: view.underlying,
|
|
332
331
|
delta: target - view.debt
|
|
@@ -12,7 +12,7 @@ function accountView(creditAccount, sdk) {
|
|
|
12
12
|
const { underlying, creditManager } = creditAccount;
|
|
13
13
|
const oracle = sdk.marketRegister.findByCreditManager(creditManager).priceOracle;
|
|
14
14
|
const price = (from, to, amount) => oracle.safeConvert(from, to, amount).value;
|
|
15
|
-
const
|
|
15
|
+
const { creditFacade } = sdk.marketRegister.findCreditManager(creditManager);
|
|
16
16
|
let totalValue = 0n;
|
|
17
17
|
for (const t of creditAccount.tokens) totalValue += price(t.token, underlying, t.balance);
|
|
18
18
|
return {
|
|
@@ -22,10 +22,9 @@ function accountView(creditAccount, sdk) {
|
|
|
22
22
|
debt: creditAccount.totalDebt,
|
|
23
23
|
collateral: totalValue - creditAccount.totalDebt,
|
|
24
24
|
debtLimits: {
|
|
25
|
-
minDebt:
|
|
26
|
-
maxDebt:
|
|
25
|
+
minDebt: creditFacade.minDebt,
|
|
26
|
+
maxDebt: creditFacade.maxDebt
|
|
27
27
|
},
|
|
28
|
-
maxBorrowAmount: creditSuite.maxBorrowAmount(),
|
|
29
28
|
balanceOf: (token) => creditAccount.tokens.find((t) => eq(t.token, token))?.balance ?? 0n,
|
|
30
29
|
price,
|
|
31
30
|
fattest: (exclude) => pickFattestNonPhantomToken({
|
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
import { MaxBorrowAmount } from "../../market/credit/types.js";
|
|
2
|
-
import "../../market/index.js";
|
|
3
1
|
import { OnchainSDK } from "../../OnchainSDK.js";
|
|
4
2
|
import { Address } from "viem";
|
|
5
3
|
//#region src/onchain/accounts/intents/math.d.ts
|
|
@@ -46,6 +44,6 @@ declare function assertLeverageAtLeastOne(leverage: bigint): void;
|
|
|
46
44
|
* Rejects a debt the facade would revert on: zero is always fine (no loan at
|
|
47
45
|
* all), anything else has to sit inside `[minDebt, maxDebt]`.
|
|
48
46
|
*/
|
|
49
|
-
declare function assertDebtLimits(sdk: OnchainSDK, debt: bigint, debtLimits: DebtLimits, underlying: Address
|
|
47
|
+
declare function assertDebtLimits(sdk: OnchainSDK, debt: bigint, debtLimits: DebtLimits, underlying: Address): void;
|
|
50
48
|
//#endregion
|
|
51
49
|
export { DebtLimits, Position, assertDebtLimits, assertLeverageAtLeastOne, debtForLeverage, maxProportionalWithdrawal, proportionalDebt };
|
|
@@ -1,8 +1,6 @@
|
|
|
1
1
|
import { DelayedIntent } from "../../../model/delayed-intents.js";
|
|
2
2
|
import "../../../model/index.js";
|
|
3
3
|
import { ClaimableWithdrawal } from "../withdrawal-compressor/types.js";
|
|
4
|
-
import { MaxBorrowAmount } from "../../market/credit/types.js";
|
|
5
|
-
import "../../market/index.js";
|
|
6
4
|
import { OnchainSDK } from "../../OnchainSDK.js";
|
|
7
5
|
import { AddCollateralIntent, AdjustLeverageIntent, DepositStrategyIntent, RepayStrategyIntent, WithdrawAssetIntent, WithdrawStrategyIntent } from "./types.js";
|
|
8
6
|
import { DebtLimits } from "./math.js";
|
|
@@ -111,7 +109,6 @@ interface AccountView {
|
|
|
111
109
|
/** TVL − debt, in underlying. */
|
|
112
110
|
collateral: bigint;
|
|
113
111
|
debtLimits: DebtLimits;
|
|
114
|
-
maxBorrowAmount: MaxBorrowAmount;
|
|
115
112
|
balanceOf(token: Address): bigint;
|
|
116
113
|
/** Oracle conversion; unpriceable tokens contribute 0n. */
|
|
117
114
|
price(from: Address, to: Address, amount: bigint): bigint;
|
|
@@ -17,7 +17,7 @@ interface DebtLimitsArgs {
|
|
|
17
17
|
*/
|
|
18
18
|
allowZero: boolean;
|
|
19
19
|
/** From the caller's suite; a caller that raises to throw advises nobody. */
|
|
20
|
-
maxBorrowAmount
|
|
20
|
+
maxBorrowAmount?: MaxBorrowAmount;
|
|
21
21
|
}
|
|
22
22
|
/** A debt the facade would revert on. */
|
|
23
23
|
declare function checkDebtLimits(args: DebtLimitsArgs): DebtOutOfRangeError[];
|