@haven-fi/solauto-sdk 1.0.624 → 1.0.625

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.
Files changed (130) hide show
  1. package/dist/constants/{generalAccounts.d.ts → generalConstants.d.ts} +3 -1
  2. package/dist/constants/generalConstants.d.ts.map +1 -0
  3. package/dist/constants/{generalAccounts.js → generalConstants.js} +4 -1
  4. package/dist/constants/index.d.ts +6 -5
  5. package/dist/constants/index.d.ts.map +1 -1
  6. package/dist/constants/index.js +2 -1
  7. package/dist/constants/marginfiAccounts.d.ts +4 -1
  8. package/dist/constants/marginfiAccounts.d.ts.map +1 -1
  9. package/dist/constants/marginfiAccounts.js +7 -5
  10. package/dist/constants/solautoConstants.d.ts +0 -3
  11. package/dist/constants/solautoConstants.d.ts.map +1 -1
  12. package/dist/constants/solautoConstants.js +3 -8
  13. package/dist/services/flashLoans/flProviderAggregator.d.ts +3 -3
  14. package/dist/services/flashLoans/flProviderAggregator.d.ts.map +1 -1
  15. package/dist/services/flashLoans/flProviderAggregator.js +5 -5
  16. package/dist/services/flashLoans/flProviderBase.d.ts +4 -3
  17. package/dist/services/flashLoans/flProviderBase.d.ts.map +1 -1
  18. package/dist/services/flashLoans/flProviderBase.js +3 -2
  19. package/dist/services/flashLoans/marginfiFlProvider.d.ts +2 -2
  20. package/dist/services/flashLoans/marginfiFlProvider.d.ts.map +1 -1
  21. package/dist/services/flashLoans/marginfiFlProvider.js +2 -3
  22. package/dist/services/rebalance/rebalanceSwapManager.d.ts.map +1 -1
  23. package/dist/services/rebalance/rebalanceSwapManager.js +1 -1
  24. package/dist/services/rebalance/rebalanceTxBuilder.d.ts.map +1 -1
  25. package/dist/services/rebalance/rebalanceTxBuilder.js +4 -4
  26. package/dist/services/rebalance/rebalanceValues.d.ts.map +1 -1
  27. package/dist/services/rebalance/solautoFees.d.ts.map +1 -1
  28. package/dist/services/rebalance/solautoFees.js +4 -2
  29. package/dist/services/solauto/solautoClient.d.ts +4 -3
  30. package/dist/services/solauto/solautoClient.d.ts.map +1 -1
  31. package/dist/services/solauto/solautoClient.js +21 -24
  32. package/dist/services/solauto/solautoMarginfiClient.d.ts +3 -4
  33. package/dist/services/solauto/solautoMarginfiClient.d.ts.map +1 -1
  34. package/dist/services/solauto/solautoMarginfiClient.js +19 -20
  35. package/dist/services/solauto/txHandler.d.ts +4 -2
  36. package/dist/services/solauto/txHandler.d.ts.map +1 -1
  37. package/dist/services/solauto/txHandler.js +4 -6
  38. package/dist/services/swap/jupSwapManager.d.ts +1 -1
  39. package/dist/services/swap/jupSwapManager.d.ts.map +1 -1
  40. package/dist/services/swap/jupSwapManager.js +7 -10
  41. package/dist/services/transactions/transactionUtils.d.ts +2 -3
  42. package/dist/services/transactions/transactionUtils.d.ts.map +1 -1
  43. package/dist/services/transactions/transactionUtils.js +43 -46
  44. package/dist/services/transactions/transactionsManager.d.ts +2 -3
  45. package/dist/services/transactions/transactionsManager.d.ts.map +1 -1
  46. package/dist/services/transactions/transactionsManager.js +16 -20
  47. package/dist/solautoPosition/marginfiSolautoPositionEx.d.ts.map +1 -1
  48. package/dist/solautoPosition/marginfiSolautoPositionEx.js +1 -1
  49. package/dist/solautoPosition/solautoPositionEx.d.ts +1 -1
  50. package/dist/solautoPosition/solautoPositionEx.d.ts.map +1 -1
  51. package/dist/solautoPosition/solautoPositionEx.js +1 -1
  52. package/dist/solautoPosition/utils.d.ts +2 -2
  53. package/dist/solautoPosition/utils.d.ts.map +1 -1
  54. package/dist/solautoPosition/utils.js +2 -2
  55. package/dist/types/solauto.d.ts +1 -0
  56. package/dist/types/solauto.d.ts.map +1 -1
  57. package/dist/utils/generalUtils.d.ts +2 -0
  58. package/dist/utils/generalUtils.d.ts.map +1 -1
  59. package/dist/utils/generalUtils.js +9 -1
  60. package/dist/utils/index.d.ts +1 -0
  61. package/dist/utils/index.d.ts.map +1 -1
  62. package/dist/utils/index.js +1 -0
  63. package/dist/utils/jitoUtils.d.ts.map +1 -1
  64. package/dist/utils/jitoUtils.js +7 -8
  65. package/dist/utils/jupiterUtils.d.ts.map +1 -1
  66. package/dist/utils/marginfiUtils.d.ts +7 -3
  67. package/dist/utils/marginfiUtils.d.ts.map +1 -1
  68. package/dist/utils/marginfiUtils.js +50 -19
  69. package/dist/utils/numberUtils.d.ts.map +1 -1
  70. package/dist/utils/priceUtils.d.ts.map +1 -1
  71. package/dist/utils/priceUtils.js +13 -15
  72. package/dist/utils/solanaUtils.d.ts +3 -5
  73. package/dist/utils/solanaUtils.d.ts.map +1 -1
  74. package/dist/utils/solanaUtils.js +7 -15
  75. package/dist/utils/solautoUtils.d.ts +3 -3
  76. package/dist/utils/solautoUtils.d.ts.map +1 -1
  77. package/dist/utils/solautoUtils.js +5 -5
  78. package/dist/utils/stringUtils.d.ts.map +1 -1
  79. package/dist/utils/stringUtils.js +3 -3
  80. package/dist/utils/switchboardUtils.d.ts +1 -1
  81. package/dist/utils/switchboardUtils.d.ts.map +1 -1
  82. package/dist/utils/switchboardUtils.js +4 -4
  83. package/local/createISMAccounts.ts +29 -12
  84. package/local/createTokenAccounts.ts +12 -11
  85. package/local/logPositions.ts +5 -5
  86. package/local/shared.ts +16 -10
  87. package/local/txSandbox.ts +5 -5
  88. package/local/updateMarginfiLUT.ts +35 -41
  89. package/local/updateSolautoLUT.ts +11 -13
  90. package/package.json +1 -1
  91. package/src/constants/{generalAccounts.ts → generalConstants.ts} +6 -1
  92. package/src/constants/index.ts +6 -5
  93. package/src/constants/marginfiAccounts.ts +15 -6
  94. package/src/constants/solautoConstants.ts +2 -10
  95. package/src/services/flashLoans/flProviderAggregator.ts +9 -7
  96. package/src/services/flashLoans/flProviderBase.ts +5 -4
  97. package/src/services/flashLoans/marginfiFlProvider.ts +3 -4
  98. package/src/services/rebalance/rebalanceSwapManager.ts +1 -1
  99. package/src/services/rebalance/rebalanceTxBuilder.ts +5 -5
  100. package/src/services/rebalance/rebalanceValues.ts +1 -1
  101. package/src/services/rebalance/solautoFees.ts +3 -4
  102. package/src/services/solauto/solautoClient.ts +9 -15
  103. package/src/services/solauto/solautoMarginfiClient.ts +21 -23
  104. package/src/services/solauto/txHandler.ts +10 -9
  105. package/src/services/swap/jupSwapManager.ts +7 -6
  106. package/src/services/transactions/transactionUtils.ts +17 -18
  107. package/src/services/transactions/transactionsManager.ts +23 -22
  108. package/src/solautoPosition/marginfiSolautoPositionEx.ts +1 -2
  109. package/src/solautoPosition/solautoPositionEx.ts +5 -5
  110. package/src/solautoPosition/utils.ts +7 -7
  111. package/src/types/solauto.ts +2 -0
  112. package/src/utils/generalUtils.ts +9 -1
  113. package/src/utils/index.ts +1 -0
  114. package/src/utils/jitoUtils.ts +17 -14
  115. package/src/utils/jupiterUtils.ts +1 -1
  116. package/src/utils/marginfiUtils.ts +56 -14
  117. package/src/utils/numberUtils.ts +0 -1
  118. package/src/utils/priceUtils.ts +7 -5
  119. package/src/utils/solanaUtils.ts +24 -32
  120. package/src/utils/solautoUtils.ts +13 -13
  121. package/src/utils/stringUtils.ts +3 -3
  122. package/src/utils/switchboardUtils.ts +4 -4
  123. package/tests/transactions/shared.ts +9 -14
  124. package/tests/transactions/solautoMarginfi.ts +13 -3
  125. package/tests/unit/accounts.ts +14 -17
  126. package/tests/unit/lookupTables.ts +5 -5
  127. package/tests/unit/rebalanceCalculations.ts +17 -11
  128. package/README.md +0 -3
  129. package/dist/constants/generalAccounts.d.ts.map +0 -1
  130. package/src/constants/README.md +0 -7
@@ -1,23 +1,21 @@
1
1
  import { PublicKey } from "@solana/web3.js";
2
- import { getTokenAccounts } from "../src/utils/accountUtils";
3
2
  import {
4
3
  SOLAUTO_FEES_WALLET,
5
4
  SOLAUTO_MANAGER,
6
- } from "../src/constants/generalAccounts";
7
- import { ALL_SUPPORTED_TOKENS } from "../src/constants/tokenConstants";
8
- import { updateLookupTable } from "./shared";
9
- import {
10
5
  SOLAUTO_LUT,
11
6
  STANDARD_LUT_ACCOUNTS,
12
- } from "../src/constants/solautoConstants";
13
- import {
14
- buildHeliusApiUrl,
7
+ SWITCHBOARD_PRICE_FEED_IDS,
8
+ ALL_SUPPORTED_TOKENS,
15
9
  getAllMarginfiAccountsByAuthority,
16
10
  getSolanaRpcConnection,
17
- } from "../src/utils";
18
- import { SWITCHBOARD_PRICE_FEED_IDS } from "../src/constants/switchboardConstants";
11
+ getTokenAccounts,
12
+ LOCAL_IRONFORGE_API_URL,
13
+ } from "../src";
14
+ import { updateLookupTable } from "./shared";
19
15
 
20
- const LOOKUP_TABLE_ADDRESS = Boolean(SOLAUTO_LUT) ? new PublicKey(SOLAUTO_LUT) : undefined;
16
+ const LOOKUP_TABLE_ADDRESS = Boolean(SOLAUTO_LUT)
17
+ ? new PublicKey(SOLAUTO_LUT)
18
+ : undefined;
21
19
  const solautoManagerTokenAccounts = getTokenAccounts(
22
20
  SOLAUTO_MANAGER,
23
21
  ALL_SUPPORTED_TOKENS.map((x) => new PublicKey(x))
@@ -29,7 +27,7 @@ const solautoFeeWalletTokenAccounts = getTokenAccounts(
29
27
 
30
28
  export async function updateSolautoLut(additionalAccounts?: string[]) {
31
29
  const [_, umi] = getSolanaRpcConnection(
32
- buildHeliusApiUrl(process.env.HELIUS_API_KEY!)
30
+ LOCAL_IRONFORGE_API_URL
33
31
  );
34
32
  const ismAccounts = await getAllMarginfiAccountsByAuthority(
35
33
  umi,
@@ -43,7 +41,7 @@ export async function updateSolautoLut(additionalAccounts?: string[]) {
43
41
  ...solautoManagerTokenAccounts.map((x) => x.toString()),
44
42
  ...solautoFeeWalletTokenAccounts.map((x) => x.toString()),
45
43
  ...ismAccounts.map((x) => x.marginfiAccount.toString()),
46
- ...Object.values(SWITCHBOARD_PRICE_FEED_IDS).map(x => x.feedId),
44
+ ...Object.values(SWITCHBOARD_PRICE_FEED_IDS).map((x) => x.feedId),
47
45
  ...(additionalAccounts ?? []),
48
46
  ],
49
47
  LOOKUP_TABLE_ADDRESS
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@haven-fi/solauto-sdk",
3
- "version": "1.0.624",
3
+ "version": "1.0.625",
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",
@@ -1,5 +1,10 @@
1
1
  import { PublicKey } from "@solana/web3.js";
2
+ import { buildIronforgeApiUrl } from "../utils";
2
3
 
3
4
  export const USD_DECIMALS = 9;
4
5
  export const SOLAUTO_FEES_WALLET = new PublicKey("AprYCPiVeKMCgjQ2ZufwChMzvQ5kFjJo2ekTLSkXsQDm");
5
- export const SOLAUTO_MANAGER = new PublicKey("MNGRcX4nc7quPdzBbNKJ4ScK5EE73JnwJVGxuJXhHCY");
6
+ export const SOLAUTO_MANAGER = new PublicKey("MNGRcX4nc7quPdzBbNKJ4ScK5EE73JnwJVGxuJXhHCY");
7
+
8
+ export const LOCAL_IRONFORGE_API_URL = buildIronforgeApiUrl(process.env.IRONFORGE_API_KEY!);
9
+
10
+ export const BASIS_POINTS = 10000;
@@ -1,5 +1,6 @@
1
- export * from './generalAccounts';
2
- export * from './marginfiAccounts';
3
- export * from './pythConstants';
4
- export * from './solautoConstants';
5
- export * from './tokenConstants';
1
+ export * from "./generalConstants";
2
+ export * from "./marginfiAccounts";
3
+ export * from "./pythConstants";
4
+ export * from "./solautoConstants";
5
+ export * from "./switchboardConstants";
6
+ export * from "./tokenConstants";
@@ -1,14 +1,19 @@
1
+ import { PublicKey } from "@solana/web3.js";
1
2
  import { NATIVE_MINT } from "@solana/spl-token";
2
3
  import * as tokens from "./tokenConstants";
3
4
  import { MarginfiAssetAccounts } from "../types/accounts";
4
- import { PublicKey } from "@solana/web3.js";
5
5
  import { SWITCHBOARD_PRICE_FEED_IDS } from "./switchboardConstants";
6
6
 
7
+ export const MARGINFI_PROD_PROGRAM = new PublicKey(
8
+ "MFv2hWf31Z9kbCa1snEPYctwafyhdvnV7FZnsebVacA"
9
+ );
10
+ export const MARGINFI_STAGING_PROGRAM = new PublicKey(
11
+ "stag8sTKds2h4KzjUw3zKTsxbqvT4XKHdaR9X9E6Rct"
12
+ );
13
+
7
14
  export const DEFAULT_MARGINFI_GROUP =
8
15
  "4qp6Fx6tnZkY5Wropq9wUYgtFxXKwE6viZxFHg3rdAG8";
9
16
 
10
- export const DEFAULT_PUBKEY = PublicKey.default.toString();
11
-
12
17
  const USDC_PRICE_ORACLE = "Dpw1EAVrSB1ibxiDQyTAW6Zip3J4Btk2x4SgApQCeFbX";
13
18
 
14
19
  export const MARGINFI_ACCOUNTS: {
@@ -149,7 +154,8 @@ export const MARGINFI_ACCOUNTS: {
149
154
  bank: "3J5rKmCi7JXG6qmiobFJyAidVTnnNAMGj4jomfBxKGRM",
150
155
  liquidityVault: "863K9YPVT3xbUGFZevrQJLqMux3UdRkwNQ6usAp4hJyy",
151
156
  vaultAuthority: "Qsv2rnNRdv59AwRU3YmGPMCTdKT41CDAKyYAr4srCJR",
152
- priceOracle: SWITCHBOARD_PRICE_FEED_IDS[tokens.RETARDIO.toString()].feedId,
157
+ priceOracle:
158
+ SWITCHBOARD_PRICE_FEED_IDS[tokens.RETARDIO.toString()].feedId,
153
159
  },
154
160
  [tokens.USDC]: {
155
161
  bank: "6cgYhBFWCc5sNHxkvSRhd5H9AdAHR41zKwuF37HmLry5",
@@ -184,9 +190,12 @@ export const MARGINFI_ACCOUNTS: {
184
190
  liquidityVault: "4U1UBjXrPrW7JuQ894JbLUBqcb5LFfK9rfkWFwT7EdQ9",
185
191
  vaultAuthority: "CY74V1r48kuuHA6APD3AaU2oPV1mBqe9srikrQQSHNR6",
186
192
  priceOracle: USDC_PRICE_ORACLE,
187
- }
188
- }
193
+ },
194
+ },
189
195
  };
190
196
 
191
197
  export const MARGINFI_ACCOUNTS_LOOKUP_TABLE =
192
198
  "GAjmWmBPcH5Gxbiykasydj6RsCEaCLyHEvK6kHdFigc6";
199
+
200
+ export const MARGINFI_STAGING_ACCOUNTS_LOOKUP_TABLE =
201
+ "EoEVYjz3MnsX6fKyxrwJkRhzMCHKjj6dvnjTCHoZLMc7";
@@ -9,9 +9,8 @@ import {
9
9
  ASSOCIATED_TOKEN_PROGRAM_ID,
10
10
  TOKEN_PROGRAM_ID,
11
11
  } from "@solana/spl-token";
12
- import { SOLAUTO_MANAGER } from "./generalAccounts";
12
+ import { SOLAUTO_MANAGER } from "./generalConstants";
13
13
  import { JUPITER_PROGRAM_ID } from "../jupiter-sdk";
14
- import { HNT, JLP, JTO, JUP, PYTH, WETH } from "./tokenConstants";
15
14
 
16
15
  export const SOLAUTO_PROD_PROGRAM = new PublicKey(
17
16
  "AutoyKBRaHSBHy9RsmXCZMy6nNFAg5FYijrvZyQcNLV"
@@ -22,8 +21,6 @@ export const SOLAUTO_TEST_PROGRAM = new PublicKey(
22
21
 
23
22
  (globalThis as any).SHOW_LOGS = false;
24
23
 
25
- export const BASIS_POINTS = 10000;
26
-
27
24
  export const MIN_POSITION_STATE_FRESHNESS_SECS = 5;
28
25
  export const MIN_REPAY_GAP_BPS = 50;
29
26
  export const MIN_BOOST_GAP_BPS = 50;
@@ -33,8 +30,6 @@ export const REFERRER_PERCENTAGE = 0.15;
33
30
 
34
31
  export const PRICES: { [key: string]: { price: number; time: number } } = {};
35
32
 
36
- export const JITO_BLOCK_ENGINE = "https://mainnet.block-engine.jito.wtf";
37
-
38
33
  export const JITO_TIP_ACCOUNTS = [
39
34
  "96gYZGLnJYVFmbjzopPSU6QiEV5fGqZNyN9nmNhvrZU5",
40
35
  "HFqU5x63VTqvQss8hp11i4wVV8bD44PvwucfZ2bU7gRe",
@@ -59,7 +54,4 @@ export const STANDARD_LUT_ACCOUNTS = [
59
54
  SYSVAR_RENT_PUBKEY,
60
55
  SYSVAR_INSTRUCTIONS_PUBKEY,
61
56
  JUPITER_PROGRAM_ID,
62
- ].map((x) => x.toString());
63
-
64
- // TODO:
65
- export const BROKEN_TOKENS = [JUP, JLP, WETH, HNT, JTO, PYTH];
57
+ ].map((x) => x.toString());
@@ -1,10 +1,10 @@
1
- import { FlProviderBase } from "./flProviderBase";
2
1
  import { PublicKey } from "@solana/web3.js";
3
- import { FlashLoanDetails, FlashLoanRequirements } from "../../types";
4
2
  import { Signer, TransactionBuilder, Umi } from "@metaplex-foundation/umi";
3
+ import { toWeb3JsPublicKey } from "@metaplex-foundation/umi-web3js-adapters";
4
+ import { FlProviderBase } from "./flProviderBase";
5
+ import { FlashLoanDetails, ProgramEnv } from "../../types";
5
6
  import { TokenType } from "../../generated";
6
7
  import { MarginfiFlProvider } from "./marginfiFlProvider";
7
- import { toWeb3JsPublicKey } from "@metaplex-foundation/umi-web3js-adapters";
8
8
 
9
9
  export class FlProviderAggregator extends FlProviderBase {
10
10
  private marginfiFlProvider!: MarginfiFlProvider;
@@ -14,15 +14,17 @@ export class FlProviderAggregator extends FlProviderBase {
14
14
  signer: Signer,
15
15
  authority: PublicKey,
16
16
  supplyMint: PublicKey,
17
- debtMint: PublicKey
17
+ debtMint: PublicKey,
18
+ programEnv?: ProgramEnv
18
19
  ) {
19
- super(umi, signer, authority, supplyMint, debtMint);
20
+ super(umi, signer, authority, supplyMint, debtMint, programEnv);
20
21
  this.marginfiFlProvider = new MarginfiFlProvider(
21
22
  umi,
22
23
  signer,
23
24
  authority,
24
25
  supplyMint,
25
- debtMint
26
+ debtMint,
27
+ programEnv
26
28
  );
27
29
  }
28
30
 
@@ -60,7 +62,7 @@ export class FlProviderAggregator extends FlProviderBase {
60
62
  }
61
63
 
62
64
  flFeeBps(source: TokenType, signerFlashLoan?: boolean): number {
63
- return this.flProvider(source).flFeeBps(source);
65
+ return this.flProvider(source).flFeeBps(source, signerFlashLoan);
64
66
  }
65
67
 
66
68
  flashBorrow(
@@ -1,10 +1,11 @@
1
+ import { PublicKey } from "@solana/web3.js";
1
2
  import {
2
3
  Signer,
3
4
  transactionBuilder,
4
5
  TransactionBuilder,
5
6
  Umi,
6
7
  } from "@metaplex-foundation/umi";
7
- import { PublicKey } from "@solana/web3.js";
8
+ import { toWeb3JsPublicKey } from "@metaplex-foundation/umi-web3js-adapters";
8
9
  import {
9
10
  fromBaseUnit,
10
11
  getTokenAccount,
@@ -13,8 +14,7 @@ import {
13
14
  tokenInfo,
14
15
  } from "../../utils";
15
16
  import { TokenType } from "../../generated";
16
- import { FlashLoanDetails } from "../../types";
17
- import { toWeb3JsPublicKey } from "@metaplex-foundation/umi-web3js-adapters";
17
+ import { FlashLoanDetails, ProgramEnv } from "../../types";
18
18
 
19
19
  export abstract class FlProviderBase {
20
20
  protected flSigners: Signer[] = [];
@@ -24,7 +24,8 @@ export abstract class FlProviderBase {
24
24
  protected signer: Signer,
25
25
  protected authority: PublicKey,
26
26
  protected supplyMint: PublicKey,
27
- protected debtMint: PublicKey
27
+ protected debtMint: PublicKey,
28
+ protected programEnv: ProgramEnv = "Prod"
28
29
  ) {}
29
30
 
30
31
  abstract initialize(): Promise<void>;
@@ -1,3 +1,4 @@
1
+ import { PublicKey, SYSVAR_INSTRUCTIONS_PUBKEY } from "@solana/web3.js";
1
2
  import {
2
3
  AccountMeta,
3
4
  createSignerFromKeypair,
@@ -6,6 +7,7 @@ import {
6
7
  transactionBuilder,
7
8
  TransactionBuilder,
8
9
  } from "@metaplex-foundation/umi";
10
+ import { toWeb3JsPublicKey } from "@metaplex-foundation/umi-web3js-adapters";
9
11
  import { MARGINFI_ACCOUNTS } from "../../constants";
10
12
  import {
11
13
  Bank,
@@ -19,7 +21,6 @@ import {
19
21
  safeFetchAllBank,
20
22
  } from "../../marginfi-sdk";
21
23
  import { FlProviderBase } from "./flProviderBase";
22
- import { PublicKey, SYSVAR_INSTRUCTIONS_PUBKEY } from "@solana/web3.js";
23
24
  import {
24
25
  bytesToI80F48,
25
26
  consoleLog,
@@ -34,9 +35,8 @@ import {
34
35
  toBps,
35
36
  tokenInfo,
36
37
  } from "../../utils";
37
- import { TokenType } from "../../generated";
38
- import { toWeb3JsPublicKey } from "@metaplex-foundation/umi-web3js-adapters";
39
38
  import { FlashLoanDetails } from "../../types";
39
+ import { TokenType } from "../../generated";
40
40
 
41
41
  interface IMFIAccount {
42
42
  signer?: Signer;
@@ -116,7 +116,6 @@ export class MarginfiFlProvider extends FlProviderBase {
116
116
  (x) => x.group.toString() == this.liquidityBank(sources[0]).group
117
117
  );
118
118
 
119
- // TODO: instead of picking first compatibleMarginfiAccoutn, pick one where we already have it in the marginfi Lut
120
119
  const signer =
121
120
  compatibleMarginfiAccounts.length > 0
122
121
  ? undefined
@@ -1,4 +1,5 @@
1
1
  import { QuoteResponse } from "@jup-ag/api";
2
+ import { toWeb3JsPublicKey } from "@metaplex-foundation/umi-web3js-adapters";
2
3
  import { FlashLoanRequirements } from "../../types";
3
4
  import { SolautoClient } from "../solauto";
4
5
  import { JupSwapManager, SwapParams, SwapInput } from "../swap";
@@ -13,7 +14,6 @@ import {
13
14
  toBaseUnit,
14
15
  tokenInfo,
15
16
  } from "../../utils";
16
- import { toWeb3JsPublicKey } from "@metaplex-foundation/umi-web3js-adapters";
17
17
 
18
18
  export class RebalanceSwapManager {
19
19
  public swapParams!: SwapParams;
@@ -1,3 +1,6 @@
1
+ import { PublicKey } from "@solana/web3.js";
2
+ import { toWeb3JsPublicKey } from "@metaplex-foundation/umi-web3js-adapters";
3
+ import { transactionBuilder } from "@metaplex-foundation/umi";
1
4
  import { SolautoClient } from "../solauto";
2
5
  import {
3
6
  FlashLoanRequirements,
@@ -14,8 +17,6 @@ import {
14
17
  safeGetPrice,
15
18
  tokenInfo,
16
19
  } from "../../utils";
17
- import { getRebalanceValues, RebalanceValues } from "./rebalanceValues";
18
- import { SolautoFeesBps } from "./solautoFees";
19
20
  import {
20
21
  PositionTokenState,
21
22
  RebalanceDirection,
@@ -25,10 +26,9 @@ import {
25
26
  TokenBalanceChangeType,
26
27
  TokenType,
27
28
  } from "../../generated";
28
- import { PublicKey } from "@solana/web3.js";
29
+ import { getRebalanceValues, RebalanceValues } from "./rebalanceValues";
30
+ import { SolautoFeesBps } from "./solautoFees";
29
31
  import { RebalanceSwapManager } from "./rebalanceSwapManager";
30
- import { toWeb3JsPublicKey } from "@metaplex-foundation/umi-web3js-adapters";
31
- import { transactionBuilder } from "@metaplex-foundation/umi";
32
32
 
33
33
  export class RebalanceTxBuilder {
34
34
  private values!: RebalanceValues;
@@ -3,13 +3,13 @@ import {
3
3
  TokenBalanceChange,
4
4
  TokenBalanceChangeType,
5
5
  } from "../../generated";
6
- import { SolautoPositionEx } from "../../solautoPosition";
7
6
  import {
8
7
  fromBps,
9
8
  getLiqUtilzationRateBps,
10
9
  maxRepayToBps,
11
10
  toBps,
12
11
  } from "../../utils";
12
+ import { SolautoPositionEx } from "../../solautoPosition";
13
13
  import { SolautoFeesBps } from "./solautoFees";
14
14
 
15
15
  export interface PositionValues {
@@ -37,10 +37,9 @@ export class SolautoFeesBps {
37
37
 
38
38
  let feeBps: number = 0;
39
39
 
40
- if (
41
- this.targetLiqUtilizationRateBps !== undefined ||
42
- rebalanceDirection === RebalanceDirection.Repay
43
- ) {
40
+ if (this.targetLiqUtilizationRateBps !== undefined) {
41
+ feeBps = 15;
42
+ } else if (rebalanceDirection === RebalanceDirection.Repay) {
44
43
  feeBps = 25;
45
44
  } else if (this.positionNetWorthUsd <= minSize) {
46
45
  feeBps = maxFeeBps;
@@ -1,10 +1,5 @@
1
1
  import "rpc-websockets/dist/lib/client";
2
- import {
3
- AddressLookupTableProgram,
4
- PublicKey,
5
- RpcResponseAndContext,
6
- TokenAmount,
7
- } from "@solana/web3.js";
2
+ import { AddressLookupTableProgram, PublicKey } from "@solana/web3.js";
8
3
  import {
9
4
  TransactionBuilder,
10
5
  isOption,
@@ -28,15 +23,13 @@ import {
28
23
  import {
29
24
  getSolautoPositionAccount,
30
25
  getTokenAccount,
31
- } from "../../utils/accountUtils";
32
- import { SOLAUTO_FEES_WALLET } from "../../constants/generalAccounts";
33
- import {
34
26
  getWalletSplBalances,
35
27
  getWrappedInstruction,
36
28
  splTokenTransferUmiIx,
37
- } from "../../utils/solanaUtils";
38
- import { SOLAUTO_LUT } from "../../constants/solautoConstants";
39
- import { ContextUpdates } from "../../utils/solautoUtils";
29
+ ContextUpdates,
30
+ } from "../../utils";
31
+ import { SOLAUTO_FEES_WALLET, SOLAUTO_LUT } from "../../constants";
32
+ import { ProgramEnv, RebalanceDetails } from "../../types";
40
33
  import {
41
34
  ReferralStateManager,
42
35
  ReferralStateManagerArgs,
@@ -45,8 +38,7 @@ import {
45
38
  getOrCreatePositionEx,
46
39
  SolautoPositionEx,
47
40
  } from "../../solautoPosition";
48
- import { RebalanceDetails } from "../../types";
49
- import { FlProviderAggregator } from "../flashLoans/flProviderAggregator";
41
+ import { FlProviderAggregator } from "../flashLoans";
50
42
 
51
43
  export interface SolautoClientArgs extends ReferralStateManagerArgs {
52
44
  new?: boolean;
@@ -59,6 +51,7 @@ export interface SolautoClientArgs extends ReferralStateManagerArgs {
59
51
 
60
52
  export abstract class SolautoClient extends ReferralStateManager {
61
53
  public lendingPlatform!: LendingPlatform;
54
+ public lpEnv!: ProgramEnv;
62
55
 
63
56
  public authority!: PublicKey;
64
57
 
@@ -153,7 +146,8 @@ export abstract class SolautoClient extends ReferralStateManager {
153
146
  this.signer,
154
147
  this.authority,
155
148
  this.pos.supplyMint(),
156
- this.pos.debtMint()
149
+ this.pos.debtMint(),
150
+ this.lpEnv
157
151
  );
158
152
  await this.flProvider.initialize();
159
153
  this.otherSigners.push(...this.flProvider.otherSigners());
@@ -1,4 +1,4 @@
1
- import { toWeb3JsPublicKey } from "@metaplex-foundation/umi-web3js-adapters";
1
+ import { PublicKey, SYSVAR_INSTRUCTIONS_PUBKEY } from "@solana/web3.js";
2
2
  import {
3
3
  Signer,
4
4
  TransactionBuilder,
@@ -6,13 +6,12 @@ import {
6
6
  PublicKey as UmiPublicKey,
7
7
  createSignerFromKeypair,
8
8
  } from "@metaplex-foundation/umi";
9
- import { PublicKey, SYSVAR_INSTRUCTIONS_PUBKEY } from "@solana/web3.js";
10
- import { SolautoClient, SolautoClientArgs } from "./solautoClient";
11
- import { MarginfiAssetAccounts } from "../../types/accounts";
9
+ import { toWeb3JsPublicKey } from "@metaplex-foundation/umi-web3js-adapters";
10
+ import { MarginfiAssetAccounts, RebalanceDetails } from "../../types";
12
11
  import {
13
12
  MARGINFI_ACCOUNTS,
14
13
  MARGINFI_ACCOUNTS_LOOKUP_TABLE,
15
- } from "../../constants/marginfiAccounts";
14
+ } from "../../constants";
16
15
  import {
17
16
  DCASettingsInpArgs,
18
17
  LendingPlatform,
@@ -29,9 +28,13 @@ import {
29
28
  marginfiRebalance,
30
29
  marginfiRefreshData,
31
30
  } from "../../generated";
32
- import { getTokenAccount } from "../../utils/accountUtils";
33
31
  import {
34
- MARGINFI_PROGRAM_ID,
32
+ getAllMarginfiAccountsByAuthority,
33
+ marginfiAccountEmpty,
34
+ getTokenAccount,
35
+ hasFirstRebalance,
36
+ } from "../../utils";
37
+ import {
35
38
  lendingAccountBorrow,
36
39
  lendingAccountDeposit,
37
40
  lendingAccountRepay,
@@ -39,12 +42,7 @@ import {
39
42
  marginfiAccountInitialize,
40
43
  safeFetchAllMarginfiAccount,
41
44
  } from "../../marginfi-sdk";
42
- import {
43
- getAllMarginfiAccountsByAuthority,
44
- marginfiAccountEmpty,
45
- } from "../../utils/marginfiUtils";
46
- import { hasFirstRebalance } from "../../utils/solautoUtils";
47
- import { RebalanceDetails } from "../../types";
45
+ import { SolautoClient, SolautoClientArgs } from "./solautoClient";
48
46
 
49
47
  export class SolautoMarginfiClient extends SolautoClient {
50
48
  public lendingPlatform = LendingPlatform.Marginfi;
@@ -64,6 +62,10 @@ export class SolautoMarginfiClient extends SolautoClient {
64
62
  async initialize(args: SolautoClientArgs) {
65
63
  await super.initialize(args);
66
64
 
65
+ this.marginfiProgram = toWeb3JsPublicKey(
66
+ this.umi.programs.get("marginfi").publicKey
67
+ );
68
+
67
69
  this.marginfiGroup = await this.pos.lendingPool();
68
70
 
69
71
  if (this.selfManaged) {
@@ -169,7 +171,7 @@ export class SolautoMarginfiClient extends SolautoClient {
169
171
 
170
172
  return marginfiOpenPosition(this.umi, {
171
173
  signer: this.signer,
172
- marginfiProgram: publicKey(MARGINFI_PROGRAM_ID),
174
+ marginfiProgram: publicKey(this.marginfiProgram),
173
175
  signerReferralState: publicKey(this.referralState),
174
176
  referredByState: this.referredByState
175
177
  ? publicKey(this.referredByState)
@@ -214,7 +216,7 @@ export class SolautoMarginfiClient extends SolautoClient {
214
216
  refreshIx(): TransactionBuilder {
215
217
  return marginfiRefreshData(this.umi, {
216
218
  signer: this.signer,
217
- marginfiProgram: publicKey(MARGINFI_PROGRAM_ID),
219
+ marginfiProgram: publicKey(this.marginfiProgram),
218
220
  marginfiGroup: publicKey(this.marginfiGroup),
219
221
  marginfiAccount: publicKey(this.marginfiAccount),
220
222
  supplyBank: publicKey(this.marginfiSupplyAccounts.bank),
@@ -342,7 +344,7 @@ export class SolautoMarginfiClient extends SolautoClient {
342
344
 
343
345
  return marginfiProtocolInteraction(this.umi, {
344
346
  signer: this.signer,
345
- marginfiProgram: publicKey(MARGINFI_PROGRAM_ID),
347
+ marginfiProgram: publicKey(this.marginfiProgram),
346
348
  solautoPosition: publicKey(this.pos.publicKey),
347
349
  marginfiGroup: publicKey(this.marginfiGroup),
348
350
  marginfiAccount: publicKey(this.marginfiAccountPk),
@@ -393,7 +395,7 @@ export class SolautoMarginfiClient extends SolautoClient {
393
395
 
394
396
  return marginfiRebalance(this.umi, {
395
397
  signer: this.signer,
396
- marginfiProgram: publicKey(MARGINFI_PROGRAM_ID),
398
+ marginfiProgram: publicKey(this.marginfiProgram),
397
399
  ixsSysvar: publicKey(SYSVAR_INSTRUCTIONS_PUBKEY),
398
400
  solautoFeesTa: publicKey(
399
401
  data.values.rebalanceDirection === RebalanceDirection.Boost
@@ -425,9 +427,7 @@ export class SolautoMarginfiClient extends SolautoClient {
425
427
  supplyPriceOracle: publicKey(this.supplyPriceOracle),
426
428
  positionSupplyTa: publicKey(this.positionSupplyTa),
427
429
  authoritySupplyTa: addAuthorityTas
428
- ? publicKey(
429
- getTokenAccount(this.authority, this.pos.supplyMint())
430
- )
430
+ ? publicKey(getTokenAccount(this.authority, this.pos.supplyMint()))
431
431
  : undefined,
432
432
  vaultSupplyTa: needSupplyAccounts
433
433
  ? publicKey(this.marginfiSupplyAccounts.liquidityVault)
@@ -439,9 +439,7 @@ export class SolautoMarginfiClient extends SolautoClient {
439
439
  debtPriceOracle: publicKey(this.debtPriceOracle),
440
440
  positionDebtTa: publicKey(this.positionDebtTa),
441
441
  authorityDebtTa: addAuthorityTas
442
- ? publicKey(
443
- getTokenAccount(this.authority, this.pos.debtMint())
444
- )
442
+ ? publicKey(getTokenAccount(this.authority, this.pos.debtMint()))
445
443
  : undefined,
446
444
  vaultDebtTa: needDebtAccounts
447
445
  ? publicKey(this.marginfiDebtAccounts.liquidityVault)
@@ -1,11 +1,12 @@
1
- import { Signer, signerIdentity, Umi } from "@metaplex-foundation/umi";
2
1
  import { Connection, PublicKey } from "@solana/web3.js";
3
- import { consoleLog, getSolanaRpcConnection } from "../../utils";
4
- import { SOLAUTO_PROD_PROGRAM } from "../../constants";
2
+ import { Signer, signerIdentity, Umi } from "@metaplex-foundation/umi";
5
3
  import {
6
4
  WalletAdapter,
7
5
  walletAdapterIdentity,
8
6
  } from "@metaplex-foundation/umi-signer-wallet-adapters";
7
+ import { consoleLog, getSolanaRpcConnection } from "../../utils";
8
+ import { SOLAUTO_PROD_PROGRAM } from "../../constants";
9
+ import { ProgramEnv } from "../../types";
9
10
 
10
11
  export interface TxHandlerProps {
11
12
  signer?: Signer;
@@ -13,13 +14,14 @@ export interface TxHandlerProps {
13
14
  rpcUrl: string;
14
15
  showLogs?: boolean;
15
16
  programId?: PublicKey;
16
- wsEndpoint?: string;
17
+ lpEnv?: ProgramEnv;
17
18
  }
18
19
 
19
20
  export abstract class TxHandler {
20
21
  public rpcUrl!: string;
21
22
  public showLogs = false;
22
- public programId = SOLAUTO_PROD_PROGRAM;
23
+ public programId!: PublicKey;
24
+ public lpEnv!: ProgramEnv;
23
25
 
24
26
  public connection!: Connection;
25
27
  public umi!: Umi;
@@ -27,15 +29,14 @@ export abstract class TxHandler {
27
29
  public otherSigners: Signer[] = [];
28
30
 
29
31
  constructor(props: TxHandlerProps) {
30
- if (props.programId !== undefined) {
31
- this.programId = props.programId;
32
- }
32
+ this.programId = props.programId ?? SOLAUTO_PROD_PROGRAM;
33
+ this.lpEnv = props.lpEnv ?? "Prod";
33
34
 
34
35
  this.rpcUrl = props.rpcUrl;
35
36
  const [connection, umi] = getSolanaRpcConnection(
36
37
  this.rpcUrl,
37
38
  this.programId,
38
- props.wsEndpoint
39
+ this.lpEnv
39
40
  );
40
41
  this.connection = connection;
41
42
  this.umi = umi;
@@ -1,24 +1,25 @@
1
+ import { PublicKey } from "@solana/web3.js";
1
2
  import {
2
3
  Signer,
3
4
  TransactionBuilder,
4
5
  transactionBuilder,
5
6
  } from "@metaplex-foundation/umi";
7
+ import { toWeb3JsPublicKey } from "@metaplex-foundation/umi-web3js-adapters";
6
8
  import {
7
9
  createJupiterApiClient,
8
10
  QuoteResponse,
9
11
  SwapInstructionsResponse,
10
12
  } from "@jup-ag/api";
11
- import { getWrappedInstruction } from "../../utils/solanaUtils";
12
- import { fromBps, toBps } from "../../utils/numberUtils";
13
- import { getTokenAccount } from "../../utils/accountUtils";
14
- import { PublicKey } from "@solana/web3.js";
15
13
  import {
16
14
  consoleLog,
17
- jupIxToSolanaIx,
18
15
  retryWithExponentialBackoff,
16
+ getWrappedInstruction,
17
+ fromBps,
18
+ toBps,
19
+ getTokenAccount,
20
+ jupIxToSolanaIx,
19
21
  } from "../../utils";
20
22
  import { TransactionItemInputs } from "../../types";
21
- import { toWeb3JsPublicKey } from "@metaplex-foundation/umi-web3js-adapters";
22
23
 
23
24
  export interface SwapInput {
24
25
  inputMint: PublicKey;