@haven-fi/solauto-sdk 1.0.438 → 1.0.440
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.
@@ -15,6 +15,10 @@ 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;
|
@@ -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,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,CAyDhB"}
|
@@ -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, 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,21 @@ 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
|
-
const addPadding = targetLiqUtilizationRateBps === 0;
|
185
|
+
// const addPadding = targetLiqUtilizationRateBps === 0;
|
186
|
+
const addPadding = exactOut;
|
177
187
|
return {
|
178
188
|
inputMint: (0, umi_web3js_adapters_1.toWeb3JsPublicKey)(input.mint),
|
179
189
|
outputMint: (0, umi_web3js_adapters_1.toWeb3JsPublicKey)(output.mint),
|
180
|
-
destinationWallet:
|
190
|
+
destinationWallet: flashLoanRepayFromDebt
|
191
|
+
? (0, umi_web3js_adapters_1.toWeb3JsPublicKey)(client.signer.publicKey)
|
192
|
+
: client.solautoPosition,
|
181
193
|
slippageIncFactor: 0.5 + (attemptNum ?? 0) * 0.25,
|
182
194
|
amount: exactOut ? outputAmount : inputAmount,
|
183
195
|
exactIn: exactIn,
|
package/package.json
CHANGED
@@ -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,40 @@ 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
|
+
jupQuote: QuoteResponse
|
308
|
+
): FlashLoanDetails | undefined {
|
309
|
+
const { requiresFlashLoan, useDebtLiquidity } = rebalanceRequiresFlashLoan(
|
310
|
+
client,
|
311
|
+
values
|
312
|
+
);
|
313
|
+
|
314
|
+
let flashLoanToken: PositionTokenUsage | undefined = undefined;
|
315
|
+
let flashLoanTokenPrice = 0;
|
316
|
+
|
317
|
+
const inAmount = BigInt(parseInt(jupQuote.inAmount));
|
318
|
+
const outAmount = BigInt(parseInt(jupQuote.outAmount));
|
308
319
|
|
309
320
|
const boosting = values.rebalanceDirection === RebalanceDirection.Boost;
|
310
|
-
if (boosting ||
|
321
|
+
if (boosting || useDebtLiquidity) {
|
311
322
|
flashLoanToken = client.solautoPositionState!.debt;
|
312
323
|
flashLoanTokenPrice = safeGetPrice(client.debtMint)!;
|
313
324
|
} else {
|
@@ -319,9 +330,6 @@ export function getFlashLoanDetails(
|
|
319
330
|
throw new Error("Token ledger swap not currently supported");
|
320
331
|
}
|
321
332
|
|
322
|
-
const useDebtLiquidity = toWeb3JsPublicKey(flashLoanToken.mint).equals(
|
323
|
-
client.debtMint
|
324
|
-
);
|
325
333
|
const baseUnitAmount =
|
326
334
|
boosting || (!boosting && !useDebtLiquidity) ? inAmount : outAmount;
|
327
335
|
|
@@ -369,15 +377,27 @@ export function getJupSwapRebalanceDetails(
|
|
369
377
|
)
|
370
378
|
: toBaseUnit(usdToSwap / safeGetPrice(output.mint)!, output.decimals);
|
371
379
|
|
372
|
-
const
|
380
|
+
const repaying = values.rebalanceDirection === RebalanceDirection.Repay;
|
381
|
+
|
382
|
+
const { requiresFlashLoan, useDebtLiquidity } = rebalanceRequiresFlashLoan(client, values);
|
383
|
+
const flashLoanRepayFromDebt =
|
384
|
+
repaying && requiresFlashLoan && useDebtLiquidity;
|
385
|
+
|
386
|
+
const exactOut =
|
387
|
+
targetLiqUtilizationRateBps === 0 ||
|
388
|
+
values.repayingCloseToMaxLtv ||
|
389
|
+
flashLoanRepayFromDebt;
|
373
390
|
const exactIn = !exactOut;
|
374
391
|
|
375
|
-
const addPadding = targetLiqUtilizationRateBps === 0;
|
392
|
+
// const addPadding = targetLiqUtilizationRateBps === 0;
|
393
|
+
const addPadding = exactOut;
|
376
394
|
|
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,
|