@haven-fi/solauto-sdk 1.0.437 → 1.0.439
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/clients/solautoMarginfiClient.d.ts.map +1 -1
- package/dist/clients/solautoMarginfiClient.js +1 -1
- package/dist/transactions/transactionUtils.js +1 -1
- package/dist/utils/solauto/rebalanceUtils.d.ts +5 -1
- package/dist/utils/solauto/rebalanceUtils.d.ts.map +1 -1
- package/dist/utils/solauto/rebalanceUtils.js +19 -8
- package/package.json +1 -1
- package/src/clients/solautoMarginfiClient.ts +1 -2
- package/src/transactions/transactionUtils.ts +1 -1
- package/src/utils/solauto/rebalanceUtils.ts +44 -24
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"solautoMarginfiClient.d.ts","sourceRoot":"","sources":["../../src/clients/solautoMarginfiClient.ts"],"names":[],"mappings":"AAIA,OAAO,EACL,MAAM,EACN,kBAAkB,EAMnB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,SAAS,EAA8B,MAAM,iBAAiB,CAAC;AACxE,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACnE,OAAO,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAM1D,OAAO,EACL,kBAAkB,EAElB,aAAa,EAGb,iBAAiB,EACjB,wBAAwB,EACxB,gCAAgC,EAKjC,MAAM,cAAc,CAAC;AAEtB,OAAO,EAEL,eAAe,EAUhB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,gBAAgB,EAChB,eAAe,EAChB,MAAM,iCAAiC,CAAC;AASzC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAG5C,MAAM,WAAW,yBAA0B,SAAQ,iBAAiB;IAClE,eAAe,CAAC,EAAE,SAAS,GAAG,MAAM,CAAC;IACrC,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,aAAa,CAAC,EAAE,SAAS,CAAC;CAC3B;AAED,qBAAa,qBAAsB,SAAQ,aAAa;IACtD,OAAO,CAAC,cAAc,CAAC,CAAY;IAE5B,eAAe,EAAG,SAAS,CAAC;IAE5B,sBAAsB,EAAE,MAAM,CAAa;IAC3C,eAAe,EAAG,SAAS,GAAG,MAAM,CAAC;IACrC,iBAAiB,EAAG,SAAS,CAAC;IAC9B,aAAa,EAAG,SAAS,CAAC;IAE1B,sBAAsB,EAAG,qBAAqB,CAAC;IAC/C,oBAAoB,EAAG,qBAAqB,CAAC;IAE7C,iBAAiB,EAAG,SAAS,CAAC;IAC9B,eAAe,EAAG,SAAS,CAAC;IAG5B,iCAAiC,CAAC,EAAE,MAAM,CAAC;IAC3C,6BAA6B,EAAG,SAAS,CAAC;IAC1C,2BAA2B,CAAC,EAAE,eAAe,CAAC;IAE/C,UAAU,CAAC,IAAI,EAAE,yBAAyB;IA2F1C,8BAA8B;IAwCpC,eAAe,IAAI,SAAS;IAI5B,mBAAmB,IAAI,MAAM,EAAE;IAI/B,gBAAgB,IAAI,SAAS,EAAE;IAUzB,wBAAwB,IAAI,OAAO,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,CAAC;IA0BvE,yBAAyB,CAAC,eAAe,EAAE,MAAM,GAAG,kBAAkB;IAStE,YAAY,CACV,aAAa,CAAC,EAAE,gCAAgC,EAChD,GAAG,CAAC,EAAE,kBAAkB,GACvB,kBAAkB;IAMrB,OAAO,CAAC,sBAAsB;IA6C9B,OAAO,IAAI,kBAAkB;IAc7B,mBAAmB,CAAC,IAAI,EAAE,iBAAiB,GAAG,kBAAkB;IAUhE,OAAO,CAAC,6BAA6B;IAmErC,OAAO,CAAC,oCAAoC;IA0D5C,SAAS,CACP,aAAa,EAAE,GAAG,GAAG,GAAG,EACxB,QAAQ,EAAE,aAAa,EACvB,aAAa,EAAE,wBAAwB,EACvC,eAAe,EAAE,eAAe,EAChC,SAAS,CAAC,EAAE,gBAAgB,EAC5B,2BAA2B,CAAC,EAAE,MAAM,GACnC,kBAAkB;
|
1
|
+
{"version":3,"file":"solautoMarginfiClient.d.ts","sourceRoot":"","sources":["../../src/clients/solautoMarginfiClient.ts"],"names":[],"mappings":"AAIA,OAAO,EACL,MAAM,EACN,kBAAkB,EAMnB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,SAAS,EAA8B,MAAM,iBAAiB,CAAC;AACxE,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACnE,OAAO,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAM1D,OAAO,EACL,kBAAkB,EAElB,aAAa,EAGb,iBAAiB,EACjB,wBAAwB,EACxB,gCAAgC,EAKjC,MAAM,cAAc,CAAC;AAEtB,OAAO,EAEL,eAAe,EAUhB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,gBAAgB,EAChB,eAAe,EAChB,MAAM,iCAAiC,CAAC;AASzC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAG5C,MAAM,WAAW,yBAA0B,SAAQ,iBAAiB;IAClE,eAAe,CAAC,EAAE,SAAS,GAAG,MAAM,CAAC;IACrC,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,aAAa,CAAC,EAAE,SAAS,CAAC;CAC3B;AAED,qBAAa,qBAAsB,SAAQ,aAAa;IACtD,OAAO,CAAC,cAAc,CAAC,CAAY;IAE5B,eAAe,EAAG,SAAS,CAAC;IAE5B,sBAAsB,EAAE,MAAM,CAAa;IAC3C,eAAe,EAAG,SAAS,GAAG,MAAM,CAAC;IACrC,iBAAiB,EAAG,SAAS,CAAC;IAC9B,aAAa,EAAG,SAAS,CAAC;IAE1B,sBAAsB,EAAG,qBAAqB,CAAC;IAC/C,oBAAoB,EAAG,qBAAqB,CAAC;IAE7C,iBAAiB,EAAG,SAAS,CAAC;IAC9B,eAAe,EAAG,SAAS,CAAC;IAG5B,iCAAiC,CAAC,EAAE,MAAM,CAAC;IAC3C,6BAA6B,EAAG,SAAS,CAAC;IAC1C,2BAA2B,CAAC,EAAE,eAAe,CAAC;IAE/C,UAAU,CAAC,IAAI,EAAE,yBAAyB;IA2F1C,8BAA8B;IAwCpC,eAAe,IAAI,SAAS;IAI5B,mBAAmB,IAAI,MAAM,EAAE;IAI/B,gBAAgB,IAAI,SAAS,EAAE;IAUzB,wBAAwB,IAAI,OAAO,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,CAAC;IA0BvE,yBAAyB,CAAC,eAAe,EAAE,MAAM,GAAG,kBAAkB;IAStE,YAAY,CACV,aAAa,CAAC,EAAE,gCAAgC,EAChD,GAAG,CAAC,EAAE,kBAAkB,GACvB,kBAAkB;IAMrB,OAAO,CAAC,sBAAsB;IA6C9B,OAAO,IAAI,kBAAkB;IAc7B,mBAAmB,CAAC,IAAI,EAAE,iBAAiB,GAAG,kBAAkB;IAUhE,OAAO,CAAC,6BAA6B;IAmErC,OAAO,CAAC,oCAAoC;IA0D5C,SAAS,CACP,aAAa,EAAE,GAAG,GAAG,GAAG,EACxB,QAAQ,EAAE,aAAa,EACvB,aAAa,EAAE,wBAAwB,EACvC,eAAe,EAAE,eAAe,EAChC,SAAS,CAAC,EAAE,gBAAgB,EAC5B,2BAA2B,CAAC,EAAE,MAAM,GACnC,kBAAkB;IA+ErB,WAAW,CACT,gBAAgB,EAAE,gBAAgB,EAClC,uBAAuB,EAAE,SAAS,GACjC,kBAAkB;IA2BrB,UAAU,CAAC,gBAAgB,EAAE,gBAAgB,GAAG,kBAAkB;IAoF5D,qBAAqB,IAAI,OAAO,CAAC,aAAa,GAAG,SAAS,CAAC;CA8ClE"}
|
@@ -358,7 +358,7 @@ class SolautoMarginfiClient extends solautoClient_1.SolautoClient {
|
|
358
358
|
: undefined,
|
359
359
|
rebalanceType,
|
360
360
|
targetLiqUtilizationRateBps: targetLiqUtilizationRateBps ?? null,
|
361
|
-
targetInAmountBaseUnit:
|
361
|
+
targetInAmountBaseUnit: parseInt(jupQuote.inAmount),
|
362
362
|
});
|
363
363
|
}
|
364
364
|
flashBorrow(flashLoanDetails, destinationTokenAccount) {
|
@@ -375,7 +375,7 @@ async function buildSolautoRebalanceTransaction(client, targetLiqUtilizationRate
|
|
375
375
|
client.log("Rebalance values: ", values);
|
376
376
|
const swapDetails = (0, rebalanceUtils_1.getJupSwapRebalanceDetails)(client, values, targetLiqUtilizationRateBps, attemptNum);
|
377
377
|
const { jupQuote, lookupTableAddresses, setupInstructions, tokenLedgerIx, swapIx, } = await (0, jupiterUtils_1.getJupSwapTransaction)(client.signer, swapDetails, attemptNum);
|
378
|
-
const flashLoan = (0, rebalanceUtils_1.getFlashLoanDetails)(client, values, jupQuote);
|
378
|
+
const flashLoan = (0, rebalanceUtils_1.getFlashLoanDetails)(client, values, swapDetails, jupQuote);
|
379
379
|
let tx = (0, umi_1.transactionBuilder)();
|
380
380
|
if (await requiresRefreshBeforeRebalance(client)) {
|
381
381
|
tx = tx.add(client.refresh());
|
@@ -15,11 +15,15 @@ export interface RebalanceValues {
|
|
15
15
|
feesUsd: number;
|
16
16
|
}
|
17
17
|
export declare function getRebalanceValues(state: PositionState, settings: SolautoSettingsParameters | undefined, dca: DCASettings | undefined, currentUnixTime: number, supplyPrice: number, debtPrice: number, targetLiqUtilizationRateBps?: number): RebalanceValues;
|
18
|
+
export declare function rebalanceRequiresFlashLoan(client: SolautoClient, values: RebalanceValues): {
|
19
|
+
requiresFlashLoan: boolean;
|
20
|
+
useDebtLiquidity: boolean;
|
21
|
+
};
|
18
22
|
export interface FlashLoanDetails {
|
19
23
|
baseUnitAmount: bigint;
|
20
24
|
mint: PublicKey;
|
21
25
|
useDebtLiquidity: boolean;
|
22
26
|
}
|
23
|
-
export declare function getFlashLoanDetails(client: SolautoClient, values: RebalanceValues, jupQuote: QuoteResponse): FlashLoanDetails | undefined;
|
27
|
+
export declare function getFlashLoanDetails(client: SolautoClient, values: RebalanceValues, swapDetails: JupSwapDetails, jupQuote: QuoteResponse): FlashLoanDetails | undefined;
|
24
28
|
export declare function getJupSwapRebalanceDetails(client: SolautoClient, values: RebalanceValues, targetLiqUtilizationRateBps?: number, attemptNum?: number): JupSwapDetails;
|
25
29
|
//# sourceMappingURL=rebalanceUtils.d.ts.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"rebalanceUtils.d.ts","sourceRoot":"","sources":["../../../src/utils/solauto/rebalanceUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAC5D,OAAO,EACL,WAAW,EACX,aAAa,EAEb,kBAAkB,EAClB,yBAAyB,EACzB,SAAS,EACV,MAAM,iBAAiB,CAAC;AAOzB,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAajD,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAoI9C,MAAM,WAAW,eAAe;IAC9B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,qBAAqB,EAAE,OAAO,CAAC;IAC/B,aAAa,EAAE,MAAM,CAAC;IACtB,gBAAgB,EAAE,MAAM,CAAC;IACzB,YAAY,CAAC,EAAE,SAAS,CAAC;IACzB,eAAe,EAAE,eAAe,CAAC;IACjC,kBAAkB,EAAE,kBAAkB,CAAC;IACvC,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,aAAa,EACpB,QAAQ,EAAE,yBAAyB,GAAG,SAAS,EAC/C,GAAG,EAAE,WAAW,GAAG,SAAS,EAC5B,eAAe,EAAE,MAAM,EACvB,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,EACjB,2BAA2B,CAAC,EAAE,MAAM,GACnC,eAAe,CAwDjB;AAED,MAAM,WAAW,gBAAgB;IAC/B,cAAc,EAAE,MAAM,CAAC;IACvB,IAAI,EAAE,SAAS,CAAC;IAChB,gBAAgB,EAAE,OAAO,CAAC;CAC3B;AAED,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,aAAa,EACrB,MAAM,EAAE,eAAe,EACvB,QAAQ,EAAE,aAAa,GACtB,gBAAgB,GAAG,SAAS,
|
1
|
+
{"version":3,"file":"rebalanceUtils.d.ts","sourceRoot":"","sources":["../../../src/utils/solauto/rebalanceUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAC5D,OAAO,EACL,WAAW,EACX,aAAa,EAEb,kBAAkB,EAClB,yBAAyB,EACzB,SAAS,EACV,MAAM,iBAAiB,CAAC;AAOzB,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAajD,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAoI9C,MAAM,WAAW,eAAe;IAC9B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,qBAAqB,EAAE,OAAO,CAAC;IAC/B,aAAa,EAAE,MAAM,CAAC;IACtB,gBAAgB,EAAE,MAAM,CAAC;IACzB,YAAY,CAAC,EAAE,SAAS,CAAC;IACzB,eAAe,EAAE,eAAe,CAAC;IACjC,kBAAkB,EAAE,kBAAkB,CAAC;IACvC,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,aAAa,EACpB,QAAQ,EAAE,yBAAyB,GAAG,SAAS,EAC/C,GAAG,EAAE,WAAW,GAAG,SAAS,EAC5B,eAAe,EAAE,MAAM,EACvB,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,EACjB,2BAA2B,CAAC,EAAE,MAAM,GACnC,eAAe,CAwDjB;AAED,wBAAgB,0BAA0B,CACxC,MAAM,EAAE,aAAa,EACrB,MAAM,EAAE,eAAe;;;EAsDxB;AAED,MAAM,WAAW,gBAAgB;IAC/B,cAAc,EAAE,MAAM,CAAC;IACvB,IAAI,EAAE,SAAS,CAAC;IAChB,gBAAgB,EAAE,OAAO,CAAC;CAC3B;AAED,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,aAAa,EACrB,MAAM,EAAE,eAAe,EACvB,WAAW,EAAE,cAAc,EAC3B,QAAQ,EAAE,aAAa,GACtB,gBAAgB,GAAG,SAAS,CAmC9B;AAED,wBAAgB,0BAA0B,CACxC,MAAM,EAAE,aAAa,EACrB,MAAM,EAAE,eAAe,EACvB,2BAA2B,CAAC,EAAE,MAAM,EACpC,UAAU,CAAC,EAAE,MAAM,GAClB,cAAc,CAwDhB"}
|
@@ -1,6 +1,7 @@
|
|
1
1
|
"use strict";
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
3
3
|
exports.getRebalanceValues = getRebalanceValues;
|
4
|
+
exports.rebalanceRequiresFlashLoan = rebalanceRequiresFlashLoan;
|
4
5
|
exports.getFlashLoanDetails = getFlashLoanDetails;
|
5
6
|
exports.getJupSwapRebalanceDetails = getJupSwapRebalanceDetails;
|
6
7
|
const generated_1 = require("../../generated");
|
@@ -108,7 +109,7 @@ function getRebalanceValues(state, settings, dca, currentUnixTime, supplyPrice,
|
|
108
109
|
feesUsd: Math.abs(debtAdjustmentUsd * (0, numberUtils_1.fromBps)(adjustmentFeeBps)),
|
109
110
|
};
|
110
111
|
}
|
111
|
-
function
|
112
|
+
function rebalanceRequiresFlashLoan(client, values) {
|
112
113
|
let supplyUsd = (0, numberUtils_1.fromBaseUnit)(client.solautoPositionState.supply.amountUsed.baseAmountUsdValue, generalAccounts_1.USD_DECIMALS) +
|
113
114
|
(values.dcaTokenType === generated_1.TokenType.Supply ? values.amountUsdToDcaIn : 0);
|
114
115
|
let debtUsd = (0, numberUtils_1.fromBaseUnit)(client.solautoPositionState.debt.amountUsed.baseAmountUsdValue, generalAccounts_1.USD_DECIMALS);
|
@@ -126,15 +127,19 @@ function getFlashLoanDetails(client, values, jupQuote) {
|
|
126
127
|
const requiresFlashLoan = supplyUsd <= 0 || tempLiqUtilizationRateBps > maxLiqUtilizationRateBps;
|
127
128
|
(0, generalUtils_2.consoleLog)("Requires flash loan:", requiresFlashLoan);
|
128
129
|
(0, generalUtils_2.consoleLog)("Intermediary liq utilization rate:", tempLiqUtilizationRateBps, `$${supplyUsd}`, `$${debtUsd}`, "Max:", maxLiqUtilizationRateBps);
|
130
|
+
const useDebtLiquidity = Math.abs(values.debtAdjustmentUsd) * 1.1 <=
|
131
|
+
(0, numberUtils_1.fromBaseUnit)(client.solautoPositionState?.debt.amountCanBeUsed.baseAmountUsdValue ??
|
132
|
+
BigInt(0), generalAccounts_1.USD_DECIMALS);
|
133
|
+
return { requiresFlashLoan, useDebtLiquidity };
|
134
|
+
}
|
135
|
+
function getFlashLoanDetails(client, values, swapDetails, jupQuote) {
|
136
|
+
const { requiresFlashLoan, useDebtLiquidity } = rebalanceRequiresFlashLoan(client, values);
|
129
137
|
let flashLoanToken = undefined;
|
130
138
|
let flashLoanTokenPrice = 0;
|
131
139
|
const inAmount = BigInt(parseInt(jupQuote.inAmount));
|
132
140
|
const outAmount = BigInt(parseInt(jupQuote.outAmount));
|
133
|
-
const sufficientDebtLiquidity = debtAdjustmentUsdAbs * 1.1 <=
|
134
|
-
(0, numberUtils_1.fromBaseUnit)(client.solautoPositionState?.debt.amountCanBeUsed.baseAmountUsdValue ??
|
135
|
-
BigInt(0), generalAccounts_1.USD_DECIMALS);
|
136
141
|
const boosting = values.rebalanceDirection === generated_1.RebalanceDirection.Boost;
|
137
|
-
if (boosting ||
|
142
|
+
if (boosting || useDebtLiquidity) {
|
138
143
|
flashLoanToken = client.solautoPositionState.debt;
|
139
144
|
flashLoanTokenPrice = (0, priceUtils_1.safeGetPrice)(client.debtMint);
|
140
145
|
}
|
@@ -145,7 +150,6 @@ function getFlashLoanDetails(client, values, jupQuote) {
|
|
145
150
|
if (jupQuote.swapMode !== "ExactOut" && jupQuote.swapMode !== "ExactIn") {
|
146
151
|
throw new Error("Token ledger swap not currently supported");
|
147
152
|
}
|
148
|
-
const useDebtLiquidity = (0, umi_web3js_adapters_1.toWeb3JsPublicKey)(flashLoanToken.mint).equals(client.debtMint);
|
149
153
|
const baseUnitAmount = boosting || (!boosting && !useDebtLiquidity) ? inAmount : outAmount;
|
150
154
|
return requiresFlashLoan
|
151
155
|
? {
|
@@ -171,13 +175,20 @@ function getJupSwapRebalanceDetails(client, values, targetLiqUtilizationRateBps,
|
|
171
175
|
// Add this small percentage to account for the APR on the debt between now and the transaction
|
172
176
|
0.0001))
|
173
177
|
: (0, numberUtils_1.toBaseUnit)(usdToSwap / (0, priceUtils_1.safeGetPrice)(output.mint), output.decimals);
|
174
|
-
const
|
178
|
+
const repaying = values.rebalanceDirection === generated_1.RebalanceDirection.Repay;
|
179
|
+
const { requiresFlashLoan, useDebtLiquidity } = rebalanceRequiresFlashLoan(client, values);
|
180
|
+
const flashLoanRepayFromDebt = repaying && requiresFlashLoan && useDebtLiquidity;
|
181
|
+
const exactOut = targetLiqUtilizationRateBps === 0 ||
|
182
|
+
values.repayingCloseToMaxLtv ||
|
183
|
+
flashLoanRepayFromDebt;
|
175
184
|
const exactIn = !exactOut;
|
176
185
|
const addPadding = targetLiqUtilizationRateBps === 0;
|
177
186
|
return {
|
178
187
|
inputMint: (0, umi_web3js_adapters_1.toWeb3JsPublicKey)(input.mint),
|
179
188
|
outputMint: (0, umi_web3js_adapters_1.toWeb3JsPublicKey)(output.mint),
|
180
|
-
destinationWallet:
|
189
|
+
destinationWallet: flashLoanRepayFromDebt
|
190
|
+
? (0, umi_web3js_adapters_1.toWeb3JsPublicKey)(client.signer.publicKey)
|
191
|
+
: client.solautoPosition,
|
181
192
|
slippageIncFactor: 0.5 + (attemptNum ?? 0) * 0.25,
|
182
193
|
amount: exactOut ? outputAmount : inputAmount,
|
183
194
|
exactIn: exactIn,
|
package/package.json
CHANGED
@@ -558,8 +558,7 @@ export class SolautoMarginfiClient extends SolautoClient {
|
|
558
558
|
: undefined,
|
559
559
|
rebalanceType,
|
560
560
|
targetLiqUtilizationRateBps: targetLiqUtilizationRateBps ?? null,
|
561
|
-
targetInAmountBaseUnit:
|
562
|
-
rebalanceStep === "A" ? parseInt(jupQuote.inAmount) : null,
|
561
|
+
targetInAmountBaseUnit: parseInt(jupQuote.inAmount),
|
563
562
|
});
|
564
563
|
}
|
565
564
|
|
@@ -703,7 +703,7 @@ export async function buildSolautoRebalanceTransaction(
|
|
703
703
|
tokenLedgerIx,
|
704
704
|
swapIx,
|
705
705
|
} = await getJupSwapTransaction(client.signer, swapDetails, attemptNum);
|
706
|
-
const flashLoan = getFlashLoanDetails(client, values, jupQuote);
|
706
|
+
const flashLoan = getFlashLoanDetails(client, values, swapDetails, jupQuote);
|
707
707
|
|
708
708
|
let tx = transactionBuilder();
|
709
709
|
|
@@ -237,17 +237,10 @@ export function getRebalanceValues(
|
|
237
237
|
};
|
238
238
|
}
|
239
239
|
|
240
|
-
export
|
241
|
-
baseUnitAmount: bigint;
|
242
|
-
mint: PublicKey;
|
243
|
-
useDebtLiquidity: boolean;
|
244
|
-
}
|
245
|
-
|
246
|
-
export function getFlashLoanDetails(
|
240
|
+
export function rebalanceRequiresFlashLoan(
|
247
241
|
client: SolautoClient,
|
248
|
-
values: RebalanceValues
|
249
|
-
|
250
|
-
): FlashLoanDetails | undefined {
|
242
|
+
values: RebalanceValues
|
243
|
+
) {
|
251
244
|
let supplyUsd =
|
252
245
|
fromBaseUnit(
|
253
246
|
client.solautoPositionState!.supply.amountUsed.baseAmountUsdValue,
|
@@ -292,22 +285,41 @@ export function getFlashLoanDetails(
|
|
292
285
|
maxLiqUtilizationRateBps
|
293
286
|
);
|
294
287
|
|
295
|
-
|
296
|
-
|
297
|
-
|
298
|
-
const inAmount = BigInt(parseInt(jupQuote.inAmount));
|
299
|
-
const outAmount = BigInt(parseInt(jupQuote.outAmount));
|
300
|
-
|
301
|
-
const sufficientDebtLiquidity =
|
302
|
-
debtAdjustmentUsdAbs * 1.1 <=
|
288
|
+
const useDebtLiquidity =
|
289
|
+
Math.abs(values.debtAdjustmentUsd) * 1.1 <=
|
303
290
|
fromBaseUnit(
|
304
291
|
client.solautoPositionState?.debt.amountCanBeUsed.baseAmountUsdValue ??
|
305
292
|
BigInt(0),
|
306
293
|
USD_DECIMALS
|
307
294
|
);
|
295
|
+
return { requiresFlashLoan, useDebtLiquidity };
|
296
|
+
}
|
297
|
+
|
298
|
+
export interface FlashLoanDetails {
|
299
|
+
baseUnitAmount: bigint;
|
300
|
+
mint: PublicKey;
|
301
|
+
useDebtLiquidity: boolean;
|
302
|
+
}
|
303
|
+
|
304
|
+
export function getFlashLoanDetails(
|
305
|
+
client: SolautoClient,
|
306
|
+
values: RebalanceValues,
|
307
|
+
swapDetails: JupSwapDetails,
|
308
|
+
jupQuote: QuoteResponse
|
309
|
+
): FlashLoanDetails | undefined {
|
310
|
+
const { requiresFlashLoan, useDebtLiquidity } = rebalanceRequiresFlashLoan(
|
311
|
+
client,
|
312
|
+
values
|
313
|
+
);
|
314
|
+
|
315
|
+
let flashLoanToken: PositionTokenUsage | undefined = undefined;
|
316
|
+
let flashLoanTokenPrice = 0;
|
317
|
+
|
318
|
+
const inAmount = BigInt(parseInt(jupQuote.inAmount));
|
319
|
+
const outAmount = BigInt(parseInt(jupQuote.outAmount));
|
308
320
|
|
309
321
|
const boosting = values.rebalanceDirection === RebalanceDirection.Boost;
|
310
|
-
if (boosting ||
|
322
|
+
if (boosting || useDebtLiquidity) {
|
311
323
|
flashLoanToken = client.solautoPositionState!.debt;
|
312
324
|
flashLoanTokenPrice = safeGetPrice(client.debtMint)!;
|
313
325
|
} else {
|
@@ -319,9 +331,6 @@ export function getFlashLoanDetails(
|
|
319
331
|
throw new Error("Token ledger swap not currently supported");
|
320
332
|
}
|
321
333
|
|
322
|
-
const useDebtLiquidity = toWeb3JsPublicKey(flashLoanToken.mint).equals(
|
323
|
-
client.debtMint
|
324
|
-
);
|
325
334
|
const baseUnitAmount =
|
326
335
|
boosting || (!boosting && !useDebtLiquidity) ? inAmount : outAmount;
|
327
336
|
|
@@ -369,7 +378,16 @@ export function getJupSwapRebalanceDetails(
|
|
369
378
|
)
|
370
379
|
: toBaseUnit(usdToSwap / safeGetPrice(output.mint)!, output.decimals);
|
371
380
|
|
372
|
-
const
|
381
|
+
const repaying = values.rebalanceDirection === RebalanceDirection.Repay;
|
382
|
+
|
383
|
+
const { requiresFlashLoan, useDebtLiquidity } = rebalanceRequiresFlashLoan(client, values);
|
384
|
+
const flashLoanRepayFromDebt =
|
385
|
+
repaying && requiresFlashLoan && useDebtLiquidity;
|
386
|
+
|
387
|
+
const exactOut =
|
388
|
+
targetLiqUtilizationRateBps === 0 ||
|
389
|
+
values.repayingCloseToMaxLtv ||
|
390
|
+
flashLoanRepayFromDebt;
|
373
391
|
const exactIn = !exactOut;
|
374
392
|
|
375
393
|
const addPadding = targetLiqUtilizationRateBps === 0;
|
@@ -377,7 +395,9 @@ export function getJupSwapRebalanceDetails(
|
|
377
395
|
return {
|
378
396
|
inputMint: toWeb3JsPublicKey(input.mint),
|
379
397
|
outputMint: toWeb3JsPublicKey(output.mint),
|
380
|
-
destinationWallet:
|
398
|
+
destinationWallet: flashLoanRepayFromDebt
|
399
|
+
? toWeb3JsPublicKey(client.signer.publicKey)
|
400
|
+
: client.solautoPosition,
|
381
401
|
slippageIncFactor: 0.5 + (attemptNum ?? 0) * 0.25,
|
382
402
|
amount: exactOut ? outputAmount : inputAmount,
|
383
403
|
exactIn: exactIn,
|