@haven-fi/solauto-sdk 1.0.510 → 1.0.512

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -15,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,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"}
@@ -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) &&
@@ -377,7 +377,8 @@ async function buildSolautoRebalanceTransaction(client, targetLiqUtilizationRate
377
377
  const { jupQuote, lookupTableAddresses, setupInstructions, tokenLedgerIx, swapIx, } = await (0, jupiterUtils_1.getJupSwapTransaction)(client.signer, swapDetails, attemptNum);
378
378
  const flashLoan = (0, rebalanceUtils_1.getFlashLoanDetails)(client, values, jupQuote);
379
379
  let tx = (0, umi_1.transactionBuilder)();
380
- if (await requiresRefreshBeforeRebalance(client)) {
380
+ // REVERT ME
381
+ if (await requiresRefreshBeforeRebalance(client, values)) {
381
382
  tx = tx.add(client.refresh());
382
383
  }
383
384
  if (flashLoan) {
@@ -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;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"}
@@ -289,6 +289,7 @@ class TransactionsManager {
289
289
  .stale;
290
290
  if (stale) {
291
291
  this.txHandler.log("Requires oracle update...");
292
+ console.log(mint);
292
293
  const swbTx = new TransactionItem(async () => (0, utils_1.buildSwbSubmitResponseTx)(client.connection, client.signer, mint), this.updateOracleTxName);
293
294
  await swbTx.initialize();
294
295
  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,EAIL,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,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"}
@@ -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,17 +26,25 @@ 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(),
31
36
  outputMint: swapDetails.outputMint.toString(),
32
- swapMode: swapDetails.exactIn
37
+ swapMode: swapDetails.exactOut
33
38
  ? "ExactOut"
34
39
  : swapDetails.exactIn
35
40
  ? "ExactIn"
36
41
  : undefined,
37
42
  slippageBps: memecoinSwap ? 500 : 200,
38
- maxAccounts: !swapDetails.exactOut ? 40 : undefined,
43
+ maxAccounts: !swapDetails.exactOut
44
+ ? useLowAccounts
45
+ ? 15
46
+ : 40
47
+ : undefined,
39
48
  }), 2, 200);
40
49
  }
41
50
  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,6 +13,7 @@ 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
19
  export declare function rebalanceRequiresFlashLoan(client: SolautoClient, values: RebalanceValues): {
@@ -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,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"}
@@ -4,6 +4,7 @@ exports.getRebalanceValues = getRebalanceValues;
4
4
  exports.rebalanceRequiresFlashLoan = rebalanceRequiresFlashLoan;
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,6 +122,7 @@ 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
128
  function rebalanceRequiresFlashLoan(client, values) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@haven-fi/solauto-sdk",
3
- "version": "1.0.510",
3
+ "version": "1.0.512",
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",
@@ -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
+ ]
@@ -39,6 +39,7 @@ import {
39
39
  getFlashLoanDetails,
40
40
  getJupSwapRebalanceDetails,
41
41
  getRebalanceValues,
42
+ RebalanceValues,
42
43
  } from "../utils/solauto/rebalanceUtils";
43
44
  import {
44
45
  consoleLog,
@@ -71,10 +72,11 @@ import {
71
72
  getJupiterErrorFromCode,
72
73
  JUPITER_PROGRAM_ID,
73
74
  } from "../jupiter-sdk";
74
- import { PRICES } from "../constants";
75
+ import { JUP, PRICES, USDC } from "../constants";
75
76
  import { TransactionItemInputs } from "../types";
76
77
  import { safeGetPrice } from "../utils";
77
78
  import { BundleSimulationError } from "../types/transactions";
79
+ import { getPackedSettings } from "http2";
78
80
 
79
81
  interface wSolTokenUsage {
80
82
  wSolTokenAccount: PublicKey;
@@ -598,7 +600,7 @@ export async function getTransactionChores(
598
600
  return [choresBefore, choresAfter];
599
601
  }
600
602
 
601
- export async function requiresRefreshBeforeRebalance(client: SolautoClient) {
603
+ export async function requiresRefreshBeforeRebalance(client: SolautoClient, values: RebalanceValues) {
602
604
  const neverRefreshedBefore =
603
605
  client.solautoPositionData &&
604
606
  client.solautoPositionData.state.supply.amountCanBeUsed.baseUnit ===
@@ -703,11 +705,13 @@ export async function buildSolautoRebalanceTransaction(
703
705
  tokenLedgerIx,
704
706
  swapIx,
705
707
  } = await getJupSwapTransaction(client.signer, swapDetails, attemptNum);
708
+
706
709
  const flashLoan = getFlashLoanDetails(client, values, jupQuote);
707
710
 
708
711
  let tx = transactionBuilder();
709
712
 
710
- if (await requiresRefreshBeforeRebalance(client)) {
713
+ // REVERT ME
714
+ if (await requiresRefreshBeforeRebalance(client, values)) {
711
715
  tx = tx.add(client.refresh());
712
716
  }
713
717
 
@@ -465,6 +465,7 @@ export class TransactionsManager {
465
465
 
466
466
  if (stale) {
467
467
  this.txHandler.log("Requires oracle update...");
468
+ console.log(mint);
468
469
  const swbTx = new TransactionItem(
469
470
  async () =>
470
471
  buildSwbSubmitResponseTx(client.connection, client.signer, mint),
@@ -9,7 +9,6 @@ import { fromBps, toBps } from "./numberUtils";
9
9
  import {
10
10
  createJupiterApiClient,
11
11
  Instruction,
12
- QuoteGetSwapModeEnum,
13
12
  QuoteResponse,
14
13
  } from "@jup-ag/api";
15
14
  import { getTokenAccount } from "./accountUtils";
@@ -18,6 +17,7 @@ import {
18
17
  retryWithExponentialBackoff,
19
18
  tokenInfo,
20
19
  } from "./generalUtils";
20
+ import { INF, PYTH } from "../constants";
21
21
 
22
22
  const jupApi = createJupiterApiClient();
23
23
 
@@ -55,19 +55,33 @@ export async function getJupQuote(swapDetails: JupSwapInput) {
55
55
  tokenInfo(swapDetails.inputMint).isMeme ||
56
56
  tokenInfo(swapDetails.outputMint).isMeme;
57
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
+
58
68
  return await retryWithExponentialBackoff(
59
69
  async () =>
60
70
  await jupApi.quoteGet({
61
71
  amount: Number(swapDetails.amount),
62
72
  inputMint: swapDetails.inputMint.toString(),
63
73
  outputMint: swapDetails.outputMint.toString(),
64
- swapMode: swapDetails.exactIn
74
+ swapMode: swapDetails.exactOut
65
75
  ? "ExactOut"
66
76
  : swapDetails.exactIn
67
77
  ? "ExactIn"
68
78
  : undefined,
69
79
  slippageBps: memecoinSwap ? 500 : 200,
70
- maxAccounts: !swapDetails.exactOut ? 40 : undefined,
80
+ maxAccounts: !swapDetails.exactOut
81
+ ? useLowAccounts
82
+ ? 15
83
+ : 40
84
+ : undefined,
71
85
  }),
72
86
  2,
73
87
  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();
@@ -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, 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,6 +255,7 @@ 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
 
@@ -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";
@@ -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("7F6v4HWZsyFP6yVFq92HQWygUgoYm5khUX8pXWGLoqUN"),
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
  // );