@haven-fi/solauto-sdk 1.0.512 → 1.0.513

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.
@@ -1,7 +1,7 @@
1
1
  import "rpc-websockets/dist/lib/client";
2
2
  import { PublicKey } from "@solana/web3.js";
3
3
  import { TransactionBuilder } from "@metaplex-foundation/umi";
4
- import { DCASettings, DCASettingsInpArgs, LendingPlatform, PositionState, SolautoActionArgs, SolautoPosition, SolautoRebalanceTypeArgs, SolautoSettingsParameters, SolautoSettingsParametersInpArgs, UpdatePositionDataArgs } from "../generated";
4
+ import { DCASettings, DCASettingsInpArgs, LendingPlatform, PositionState, SolautoActionArgs, SolautoPosition, SolautoRebalanceType, SolautoRebalanceTypeArgs, SolautoSettingsParameters, SolautoSettingsParametersInpArgs, UpdatePositionDataArgs } from "../generated";
5
5
  import { FlashLoanDetails, RebalanceValues } from "../utils/solauto/rebalanceUtils";
6
6
  import { LivePositionUpdates } from "../utils/solauto/generalUtils";
7
7
  import { ReferralStateManager, ReferralStateManagerArgs } from "./referralStateManager";
@@ -54,7 +54,7 @@ export declare abstract class SolautoClient extends ReferralStateManager {
54
54
  cancelDCAIx(): TransactionBuilder;
55
55
  abstract refresh(): TransactionBuilder;
56
56
  protocolInteraction(args: SolautoActionArgs): TransactionBuilder;
57
- abstract flashBorrow(flashLoanDetails: FlashLoanDetails, destinationTokenAccount: PublicKey): TransactionBuilder;
57
+ abstract flashBorrow(rebalanceType: SolautoRebalanceType, flashLoanDetails: FlashLoanDetails, destinationTokenAccount: PublicKey): TransactionBuilder;
58
58
  abstract flashRepay(flashLoanDetails: FlashLoanDetails): TransactionBuilder;
59
59
  abstract rebalance(rebalanceStep: "A" | "B", jupQuote: QuoteResponse, rebalanceType: SolautoRebalanceTypeArgs, rebalanceValues: RebalanceValues, flashLoan?: FlashLoanDetails, targetLiqUtilizationRateBps?: number): TransactionBuilder;
60
60
  getFreshPositionState(): Promise<PositionState | undefined>;
@@ -1 +1 @@
1
- {"version":3,"file":"solautoClient.d.ts","sourceRoot":"","sources":["../../src/clients/solautoClient.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"solautoClient.d.ts","sourceRoot":"","sources":["../../src/clients/solautoClient.ts"],"names":[],"mappings":"AAAA,OAAO,gCAAgC,CAAC;AACxC,OAAO,EAA6B,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACvE,OAAO,EAEL,kBAAkB,EAMnB,MAAM,0BAA0B,CAAC;AAElC,OAAO,EACL,WAAW,EACX,kBAAkB,EAClB,eAAe,EACf,aAAa,EACb,iBAAiB,EACjB,eAAe,EACf,oBAAoB,EACpB,wBAAwB,EACxB,yBAAyB,EACzB,gCAAgC,EAEhC,sBAAsB,EAKvB,MAAM,cAAc,CAAC;AAUtB,OAAO,EACL,gBAAgB,EAChB,eAAe,EAChB,MAAM,iCAAiC,CAAC;AAMzC,OAAO,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AACpE,OAAO,EACL,oBAAoB,EACpB,wBAAwB,EACzB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE5C,MAAM,WAAW,iBAAkB,SAAQ,wBAAwB;IACjE,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,SAAS,CAAC;IACvB,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB;AAED,8BAAsB,aAAc,SAAQ,oBAAoB;IACvD,eAAe,CAAC,EAAE,eAAe,CAAC;IAElC,SAAS,EAAG,SAAS,CAAC;IAEtB,UAAU,EAAG,MAAM,CAAC;IACpB,WAAW,EAAG,OAAO,CAAC;IACtB,eAAe,EAAG,SAAS,CAAC;IAC5B,mBAAmB,EAAG,eAAe,GAAG,IAAI,CAAC;IAC7C,oBAAoB,EAAG,aAAa,GAAG,SAAS,CAAC;IAEjD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,eAAe,CAAC,EAAE,MAAM,CAAC;IAEzB,UAAU,EAAG,SAAS,CAAC;IACvB,gBAAgB,EAAG,SAAS,CAAC;IAC7B,cAAc,EAAG,SAAS,CAAC;IAE3B,QAAQ,EAAG,SAAS,CAAC;IACrB,cAAc,EAAG,SAAS,CAAC;IAC3B,YAAY,EAAG,SAAS,CAAC;IAEzB,mBAAmB,EAAG,SAAS,CAAC;IAChC,iBAAiB,EAAG,SAAS,CAAC;IAE9B,mBAAmB,CAAC,EAAE,SAAS,CAAC;IAEhC,mBAAmB,EAAE,mBAAmB,CAA6B;IAEtE,UAAU,CAAC,IAAI,EAAE,iBAAiB;IA8ExC,kBAAkB,IAAI,SAAS,GAAG,SAAS;IAO3C,gBAAgB,IAAI,SAAS,GAAG,SAAS;IAOnC,kBAAkB,CAAC,OAAO,CAAC,EAAE,OAAO;IAuB1C,QAAQ,CAAC,eAAe,IAAI,SAAS;IAErC,mBAAmB,IAAI,MAAM,EAAE;IAS/B,gBAAgB,IAAI,SAAS,EAAE;IAkBzB,iCAAiC,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;IAUzD,iBAAiB,IAAI,OAAO,CAC9B;QACE,EAAE,EAAE,kBAAkB,CAAC;QACvB,GAAG,EAAE,OAAO,CAAC;QACb,aAAa,EAAE,SAAS,EAAE,CAAC;KAC5B,GACD,SAAS,CACZ;IA2DD,uBAAuB,IAAI,yBAAyB,GAAG,SAAS;IAOhE,wBAAwB,IAAI,WAAW,GAAG,SAAS;IAO7C,wBAAwB,IAAI,OAAO,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,CAAC;IAOvE,YAAY,CACV,aAAa,CAAC,EAAE,gCAAgC,EAChD,GAAG,CAAC,EAAE,kBAAkB,GACvB,kBAAkB;IA0BrB,gBAAgB,CAAC,IAAI,EAAE,sBAAsB,GAAG,kBAAkB;IAwDlE,eAAe,IAAI,kBAAkB;IAYrC,WAAW,IAAI,kBAAkB;IAgCjC,QAAQ,CAAC,OAAO,IAAI,kBAAkB;IAEtC,mBAAmB,CAAC,IAAI,EAAE,iBAAiB,GAAG,kBAAkB;IAuFhE,QAAQ,CAAC,WAAW,CAClB,aAAa,EAAE,oBAAoB,EACnC,gBAAgB,EAAE,gBAAgB,EAClC,uBAAuB,EAAE,SAAS,GACjC,kBAAkB;IAErB,QAAQ,CAAC,UAAU,CAAC,gBAAgB,EAAE,gBAAgB,GAAG,kBAAkB;IAE3E,QAAQ,CAAC,SAAS,CAChB,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;IAEf,qBAAqB,IAAI,OAAO,CAAC,aAAa,GAAG,SAAS,CAAC;IAcjE,QAAQ,CAAC,wBAAwB,IAAI,MAAM;IAC3C,QAAQ,CAAC,0BAA0B,IAAI,MAAM;IAC7C,QAAQ,CAAC,sBAAsB,IAAI,MAAM;CAC1C"}
@@ -2,7 +2,7 @@ import { Signer, TransactionBuilder } from "@metaplex-foundation/umi";
2
2
  import { PublicKey } from "@solana/web3.js";
3
3
  import { SolautoClient, SolautoClientArgs } from "./solautoClient";
4
4
  import { MarginfiAssetAccounts } from "../types/accounts";
5
- import { DCASettingsInpArgs, PositionState, SolautoActionArgs, SolautoRebalanceTypeArgs, SolautoSettingsParametersInpArgs } from "../generated";
5
+ import { DCASettingsInpArgs, PositionState, SolautoActionArgs, SolautoRebalanceType, SolautoRebalanceTypeArgs, SolautoSettingsParametersInpArgs } from "../generated";
6
6
  import { MarginfiAccount } from "../marginfi-sdk";
7
7
  import { FlashLoanDetails, RebalanceValues } from "../utils/solauto/rebalanceUtils";
8
8
  import { QuoteResponse } from "@jup-ag/api";
@@ -41,7 +41,7 @@ export declare class SolautoMarginfiClient extends SolautoClient {
41
41
  private marginfiProtocolInteractionIx;
42
42
  private marginfiSolautoProtocolInteractionIx;
43
43
  rebalance(rebalanceStep: "A" | "B", jupQuote: QuoteResponse, rebalanceType: SolautoRebalanceTypeArgs, rebalanceValues: RebalanceValues, flashLoan?: FlashLoanDetails, targetLiqUtilizationRateBps?: number): TransactionBuilder;
44
- flashBorrow(flashLoanDetails: FlashLoanDetails, destinationTokenAccount: PublicKey): TransactionBuilder;
44
+ flashBorrow(rebalanceType: SolautoRebalanceType, flashLoanDetails: FlashLoanDetails, destinationTokenAccount: PublicKey): TransactionBuilder;
45
45
  flashRepay(flashLoanDetails: FlashLoanDetails): TransactionBuilder;
46
46
  getFreshPositionState(): Promise<PositionState | undefined>;
47
47
  supplyLiquidityAvailable(): bigint;
@@ -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,EAGL,eAAe,EAUhB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,gBAAgB,EAChB,eAAe,EAChB,MAAM,iCAAiC,CAAC;AAUzC,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;IAErD,OAAO,CAAC,UAAU,CAAqB;IACvC,OAAO,CAAC,QAAQ,CAAqB;IAE/B,UAAU,CAAC,IAAI,EAAE,yBAAyB;IAiG1C,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;IAmDjE,wBAAwB,IAAI,MAAM;IAIlC,0BAA0B,IAAI,MAAM;IAIpC,sBAAsB,IAAI,MAAM;CAGjC"}
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,oBAAoB,EACpB,wBAAwB,EACxB,gCAAgC,EAKjC,MAAM,cAAc,CAAC;AAEtB,OAAO,EAGL,eAAe,EAUhB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,gBAAgB,EAChB,eAAe,EAChB,MAAM,iCAAiC,CAAC;AAUzC,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;IAErD,OAAO,CAAC,UAAU,CAAqB;IACvC,OAAO,CAAC,QAAQ,CAAqB;IAE/B,UAAU,CAAC,IAAI,EAAE,yBAAyB;IAiG1C,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,aAAa,EAAE,oBAAoB,EACnC,gBAAgB,EAAE,gBAAgB,EAClC,uBAAuB,EAAE,SAAS,GACjC,kBAAkB;IA2CrB,UAAU,CAAC,gBAAgB,EAAE,gBAAgB,GAAG,kBAAkB;IAwF5D,qBAAqB,IAAI,OAAO,CAAC,aAAa,GAAG,SAAS,CAAC;IAmDjE,wBAAwB,IAAI,MAAM;IAIlC,0BAA0B,IAAI,MAAM;IAIpC,sBAAsB,IAAI,MAAM;CAGjC"}
@@ -365,7 +365,15 @@ class SolautoMarginfiClient extends solautoClient_1.SolautoClient {
365
365
  targetInAmountBaseUnit: parseInt(jupQuote.inAmount),
366
366
  });
367
367
  }
368
- flashBorrow(flashLoanDetails, destinationTokenAccount) {
368
+ flashBorrow(rebalanceType, flashLoanDetails, destinationTokenAccount) {
369
+ if (flashLoanDetails.signerFlashLoan) {
370
+ if (rebalanceType === generated_1.SolautoRebalanceType.FLRebalanceThenSwap) {
371
+ return (0, umi_1.transactionBuilder)().add((0, utils_1.splTokenTransferUmiIx)(this.signer, (0, accountUtils_1.getTokenAccount)((0, umi_web3js_adapters_1.toWeb3JsPublicKey)(this.signer.publicKey), this.debtMint), destinationTokenAccount, (0, umi_web3js_adapters_1.toWeb3JsPublicKey)(this.signer.publicKey), flashLoanDetails.baseUnitAmount));
372
+ }
373
+ else {
374
+ return (0, umi_1.transactionBuilder)();
375
+ }
376
+ }
369
377
  const bank = flashLoanDetails.mint.equals(this.supplyMint)
370
378
  ? this.marginfiSupplyAccounts
371
379
  : this.marginfiDebtAccounts;
@@ -388,6 +396,9 @@ class SolautoMarginfiClient extends solautoClient_1.SolautoClient {
388
396
  }));
389
397
  }
390
398
  flashRepay(flashLoanDetails) {
399
+ if (flashLoanDetails.signerFlashLoan) {
400
+ return (0, umi_1.transactionBuilder)();
401
+ }
391
402
  const accounts = flashLoanDetails.useDebtLiquidity
392
403
  ? { data: this.marginfiDebtAccounts, oracle: this.debtPriceOracle }
393
404
  : { data: this.marginfiSupplyAccounts, oracle: this.supplyPriceOracle };
@@ -1 +1 @@
1
- {"version":3,"file":"transactionUtils.d.ts","sourceRoot":"","sources":["../../src/transactions/transactionUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,kBAAkB,EAClB,GAAG,EAGJ,MAAM,0BAA0B,CAAC;AAElC,OAAO,EAAE,SAAS,EAA8B,MAAM,iBAAiB,CAAC;AAoBxE,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAOzD,OAAO,EAIL,eAAe,EAChB,MAAM,iCAAiC,CAAC;AA0BzC,OAAO,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAOlD,OAAO,EAAE,qBAAqB,EAAE,MAAM,UAAU,CAAC;AA6LjD,wBAAsB,qBAAqB,CACzC,MAAM,EAAE,aAAa,EACrB,EAAE,EAAE,kBAAkB,EACtB,sBAAsB,EAAE,MAAM,EAAE,GAC/B,OAAO,CAAC,kBAAkB,CAAC,CAoH7B;AA2LD,wBAAsB,oBAAoB,CACxC,MAAM,EAAE,aAAa,EACrB,EAAE,EAAE,kBAAkB,GACrB,OAAO,CAAC,CAAC,kBAAkB,EAAE,kBAAkB,CAAC,CAAC,CA0BnD;AAED,wBAAsB,8BAA8B,CAAC,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,eAAe,oBAqDlG;AAED,wBAAsB,gCAAgC,CACpD,MAAM,EAAE,aAAa,EACrB,2BAA2B,CAAC,EAAE,MAAM,EACpC,UAAU,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,qBAAqB,GAAG,SAAS,CAAC,CAsI5C;AAED,wBAAsB,gCAAgC,CACpD,eAAe,EAAE,oBAAoB,EACrC,YAAY,EAAE,SAAS,EACvB,eAAe,EAAE,SAAS,GACzB,OAAO,CAAC,qBAAqB,GAAG,SAAS,CAAC,CAsC5C;AAED,wBAAgB,YAAY,CAC1B,GAAG,EAAE,GAAG,EACR,GAAG,EAAE,kBAAkB,EAAE,EACzB,KAAK,EAAE,KAAK,EACZ,oBAAoB,CAAC,EAAE,OAAO;;;;EAoG/B"}
1
+ {"version":3,"file":"transactionUtils.d.ts","sourceRoot":"","sources":["../../src/transactions/transactionUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,kBAAkB,EAClB,GAAG,EAGJ,MAAM,0BAA0B,CAAC;AAElC,OAAO,EAAE,SAAS,EAA8B,MAAM,iBAAiB,CAAC;AAoBxE,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAOzD,OAAO,EAKL,eAAe,EAChB,MAAM,iCAAiC,CAAC;AA0BzC,OAAO,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAOlD,OAAO,EAAE,qBAAqB,EAAE,MAAM,UAAU,CAAC;AA6LjD,wBAAsB,qBAAqB,CACzC,MAAM,EAAE,aAAa,EACrB,EAAE,EAAE,kBAAkB,EACtB,sBAAsB,EAAE,MAAM,EAAE,GAC/B,OAAO,CAAC,kBAAkB,CAAC,CAoH7B;AA2LD,wBAAsB,oBAAoB,CACxC,MAAM,EAAE,aAAa,EACrB,EAAE,EAAE,kBAAkB,GACrB,OAAO,CAAC,CAAC,kBAAkB,EAAE,kBAAkB,CAAC,CAAC,CA0BnD;AAED,wBAAsB,8BAA8B,CAClD,MAAM,EAAE,aAAa,EACrB,MAAM,EAAE,eAAe,oBAsDxB;AAED,wBAAsB,gCAAgC,CACpD,MAAM,EAAE,aAAa,EACrB,2BAA2B,CAAC,EAAE,MAAM,EACpC,UAAU,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,qBAAqB,GAAG,SAAS,CAAC,CA0I5C;AAED,wBAAsB,gCAAgC,CACpD,eAAe,EAAE,oBAAoB,EACrC,YAAY,EAAE,SAAS,EACvB,eAAe,EAAE,SAAS,GACzB,OAAO,CAAC,qBAAqB,GAAG,SAAS,CAAC,CAsC5C;AAED,wBAAgB,YAAY,CAC1B,GAAG,EAAE,GAAG,EACR,GAAG,EAAE,kBAAkB,EAAE,EACzB,KAAK,EAAE,KAAK,EACZ,oBAAoB,CAAC,EAAE,OAAO;;;;EA0G/B"}
@@ -373,9 +373,12 @@ async function buildSolautoRebalanceTransaction(client, targetLiqUtilizationRate
373
373
  }
374
374
  const values = (0, rebalanceUtils_1.getRebalanceValues)(client.solautoPositionState, client.solautoPositionSettings(), client.solautoPositionActiveDca(), (0, generalUtils_1.currentUnixSeconds)(), supplyPrice, debtPrice, targetLiqUtilizationRateBps);
375
375
  client.log("Rebalance values: ", values);
376
- const swapDetails = await (0, rebalanceUtils_1.getJupSwapRebalanceDetails)(client, values, targetLiqUtilizationRateBps, attemptNum);
376
+ const flRequirements = (0, rebalanceUtils_1.getFlashLoanRequirements)(client, values, attemptNum);
377
+ const swapDetails = await (0, rebalanceUtils_1.getJupSwapRebalanceDetails)(client, values, flRequirements, targetLiqUtilizationRateBps, attemptNum);
377
378
  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);
379
+ const flashLoan = flRequirements
380
+ ? (0, rebalanceUtils_1.getFlashLoanDetails)(client, flRequirements, values, jupQuote)
381
+ : undefined;
379
382
  let tx = (0, umi_1.transactionBuilder)();
380
383
  // REVERT ME
381
384
  if (await requiresRefreshBeforeRebalance(client, values)) {
@@ -400,7 +403,7 @@ async function buildSolautoRebalanceTransaction(client, targetLiqUtilizationRate
400
403
  tx = tx.add([
401
404
  setupInstructions,
402
405
  tokenLedgerIx,
403
- client.flashBorrow(flashLoan, flashBorrowDest),
406
+ client.flashBorrow(rebalanceType, flashLoan, flashBorrowDest),
404
407
  ...(addFirstRebalance ? [firstRebalance] : []),
405
408
  ...(rebalanceThenSwap
406
409
  ? [lastRebalance, swapIx]
@@ -497,11 +500,13 @@ function getErrorInfo(umi, txs, error, simulationSuccessful) {
497
500
  canBeIgnored = true;
498
501
  }
499
502
  }
500
- else if (errCode !== undefined && errIx?.programId === marginfi_sdk_1.MARGINFI_PROGRAM_ID) {
503
+ else if (errCode !== undefined &&
504
+ errIx?.programId === marginfi_sdk_1.MARGINFI_PROGRAM_ID) {
501
505
  programName = "Marginfi";
502
506
  programError = marginfiError;
503
507
  }
504
- else if (errCode !== undefined && errIx?.programId === jupiter_sdk_1.JUPITER_PROGRAM_ID) {
508
+ else if (errCode !== undefined &&
509
+ errIx?.programId === jupiter_sdk_1.JUPITER_PROGRAM_ID) {
505
510
  programName = "Jupiter";
506
511
  programError = (0, jupiter_sdk_1.getJupiterErrorFromCode)(errCode, (0, jupiter_sdk_1.createJupiterProgram)());
507
512
  }
@@ -1 +1 @@
1
- {"version":3,"file":"transactionsManager.d.ts","sourceRoot":"","sources":["../../src/transactions/transactionsManager.ts"],"names":[],"mappings":"AACA,OAAO,EAGL,kBAAkB,EAEnB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAMzD,OAAO,EAEL,aAAa,EAEd,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EACL,kBAAkB,EAElB,qBAAqB,EACrB,kBAAkB,EACnB,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,oBAAoB,EAAa,MAAM,YAAY,CAAC;AAc7D,qBAAa,wBAAyB,SAAQ,KAAK;gBACrC,OAAO,EAAE,MAAM;CAK5B;AAqCD,qBAAa,eAAe;IAMjB,OAAO,EAAE,CACd,UAAU,EAAE,MAAM,KACf,OAAO,CAAC,qBAAqB,GAAG,SAAS,CAAC;IACxC,IAAI,CAAC,EAAE,MAAM;IARtB,oBAAoB,EAAG,MAAM,EAAE,CAAC;IAChC,EAAE,CAAC,EAAE,kBAAkB,CAAC;IACjB,WAAW,EAAE,OAAO,CAAS;gBAG3B,OAAO,EAAE,CACd,UAAU,EAAE,MAAM,KACf,OAAO,CAAC,qBAAqB,GAAG,SAAS,CAAC,EACxC,IAAI,CAAC,EAAE,MAAM,YAAA;IAGhB,UAAU;IAKV,OAAO,CAAC,UAAU,EAAE,MAAM;IAMhC,cAAc,IAAI,MAAM,EAAE;CAY3B;AA0FD,oBAAY,iBAAiB;IAC3B,OAAO,YAAY;IACnB,UAAU,eAAe;IACzB,MAAM,WAAW;IACjB,UAAU,eAAe;IACzB,MAAM,WAAW;CAClB;AAED,MAAM,MAAM,0BAA0B,GAAG;IACvC,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,iBAAiB,CAAC;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,EAAE,CAAC;AAEJ,UAAU,WAAW;IACnB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,qBAAa,mBAAmB;IAU5B,OAAO,CAAC,SAAS;IACjB,OAAO,CAAC,cAAc,CAAC;IACvB,OAAO,CAAC,MAAM,CAAC;IACf,OAAO,CAAC,kBAAkB;IAC1B,OAAO,CAAC,UAAU;IAClB,OAAO,CAAC,aAAa,CAAC;IAdxB,OAAO,CAAC,QAAQ,CAAkC;IAClD,OAAO,CAAC,YAAY,CAAe;IACnC,OAAO,CAAC,eAAe,CAAS;IAChC,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,UAAU,CAAS;IAE3B,kBAAkB,SAAmB;gBAG3B,SAAS,EAAE,aAAa,GAAG,oBAAoB,EAC/C,cAAc,CAAC,GAAE,CAAC,QAAQ,EAAE,0BAA0B,KAAK,IAAI,aAAA,EAC/D,MAAM,CAAC,EAAE,kBAAkB,YAAA,EAC3B,kBAAkB,GAAE,kBAA2C,EAC/D,UAAU,GAAE,OAAe,EAC3B,aAAa,CAAC,EAAE,aAAa,YAAA,EACrC,WAAW,CAAC,EAAE,WAAW;YAab,uBAAuB;IAwCrC,OAAO,CAAC,YAAY;YA6CN,aAAa;IAoB3B,OAAO,CAAC,4BAA4B;IAgBpC,OAAO,CAAC,mBAAmB;YAoBb,SAAS;IAiBV,UAAU,CACrB,YAAY,EAAE,eAAe,EAAE,GAC9B,OAAO,CAAC,0BAA0B,CAAC;IA2GzB,IAAI,CACf,KAAK,EAAE,eAAe,EAAE,GACvB,OAAO,CAAC,0BAA0B,CAAC;YAkCxB,6BAA6B;YAsI7B,qBAAqB;YAoDrB,eAAe;YA0Df,eAAe;CA4D9B"}
1
+ {"version":3,"file":"transactionsManager.d.ts","sourceRoot":"","sources":["../../src/transactions/transactionsManager.ts"],"names":[],"mappings":"AACA,OAAO,EAGL,kBAAkB,EAEnB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAMzD,OAAO,EAEL,aAAa,EAEd,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EACL,kBAAkB,EAElB,qBAAqB,EACrB,kBAAkB,EACnB,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,oBAAoB,EAAa,MAAM,YAAY,CAAC;AAa7D,qBAAa,wBAAyB,SAAQ,KAAK;gBACrC,OAAO,EAAE,MAAM;CAK5B;AAqCD,qBAAa,eAAe;IAMjB,OAAO,EAAE,CACd,UAAU,EAAE,MAAM,KACf,OAAO,CAAC,qBAAqB,GAAG,SAAS,CAAC;IACxC,IAAI,CAAC,EAAE,MAAM;IARtB,oBAAoB,EAAG,MAAM,EAAE,CAAC;IAChC,EAAE,CAAC,EAAE,kBAAkB,CAAC;IACjB,WAAW,EAAE,OAAO,CAAS;gBAG3B,OAAO,EAAE,CACd,UAAU,EAAE,MAAM,KACf,OAAO,CAAC,qBAAqB,GAAG,SAAS,CAAC,EACxC,IAAI,CAAC,EAAE,MAAM,YAAA;IAGhB,UAAU;IAKV,OAAO,CAAC,UAAU,EAAE,MAAM;IAMhC,cAAc,IAAI,MAAM,EAAE;CAY3B;AA0FD,oBAAY,iBAAiB;IAC3B,OAAO,YAAY;IACnB,UAAU,eAAe;IACzB,MAAM,WAAW;IACjB,UAAU,eAAe;IACzB,MAAM,WAAW;CAClB;AAED,MAAM,MAAM,0BAA0B,GAAG;IACvC,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,iBAAiB,CAAC;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,EAAE,CAAC;AAEJ,UAAU,WAAW;IACnB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,qBAAa,mBAAmB;IAU5B,OAAO,CAAC,SAAS;IACjB,OAAO,CAAC,cAAc,CAAC;IACvB,OAAO,CAAC,MAAM,CAAC;IACf,OAAO,CAAC,kBAAkB;IAC1B,OAAO,CAAC,UAAU;IAClB,OAAO,CAAC,aAAa,CAAC;IAdxB,OAAO,CAAC,QAAQ,CAAkC;IAClD,OAAO,CAAC,YAAY,CAAe;IACnC,OAAO,CAAC,eAAe,CAAS;IAChC,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,UAAU,CAAS;IAE3B,kBAAkB,SAAmB;gBAG3B,SAAS,EAAE,aAAa,GAAG,oBAAoB,EAC/C,cAAc,CAAC,GAAE,CAAC,QAAQ,EAAE,0BAA0B,KAAK,IAAI,aAAA,EAC/D,MAAM,CAAC,EAAE,kBAAkB,YAAA,EAC3B,kBAAkB,GAAE,kBAA2C,EAC/D,UAAU,GAAE,OAAe,EAC3B,aAAa,CAAC,EAAE,aAAa,YAAA,EACrC,WAAW,CAAC,EAAE,WAAW;YAab,uBAAuB;IAwCrC,OAAO,CAAC,YAAY;YA6CN,aAAa;IAoB3B,OAAO,CAAC,4BAA4B;IAgBpC,OAAO,CAAC,mBAAmB;YAoBb,SAAS;IAiBV,UAAU,CACrB,YAAY,EAAE,eAAe,EAAE,GAC9B,OAAO,CAAC,0BAA0B,CAAC;IA0GzB,IAAI,CACf,KAAK,EAAE,eAAe,EAAE,GACvB,OAAO,CAAC,0BAA0B,CAAC;YAkCxB,6BAA6B;YAsI7B,qBAAqB;YAoDrB,eAAe;YA0Df,eAAe;CA4D9B"}
@@ -289,7 +289,6 @@ class TransactionsManager {
289
289
  .stale;
290
290
  if (stale) {
291
291
  this.txHandler.log("Requires oracle update...");
292
- console.log(mint);
293
292
  const swbTx = new TransactionItem(async () => (0, utils_1.buildSwbSubmitResponseTx)(client.connection, client.signer, mint), this.updateOracleTxName);
294
293
  await swbTx.initialize();
295
294
  items.unshift(swbTx);
@@ -1 +1 @@
1
- {"version":3,"file":"jupiterUtils.d.ts","sourceRoot":"","sources":["../../src/utils/jupiterUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,MAAM,EACN,kBAAkB,EAEnB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,SAAS,EAA0B,MAAM,iBAAiB,CAAC;AAGpE,OAAO,EAGL,aAAa,EACd,MAAM,aAAa,CAAC;AAWrB,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,SAAS,CAAC;IACrB,UAAU,EAAE,SAAS,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,cAAe,SAAQ,YAAY;IAClD,iBAAiB,EAAE,SAAS,CAAC;IAC7B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,QAAQ,CAAC,EAAE,aAAa,CAAC;CAC1B;AAgBD,wBAAsB,WAAW,CAAC,WAAW,EAAE,YAAY,0BAoC1D;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,aAAa,CAAC;IACxB,cAAc,EAAE,MAAM,CAAC;IACvB,oBAAoB,EAAE,MAAM,EAAE,CAAC;IAC/B,iBAAiB,EAAE,kBAAkB,CAAC;IACtC,aAAa,EAAE,kBAAkB,CAAC;IAClC,MAAM,EAAE,kBAAkB,CAAC;CAC5B;AAED,wBAAsB,qBAAqB,CACzC,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,cAAc,EAC3B,UAAU,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,kBAAkB,CAAC,CAmF7B;AAED,wBAAsB,eAAe,CAAC,KAAK,EAAE,SAAS,EAAE,EAAE,SAAS,CAAC,EAAE,OAAO;;GA0B5E"}
1
+ {"version":3,"file":"jupiterUtils.d.ts","sourceRoot":"","sources":["../../src/utils/jupiterUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,MAAM,EACN,kBAAkB,EAEnB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,SAAS,EAA0B,MAAM,iBAAiB,CAAC;AAGpE,OAAO,EAGL,aAAa,EACd,MAAM,aAAa,CAAC;AAWrB,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,SAAS,CAAC;IACrB,UAAU,EAAE,SAAS,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,cAAe,SAAQ,YAAY;IAClD,iBAAiB,EAAE,SAAS,CAAC;IAC7B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,QAAQ,CAAC,EAAE,aAAa,CAAC;CAC1B;AAgBD,wBAAsB,WAAW,CAAC,WAAW,EAAE,YAAY,0BAkC1D;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,aAAa,CAAC;IACxB,cAAc,EAAE,MAAM,CAAC;IACvB,oBAAoB,EAAE,MAAM,EAAE,CAAC;IAC/B,iBAAiB,EAAE,kBAAkB,CAAC;IACtC,aAAa,EAAE,kBAAkB,CAAC;IAClC,MAAM,EAAE,kBAAkB,CAAC;CAC5B;AAED,wBAAsB,qBAAqB,CACzC,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,cAAc,EAC3B,UAAU,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,kBAAkB,CAAC,CAmF7B;AAED,wBAAsB,eAAe,CAAC,KAAK,EAAE,SAAS,EAAE,EAAE,SAAS,CAAC,EAAE,OAAO;;GA0B5E"}
@@ -41,9 +41,7 @@ async function getJupQuote(swapDetails) {
41
41
  : undefined,
42
42
  slippageBps: memecoinSwap ? 500 : 200,
43
43
  maxAccounts: !swapDetails.exactOut
44
- ? useLowAccounts
45
- ? 15
46
- : 40
44
+ ? 15
47
45
  : undefined,
48
46
  }), 2, 200);
49
47
  }
@@ -16,15 +16,15 @@ export interface RebalanceValues {
16
16
  targetRateBps: number;
17
17
  }
18
18
  export declare function getRebalanceValues(state: PositionState, settings: SolautoSettingsParameters | undefined, dca: DCASettings | undefined, currentUnixTime: number, supplyPrice: number, debtPrice: number, targetLiqUtilizationRateBps?: number): RebalanceValues;
19
- export declare function rebalanceRequiresFlashLoan(client: SolautoClient, values: RebalanceValues): {
20
- requiresFlashLoan: boolean;
19
+ export interface FlashLoanRequirements {
21
20
  useDebtLiquidity: boolean;
22
- };
23
- export interface FlashLoanDetails {
21
+ signerFlashLoan: boolean;
22
+ }
23
+ export declare function getFlashLoanRequirements(client: SolautoClient, values: RebalanceValues, attemptNum?: number): FlashLoanRequirements | undefined;
24
+ export interface FlashLoanDetails extends FlashLoanRequirements {
24
25
  baseUnitAmount: bigint;
25
26
  mint: PublicKey;
26
- useDebtLiquidity: boolean;
27
27
  }
28
- export declare function getFlashLoanDetails(client: SolautoClient, values: RebalanceValues, jupQuote: QuoteResponse): FlashLoanDetails | undefined;
29
- export declare function getJupSwapRebalanceDetails(client: SolautoClient, values: RebalanceValues, targetLiqUtilizationRateBps?: number, attemptNum?: number): Promise<JupSwapDetails>;
28
+ export declare function getFlashLoanDetails(client: SolautoClient, flRequirements: FlashLoanRequirements, values: RebalanceValues, jupQuote: QuoteResponse): FlashLoanDetails | undefined;
29
+ export declare function getJupSwapRebalanceDetails(client: SolautoClient, values: RebalanceValues, flRequirements?: FlashLoanRequirements, targetLiqUtilizationRateBps?: number, attemptNum?: number): Promise<JupSwapDetails>;
30
30
  //# 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,EAAgB,MAAM,iBAAiB,CAAC;AAc5E,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;IAChB,aAAa,EAAE,MAAM,CAAC;CACvB;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,CA4EjB;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,CAgC9B;AAED,wBAAsB,0BAA0B,CAC9C,MAAM,EAAE,aAAa,EACrB,MAAM,EAAE,eAAe,EACvB,2BAA2B,CAAC,EAAE,MAAM,EACpC,UAAU,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,cAAc,CAAC,CA6FzB"}
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,EAAgB,MAAM,iBAAiB,CAAC;AAc5E,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;IAChB,aAAa,EAAE,MAAM,CAAC;CACvB;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,CA4EjB;AAED,MAAM,WAAW,qBAAqB;IACpC,gBAAgB,EAAE,OAAO,CAAC;IAC1B,eAAe,EAAE,OAAO,CAAC;CAC1B;AAED,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,aAAa,EACrB,MAAM,EAAE,eAAe,EACvB,UAAU,CAAC,EAAE,MAAM,GAClB,qBAAqB,GAAG,SAAS,CA0EnC;AAED,MAAM,WAAW,gBAAiB,SAAQ,qBAAqB;IAC7D,cAAc,EAAE,MAAM,CAAC;IACvB,IAAI,EAAE,SAAS,CAAC;CACjB;AAED,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,aAAa,EACrB,cAAc,EAAE,qBAAqB,EACrC,MAAM,EAAE,eAAe,EACvB,QAAQ,EAAE,aAAa,GACtB,gBAAgB,GAAG,SAAS,CA2B9B;AAED,wBAAsB,0BAA0B,CAC9C,MAAM,EAAE,aAAa,EACrB,MAAM,EAAE,eAAe,EACvB,cAAc,CAAC,EAAE,qBAAqB,EACtC,2BAA2B,CAAC,EAAE,MAAM,EACpC,UAAU,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,cAAc,CAAC,CAwFzB"}
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.getRebalanceValues = getRebalanceValues;
4
- exports.rebalanceRequiresFlashLoan = rebalanceRequiresFlashLoan;
4
+ exports.getFlashLoanRequirements = getFlashLoanRequirements;
5
5
  exports.getFlashLoanDetails = getFlashLoanDetails;
6
6
  exports.getJupSwapRebalanceDetails = getJupSwapRebalanceDetails;
7
7
  const web3_js_1 = require("@solana/web3.js");
@@ -125,7 +125,7 @@ function getRebalanceValues(state, settings, dca, currentUnixTime, supplyPrice,
125
125
  targetRateBps,
126
126
  };
127
127
  }
128
- function rebalanceRequiresFlashLoan(client, values) {
128
+ function getFlashLoanRequirements(client, values, attemptNum) {
129
129
  let supplyUsd = (0, numberUtils_1.fromBaseUnit)(client.solautoPositionState.supply.amountUsed.baseAmountUsdValue, generalAccounts_1.USD_DECIMALS) +
130
130
  (values.dcaTokenType === generated_1.TokenType.Supply ? values.amountUsdToDcaIn : 0);
131
131
  let debtUsd = (0, numberUtils_1.fromBaseUnit)(client.solautoPositionState.debt.amountUsed.baseAmountUsdValue, generalAccounts_1.USD_DECIMALS);
@@ -141,22 +141,35 @@ function rebalanceRequiresFlashLoan(client, values) {
141
141
  const tempLiqUtilizationRateBps = (0, numberUtils_1.getLiqUtilzationRateBps)(supplyUsd, debtUsd, client.solautoPositionState.liqThresholdBps);
142
142
  const maxLiqUtilizationRateBps = (0, numberUtils_1.getMaxLiqUtilizationRateBps)(client.solautoPositionState.maxLtvBps, client.solautoPositionState.liqThresholdBps, 0.02);
143
143
  const requiresFlashLoan = supplyUsd <= 0 || tempLiqUtilizationRateBps > maxLiqUtilizationRateBps;
144
- const useDebtLiquidity = values.rebalanceDirection === generated_1.RebalanceDirection.Boost ||
145
- Math.abs(values.debtAdjustmentUsd) * 0.9 >
146
- (0, numberUtils_1.fromBaseUnit)(client.supplyLiquidityAvailable(), generalAccounts_1.USD_DECIMALS) *
147
- ((0, priceUtils_1.safeGetPrice)(client.supplyMint) ?? 0);
144
+ const insufficientSupplyLiquidity = Math.abs(values.debtAdjustmentUsd) * 0.9 >
145
+ (0, numberUtils_1.fromBaseUnit)(client.supplyLiquidityAvailable(), generalAccounts_1.USD_DECIMALS) *
146
+ ((0, priceUtils_1.safeGetPrice)(client.supplyMint) ?? 0);
147
+ const insufficientDebtLiquidity = Math.abs(values.debtAdjustmentUsd) * 0.9 >
148
+ (0, numberUtils_1.fromBaseUnit)(client.debtLiquidityAvailable(), generalAccounts_1.USD_DECIMALS) *
149
+ ((0, priceUtils_1.safeGetPrice)(client.debtMint) ?? 0);
150
+ let useDebtLiquidity = values.rebalanceDirection === generated_1.RebalanceDirection.Boost ||
151
+ insufficientSupplyLiquidity;
152
+ const isJupLong = client.supplyMint.equals(new web3_js_1.PublicKey(constants_1.JUP)) &&
153
+ (0, generalUtils_2.tokenInfo)(client.debtMint).isStableCoin;
154
+ const sufficientSignerSupplyLiquidity = false; // TODO
155
+ const sufficientSignerDebtLiquidity = isJupLong; // TODO
156
+ const signerFlashLoan = Boolean(((attemptNum ?? 0) > 3 ||
157
+ (insufficientDebtLiquidity && insufficientDebtLiquidity)) &&
158
+ (sufficientSignerSupplyLiquidity || sufficientSignerDebtLiquidity));
159
+ if (signerFlashLoan) {
160
+ useDebtLiquidity = !sufficientSignerSupplyLiquidity;
161
+ }
148
162
  (0, generalUtils_2.consoleLog)("Requires flash loan:", requiresFlashLoan);
149
163
  (0, generalUtils_2.consoleLog)("Use debt liquidity:", useDebtLiquidity);
150
164
  (0, generalUtils_2.consoleLog)("Intermediary liq utilization rate:", tempLiqUtilizationRateBps, `$${supplyUsd}`, `$${debtUsd}`, "Max:", maxLiqUtilizationRateBps);
151
- return { requiresFlashLoan, useDebtLiquidity };
165
+ return requiresFlashLoan ? { useDebtLiquidity, signerFlashLoan } : undefined;
152
166
  }
153
- function getFlashLoanDetails(client, values, jupQuote) {
154
- const { requiresFlashLoan, useDebtLiquidity } = rebalanceRequiresFlashLoan(client, values);
167
+ function getFlashLoanDetails(client, flRequirements, values, jupQuote) {
155
168
  let flashLoanToken = undefined;
156
169
  const inAmount = BigInt(parseInt(jupQuote.inAmount));
157
170
  const outAmount = BigInt(parseInt(jupQuote.outAmount));
158
171
  const boosting = values.rebalanceDirection === generated_1.RebalanceDirection.Boost;
159
- if (boosting || useDebtLiquidity) {
172
+ if (boosting || flRequirements.useDebtLiquidity) {
160
173
  flashLoanToken = client.solautoPositionState.debt;
161
174
  }
162
175
  else {
@@ -165,16 +178,16 @@ function getFlashLoanDetails(client, values, jupQuote) {
165
178
  if (jupQuote.swapMode !== "ExactOut" && jupQuote.swapMode !== "ExactIn") {
166
179
  throw new Error("Token ledger swap not currently supported");
167
180
  }
168
- const baseUnitAmount = boosting || (!boosting && !useDebtLiquidity) ? inAmount : outAmount;
169
- return requiresFlashLoan
170
- ? {
171
- baseUnitAmount,
172
- mint: (0, umi_web3js_adapters_1.toWeb3JsPublicKey)(flashLoanToken.mint),
173
- useDebtLiquidity,
174
- }
175
- : undefined;
181
+ const baseUnitAmount = boosting || (!boosting && !flRequirements.useDebtLiquidity)
182
+ ? inAmount
183
+ : outAmount;
184
+ return {
185
+ ...flRequirements,
186
+ baseUnitAmount,
187
+ mint: (0, umi_web3js_adapters_1.toWeb3JsPublicKey)(flashLoanToken.mint),
188
+ };
176
189
  }
177
- async function getJupSwapRebalanceDetails(client, values, targetLiqUtilizationRateBps, attemptNum) {
190
+ async function getJupSwapRebalanceDetails(client, values, flRequirements, targetLiqUtilizationRateBps, attemptNum) {
178
191
  const input = values.rebalanceDirection === generated_1.RebalanceDirection.Boost
179
192
  ? client.solautoPositionState.debt
180
193
  : client.solautoPositionState.supply;
@@ -190,8 +203,7 @@ async function getJupSwapRebalanceDetails(client, values, targetLiqUtilizationRa
190
203
  // Add this small percentage to account for the APR on the debt between now and the transaction
191
204
  0.0001));
192
205
  const repaying = values.rebalanceDirection === generated_1.RebalanceDirection.Repay;
193
- const { requiresFlashLoan, useDebtLiquidity } = rebalanceRequiresFlashLoan(client, values);
194
- const flashLoanRepayFromDebt = repaying && requiresFlashLoan && useDebtLiquidity;
206
+ const flashLoanRepayFromDebt = repaying && flRequirements && flRequirements.useDebtLiquidity;
195
207
  const exactOut = rebalanceToZero || flashLoanRepayFromDebt;
196
208
  const exactIn = !exactOut;
197
209
  const jupSwapInput = {
@@ -201,7 +213,6 @@ async function getJupSwapRebalanceDetails(client, values, targetLiqUtilizationRa
201
213
  exactOut,
202
214
  amount: exactOut ? outputAmount : inputAmount,
203
215
  };
204
- (0, generalUtils_2.consoleLog)(targetLiqUtilizationRateBps, rebalanceToZero);
205
216
  (0, generalUtils_2.consoleLog)(jupSwapInput);
206
217
  let jupQuote = undefined;
207
218
  if (rebalanceToZero) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@haven-fi/solauto-sdk",
3
- "version": "1.0.512",
3
+ "version": "1.0.513",
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",
@@ -17,6 +17,7 @@ import {
17
17
  PositionState,
18
18
  SolautoActionArgs,
19
19
  SolautoPosition,
20
+ SolautoRebalanceType,
20
21
  SolautoRebalanceTypeArgs,
21
22
  SolautoSettingsParameters,
22
23
  SolautoSettingsParametersInpArgs,
@@ -548,6 +549,7 @@ export abstract class SolautoClient extends ReferralStateManager {
548
549
  }
549
550
 
550
551
  abstract flashBorrow(
552
+ rebalanceType: SolautoRebalanceType,
551
553
  flashLoanDetails: FlashLoanDetails,
552
554
  destinationTokenAccount: PublicKey
553
555
  ): TransactionBuilder;
@@ -26,6 +26,7 @@ import {
26
26
  PositionType,
27
27
  RebalanceDirection,
28
28
  SolautoActionArgs,
29
+ SolautoRebalanceType,
29
30
  SolautoRebalanceTypeArgs,
30
31
  SolautoSettingsParametersInpArgs,
31
32
  marginfiOpenPosition,
@@ -62,7 +63,7 @@ import {
62
63
  } from "../utils/marginfiUtils";
63
64
  import { fromBaseUnit, toBps } from "../utils/numberUtils";
64
65
  import { QuoteResponse } from "@jup-ag/api";
65
- import { consoleLog, safeGetPrice } from "../utils";
66
+ import { consoleLog, safeGetPrice, splTokenTransferUmiIx } from "../utils";
66
67
 
67
68
  export interface SolautoMarginfiClientArgs extends SolautoClientArgs {
68
69
  marginfiAccount?: PublicKey | Signer;
@@ -574,9 +575,26 @@ export class SolautoMarginfiClient extends SolautoClient {
574
575
  }
575
576
 
576
577
  flashBorrow(
578
+ rebalanceType: SolautoRebalanceType,
577
579
  flashLoanDetails: FlashLoanDetails,
578
580
  destinationTokenAccount: PublicKey
579
581
  ): TransactionBuilder {
582
+ if (flashLoanDetails.signerFlashLoan) {
583
+ if (rebalanceType === SolautoRebalanceType.FLRebalanceThenSwap) {
584
+ return transactionBuilder().add(
585
+ splTokenTransferUmiIx(
586
+ this.signer,
587
+ getTokenAccount(toWeb3JsPublicKey(this.signer.publicKey), this.debtMint),
588
+ destinationTokenAccount,
589
+ toWeb3JsPublicKey(this.signer.publicKey),
590
+ flashLoanDetails.baseUnitAmount
591
+ )
592
+ );
593
+ } else {
594
+ return transactionBuilder();
595
+ }
596
+ }
597
+
580
598
  const bank = flashLoanDetails.mint.equals(this.supplyMint)
581
599
  ? this.marginfiSupplyAccounts
582
600
  : this.marginfiDebtAccounts;
@@ -604,6 +622,10 @@ export class SolautoMarginfiClient extends SolautoClient {
604
622
  }
605
623
 
606
624
  flashRepay(flashLoanDetails: FlashLoanDetails): TransactionBuilder {
625
+ if (flashLoanDetails.signerFlashLoan) {
626
+ return transactionBuilder();
627
+ }
628
+
607
629
  const accounts = flashLoanDetails.useDebtLiquidity
608
630
  ? { data: this.marginfiDebtAccounts, oracle: this.debtPriceOracle }
609
631
  : { data: this.marginfiSupplyAccounts, oracle: this.supplyPriceOracle };
@@ -37,6 +37,7 @@ import {
37
37
  import { getJupSwapTransaction } from "../utils/jupiterUtils";
38
38
  import {
39
39
  getFlashLoanDetails,
40
+ getFlashLoanRequirements,
40
41
  getJupSwapRebalanceDetails,
41
42
  getRebalanceValues,
42
43
  RebalanceValues,
@@ -600,7 +601,10 @@ export async function getTransactionChores(
600
601
  return [choresBefore, choresAfter];
601
602
  }
602
603
 
603
- export async function requiresRefreshBeforeRebalance(client: SolautoClient, values: RebalanceValues) {
604
+ export async function requiresRefreshBeforeRebalance(
605
+ client: SolautoClient,
606
+ values: RebalanceValues
607
+ ) {
604
608
  const neverRefreshedBefore =
605
609
  client.solautoPositionData &&
606
610
  client.solautoPositionData.state.supply.amountCanBeUsed.baseUnit ===
@@ -692,9 +696,11 @@ export async function buildSolautoRebalanceTransaction(
692
696
  );
693
697
  client.log("Rebalance values: ", values);
694
698
 
699
+ const flRequirements = getFlashLoanRequirements(client, values, attemptNum);
695
700
  const swapDetails = await getJupSwapRebalanceDetails(
696
701
  client,
697
702
  values,
703
+ flRequirements,
698
704
  targetLiqUtilizationRateBps,
699
705
  attemptNum
700
706
  );
@@ -706,7 +712,9 @@ export async function buildSolautoRebalanceTransaction(
706
712
  swapIx,
707
713
  } = await getJupSwapTransaction(client.signer, swapDetails, attemptNum);
708
714
 
709
- const flashLoan = getFlashLoanDetails(client, values, jupQuote);
715
+ const flashLoan = flRequirements
716
+ ? getFlashLoanDetails(client, flRequirements, values, jupQuote)
717
+ : undefined;
710
718
 
711
719
  let tx = transactionBuilder();
712
720
 
@@ -757,7 +765,7 @@ export async function buildSolautoRebalanceTransaction(
757
765
  tx = tx.add([
758
766
  setupInstructions,
759
767
  tokenLedgerIx,
760
- client.flashBorrow(flashLoan, flashBorrowDest),
768
+ client.flashBorrow(rebalanceType, flashLoan, flashBorrowDest),
761
769
  ...(addFirstRebalance ? [firstRebalance] : []),
762
770
  ...(rebalanceThenSwap
763
771
  ? [lastRebalance, swapIx]
@@ -916,10 +924,16 @@ export function getErrorInfo(
916
924
  ) {
917
925
  canBeIgnored = true;
918
926
  }
919
- } else if (errCode !== undefined && errIx?.programId === MARGINFI_PROGRAM_ID) {
927
+ } else if (
928
+ errCode !== undefined &&
929
+ errIx?.programId === MARGINFI_PROGRAM_ID
930
+ ) {
920
931
  programName = "Marginfi";
921
932
  programError = marginfiError;
922
- } else if (errCode !== undefined && errIx?.programId === JUPITER_PROGRAM_ID) {
933
+ } else if (
934
+ errCode !== undefined &&
935
+ errIx?.programId === JUPITER_PROGRAM_ID
936
+ ) {
923
937
  programName = "Jupiter";
924
938
  programError = getJupiterErrorFromCode(errCode, createJupiterProgram());
925
939
  }
@@ -31,7 +31,6 @@ import {
31
31
  import { SWITCHBOARD_PRICE_FEED_IDS } from "../constants/switchboardConstants";
32
32
  import { buildSwbSubmitResponseTx, getSwitchboardFeedData } from "../utils";
33
33
  import { sendJitoBundledTransactions } from "../utils/jitoUtils";
34
- import { JUPITER_PROGRAM_ID } from "../jupiter-sdk";
35
34
  import { SOLAUTO_PROD_PROGRAM, SOLAUTO_TEST_PROGRAM } from "../constants";
36
35
 
37
36
  const CHORES_TX_NAME = "account chores";
@@ -465,7 +464,6 @@ export class TransactionsManager {
465
464
 
466
465
  if (stale) {
467
466
  this.txHandler.log("Requires oracle update...");
468
- console.log(mint);
469
467
  const swbTx = new TransactionItem(
470
468
  async () =>
471
469
  buildSwbSubmitResponseTx(client.connection, client.signer, mint),
@@ -78,9 +78,7 @@ export async function getJupQuote(swapDetails: JupSwapInput) {
78
78
  : undefined,
79
79
  slippageBps: memecoinSwap ? 500 : 200,
80
80
  maxAccounts: !swapDetails.exactOut
81
- ? useLowAccounts
82
- ? 15
83
- : 40
81
+ ? 15
84
82
  : undefined,
85
83
  }),
86
84
  2,
@@ -16,7 +16,7 @@ import {
16
16
  import { toWeb3JsPublicKey } from "@metaplex-foundation/umi-web3js-adapters";
17
17
  import { QuoteResponse } from "@jup-ag/api";
18
18
  import { getJupQuote, JupSwapDetails, JupSwapInput } from "../jupiterUtils";
19
- import { consoleLog, currentUnixSeconds } from "../generalUtils";
19
+ import { consoleLog, currentUnixSeconds, tokenInfo } from "../generalUtils";
20
20
  import {
21
21
  fromBaseUnit,
22
22
  fromBps,
@@ -31,7 +31,7 @@ import {
31
31
  import { USD_DECIMALS } from "../../constants/generalAccounts";
32
32
  import { RebalanceAction } from "../../types";
33
33
  import { getPriceImpact, safeGetPrice } from "../priceUtils";
34
- import { BROKEN_TOKENS, USDC, USDT } from "../../constants";
34
+ import { BROKEN_TOKENS, JUP, USDC, USDT } from "../../constants";
35
35
 
36
36
  function getAdditionalAmountToDcaIn(dca: DCASettings): number {
37
37
  if (dca.dcaInBaseUnit === BigInt(0)) {
@@ -259,10 +259,16 @@ export function getRebalanceValues(
259
259
  };
260
260
  }
261
261
 
262
- export function rebalanceRequiresFlashLoan(
262
+ export interface FlashLoanRequirements {
263
+ useDebtLiquidity: boolean;
264
+ signerFlashLoan: boolean;
265
+ }
266
+
267
+ export function getFlashLoanRequirements(
263
268
  client: SolautoClient,
264
- values: RebalanceValues
265
- ) {
269
+ values: RebalanceValues,
270
+ attemptNum?: number
271
+ ): FlashLoanRequirements | undefined {
266
272
  let supplyUsd =
267
273
  fromBaseUnit(
268
274
  client.solautoPositionState!.supply.amountUsed.baseAmountUsdValue,
@@ -297,11 +303,32 @@ export function rebalanceRequiresFlashLoan(
297
303
  const requiresFlashLoan =
298
304
  supplyUsd <= 0 || tempLiqUtilizationRateBps > maxLiqUtilizationRateBps;
299
305
 
300
- const useDebtLiquidity =
301
- values.rebalanceDirection === RebalanceDirection.Boost ||
306
+ const insufficientSupplyLiquidity =
307
+ Math.abs(values.debtAdjustmentUsd) * 0.9 >
308
+ fromBaseUnit(client.supplyLiquidityAvailable(), USD_DECIMALS) *
309
+ (safeGetPrice(client.supplyMint) ?? 0);
310
+ const insufficientDebtLiquidity =
302
311
  Math.abs(values.debtAdjustmentUsd) * 0.9 >
303
- fromBaseUnit(client.supplyLiquidityAvailable(), USD_DECIMALS) *
304
- (safeGetPrice(client.supplyMint) ?? 0);
312
+ fromBaseUnit(client.debtLiquidityAvailable(), USD_DECIMALS) *
313
+ (safeGetPrice(client.debtMint) ?? 0);
314
+
315
+ let useDebtLiquidity =
316
+ values.rebalanceDirection === RebalanceDirection.Boost ||
317
+ insufficientSupplyLiquidity;
318
+
319
+ const isJupLong =
320
+ client.supplyMint.equals(new PublicKey(JUP)) &&
321
+ tokenInfo(client.debtMint).isStableCoin;
322
+ const sufficientSignerSupplyLiquidity = false; // TODO
323
+ const sufficientSignerDebtLiquidity = isJupLong; // TODO
324
+ const signerFlashLoan = Boolean(
325
+ ((attemptNum ?? 0) > 3 ||
326
+ (insufficientDebtLiquidity && insufficientDebtLiquidity)) &&
327
+ (sufficientSignerSupplyLiquidity || sufficientSignerDebtLiquidity)
328
+ );
329
+ if (signerFlashLoan) {
330
+ useDebtLiquidity = !sufficientSignerSupplyLiquidity;
331
+ }
305
332
 
306
333
  consoleLog("Requires flash loan:", requiresFlashLoan);
307
334
  consoleLog("Use debt liquidity:", useDebtLiquidity);
@@ -314,32 +341,27 @@ export function rebalanceRequiresFlashLoan(
314
341
  maxLiqUtilizationRateBps
315
342
  );
316
343
 
317
- return { requiresFlashLoan, useDebtLiquidity };
344
+ return requiresFlashLoan ? { useDebtLiquidity, signerFlashLoan } : undefined;
318
345
  }
319
346
 
320
- export interface FlashLoanDetails {
347
+ export interface FlashLoanDetails extends FlashLoanRequirements {
321
348
  baseUnitAmount: bigint;
322
349
  mint: PublicKey;
323
- useDebtLiquidity: boolean;
324
350
  }
325
351
 
326
352
  export function getFlashLoanDetails(
327
353
  client: SolautoClient,
354
+ flRequirements: FlashLoanRequirements,
328
355
  values: RebalanceValues,
329
356
  jupQuote: QuoteResponse
330
357
  ): FlashLoanDetails | undefined {
331
- const { requiresFlashLoan, useDebtLiquidity } = rebalanceRequiresFlashLoan(
332
- client,
333
- values
334
- );
335
-
336
358
  let flashLoanToken: PositionTokenUsage | undefined = undefined;
337
359
 
338
360
  const inAmount = BigInt(parseInt(jupQuote.inAmount));
339
361
  const outAmount = BigInt(parseInt(jupQuote.outAmount));
340
362
 
341
363
  const boosting = values.rebalanceDirection === RebalanceDirection.Boost;
342
- if (boosting || useDebtLiquidity) {
364
+ if (boosting || flRequirements.useDebtLiquidity) {
343
365
  flashLoanToken = client.solautoPositionState!.debt;
344
366
  } else {
345
367
  flashLoanToken = client.solautoPositionState!.supply;
@@ -350,20 +372,21 @@ export function getFlashLoanDetails(
350
372
  }
351
373
 
352
374
  const baseUnitAmount =
353
- boosting || (!boosting && !useDebtLiquidity) ? inAmount : outAmount;
354
-
355
- return requiresFlashLoan
356
- ? {
357
- baseUnitAmount,
358
- mint: toWeb3JsPublicKey(flashLoanToken.mint),
359
- useDebtLiquidity,
360
- }
361
- : undefined;
375
+ boosting || (!boosting && !flRequirements.useDebtLiquidity)
376
+ ? inAmount
377
+ : outAmount;
378
+
379
+ return {
380
+ ...flRequirements,
381
+ baseUnitAmount,
382
+ mint: toWeb3JsPublicKey(flashLoanToken.mint),
383
+ };
362
384
  }
363
385
 
364
386
  export async function getJupSwapRebalanceDetails(
365
387
  client: SolautoClient,
366
388
  values: RebalanceValues,
389
+ flRequirements?: FlashLoanRequirements,
367
390
  targetLiqUtilizationRateBps?: number,
368
391
  attemptNum?: number
369
392
  ): Promise<JupSwapDetails> {
@@ -397,12 +420,8 @@ export async function getJupSwapRebalanceDetails(
397
420
 
398
421
  const repaying = values.rebalanceDirection === RebalanceDirection.Repay;
399
422
 
400
- const { requiresFlashLoan, useDebtLiquidity } = rebalanceRequiresFlashLoan(
401
- client,
402
- values
403
- );
404
423
  const flashLoanRepayFromDebt =
405
- repaying && requiresFlashLoan && useDebtLiquidity;
424
+ repaying && flRequirements && flRequirements.useDebtLiquidity;
406
425
 
407
426
  const exactOut = rebalanceToZero || flashLoanRepayFromDebt;
408
427
  const exactIn = !exactOut;
@@ -414,7 +433,6 @@ export async function getJupSwapRebalanceDetails(
414
433
  exactOut,
415
434
  amount: exactOut ? outputAmount : inputAmount,
416
435
  };
417
- consoleLog(targetLiqUtilizationRateBps, rebalanceToZero);
418
436
  consoleLog(jupSwapInput);
419
437
 
420
438
  let jupQuote: QuoteResponse | undefined = undefined;
@@ -48,7 +48,7 @@ describe("Solauto Marginfi tests", async () => {
48
48
  // const signer = setupTest();
49
49
  const signer = setupTest("solauto-manager");
50
50
 
51
- const payForTransactions = false;
51
+ const payForTransactions = true;
52
52
  const testProgram = false;
53
53
  const positionId = 1;
54
54
 
@@ -66,7 +66,7 @@ describe("Solauto Marginfi tests", async () => {
66
66
  await client.initialize({
67
67
  signer,
68
68
  positionId,
69
- authority: new PublicKey("7F6v4HWZsyFP6yVFq92HQWygUgoYm5khUX8pXWGLoqUN"),
69
+ authority: new PublicKey("HqpPtE5WbBh3xU9C1Tzz125iYDQyoyodvFCRpwHwQpNc"),
70
70
  // new: true,
71
71
  // marginfiAccount: new PublicKey(
72
72
  // ""