@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,CAqF9B;AAED,wBAAgB,0BAA0B,CACxC,MAAM,EAAE,aAAa,EACrB,MAAM,EAAE,eAAe,EACvB,2BAA2B,CAAC,EAAE,MAAM,EACpC,UAAU,CAAC,EAAE,MAAM,GAClB,cAAc,CA6ChB"}
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 getFlashLoanDetails(client, values, jupQuote) {
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 || sufficientDebtLiquidity) {
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 exactOut = values.rebalanceDirection === generated_1.RebalanceDirection.Repay;
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: client.solautoPosition,
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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@haven-fi/solauto-sdk",
3
- "version": "1.0.438",
3
+ "version": "1.0.440",
4
4
  "main": "dist/index.js",
5
5
  "types": "dist/index.d.ts",
6
6
  "description": "Typescript SDK for the Solauto program on the Solana blockchain",
@@ -237,17 +237,10 @@ export function getRebalanceValues(
237
237
  };
238
238
  }
239
239
 
240
- export interface FlashLoanDetails {
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
- jupQuote: QuoteResponse
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
- let flashLoanToken: PositionTokenUsage | undefined = undefined;
296
- let flashLoanTokenPrice = 0;
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 || sufficientDebtLiquidity) {
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 exactOut = values.rebalanceDirection === RebalanceDirection.Repay;
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: client.solautoPosition,
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,