@haven-fi/solauto-sdk 1.0.511 → 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":"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,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,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"}
1
+ {"version":3,"file":"solautoClient.d.ts","sourceRoot":"","sources":["../../src/clients/solautoClient.ts"],"names":[],"mappings":"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"}
@@ -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 };
@@ -15,4 +15,5 @@ export declare const PRICES: {
15
15
  export declare const SOLAUTO_LUT = "9D4xwZwDf46n9ft5gQxZzq3rBbdRXsXojKQLZbBdskPY";
16
16
  export declare const STANDARD_LUT_ACCOUNTS: string[];
17
17
  export declare const JITO_BLOCK_ENGINE = "https://mainnet.block-engine.jito.wtf";
18
+ export declare const BROKEN_TOKENS: string[];
18
19
  //# sourceMappingURL=solautoConstants.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"solautoConstants.d.ts","sourceRoot":"","sources":["../../src/constants/solautoConstants.ts"],"names":[],"mappings":"AAAA,OAAO,EAKL,SAAS,EACV,MAAM,iBAAiB,CAAC;AAQzB,eAAO,MAAM,oBAAoB,WAEhC,CAAC;AACF,eAAO,MAAM,oBAAoB,WAEhC,CAAC;AAIF,eAAO,MAAM,YAAY,QAAQ,CAAC;AAElC,eAAO,MAAM,iCAAiC,IAAI,CAAC;AACnD,eAAO,MAAM,iBAAiB,KAAK,CAAC;AACpC,eAAO,MAAM,iBAAiB,KAAK,CAAC;AACpC,eAAO,MAAM,0BAA0B,OAAO,CAAC;AAE/C,eAAO,MAAM,MAAM,EAAE;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAA;CAAO,CAAC;AAE7E,eAAO,MAAM,WAAW,iDAAiD,CAAC;AAC1E,eAAO,MAAM,qBAAqB,UAYR,CAAC;AAE3B,eAAO,MAAM,iBAAiB,0CAA0C,CAAC"}
1
+ {"version":3,"file":"solautoConstants.d.ts","sourceRoot":"","sources":["../../src/constants/solautoConstants.ts"],"names":[],"mappings":"AAAA,OAAO,EAKL,SAAS,EACV,MAAM,iBAAiB,CAAC;AASzB,eAAO,MAAM,oBAAoB,WAEhC,CAAC;AACF,eAAO,MAAM,oBAAoB,WAEhC,CAAC;AAIF,eAAO,MAAM,YAAY,QAAQ,CAAC;AAElC,eAAO,MAAM,iCAAiC,IAAI,CAAC;AACnD,eAAO,MAAM,iBAAiB,KAAK,CAAC;AACpC,eAAO,MAAM,iBAAiB,KAAK,CAAC;AACpC,eAAO,MAAM,0BAA0B,OAAO,CAAC;AAE/C,eAAO,MAAM,MAAM,EAAE;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAA;CAAO,CAAC;AAE7E,eAAO,MAAM,WAAW,iDAAiD,CAAC;AAC1E,eAAO,MAAM,qBAAqB,UAYR,CAAC;AAE3B,eAAO,MAAM,iBAAiB,0CAA0C,CAAC;AAEzE,eAAO,MAAM,aAAa,UAOzB,CAAA"}
@@ -1,10 +1,11 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.JITO_BLOCK_ENGINE = exports.STANDARD_LUT_ACCOUNTS = exports.SOLAUTO_LUT = exports.PRICES = exports.MIN_USD_SUPPORTED_POSITION = exports.MIN_BOOST_GAP_BPS = exports.MIN_REPAY_GAP_BPS = exports.MIN_POSITION_STATE_FRESHNESS_SECS = exports.BASIS_POINTS = exports.SOLAUTO_TEST_PROGRAM = exports.SOLAUTO_PROD_PROGRAM = void 0;
3
+ exports.BROKEN_TOKENS = exports.JITO_BLOCK_ENGINE = exports.STANDARD_LUT_ACCOUNTS = exports.SOLAUTO_LUT = exports.PRICES = exports.MIN_USD_SUPPORTED_POSITION = exports.MIN_BOOST_GAP_BPS = exports.MIN_REPAY_GAP_BPS = exports.MIN_POSITION_STATE_FRESHNESS_SECS = exports.BASIS_POINTS = exports.SOLAUTO_TEST_PROGRAM = exports.SOLAUTO_PROD_PROGRAM = void 0;
4
4
  const web3_js_1 = require("@solana/web3.js");
5
5
  const spl_token_1 = require("@solana/spl-token");
6
6
  const generalAccounts_1 = require("./generalAccounts");
7
7
  const jupiter_sdk_1 = require("../jupiter-sdk");
8
+ const tokenConstants_1 = require("./tokenConstants");
8
9
  exports.SOLAUTO_PROD_PROGRAM = new web3_js_1.PublicKey("AutoyKBRaHSBHy9RsmXCZMy6nNFAg5FYijrvZyQcNLV");
9
10
  exports.SOLAUTO_TEST_PROGRAM = new web3_js_1.PublicKey("TesTjfQ6TbXv96Tv6fqr95XTZ1LYPxtkafmShN9PjBp");
10
11
  globalThis.LOCAL_TEST = false;
@@ -29,3 +30,11 @@ exports.STANDARD_LUT_ACCOUNTS = [
29
30
  jupiter_sdk_1.JUPITER_PROGRAM_ID,
30
31
  ].map((x) => x.toString());
31
32
  exports.JITO_BLOCK_ENGINE = "https://mainnet.block-engine.jito.wtf";
33
+ exports.BROKEN_TOKENS = [
34
+ tokenConstants_1.JUP,
35
+ tokenConstants_1.JLP,
36
+ tokenConstants_1.WETH,
37
+ tokenConstants_1.HNT,
38
+ tokenConstants_1.JTO,
39
+ tokenConstants_1.PYTH
40
+ ];
@@ -1,11 +1,12 @@
1
1
  import { TransactionBuilder, Umi } from "@metaplex-foundation/umi";
2
2
  import { PublicKey } from "@solana/web3.js";
3
3
  import { SolautoClient } from "../clients/solautoClient";
4
+ import { RebalanceValues } from "../utils/solauto/rebalanceUtils";
4
5
  import { ReferralStateManager } from "../clients";
5
6
  import { TransactionItemInputs } from "../types";
6
7
  export declare function rebalanceChoresBefore(client: SolautoClient, tx: TransactionBuilder, accountsGettingCreated: string[]): Promise<TransactionBuilder>;
7
8
  export declare function getTransactionChores(client: SolautoClient, tx: TransactionBuilder): Promise<[TransactionBuilder, TransactionBuilder]>;
8
- export declare function requiresRefreshBeforeRebalance(client: SolautoClient): Promise<boolean>;
9
+ export declare function requiresRefreshBeforeRebalance(client: SolautoClient, values: RebalanceValues): Promise<boolean>;
9
10
  export declare function buildSolautoRebalanceTransaction(client: SolautoClient, targetLiqUtilizationRateBps?: number, attemptNum?: number): Promise<TransactionItemInputs | undefined>;
10
11
  export declare function convertReferralFeesToDestination(referralManager: ReferralStateManager, tokenAccount: PublicKey, destinationMint: PublicKey): Promise<TransactionItemInputs | undefined>;
11
12
  export declare function getErrorInfo(umi: Umi, txs: TransactionBuilder[], error: Error, simulationSuccessful?: boolean): {
@@ -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;AAqCzD,OAAO,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAOlD,OAAO,EAAE,qBAAqB,EAAE,MAAM,UAAU,CAAC;AA4LjD,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,oBAqDzE;AAED,wBAAsB,gCAAgC,CACpD,MAAM,EAAE,aAAa,EACrB,2BAA2B,CAAC,EAAE,MAAM,EACpC,UAAU,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,qBAAqB,GAAG,SAAS,CAAC,CAoI5C;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"}
@@ -329,7 +329,7 @@ async function getTransactionChores(client, tx) {
329
329
  choresAfter = choresAfter.add(transactionChoresAfter(client, solautoActions, client.livePositionUpdates.cancellingDca));
330
330
  return [choresBefore, choresAfter];
331
331
  }
332
- async function requiresRefreshBeforeRebalance(client) {
332
+ async function requiresRefreshBeforeRebalance(client, values) {
333
333
  const neverRefreshedBefore = client.solautoPositionData &&
334
334
  client.solautoPositionData.state.supply.amountCanBeUsed.baseUnit ===
335
335
  BigInt(0) &&
@@ -373,11 +373,15 @@ 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
- if (await requiresRefreshBeforeRebalance(client)) {
383
+ // REVERT ME
384
+ if (await requiresRefreshBeforeRebalance(client, values)) {
381
385
  tx = tx.add(client.refresh());
382
386
  }
383
387
  if (flashLoan) {
@@ -399,7 +403,7 @@ async function buildSolautoRebalanceTransaction(client, targetLiqUtilizationRate
399
403
  tx = tx.add([
400
404
  setupInstructions,
401
405
  tokenLedgerIx,
402
- client.flashBorrow(flashLoan, flashBorrowDest),
406
+ client.flashBorrow(rebalanceType, flashLoan, flashBorrowDest),
403
407
  ...(addFirstRebalance ? [firstRebalance] : []),
404
408
  ...(rebalanceThenSwap
405
409
  ? [lastRebalance, swapIx]
@@ -496,11 +500,13 @@ function getErrorInfo(umi, txs, error, simulationSuccessful) {
496
500
  canBeIgnored = true;
497
501
  }
498
502
  }
499
- 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) {
500
505
  programName = "Marginfi";
501
506
  programError = marginfiError;
502
507
  }
503
- 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) {
504
510
  programName = "Jupiter";
505
511
  programError = (0, jupiter_sdk_1.getJupiterErrorFromCode)(errCode, (0, jupiter_sdk_1.createJupiterProgram)());
506
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;IA0GzB,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"}
@@ -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;AAUrB,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,0BAsB1D;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"}
@@ -10,6 +10,7 @@ const numberUtils_1 = require("./numberUtils");
10
10
  const api_1 = require("@jup-ag/api");
11
11
  const accountUtils_1 = require("./accountUtils");
12
12
  const generalUtils_1 = require("./generalUtils");
13
+ const constants_1 = require("../constants");
13
14
  const jupApi = (0, api_1.createJupiterApiClient)();
14
15
  function createTransactionInstruction(instruction) {
15
16
  return new web3_js_1.TransactionInstruction({
@@ -25,6 +26,10 @@ function createTransactionInstruction(instruction) {
25
26
  async function getJupQuote(swapDetails) {
26
27
  const memecoinSwap = (0, generalUtils_1.tokenInfo)(swapDetails.inputMint).isMeme ||
27
28
  (0, generalUtils_1.tokenInfo)(swapDetails.outputMint).isMeme;
29
+ const tokensWithLowAccounts = [constants_1.PYTH, constants_1.INF];
30
+ // TEMP REVERT ME
31
+ const useLowAccounts = tokensWithLowAccounts.find((x) => swapDetails.inputMint.equals(new web3_js_1.PublicKey(x))) ||
32
+ tokensWithLowAccounts.find((x) => swapDetails.outputMint.equals(new web3_js_1.PublicKey(x)));
28
33
  return await (0, generalUtils_1.retryWithExponentialBackoff)(async () => await jupApi.quoteGet({
29
34
  amount: Number(swapDetails.amount),
30
35
  inputMint: swapDetails.inputMint.toString(),
@@ -35,7 +40,9 @@ async function getJupQuote(swapDetails) {
35
40
  ? "ExactIn"
36
41
  : undefined,
37
42
  slippageBps: memecoinSwap ? 500 : 200,
38
- maxAccounts: !swapDetails.exactOut ? 40 : undefined,
43
+ maxAccounts: !swapDetails.exactOut
44
+ ? 15
45
+ : undefined,
39
46
  }), 2, 200);
40
47
  }
41
48
  async function getJupSwapTransaction(signer, swapDetails, attemptNum) {
@@ -1 +1 @@
1
- {"version":3,"file":"priceUtils.d.ts","sourceRoot":"","sources":["../../src/utils/priceUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,SAAS,IAAI,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAcrE,OAAO,EAA0B,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAE3E,wBAAsB,gBAAgB,CAAC,KAAK,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAqC5E;AAED,wBAAsB,aAAa,CAAC,KAAK,EAAE,SAAS,EAAE,qBAwCrD;AAED,wBAAsB,oBAAoB,CACxC,KAAK,EAAE,SAAS,EAAE,GACjB,OAAO,CAAC,MAAM,EAAE,CAAC,CAgDnB;AAED,wBAAsB,iBAAiB,CAAC,KAAK,EAAE,SAAS,EAAE,qBAQzD;AAED,wBAAgB,YAAY,CAC1B,IAAI,EAAE,SAAS,GAAG,YAAY,GAAG,SAAS,GACzC,MAAM,GAAG,SAAS,CAKpB;AAED,wBAAsB,cAAc,CAClC,SAAS,EAAE,SAAS,EACpB,UAAU,EAAE,SAAS,EACrB,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,oBAAoB;;;GAc/B"}
1
+ {"version":3,"file":"priceUtils.d.ts","sourceRoot":"","sources":["../../src/utils/priceUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,SAAS,IAAI,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAarE,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAEnD,wBAAsB,gBAAgB,CAAC,KAAK,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAqC5E;AAED,wBAAsB,aAAa,CAAC,KAAK,EAAE,SAAS,EAAE,qBAwCrD;AAED,wBAAsB,oBAAoB,CACxC,KAAK,EAAE,SAAS,EAAE,GACjB,OAAO,CAAC,MAAM,EAAE,CAAC,CAgDnB;AAED,wBAAsB,iBAAiB,CAAC,KAAK,EAAE,SAAS,EAAE,qBAQzD;AAED,wBAAgB,YAAY,CAC1B,IAAI,EAAE,SAAS,GAAG,YAAY,GAAG,SAAS,GACzC,MAAM,GAAG,SAAS,CAKpB;AAED,wBAAsB,cAAc,CAClC,SAAS,EAAE,SAAS,EACpB,UAAU,EAAE,SAAS,EACrB,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,oBAAoB;;;GAc/B"}
@@ -13,17 +13,18 @@ export interface RebalanceValues {
13
13
  rebalanceAction: RebalanceAction;
14
14
  rebalanceDirection: RebalanceDirection;
15
15
  feesUsd: number;
16
+ targetRateBps: number;
16
17
  }
17
18
  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;
19
+ export interface FlashLoanRequirements {
20
20
  useDebtLiquidity: boolean;
21
- };
22
- 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 {
23
25
  baseUnitAmount: bigint;
24
26
  mint: PublicKey;
25
- useDebtLiquidity: boolean;
26
27
  }
27
- export declare function getFlashLoanDetails(client: SolautoClient, values: RebalanceValues, jupQuote: QuoteResponse): FlashLoanDetails | undefined;
28
- 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>;
29
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;AAa5E,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,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,9 +1,10 @@
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
+ const web3_js_1 = require("@solana/web3.js");
7
8
  const generated_1 = require("../../generated");
8
9
  const generalUtils_1 = require("./generalUtils");
9
10
  const umi_web3js_adapters_1 = require("@metaplex-foundation/umi-web3js-adapters");
@@ -12,6 +13,7 @@ const generalUtils_2 = require("../generalUtils");
12
13
  const numberUtils_1 = require("../numberUtils");
13
14
  const generalAccounts_1 = require("../../constants/generalAccounts");
14
15
  const priceUtils_1 = require("../priceUtils");
16
+ const constants_1 = require("../../constants");
15
17
  function getAdditionalAmountToDcaIn(dca) {
16
18
  if (dca.dcaInBaseUnit === BigInt(0)) {
17
19
  return 0;
@@ -83,7 +85,18 @@ function getTargetRateAndDcaAmount(state, settings, dca, currentUnixTime, target
83
85
  }
84
86
  }
85
87
  function getRebalanceValues(state, settings, dca, currentUnixTime, supplyPrice, debtPrice, targetLiqUtilizationRateBps) {
86
- const { targetRateBps, amountToDcaIn } = getTargetRateAndDcaAmount(state, settings, dca, currentUnixTime, targetLiqUtilizationRateBps);
88
+ let { targetRateBps, amountToDcaIn } = getTargetRateAndDcaAmount(state, settings, dca, currentUnixTime, targetLiqUtilizationRateBps);
89
+ // REVERT ME AND GET TO THE ROOT OF THIS ISSUE
90
+ const supplyMint = (0, umi_web3js_adapters_1.toWeb3JsPublicKey)(state.supply.mint);
91
+ if (constants_1.BROKEN_TOKENS.includes(supplyMint.toString()) &&
92
+ ((0, umi_web3js_adapters_1.toWeb3JsPublicKey)(state.debt.mint).equals(new web3_js_1.PublicKey(constants_1.USDC)) ||
93
+ (0, umi_web3js_adapters_1.toWeb3JsPublicKey)(state.debt.mint).equals(new web3_js_1.PublicKey(constants_1.USDT))) &&
94
+ settings &&
95
+ settings.boostToBps ===
96
+ (0, numberUtils_1.maxBoostToBps)(state.maxLtvBps, state.liqThresholdBps) &&
97
+ targetRateBps === settings.boostToBps) {
98
+ targetRateBps = 6500;
99
+ }
87
100
  const amountUsdToDcaIn = (0, numberUtils_1.fromBaseUnit)(BigInt(Math.round(amountToDcaIn ?? 0)), state.debt.decimals) *
88
101
  (dca?.tokenType === generated_1.TokenType.Debt ? debtPrice : supplyPrice);
89
102
  const rebalanceDirection = amountUsdToDcaIn > 0 || state.liqUtilizationRateBps <= targetRateBps
@@ -94,6 +107,7 @@ function getRebalanceValues(state, settings, dca, currentUnixTime, supplyPrice,
94
107
  amountUsdToDcaIn;
95
108
  const debtUsd = (0, numberUtils_1.fromBaseUnit)(state.debt.amountUsed.baseAmountUsdValue, generalAccounts_1.USD_DECIMALS);
96
109
  let debtAdjustmentUsd = (0, numberUtils_1.getDebtAdjustmentUsd)(state.liqThresholdBps, supplyUsd, debtUsd, targetRateBps, adjustmentFeeBps);
110
+ (0, generalUtils_2.consoleLog)("Target rate:", targetRateBps, (0, numberUtils_1.maxBoostToBps)(state.maxLtvBps, state.liqThresholdBps));
97
111
  const maxRepayTo = (0, numberUtils_1.maxRepayToBps)(state.maxLtvBps, state.liqThresholdBps);
98
112
  return {
99
113
  debtAdjustmentUsd,
@@ -108,9 +122,10 @@ function getRebalanceValues(state, settings, dca, currentUnixTime, supplyPrice,
108
122
  : "repay",
109
123
  rebalanceDirection,
110
124
  feesUsd: Math.abs(debtAdjustmentUsd * (0, numberUtils_1.fromBps)(adjustmentFeeBps)),
125
+ targetRateBps,
111
126
  };
112
127
  }
113
- function rebalanceRequiresFlashLoan(client, values) {
128
+ function getFlashLoanRequirements(client, values, attemptNum) {
114
129
  let supplyUsd = (0, numberUtils_1.fromBaseUnit)(client.solautoPositionState.supply.amountUsed.baseAmountUsdValue, generalAccounts_1.USD_DECIMALS) +
115
130
  (values.dcaTokenType === generated_1.TokenType.Supply ? values.amountUsdToDcaIn : 0);
116
131
  let debtUsd = (0, numberUtils_1.fromBaseUnit)(client.solautoPositionState.debt.amountUsed.baseAmountUsdValue, generalAccounts_1.USD_DECIMALS);
@@ -126,22 +141,35 @@ function rebalanceRequiresFlashLoan(client, values) {
126
141
  const tempLiqUtilizationRateBps = (0, numberUtils_1.getLiqUtilzationRateBps)(supplyUsd, debtUsd, client.solautoPositionState.liqThresholdBps);
127
142
  const maxLiqUtilizationRateBps = (0, numberUtils_1.getMaxLiqUtilizationRateBps)(client.solautoPositionState.maxLtvBps, client.solautoPositionState.liqThresholdBps, 0.02);
128
143
  const requiresFlashLoan = supplyUsd <= 0 || tempLiqUtilizationRateBps > maxLiqUtilizationRateBps;
129
- const useDebtLiquidity = values.rebalanceDirection === generated_1.RebalanceDirection.Boost ||
130
- Math.abs(values.debtAdjustmentUsd) * 0.9 >
131
- (0, numberUtils_1.fromBaseUnit)(client.supplyLiquidityAvailable(), generalAccounts_1.USD_DECIMALS) *
132
- ((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
+ }
133
162
  (0, generalUtils_2.consoleLog)("Requires flash loan:", requiresFlashLoan);
134
163
  (0, generalUtils_2.consoleLog)("Use debt liquidity:", useDebtLiquidity);
135
164
  (0, generalUtils_2.consoleLog)("Intermediary liq utilization rate:", tempLiqUtilizationRateBps, `$${supplyUsd}`, `$${debtUsd}`, "Max:", maxLiqUtilizationRateBps);
136
- return { requiresFlashLoan, useDebtLiquidity };
165
+ return requiresFlashLoan ? { useDebtLiquidity, signerFlashLoan } : undefined;
137
166
  }
138
- function getFlashLoanDetails(client, values, jupQuote) {
139
- const { requiresFlashLoan, useDebtLiquidity } = rebalanceRequiresFlashLoan(client, values);
167
+ function getFlashLoanDetails(client, flRequirements, values, jupQuote) {
140
168
  let flashLoanToken = undefined;
141
169
  const inAmount = BigInt(parseInt(jupQuote.inAmount));
142
170
  const outAmount = BigInt(parseInt(jupQuote.outAmount));
143
171
  const boosting = values.rebalanceDirection === generated_1.RebalanceDirection.Boost;
144
- if (boosting || useDebtLiquidity) {
172
+ if (boosting || flRequirements.useDebtLiquidity) {
145
173
  flashLoanToken = client.solautoPositionState.debt;
146
174
  }
147
175
  else {
@@ -150,16 +178,16 @@ function getFlashLoanDetails(client, values, jupQuote) {
150
178
  if (jupQuote.swapMode !== "ExactOut" && jupQuote.swapMode !== "ExactIn") {
151
179
  throw new Error("Token ledger swap not currently supported");
152
180
  }
153
- const baseUnitAmount = boosting || (!boosting && !useDebtLiquidity) ? inAmount : outAmount;
154
- return requiresFlashLoan
155
- ? {
156
- baseUnitAmount,
157
- mint: (0, umi_web3js_adapters_1.toWeb3JsPublicKey)(flashLoanToken.mint),
158
- useDebtLiquidity,
159
- }
160
- : 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
+ };
161
189
  }
162
- async function getJupSwapRebalanceDetails(client, values, targetLiqUtilizationRateBps, attemptNum) {
190
+ async function getJupSwapRebalanceDetails(client, values, flRequirements, targetLiqUtilizationRateBps, attemptNum) {
163
191
  const input = values.rebalanceDirection === generated_1.RebalanceDirection.Boost
164
192
  ? client.solautoPositionState.debt
165
193
  : client.solautoPositionState.supply;
@@ -175,8 +203,7 @@ async function getJupSwapRebalanceDetails(client, values, targetLiqUtilizationRa
175
203
  // Add this small percentage to account for the APR on the debt between now and the transaction
176
204
  0.0001));
177
205
  const repaying = values.rebalanceDirection === generated_1.RebalanceDirection.Repay;
178
- const { requiresFlashLoan, useDebtLiquidity } = rebalanceRequiresFlashLoan(client, values);
179
- const flashLoanRepayFromDebt = repaying && requiresFlashLoan && useDebtLiquidity;
206
+ const flashLoanRepayFromDebt = repaying && flRequirements && flRequirements.useDebtLiquidity;
180
207
  const exactOut = rebalanceToZero || flashLoanRepayFromDebt;
181
208
  const exactIn = !exactOut;
182
209
  const jupSwapInput = {
@@ -186,7 +213,6 @@ async function getJupSwapRebalanceDetails(client, values, targetLiqUtilizationRa
186
213
  exactOut,
187
214
  amount: exactOut ? outputAmount : inputAmount,
188
215
  };
189
- (0, generalUtils_2.consoleLog)(targetLiqUtilizationRateBps, rebalanceToZero);
190
216
  (0, generalUtils_2.consoleLog)(jupSwapInput);
191
217
  let jupQuote = undefined;
192
218
  if (rebalanceToZero) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@haven-fi/solauto-sdk",
3
- "version": "1.0.511",
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 };
@@ -11,6 +11,7 @@ import {
11
11
  } from "@solana/spl-token";
12
12
  import { SOLAUTO_MANAGER } from "./generalAccounts";
13
13
  import { JUPITER_PROGRAM_ID } from "../jupiter-sdk";
14
+ import { HNT, JLP, JTO, JUP, PYTH, WETH } from "./tokenConstants";
14
15
 
15
16
  export const SOLAUTO_PROD_PROGRAM = new PublicKey(
16
17
  "AutoyKBRaHSBHy9RsmXCZMy6nNFAg5FYijrvZyQcNLV"
@@ -45,4 +46,13 @@ export const STANDARD_LUT_ACCOUNTS = [
45
46
  JUPITER_PROGRAM_ID,
46
47
  ].map((x) => x.toString());
47
48
 
48
- export const JITO_BLOCK_ENGINE = "https://mainnet.block-engine.jito.wtf";
49
+ export const JITO_BLOCK_ENGINE = "https://mainnet.block-engine.jito.wtf";
50
+
51
+ export const BROKEN_TOKENS = [
52
+ JUP,
53
+ JLP,
54
+ WETH,
55
+ HNT,
56
+ JTO,
57
+ PYTH
58
+ ]
@@ -37,8 +37,10 @@ import {
37
37
  import { getJupSwapTransaction } from "../utils/jupiterUtils";
38
38
  import {
39
39
  getFlashLoanDetails,
40
+ getFlashLoanRequirements,
40
41
  getJupSwapRebalanceDetails,
41
42
  getRebalanceValues,
43
+ RebalanceValues,
42
44
  } from "../utils/solauto/rebalanceUtils";
43
45
  import {
44
46
  consoleLog,
@@ -71,10 +73,11 @@ import {
71
73
  getJupiterErrorFromCode,
72
74
  JUPITER_PROGRAM_ID,
73
75
  } from "../jupiter-sdk";
74
- import { PRICES } from "../constants";
76
+ import { JUP, PRICES, USDC } from "../constants";
75
77
  import { TransactionItemInputs } from "../types";
76
78
  import { safeGetPrice } from "../utils";
77
79
  import { BundleSimulationError } from "../types/transactions";
80
+ import { getPackedSettings } from "http2";
78
81
 
79
82
  interface wSolTokenUsage {
80
83
  wSolTokenAccount: PublicKey;
@@ -598,7 +601,10 @@ export async function getTransactionChores(
598
601
  return [choresBefore, choresAfter];
599
602
  }
600
603
 
601
- export async function requiresRefreshBeforeRebalance(client: SolautoClient) {
604
+ export async function requiresRefreshBeforeRebalance(
605
+ client: SolautoClient,
606
+ values: RebalanceValues
607
+ ) {
602
608
  const neverRefreshedBefore =
603
609
  client.solautoPositionData &&
604
610
  client.solautoPositionData.state.supply.amountCanBeUsed.baseUnit ===
@@ -690,9 +696,11 @@ export async function buildSolautoRebalanceTransaction(
690
696
  );
691
697
  client.log("Rebalance values: ", values);
692
698
 
699
+ const flRequirements = getFlashLoanRequirements(client, values, attemptNum);
693
700
  const swapDetails = await getJupSwapRebalanceDetails(
694
701
  client,
695
702
  values,
703
+ flRequirements,
696
704
  targetLiqUtilizationRateBps,
697
705
  attemptNum
698
706
  );
@@ -703,11 +711,15 @@ export async function buildSolautoRebalanceTransaction(
703
711
  tokenLedgerIx,
704
712
  swapIx,
705
713
  } = await getJupSwapTransaction(client.signer, swapDetails, attemptNum);
706
- const flashLoan = getFlashLoanDetails(client, values, jupQuote);
714
+
715
+ const flashLoan = flRequirements
716
+ ? getFlashLoanDetails(client, flRequirements, values, jupQuote)
717
+ : undefined;
707
718
 
708
719
  let tx = transactionBuilder();
709
720
 
710
- if (await requiresRefreshBeforeRebalance(client)) {
721
+ // REVERT ME
722
+ if (await requiresRefreshBeforeRebalance(client, values)) {
711
723
  tx = tx.add(client.refresh());
712
724
  }
713
725
 
@@ -753,7 +765,7 @@ export async function buildSolautoRebalanceTransaction(
753
765
  tx = tx.add([
754
766
  setupInstructions,
755
767
  tokenLedgerIx,
756
- client.flashBorrow(flashLoan, flashBorrowDest),
768
+ client.flashBorrow(rebalanceType, flashLoan, flashBorrowDest),
757
769
  ...(addFirstRebalance ? [firstRebalance] : []),
758
770
  ...(rebalanceThenSwap
759
771
  ? [lastRebalance, swapIx]
@@ -912,10 +924,16 @@ export function getErrorInfo(
912
924
  ) {
913
925
  canBeIgnored = true;
914
926
  }
915
- } else if (errCode !== undefined && errIx?.programId === MARGINFI_PROGRAM_ID) {
927
+ } else if (
928
+ errCode !== undefined &&
929
+ errIx?.programId === MARGINFI_PROGRAM_ID
930
+ ) {
916
931
  programName = "Marginfi";
917
932
  programError = marginfiError;
918
- } else if (errCode !== undefined && errIx?.programId === JUPITER_PROGRAM_ID) {
933
+ } else if (
934
+ errCode !== undefined &&
935
+ errIx?.programId === JUPITER_PROGRAM_ID
936
+ ) {
919
937
  programName = "Jupiter";
920
938
  programError = getJupiterErrorFromCode(errCode, createJupiterProgram());
921
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";
@@ -17,6 +17,7 @@ import {
17
17
  retryWithExponentialBackoff,
18
18
  tokenInfo,
19
19
  } from "./generalUtils";
20
+ import { INF, PYTH } from "../constants";
20
21
 
21
22
  const jupApi = createJupiterApiClient();
22
23
 
@@ -54,6 +55,16 @@ export async function getJupQuote(swapDetails: JupSwapInput) {
54
55
  tokenInfo(swapDetails.inputMint).isMeme ||
55
56
  tokenInfo(swapDetails.outputMint).isMeme;
56
57
 
58
+ const tokensWithLowAccounts = [PYTH, INF];
59
+ // TEMP REVERT ME
60
+ const useLowAccounts =
61
+ tokensWithLowAccounts.find((x) =>
62
+ swapDetails.inputMint.equals(new PublicKey(x))
63
+ ) ||
64
+ tokensWithLowAccounts.find((x) =>
65
+ swapDetails.outputMint.equals(new PublicKey(x))
66
+ );
67
+
57
68
  return await retryWithExponentialBackoff(
58
69
  async () =>
59
70
  await jupApi.quoteGet({
@@ -66,7 +77,9 @@ export async function getJupQuote(swapDetails: JupSwapInput) {
66
77
  ? "ExactIn"
67
78
  : undefined,
68
79
  slippageBps: memecoinSwap ? 500 : 200,
69
- maxAccounts: !swapDetails.exactOut ? 40 : undefined,
80
+ maxAccounts: !swapDetails.exactOut
81
+ ? 15
82
+ : undefined,
70
83
  }),
71
84
  2,
72
85
  200
@@ -8,12 +8,11 @@ import {
8
8
  consoleLog,
9
9
  currentUnixSeconds,
10
10
  retryWithExponentialBackoff,
11
- tokenInfo,
12
11
  zip,
13
12
  } from "./generalUtils";
14
13
  import * as OnDemand from "@switchboard-xyz/on-demand";
15
14
  import { getJupPriceData, getJupQuote } from "./jupiterUtils";
16
- import { createJupiterApiClient, QuoteGetSwapModeEnum } from "@jup-ag/api";
15
+ import { QuoteGetSwapModeEnum } from "@jup-ag/api";
17
16
 
18
17
  export async function fetchTokenPrices(mints: PublicKey[]): Promise<number[]> {
19
18
  const currentTime = currentUnixSeconds();
@@ -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,
@@ -24,13 +24,14 @@ import {
24
24
  getLiqUtilzationRateBps,
25
25
  getMaxLiqUtilizationRateBps,
26
26
  getSolautoFeesBps,
27
+ maxBoostToBps,
27
28
  maxRepayToBps,
28
29
  toBaseUnit,
29
30
  } from "../numberUtils";
30
31
  import { USD_DECIMALS } from "../../constants/generalAccounts";
31
32
  import { RebalanceAction } from "../../types";
32
33
  import { getPriceImpact, safeGetPrice } from "../priceUtils";
33
- import { TOKEN_INFO } from "../../constants";
34
+ import { BROKEN_TOKENS, JUP, USDC, USDT } from "../../constants";
34
35
 
35
36
  function getAdditionalAmountToDcaIn(dca: DCASettings): number {
36
37
  if (dca.dcaInBaseUnit === BigInt(0)) {
@@ -169,6 +170,7 @@ export interface RebalanceValues {
169
170
  rebalanceAction: RebalanceAction;
170
171
  rebalanceDirection: RebalanceDirection;
171
172
  feesUsd: number;
173
+ targetRateBps: number;
172
174
  }
173
175
 
174
176
  export function getRebalanceValues(
@@ -180,7 +182,7 @@ export function getRebalanceValues(
180
182
  debtPrice: number,
181
183
  targetLiqUtilizationRateBps?: number
182
184
  ): RebalanceValues {
183
- const { targetRateBps, amountToDcaIn } = getTargetRateAndDcaAmount(
185
+ let { targetRateBps, amountToDcaIn } = getTargetRateAndDcaAmount(
184
186
  state,
185
187
  settings,
186
188
  dca,
@@ -188,6 +190,20 @@ export function getRebalanceValues(
188
190
  targetLiqUtilizationRateBps
189
191
  );
190
192
 
193
+ // REVERT ME AND GET TO THE ROOT OF THIS ISSUE
194
+ const supplyMint = toWeb3JsPublicKey(state.supply.mint);
195
+ if (
196
+ BROKEN_TOKENS.includes(supplyMint.toString()) &&
197
+ (toWeb3JsPublicKey(state.debt.mint).equals(new PublicKey(USDC)) ||
198
+ toWeb3JsPublicKey(state.debt.mint).equals(new PublicKey(USDT))) &&
199
+ settings &&
200
+ settings.boostToBps ===
201
+ maxBoostToBps(state.maxLtvBps, state.liqThresholdBps) &&
202
+ targetRateBps === settings.boostToBps
203
+ ) {
204
+ targetRateBps = 6500;
205
+ }
206
+
191
207
  const amountUsdToDcaIn =
192
208
  fromBaseUnit(BigInt(Math.round(amountToDcaIn ?? 0)), state.debt.decimals) *
193
209
  (dca?.tokenType === TokenType.Debt ? debtPrice : supplyPrice);
@@ -218,6 +234,11 @@ export function getRebalanceValues(
218
234
  adjustmentFeeBps
219
235
  );
220
236
 
237
+ consoleLog(
238
+ "Target rate:",
239
+ targetRateBps,
240
+ maxBoostToBps(state.maxLtvBps, state.liqThresholdBps)
241
+ );
221
242
  const maxRepayTo = maxRepayToBps(state.maxLtvBps, state.liqThresholdBps);
222
243
  return {
223
244
  debtAdjustmentUsd,
@@ -234,13 +255,20 @@ export function getRebalanceValues(
234
255
  : "repay",
235
256
  rebalanceDirection,
236
257
  feesUsd: Math.abs(debtAdjustmentUsd * fromBps(adjustmentFeeBps)),
258
+ targetRateBps,
237
259
  };
238
260
  }
239
261
 
240
- export function rebalanceRequiresFlashLoan(
262
+ export interface FlashLoanRequirements {
263
+ useDebtLiquidity: boolean;
264
+ signerFlashLoan: boolean;
265
+ }
266
+
267
+ export function getFlashLoanRequirements(
241
268
  client: SolautoClient,
242
- values: RebalanceValues
243
- ) {
269
+ values: RebalanceValues,
270
+ attemptNum?: number
271
+ ): FlashLoanRequirements | undefined {
244
272
  let supplyUsd =
245
273
  fromBaseUnit(
246
274
  client.solautoPositionState!.supply.amountUsed.baseAmountUsdValue,
@@ -275,11 +303,32 @@ export function rebalanceRequiresFlashLoan(
275
303
  const requiresFlashLoan =
276
304
  supplyUsd <= 0 || tempLiqUtilizationRateBps > maxLiqUtilizationRateBps;
277
305
 
278
- const useDebtLiquidity =
279
- 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 =
280
311
  Math.abs(values.debtAdjustmentUsd) * 0.9 >
281
- fromBaseUnit(client.supplyLiquidityAvailable(), USD_DECIMALS) *
282
- (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
+ }
283
332
 
284
333
  consoleLog("Requires flash loan:", requiresFlashLoan);
285
334
  consoleLog("Use debt liquidity:", useDebtLiquidity);
@@ -292,32 +341,27 @@ export function rebalanceRequiresFlashLoan(
292
341
  maxLiqUtilizationRateBps
293
342
  );
294
343
 
295
- return { requiresFlashLoan, useDebtLiquidity };
344
+ return requiresFlashLoan ? { useDebtLiquidity, signerFlashLoan } : undefined;
296
345
  }
297
346
 
298
- export interface FlashLoanDetails {
347
+ export interface FlashLoanDetails extends FlashLoanRequirements {
299
348
  baseUnitAmount: bigint;
300
349
  mint: PublicKey;
301
- useDebtLiquidity: boolean;
302
350
  }
303
351
 
304
352
  export function getFlashLoanDetails(
305
353
  client: SolautoClient,
354
+ flRequirements: FlashLoanRequirements,
306
355
  values: RebalanceValues,
307
356
  jupQuote: QuoteResponse
308
357
  ): FlashLoanDetails | undefined {
309
- const { requiresFlashLoan, useDebtLiquidity } = rebalanceRequiresFlashLoan(
310
- client,
311
- values
312
- );
313
-
314
358
  let flashLoanToken: PositionTokenUsage | undefined = undefined;
315
359
 
316
360
  const inAmount = BigInt(parseInt(jupQuote.inAmount));
317
361
  const outAmount = BigInt(parseInt(jupQuote.outAmount));
318
362
 
319
363
  const boosting = values.rebalanceDirection === RebalanceDirection.Boost;
320
- if (boosting || useDebtLiquidity) {
364
+ if (boosting || flRequirements.useDebtLiquidity) {
321
365
  flashLoanToken = client.solautoPositionState!.debt;
322
366
  } else {
323
367
  flashLoanToken = client.solautoPositionState!.supply;
@@ -328,20 +372,21 @@ export function getFlashLoanDetails(
328
372
  }
329
373
 
330
374
  const baseUnitAmount =
331
- boosting || (!boosting && !useDebtLiquidity) ? inAmount : outAmount;
332
-
333
- return requiresFlashLoan
334
- ? {
335
- baseUnitAmount,
336
- mint: toWeb3JsPublicKey(flashLoanToken.mint),
337
- useDebtLiquidity,
338
- }
339
- : undefined;
375
+ boosting || (!boosting && !flRequirements.useDebtLiquidity)
376
+ ? inAmount
377
+ : outAmount;
378
+
379
+ return {
380
+ ...flRequirements,
381
+ baseUnitAmount,
382
+ mint: toWeb3JsPublicKey(flashLoanToken.mint),
383
+ };
340
384
  }
341
385
 
342
386
  export async function getJupSwapRebalanceDetails(
343
387
  client: SolautoClient,
344
388
  values: RebalanceValues,
389
+ flRequirements?: FlashLoanRequirements,
345
390
  targetLiqUtilizationRateBps?: number,
346
391
  attemptNum?: number
347
392
  ): Promise<JupSwapDetails> {
@@ -375,12 +420,8 @@ export async function getJupSwapRebalanceDetails(
375
420
 
376
421
  const repaying = values.rebalanceDirection === RebalanceDirection.Repay;
377
422
 
378
- const { requiresFlashLoan, useDebtLiquidity } = rebalanceRequiresFlashLoan(
379
- client,
380
- values
381
- );
382
423
  const flashLoanRepayFromDebt =
383
- repaying && requiresFlashLoan && useDebtLiquidity;
424
+ repaying && flRequirements && flRequirements.useDebtLiquidity;
384
425
 
385
426
  const exactOut = rebalanceToZero || flashLoanRepayFromDebt;
386
427
  const exactIn = !exactOut;
@@ -392,7 +433,6 @@ export async function getJupSwapRebalanceDetails(
392
433
  exactOut,
393
434
  amount: exactOut ? outputAmount : inputAmount,
394
435
  };
395
- consoleLog(targetLiqUtilizationRateBps, rebalanceToZero);
396
436
  consoleLog(jupSwapInput);
397
437
 
398
438
  let jupQuote: QuoteResponse | undefined = undefined;
@@ -3,12 +3,16 @@ import { none, publicKey, some } from "@metaplex-foundation/umi";
3
3
  import { setupTest } from "../shared";
4
4
  import { SolautoMarginfiClient } from "../../src/clients/solautoMarginfiClient";
5
5
  import {
6
+ PositionType,
6
7
  safeFetchSolautoPosition,
7
8
  solautoAction,
8
9
  SolautoSettingsParametersInpArgs,
9
10
  } from "../../src/generated";
10
11
  import { buildSolautoRebalanceTransaction } from "../../src/transactions/transactionUtils";
11
12
  import {
13
+ bytesToI80F48,
14
+ getLiqUtilzationRateBps,
15
+ getMaxLiqUtilizationRateBps,
12
16
  maxBoostToBps,
13
17
  maxRepayFromBps,
14
18
  maxRepayToBps,
@@ -21,14 +25,20 @@ import {
21
25
  } from "../../src/transactions/transactionsManager";
22
26
  import { PublicKey } from "@solana/web3.js";
23
27
  import {
28
+ DEFAULT_MARGINFI_GROUP,
29
+ MARGINFI_ACCOUNTS,
24
30
  SOLAUTO_PROD_PROGRAM,
25
31
  SOLAUTO_TEST_PROGRAM,
26
32
  USDC,
33
+ USDT,
27
34
  } from "../../src/constants";
28
35
  import {
29
36
  buildHeliusApiUrl,
37
+ getAllPositionsByAuthority,
30
38
  getQnComputeUnitPriceEstimate,
31
39
  getSolautoManagedPositions,
40
+ getSolautoPositionAccount,
41
+ retryWithExponentialBackoff,
32
42
  } from "../../src/utils";
33
43
  import { PriorityFeeSetting } from "../../src/types";
34
44
  import { buildIronforgeApiUrl } from "../../dist";
@@ -38,7 +48,7 @@ describe("Solauto Marginfi tests", async () => {
38
48
  // const signer = setupTest();
39
49
  const signer = setupTest("solauto-manager");
40
50
 
41
- const payForTransactions = false;
51
+ const payForTransactions = true;
42
52
  const testProgram = false;
43
53
  const positionId = 1;
44
54
 
@@ -56,7 +66,7 @@ describe("Solauto Marginfi tests", async () => {
56
66
  await client.initialize({
57
67
  signer,
58
68
  positionId,
59
- authority: new PublicKey("He4ka5Q3N1UvZikZvykdi47xyk5PoVP2tcQL5sVp31Sz"),
69
+ authority: new PublicKey("HqpPtE5WbBh3xU9C1Tzz125iYDQyoyodvFCRpwHwQpNc"),
60
70
  // new: true,
61
71
  // marginfiAccount: new PublicKey(
62
72
  // ""
@@ -94,6 +104,15 @@ describe("Solauto Marginfi tests", async () => {
94
104
  // targetBoostToBps: none(),
95
105
  // };
96
106
 
107
+ const settingParams: SolautoSettingsParametersInpArgs = {
108
+ boostToBps: client.solautoPositionSettings().boostToBps - 150,
109
+ boostGap: 50,
110
+ repayToBps: client.solautoPositionSettings().repayToBps - 150,
111
+ repayGap: 50,
112
+ automation: none(),
113
+ targetBoostToBps: none(),
114
+ };
115
+
97
116
  // if (client.solautoPositionData === null) {
98
117
  // transactionItems.push(
99
118
  // new TransactionItem(async () => {
@@ -144,10 +163,17 @@ describe("Solauto Marginfi tests", async () => {
144
163
  )
145
164
  );
146
165
 
166
+ // transactionItems.push(
167
+ // new TransactionItem(
168
+ // async () => ({ tx: client.refresh() }),
169
+ // "refresh"
170
+ // )
171
+ // );
172
+
147
173
  // transactionItems.push(
148
174
  // new TransactionItem(
149
175
  // async (attemptNum) =>
150
- // await buildSolautoRebalanceTransaction(client, settingParams.boostToBps, attemptNum),
176
+ // await buildSolautoRebalanceTransaction(client, 0, attemptNum),
151
177
  // "rebalance"
152
178
  // )
153
179
  // );