@haven-fi/solauto-sdk 1.0.625 → 1.0.627

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 (58) hide show
  1. package/README.md +115 -0
  2. package/dist/constants/marginfiAccounts.d.ts +10 -6
  3. package/dist/constants/marginfiAccounts.d.ts.map +1 -1
  4. package/dist/constants/marginfiAccounts.js +61 -37
  5. package/dist/constants/pythConstants.d.ts +4 -0
  6. package/dist/constants/pythConstants.d.ts.map +1 -1
  7. package/dist/constants/pythConstants.js +5 -1
  8. package/dist/services/flashLoans/marginfiFlProvider.d.ts.map +1 -1
  9. package/dist/services/flashLoans/marginfiFlProvider.js +9 -9
  10. package/dist/services/solauto/solautoClient.d.ts.map +1 -1
  11. package/dist/services/solauto/solautoClient.js +6 -6
  12. package/dist/services/solauto/solautoMarginfiClient.d.ts +2 -1
  13. package/dist/services/solauto/solautoMarginfiClient.d.ts.map +1 -1
  14. package/dist/services/solauto/solautoMarginfiClient.js +15 -17
  15. package/dist/services/transactions/transactionUtils.d.ts.map +1 -1
  16. package/dist/services/transactions/transactionUtils.js +3 -2
  17. package/dist/solautoPosition/marginfiSolautoPositionEx.d.ts +5 -0
  18. package/dist/solautoPosition/marginfiSolautoPositionEx.d.ts.map +1 -1
  19. package/dist/solautoPosition/marginfiSolautoPositionEx.js +20 -6
  20. package/dist/solautoPosition/solautoPositionEx.d.ts +5 -1
  21. package/dist/solautoPosition/solautoPositionEx.d.ts.map +1 -1
  22. package/dist/solautoPosition/solautoPositionEx.js +11 -4
  23. package/dist/solautoPosition/utils.js +1 -1
  24. package/dist/types/accounts.d.ts +0 -1
  25. package/dist/types/accounts.d.ts.map +1 -1
  26. package/dist/utils/generalUtils.d.ts +1 -0
  27. package/dist/utils/generalUtils.d.ts.map +1 -1
  28. package/dist/utils/generalUtils.js +10 -0
  29. package/dist/utils/index.d.ts +1 -0
  30. package/dist/utils/index.d.ts.map +1 -1
  31. package/dist/utils/index.js +1 -0
  32. package/dist/utils/marginfiUtils.d.ts +13 -3
  33. package/dist/utils/marginfiUtils.d.ts.map +1 -1
  34. package/dist/utils/marginfiUtils.js +78 -20
  35. package/dist/utils/pythUtils.d.ts +21 -0
  36. package/dist/utils/pythUtils.d.ts.map +1 -0
  37. package/dist/utils/pythUtils.js +67 -0
  38. package/dist/utils/solautoUtils.js +1 -1
  39. package/local/txSandbox.ts +3 -3
  40. package/local/updateMarginfiLUT.ts +17 -26
  41. package/package.json +1 -1
  42. package/src/constants/marginfiAccounts.ts +80 -37
  43. package/src/constants/pythConstants.ts +8 -0
  44. package/src/services/flashLoans/marginfiFlProvider.ts +13 -11
  45. package/src/services/solauto/solautoClient.ts +7 -6
  46. package/src/services/solauto/solautoMarginfiClient.ts +18 -26
  47. package/src/services/transactions/transactionUtils.ts +1 -1
  48. package/src/solautoPosition/marginfiSolautoPositionEx.ts +28 -9
  49. package/src/solautoPosition/solautoPositionEx.ts +18 -5
  50. package/src/solautoPosition/utils.ts +1 -1
  51. package/src/types/accounts.ts +0 -1
  52. package/src/utils/generalUtils.ts +12 -0
  53. package/src/utils/index.ts +1 -0
  54. package/src/utils/marginfiUtils.ts +123 -30
  55. package/src/utils/pythUtils.ts +84 -0
  56. package/src/utils/solautoUtils.ts +1 -1
  57. package/tests/unit/accounts.ts +7 -13
  58. package/tests/unit/lookupTables.ts +27 -48
package/README.md ADDED
@@ -0,0 +1,115 @@
1
+ ## Solauto Typescript SDK
2
+
3
+ Solauto is a program on the Solana blockchain that lets you manage leveraged longs & shorts on auto-pilot to maximize your gains and eliminate the risk of liquidation. The typescript SDK is made for interacting with the Solauto program. This SDK provides tools for managing, & reading Solauto state data, as well as executing transactions.
4
+
5
+ ## Installation
6
+
7
+ ```bash
8
+ npm install @haven-fi/solauto-sdk
9
+ # or
10
+ yarn add @haven-fi/solauto-sdk
11
+ # or
12
+ pnpm add @haven-fi/solauto-sdk
13
+ ```
14
+
15
+ ## Basic Usage
16
+
17
+ ```typescript
18
+ import { PublicKey } from "@solana/web3.js";
19
+ import {
20
+ getClient,
21
+ LendingPlatform,
22
+ USDC,
23
+ SolautoSettingsParametersInpArgs,
24
+ maxBoostToBps,
25
+ maxRepayToBps,
26
+ fetchTokenPrices,
27
+ TransactionItem,
28
+ solautoAction,
29
+ RebalanceTxBuilder,
30
+ TransactionsManager,
31
+ } from "@haven-fi/solauto-sdk";
32
+
33
+ // Initialize the client
34
+ const client = getClient(LendingPlatform.MARGINFI, {
35
+ signer: yourSigner,
36
+ rpcUrl: "[YOUR_RPC_URL]",
37
+ });
38
+
39
+ const supplyMint = new PublicKey(NATIVE_MINT);
40
+ const debtMint = new PublicKey(USDC);
41
+
42
+ // Initialize a new position
43
+ await client.initialize({
44
+ positionId: 1,
45
+ new: true,
46
+ supplyMint,
47
+ debtMint,
48
+ });
49
+
50
+ // Open a position with custom settings
51
+ const [maxLtvBps, liqThresholdBps] =
52
+ await client.pos.maxLtvAndLiqThresholdBps();
53
+ const settings: SolautoSettingsParametersInpArgs = {
54
+ boostToBps: maxBoostToBps(maxLtvBps, liqThresholdBps),
55
+ boostGap: 50,
56
+ repayToBps: maxRepayToBps(maxLtvBps, liqThresholdBps),
57
+ repayGap: 50,
58
+ };
59
+
60
+ const [supplyPrice, debtPrice] = await fetchTokenPrices([supplyMint, debtMint]);
61
+
62
+ const transactionItems: TransactionItem[] = [];
63
+
64
+ transactionItems.push(
65
+ new TransactionItem(async () => {
66
+ return {
67
+ tx: client.openPositionIx(settings),
68
+ };
69
+ }, "open position")
70
+ );
71
+
72
+ const debtUsd = withFlashLoan ? 60 : 10;
73
+ transactionItems.push(
74
+ new TransactionItem(async () => {
75
+ return {
76
+ tx: client.protocolInteractionIx(
77
+ solautoAction("Borrow", [
78
+ toBaseUnit(debtUsd / debtPrice, client.pos.debtMintInfo().decimals),
79
+ ])
80
+ ),
81
+ };
82
+ }, "borrow")
83
+ );
84
+
85
+ transactionItems.push(
86
+ new TransactionItem(
87
+ async (attemptNum) =>
88
+ await new RebalanceTxBuilder(client, 0).buildRebalanceTx(attemptNum),
89
+ "rebalance"
90
+ )
91
+ );
92
+
93
+ transactionItems.push(
94
+ new TransactionItem(
95
+ async () => ({
96
+ tx: client.protocolInteractionIx(
97
+ solautoAction("Withdraw", [{ __kind: "All" }])
98
+ ),
99
+ }),
100
+ "withdraw"
101
+ )
102
+ );
103
+
104
+ transactionItems.push(
105
+ new TransactionItem(
106
+ async () => ({
107
+ tx: client.closePositionIx(),
108
+ }),
109
+ "close position"
110
+ )
111
+ );
112
+
113
+ const txManager = new TransactionsManager(client);
114
+ const statuses = await txManager.clientSend(transactionItems);
115
+ ```
@@ -1,13 +1,17 @@
1
1
  import { PublicKey } from "@solana/web3.js";
2
2
  import { MarginfiAssetAccounts } from "../types/accounts";
3
- export declare const MARGINFI_PROD_PROGRAM: PublicKey;
4
- export declare const MARGINFI_STAGING_PROGRAM: PublicKey;
5
- export declare const DEFAULT_MARGINFI_GROUP = "4qp6Fx6tnZkY5Wropq9wUYgtFxXKwE6viZxFHg3rdAG8";
6
- export declare const MARGINFI_ACCOUNTS: {
3
+ import { ProgramEnv } from "../types";
4
+ export type MarginfiBankAccountsMap = {
7
5
  [group: string]: {
8
6
  [token: string]: MarginfiAssetAccounts;
9
7
  };
10
8
  };
11
- export declare const MARGINFI_ACCOUNTS_LOOKUP_TABLE = "GAjmWmBPcH5Gxbiykasydj6RsCEaCLyHEvK6kHdFigc6";
12
- export declare const MARGINFI_STAGING_ACCOUNTS_LOOKUP_TABLE = "EoEVYjz3MnsX6fKyxrwJkRhzMCHKjj6dvnjTCHoZLMc7";
9
+ export interface MarginfiProgramAccounts {
10
+ program: PublicKey;
11
+ defaultGroup: PublicKey;
12
+ lookupTable: PublicKey;
13
+ bankAccounts: MarginfiBankAccountsMap;
14
+ }
15
+ export declare function getMarginfiAccounts(programEnv?: ProgramEnv, marginfiGroup?: PublicKey): MarginfiProgramAccounts;
16
+ export declare function isMarginfiProgram(programId: PublicKey): boolean;
13
17
  //# sourceMappingURL=marginfiAccounts.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"marginfiAccounts.d.ts","sourceRoot":"","sources":["../../src/constants/marginfiAccounts.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAG5C,OAAO,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAG1D,eAAO,MAAM,qBAAqB,WAEjC,CAAC;AACF,eAAO,MAAM,wBAAwB,WAEpC,CAAC;AAEF,eAAO,MAAM,sBAAsB,iDACa,CAAC;AAIjD,eAAO,MAAM,iBAAiB,EAAE;IAC9B,CAAC,KAAK,EAAE,MAAM,GAAG;QAAE,CAAC,KAAK,EAAE,MAAM,GAAG,qBAAqB,CAAA;KAAE,CAAC;CA+K7D,CAAC;AAEF,eAAO,MAAM,8BAA8B,iDACK,CAAC;AAEjD,eAAO,MAAM,sCAAsC,iDACH,CAAC"}
1
+ {"version":3,"file":"marginfiAccounts.d.ts","sourceRoot":"","sources":["../../src/constants/marginfiAccounts.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAG5C,OAAO,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAE1D,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAetC,MAAM,MAAM,uBAAuB,GAAG;IACpC,CAAC,KAAK,EAAE,MAAM,GAAG;QAAE,CAAC,KAAK,EAAE,MAAM,GAAG,qBAAqB,CAAA;KAAE,CAAC;CAC7D,CAAC;AAgLF,MAAM,WAAW,uBAAuB;IACtC,OAAO,EAAE,SAAS,CAAC;IACnB,YAAY,EAAE,SAAS,CAAC;IACxB,WAAW,EAAE,SAAS,CAAC;IACvB,YAAY,EAAE,uBAAuB,CAAC;CACvC;AAED,wBAAgB,mBAAmB,CACjC,UAAU,CAAC,EAAE,UAAU,EACvB,aAAa,CAAC,EAAE,SAAS,GACxB,uBAAuB,CA4BzB;AAED,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,SAAS,WAKrD"}
@@ -23,130 +23,130 @@ var __importStar = (this && this.__importStar) || function (mod) {
23
23
  return result;
24
24
  };
25
25
  Object.defineProperty(exports, "__esModule", { value: true });
26
- exports.MARGINFI_STAGING_ACCOUNTS_LOOKUP_TABLE = exports.MARGINFI_ACCOUNTS_LOOKUP_TABLE = exports.MARGINFI_ACCOUNTS = exports.DEFAULT_MARGINFI_GROUP = exports.MARGINFI_STAGING_PROGRAM = exports.MARGINFI_PROD_PROGRAM = void 0;
26
+ exports.getMarginfiAccounts = getMarginfiAccounts;
27
+ exports.isMarginfiProgram = isMarginfiProgram;
27
28
  const web3_js_1 = require("@solana/web3.js");
28
29
  const spl_token_1 = require("@solana/spl-token");
29
30
  const tokens = __importStar(require("./tokenConstants"));
30
- const switchboardConstants_1 = require("./switchboardConstants");
31
- exports.MARGINFI_PROD_PROGRAM = new web3_js_1.PublicKey("MFv2hWf31Z9kbCa1snEPYctwafyhdvnV7FZnsebVacA");
32
- exports.MARGINFI_STAGING_PROGRAM = new web3_js_1.PublicKey("stag8sTKds2h4KzjUw3zKTsxbqvT4XKHdaR9X9E6Rct");
33
- exports.DEFAULT_MARGINFI_GROUP = "4qp6Fx6tnZkY5Wropq9wUYgtFxXKwE6viZxFHg3rdAG8";
34
- const USDC_PRICE_ORACLE = "Dpw1EAVrSB1ibxiDQyTAW6Zip3J4Btk2x4SgApQCeFbX";
35
- exports.MARGINFI_ACCOUNTS = {
36
- [exports.DEFAULT_MARGINFI_GROUP.toString()]: {
31
+ const MARGINFI_PROD_PROGRAM = new web3_js_1.PublicKey("MFv2hWf31Z9kbCa1snEPYctwafyhdvnV7FZnsebVacA");
32
+ const MARGINFI_STAGING_PROGRAM = new web3_js_1.PublicKey("stag8sTKds2h4KzjUw3zKTsxbqvT4XKHdaR9X9E6Rct");
33
+ const PROD_DEFAULT_MARGINFI_GROUP = "4qp6Fx6tnZkY5Wropq9wUYgtFxXKwE6viZxFHg3rdAG8";
34
+ const STAGING_DEFAULT_MARGINFI_GROUP = "FCPfpHA69EbS8f9KKSreTRkXbzFpunsKuYf5qNmnJjpo";
35
+ const MARGINFI_STAGING_ACCOUNTS = {
36
+ [STAGING_DEFAULT_MARGINFI_GROUP]: {
37
+ [spl_token_1.NATIVE_MINT.toString()]: {
38
+ bank: "3evdJSa25nsUiZzEUzd92UNa13TPRJrje1dRyiQP5Lhp",
39
+ liquidityVault: "FVXESa7wCd1tf3o9LGroBc3Ym8Gpcq1HdsLek6oo7Ykv",
40
+ vaultAuthority: "DuYk1WGq8UsjW5ThLtaehFLrnJeupTjtF7TaPzja9LBQ",
41
+ },
42
+ [tokens.USDC]: {
43
+ bank: "Ek5JSFJFD8QgXM6rPDCzf31XhDp1q3xezaWYSkJWqbqc",
44
+ liquidityVault: "6n7xXMni5WJKUMb4Vm5Zis6UaUtGF5xEGmagZNVWWoKB",
45
+ vaultAuthority: "9mXNyA5yS4WSTpYUa5gi3yBrSJWWM7XNPNDWRzWGjdVe",
46
+ },
47
+ [tokens.USDT]: {
48
+ bank: "4WFCsVXwfnQvZG52VvPwae7CtL13PUFVWdjkw5YCRBo6",
49
+ liquidityVault: "BFSyniKfXU9rHqUvHLKeZMivQsAKWTE7HZ1fW6vZcvJp",
50
+ vaultAuthority: "Fgxe3SUMzcNuLtT9Xkv8QhhWXCmu4VxynzUMwCF4HvJd",
51
+ },
52
+ },
53
+ };
54
+ const MARGINFI_PROD_ACCOUNTS = {
55
+ [PROD_DEFAULT_MARGINFI_GROUP.toString()]: {
37
56
  [spl_token_1.NATIVE_MINT.toString()]: {
38
57
  bank: "CCKtUs6Cgwo4aaQUmBPmyoApH2gUDErxNZCAntD6LYGh",
39
58
  liquidityVault: "2eicbpitfJXDwqCuFAmPgDP7t2oUotnAzbGzRKLMgSLe",
40
59
  vaultAuthority: "DD3AeAssFvjqTvRTrRAtpfjkBF8FpVKnFuwnMLN9haXD",
41
- priceOracle: "7UVimffxr9ow1uXYxsr4LHAcV58mLzhmwaeKvJ1pjLiE",
42
60
  },
43
61
  [tokens.B_SOL]: {
44
62
  bank: "6hS9i46WyTq1KXcoa2Chas2Txh9TJAVr6n1t3tnrE23K",
45
63
  liquidityVault: "2WMipeKDB2CENxbzdmnVrRbsxCA2LY6kCtBe6AAqDP9p",
46
64
  vaultAuthority: "8RcZHucpVHkHWRRdMhJZsxBK9mqKSYnMKGqtF84U8YEo",
47
- priceOracle: "5cN76Xm2Dtx9MnrQqBDeZZRsWruTTcw37UruznAdSvvE",
48
65
  },
49
66
  [tokens.M_SOL]: {
50
67
  bank: "22DcjMZrMwC5Bpa5AGBsmjc5V9VuQrXG6N9ZtdUNyYGE",
51
68
  liquidityVault: "B6HqNn83a2bLqo4i5ygjLHJgD11ePtQksUyx4MjD55DV",
52
69
  vaultAuthority: "6YxGd65JbXzgFGWjE44jsyVeCnZp7Bb1wfL9jDia1n8w",
53
- priceOracle: "5CKzb9j4ChgLUt8Gfm5CNGLN6khXKiqMbnGAW4cgXgxK",
54
70
  },
55
71
  [tokens.JITO_SOL]: {
56
72
  bank: "Bohoc1ikHLD7xKJuzTyiTyCwzaL5N7ggJQu75A8mKYM8",
57
73
  liquidityVault: "38VGtXd2pDPq9FMh1z6AVjcHCoHgvWyMhdNyamDTeeks",
58
74
  vaultAuthority: "7Ng54qf7BrCcZLqXmKA9WSR7SVRn4q6RX1YpLksBQ21A",
59
- priceOracle: "AxaxyeDT8JnWERSaTKvFXvPKkEdxnamKSqpWbsSjYg1g",
60
75
  },
61
76
  [tokens.LST]: {
62
77
  bank: "DMoqjmsuoru986HgfjqrKEvPv8YBufvBGADHUonkadC5",
63
78
  liquidityVault: "DMQUXpb6K5L8osgV4x3NeEPUoJCf2VBgnA8FQusDjSou",
64
79
  vaultAuthority: "6PWVauGLhBFHUJspsnBVZHr56ZnbvmhSD2gS7czBHGpE",
65
- priceOracle: "7aT9A5knp62jVvnEW33xaWopaPHa3Y7ggULyYiUsDhu8",
66
80
  },
67
81
  [tokens.INF]: {
68
82
  bank: "AwLRW3aPMMftXEjgWhTkYwM9CGBHdtKecvahCJZBwAqY",
69
83
  liquidityVault: "HQ1CGcqRshMhuonTGTnnmgw9ffcXxizGdZ6F6PKffWWi",
70
84
  vaultAuthority: "AEZb1XH5bfLwqk3hBKDuLfWyJKdLTgDPCkgn64BJKcvV",
71
- priceOracle: "Ceg5oePJv1a6RR541qKeQaTepvERA3i8SvyueX9tT8Sq",
72
85
  },
73
86
  [tokens.H_SOL]: {
74
87
  bank: "GJCi1uj3kYPZ64puA5sLUiCQfFapxT2xnREzrbDzFkYY",
75
88
  liquidityVault: "8M97jkdr4rJtPnQ4yQ9stD6qVwaUvjrBdDPDbHJnPJLf",
76
89
  vaultAuthority: "8x7mgTn5RvHR8Tn3CJqexSuQwrs6MLEy8csuXCDVvvpt",
77
- priceOracle: switchboardConstants_1.SWITCHBOARD_PRICE_FEED_IDS[tokens.H_SOL.toString()].feedId,
78
90
  },
79
91
  [tokens.JUP_SOL]: {
80
92
  bank: "8LaUZadNqtzuCG7iCvZd7d5cbquuYfv19KjAg6GPuuCb",
81
93
  liquidityVault: "B1zjqKPoYp9bTMhzFADaAvjyGb49FMitLpi6P3Pa3YR6",
82
94
  vaultAuthority: "93Qqsge2jHVsWLd8vas4cWghrsZJooMUr5JKN5DtcfMX",
83
- priceOracle: switchboardConstants_1.SWITCHBOARD_PRICE_FEED_IDS[tokens.JUP_SOL.toString()].feedId,
84
95
  },
85
96
  [tokens.JUP]: {
86
97
  bank: "Guu5uBc8k1WK1U2ihGosNaCy57LSgCkpWAabtzQqrQf8",
87
98
  liquidityVault: "4w49W4fNDn778wsBa6TNq9hvebZKU17ymsptrEZ8zrsm",
88
99
  vaultAuthority: "2MBwwAhL3c73Jy7HkWd9ofzh1bU39JBabrZCFQR2tUof",
89
- priceOracle: "7dbob1psH1iZBS7qPsm3Kwbf5DzSXK8Jyg31CTgTnxH5",
90
100
  },
91
101
  [tokens.JTO]: {
92
102
  bank: "EdB7YADw4XUt6wErT8kHGCUok4mnTpWGzPUU9rWDebzb",
93
103
  liquidityVault: "3bY1DEkXodGmPMG5f7ABA12228MBG5JdAAKf5cgkB6G1",
94
104
  vaultAuthority: "H2b4f2fGSKFortxwzrMZBnYVfr2yrKVUakg4Md9be3Wv",
95
- priceOracle: "7ajR2zA4MGMMTqRAVjghTKqPPn4kbrj3pYkAVRVwTGzP",
96
105
  },
97
106
  [tokens.JLP]: {
98
107
  bank: "Amtw3n7GZe5SWmyhMhaFhDTi39zbTkLeWErBsmZXwpDa",
99
108
  liquidityVault: "9xfyL8gxbV77VvhdgFmacHyLEG4h7d2eDWkSMfhXUPQ",
100
109
  vaultAuthority: "F4RSGd4BRXscCqAVG3rFLiPVpo7v6j1drVqnvSM3rBKH",
101
- priceOracle: "2TTGSRSezqFzeLUH8JwRUbtN66XLLaymfYsWRTMjfiMw",
102
110
  },
103
111
  [tokens.WBTC]: {
104
112
  bank: "BKsfDJCMbYep6gr9pq8PsmJbb5XGLHbAJzUV8vmorz7a",
105
113
  liquidityVault: "CMNdnjfaDQZo3VMoX31wZQBnSGu5FMmb1CnBaU4tApZk",
106
114
  vaultAuthority: "7P2TQHYgVJkXv1VPaREsL5Pi1gnNjVif5aF3pJewZ9kj",
107
- priceOracle: "4cSM2e6rvbGQUFiJbqytoVMi5GgghSMr8LwVrT9VPSPo",
108
115
  },
109
116
  [tokens.WETH]: {
110
117
  bank: "BkUyfXjbBBALcfZvw76WAFRvYQ21xxMWWeoPtJrUqG3z",
111
118
  liquidityVault: "AxPJtiTEDksJWvCqNHCziK4uUcabqfmwW41dqtZrPFkp",
112
119
  vaultAuthority: "ELXogWuyXrFyUG1vevffVbEhVxdFrHf2GCJTtRGKBWdM",
113
- priceOracle: "42amVS4KgzR9rA28tkVYqVXjq9Qa8dcZQMbH5EYFX6XC",
114
120
  },
115
121
  [tokens.HNT]: {
116
122
  bank: "JBcir4DPRPYVUpks9hkS1jtHMXejfeBo4xJGv3AYYHg6",
117
123
  liquidityVault: "E8Q7u5e9L9Uykx16em75ERT9wfbBPtkNL8gsRjoP8GB9",
118
124
  vaultAuthority: "AjsyrYpgaH275DBSnvNWdGK33hVycSFuXN87FKnX6fVY",
119
- priceOracle: "4DdmDswskDxXGpwHrXUfn2CNUm9rt21ac79GHNTN3J33",
120
125
  },
121
126
  [tokens.PYTH]: {
122
127
  bank: "E4td8i8PT2BZkMygzW4MGHCv2KPPs57dvz5W2ZXf9Twu",
123
128
  liquidityVault: "DUrAkkaMAckzes7so9T5frXm9YFFgjAAm3MMwHwTfVJq",
124
129
  vaultAuthority: "9b5KdVnbbfEQ2qhLeFjWvcAx2VWe9XHx7ZgayZyL9a6C",
125
- priceOracle: "8vjchtMuJNY4oFQdTi8yCe6mhCaNBFaUbktT482TpLPS",
126
130
  },
127
131
  [tokens.USDC]: {
128
132
  bank: "2s37akK2eyBbp8DZgCm7RtsaEz8eJP3Nxd4urLHQv7yB",
129
133
  liquidityVault: "7jaiZR5Sk8hdYN9MxTpczTcwbWpb5WEoxSANuUwveuat",
130
134
  vaultAuthority: "3uxNepDbmkDNq6JhRja5Z8QwbTrfmkKP8AKZV5chYDGG",
131
- priceOracle: USDC_PRICE_ORACLE,
132
135
  },
133
136
  [tokens.USDT]: {
134
137
  bank: "HmpMfL8942u22htC4EMiWgLX931g3sacXFR6KjuLgKLV",
135
138
  liquidityVault: "77t6Fi9qj4s4z22K1toufHtstM8rEy7Y3ytxik7mcsTy",
136
139
  vaultAuthority: "9r6z6KgkEytHCdQWNxvDQH98PsfU98f1m5PCg47mY2XE",
137
- priceOracle: "HT2PLQBcG5EiCcNSaMHAjSgd9F98ecpATbk4Sk5oYuM",
138
140
  },
139
141
  [tokens.BONK]: {
140
142
  bank: "DeyH7QxWvnbbaVB4zFrf4hoq7Q8z1ZT14co42BGwGtfM",
141
143
  liquidityVault: "7FdQsXmCW3N5JQbknj3F9Yqq73er9VZJjGhEEMS8Ct2A",
142
144
  vaultAuthority: "26kcZkdjJc94PdhqiLiEaGiLCYgAVVUfpDaZyK4cqih3",
143
- priceOracle: "DBE3N8uNjhKPRHfANdwGvCZghWXyLPdqdSbEW2XFwBiX",
144
145
  },
145
146
  [tokens.WIF]: {
146
147
  bank: "9dpu8KL5ABYiD3WP2Cnajzg1XaotcJvZspv29Y1Y3tn1",
147
148
  liquidityVault: "4kT3EXc5dDVndUU9mV6EH3Jh3CSEvpcCZjuMkwqrtxUy",
148
149
  vaultAuthority: "9gNrvvZ9RuTyRWooiEEypwcXU6kyXW8yWuhXU8tWUH5L",
149
- priceOracle: "6B23K3tkb51vLZA14jcEQVCA1pfHptzEHFA93V5dYwbT",
150
150
  },
151
151
  },
152
152
  ["DQ2jqDJw9uzTwttf6h6r217BQ7kws3jZbJXDkfbCJa1q"]: {
@@ -154,13 +154,11 @@ exports.MARGINFI_ACCOUNTS = {
154
154
  bank: "845oEvt1oduoBj5zQxTr21cWWaUVnRjGerJuW3yMo2nn",
155
155
  liquidityVault: "At6R64ip51zay4dT6k1WnVGETSMcaiY5vggD5DVTgxri",
156
156
  vaultAuthority: "dNraDCWb5usDSoW4kD1Mi2E9WsNu6EABcQZqnrDfjNb",
157
- priceOracle: switchboardConstants_1.SWITCHBOARD_PRICE_FEED_IDS[tokens.POPCAT.toString()].feedId,
158
157
  },
159
158
  [tokens.USDC]: {
160
159
  bank: "EXrnNVfLagt3j4hCHSD9WqK75o6dkZBtjpnrSrSC78MA",
161
160
  liquidityVault: "D9HSUYz3Rg2cTH65dUPaQS1MYxofNTeLecsAjiBgVPur",
162
161
  vaultAuthority: "5ivKgJnxQ9CewJcKYSPQUiQFdfJki6YS87FqohnMSsFM",
163
- priceOracle: USDC_PRICE_ORACLE,
164
162
  },
165
163
  },
166
164
  ["EpzY5EYF1A5eFDRfjtsPXSYMPmEx1FXKaXPnouTMF4dm"]: {
@@ -168,13 +166,11 @@ exports.MARGINFI_ACCOUNTS = {
168
166
  bank: "3J5rKmCi7JXG6qmiobFJyAidVTnnNAMGj4jomfBxKGRM",
169
167
  liquidityVault: "863K9YPVT3xbUGFZevrQJLqMux3UdRkwNQ6usAp4hJyy",
170
168
  vaultAuthority: "Qsv2rnNRdv59AwRU3YmGPMCTdKT41CDAKyYAr4srCJR",
171
- priceOracle: switchboardConstants_1.SWITCHBOARD_PRICE_FEED_IDS[tokens.RETARDIO.toString()].feedId,
172
169
  },
173
170
  [tokens.USDC]: {
174
171
  bank: "6cgYhBFWCc5sNHxkvSRhd5H9AdAHR41zKwuF37HmLry5",
175
172
  liquidityVault: "7orVfNL5ZjqvdSaDgYLgBk4i5B3AnwFXNqqAvJbx6DFy",
176
173
  vaultAuthority: "G4Azxk4PYtNRmDZkJppYo3rNAinkZXzYpQPG5dVDh4Nj",
177
- priceOracle: USDC_PRICE_ORACLE,
178
174
  },
179
175
  },
180
176
  ["G1rt3EpQ43K3bY457rhukQGRAo2QxydFAGRKqnjKzyr5"]: {
@@ -182,13 +178,11 @@ exports.MARGINFI_ACCOUNTS = {
182
178
  bank: "Dj3PndQ3j1vuga5ApiFWWAfQ4h3wBtgS2SeLZBT2LD4g",
183
179
  liquidityVault: "BRcRMDVPBQzXNXWtSS6bNotcGxhVsxfiAt1qf8nFVUpx",
184
180
  vaultAuthority: "36SgFh1qBRyj1PEhsn7Kg9Sfwbrn7rHP7kvTM5o5n6AL",
185
- priceOracle: switchboardConstants_1.SWITCHBOARD_PRICE_FEED_IDS[tokens.BILLY.toString()].feedId,
186
181
  },
187
182
  [tokens.USDC]: {
188
183
  bank: "A7vBgCowCYeja7GTc3pyqUBdC9Gkue2gWaMjGZW38meM",
189
184
  liquidityVault: "DBGhZ8TJTG2Pacdva27zY9etaro24o1tTA3LToSjYHbx",
190
185
  vaultAuthority: "Cg6BCqkGny7A2AXCV8rikhHXM82wqqfzmdsTobEeTQkH",
191
- priceOracle: USDC_PRICE_ORACLE,
192
186
  },
193
187
  },
194
188
  ["DESG67cExEcw7d6MmENLEzaocR8pLrhfiw9VrNtGWUKD"]: {
@@ -196,15 +190,45 @@ exports.MARGINFI_ACCOUNTS = {
196
190
  bank: "Br3yzg2WSb81RaFWK9UsKtq8fD5viwooZG34mKqQWxdM",
197
191
  liquidityVault: "J45Je52qv2rDBuCQWPwp3bjRhf3bGzRWhKZtGDuLooCX",
198
192
  vaultAuthority: "CKDsAKjNruDSz4tmUairh8PDGD1Rqh9WMTLWERYnnZrH",
199
- priceOracle: switchboardConstants_1.SWITCHBOARD_PRICE_FEED_IDS[tokens.HMTR.toString()].feedId,
200
193
  },
201
194
  [tokens.USDC]: {
202
195
  bank: "9yNnhJ8c1vGbu3DMf6eeeUi6TDJ2ddGgaRA88rL2R3rP",
203
196
  liquidityVault: "4U1UBjXrPrW7JuQ894JbLUBqcb5LFfK9rfkWFwT7EdQ9",
204
197
  vaultAuthority: "CY74V1r48kuuHA6APD3AaU2oPV1mBqe9srikrQQSHNR6",
205
- priceOracle: USDC_PRICE_ORACLE,
206
198
  },
207
199
  },
208
200
  };
209
- exports.MARGINFI_ACCOUNTS_LOOKUP_TABLE = "GAjmWmBPcH5Gxbiykasydj6RsCEaCLyHEvK6kHdFigc6";
210
- exports.MARGINFI_STAGING_ACCOUNTS_LOOKUP_TABLE = "EoEVYjz3MnsX6fKyxrwJkRhzMCHKjj6dvnjTCHoZLMc7";
201
+ const MARGINFI_PROD_ACCOUNTS_LOOKUP_TABLE = "GAjmWmBPcH5Gxbiykasydj6RsCEaCLyHEvK6kHdFigc6";
202
+ const MARGINFI_STAGING_ACCOUNTS_LOOKUP_TABLE = "EoEVYjz3MnsX6fKyxrwJkRhzMCHKjj6dvnjTCHoZLMc7";
203
+ function getMarginfiAccounts(programEnv, marginfiGroup) {
204
+ if (programEnv === undefined) {
205
+ if (Boolean(marginfiGroup)) {
206
+ programEnv = Object.keys(MARGINFI_PROD_ACCOUNTS).includes(marginfiGroup.toString())
207
+ ? "Prod"
208
+ : "Staging";
209
+ }
210
+ else {
211
+ programEnv = "Prod";
212
+ }
213
+ }
214
+ if (programEnv === "Prod") {
215
+ return {
216
+ program: MARGINFI_PROD_PROGRAM,
217
+ defaultGroup: new web3_js_1.PublicKey(PROD_DEFAULT_MARGINFI_GROUP),
218
+ lookupTable: new web3_js_1.PublicKey(MARGINFI_PROD_ACCOUNTS_LOOKUP_TABLE),
219
+ bankAccounts: MARGINFI_PROD_ACCOUNTS,
220
+ };
221
+ }
222
+ else {
223
+ return {
224
+ program: MARGINFI_STAGING_PROGRAM,
225
+ defaultGroup: new web3_js_1.PublicKey(STAGING_DEFAULT_MARGINFI_GROUP),
226
+ lookupTable: new web3_js_1.PublicKey(MARGINFI_STAGING_ACCOUNTS_LOOKUP_TABLE),
227
+ bankAccounts: MARGINFI_STAGING_ACCOUNTS,
228
+ };
229
+ }
230
+ }
231
+ function isMarginfiProgram(programId) {
232
+ return (programId.equals(MARGINFI_PROD_PROGRAM) ||
233
+ programId.equals(MARGINFI_STAGING_PROGRAM));
234
+ }
@@ -1,3 +1,7 @@
1
+ import { PublicKey } from "@solana/web3.js";
2
+ export declare const PYTH_PUSH_PROGRAM: PublicKey;
3
+ export declare const PYTH_SPONSORED_SHARD_ID = 0;
4
+ export declare const MARGINFI_SPONSORED_SHARD_ID = 3301;
1
5
  export declare const PYTH_PRICE_FEED_IDS: {
2
6
  [x: string]: string;
3
7
  bSo13r4TkiE4KumL71LsHTPpL2euBYLFx6h9HP3piy1: string;
@@ -1 +1 @@
1
- {"version":3,"file":"pythConstants.d.ts","sourceRoot":"","sources":["../../src/constants/pythConstants.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;CAmC/B,CAAC"}
1
+ {"version":3,"file":"pythConstants.d.ts","sourceRoot":"","sources":["../../src/constants/pythConstants.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE5C,eAAO,MAAM,iBAAiB,WAE7B,CAAC;AAEF,eAAO,MAAM,uBAAuB,IAAI,CAAC;AACzC,eAAO,MAAM,2BAA2B,OAAO,CAAC;AAGhD,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;CAmC/B,CAAC"}
@@ -23,9 +23,13 @@ var __importStar = (this && this.__importStar) || function (mod) {
23
23
  return result;
24
24
  };
25
25
  Object.defineProperty(exports, "__esModule", { value: true });
26
- exports.PYTH_PRICE_FEED_IDS = void 0;
26
+ exports.PYTH_PRICE_FEED_IDS = exports.MARGINFI_SPONSORED_SHARD_ID = exports.PYTH_SPONSORED_SHARD_ID = exports.PYTH_PUSH_PROGRAM = void 0;
27
27
  const spl_token_1 = require("@solana/spl-token");
28
28
  const tokens = __importStar(require("./tokenConstants"));
29
+ const web3_js_1 = require("@solana/web3.js");
30
+ exports.PYTH_PUSH_PROGRAM = new web3_js_1.PublicKey("pythWSnswVUd12oZpeFP8e9CVaEqJg25g1Vtc2biRsT");
31
+ exports.PYTH_SPONSORED_SHARD_ID = 0;
32
+ exports.MARGINFI_SPONSORED_SHARD_ID = 3301;
29
33
  // https://pyth.network/developers/price-feed-ids#solana-stable
30
34
  exports.PYTH_PRICE_FEED_IDS = {
31
35
  [spl_token_1.NATIVE_MINT.toString()]: "0xef0d8b6fda2ceba41da15d4095d1da392a0d2f8ed0c6c7bc0f4cfac8c280b56d",
@@ -1 +1 @@
1
- {"version":3,"file":"marginfiFlProvider.d.ts","sourceRoot":"","sources":["../../../src/services/flashLoans/marginfiFlProvider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAA8B,MAAM,iBAAiB,CAAC;AACxE,OAAO,EAML,kBAAkB,EACnB,MAAM,0BAA0B,CAAC;AAclC,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAelD,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAQ5C,qBAAa,kBAAmB,SAAQ,cAAc;IACpD,OAAO,CAAC,wBAAwB,CAAqB;IACrD,OAAO,CAAC,yBAAyB,CAAQ;IACzC,OAAO,CAAC,uBAAuB,CAAQ;IACvC,OAAO,CAAC,iBAAiB,CAAe;IACxC,OAAO,CAAC,eAAe,CAAe;IAEhC,UAAU;YAiBF,iBAAiB;IA2C/B,OAAO,CAAC,sBAAsB;IA0CxB,sBAAsB,IAAI,OAAO,CAAC,kBAAkB,CAAC;IAyC3D,gBAAgB,IAAI,SAAS,EAAE;IAY/B,OAAO,CAAC,aAAa;IAMrB,OAAO,CAAC,WAAW;IAMnB,kBAAkB,CAAC,MAAM,EAAE,SAAS,GAAG,MAAM;IAI7C,QAAQ,CAAC,MAAM,EAAE,SAAS,EAAE,eAAe,CAAC,EAAE,OAAO,GAAG,MAAM;IAc9D,WAAW,CACT,SAAS,EAAE,gBAAgB,EAC3B,gBAAgB,EAAE,SAAS,GAC1B,kBAAkB;IAoCrB,UAAU,CAAC,SAAS,EAAE,gBAAgB,GAAG,kBAAkB;IA2E3D,YAAY,CACV,eAAe,EAAE,SAAS,EAC1B,IAAI,EAAE,SAAS,EACf,aAAa,EAAE,SAAS;CAW3B"}
1
+ {"version":3,"file":"marginfiFlProvider.d.ts","sourceRoot":"","sources":["../../../src/services/flashLoans/marginfiFlProvider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAA8B,MAAM,iBAAiB,CAAC;AACxE,OAAO,EAML,kBAAkB,EACnB,MAAM,0BAA0B,CAAC;AAclC,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAgBlD,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAQ5C,qBAAa,kBAAmB,SAAQ,cAAc;IACpD,OAAO,CAAC,wBAAwB,CAAqB;IACrD,OAAO,CAAC,yBAAyB,CAAQ;IACzC,OAAO,CAAC,uBAAuB,CAAQ;IACvC,OAAO,CAAC,iBAAiB,CAAe;IACxC,OAAO,CAAC,eAAe,CAAe;IAEhC,UAAU;YAiBF,iBAAiB;IA6C/B,OAAO,CAAC,sBAAsB;IA0CxB,sBAAsB,IAAI,OAAO,CAAC,kBAAkB,CAAC;IAyC3D,gBAAgB,IAAI,SAAS,EAAE;IAY/B,OAAO,CAAC,aAAa;IAMrB,OAAO,CAAC,WAAW;IAMnB,kBAAkB,CAAC,MAAM,EAAE,SAAS,GAAG,MAAM;IAI7C,QAAQ,CAAC,MAAM,EAAE,SAAS,EAAE,eAAe,CAAC,EAAE,OAAO,GAAG,MAAM;IAc9D,WAAW,CACT,SAAS,EAAE,gBAAgB,EAC3B,gBAAgB,EAAE,SAAS,GAC1B,kBAAkB;IAoCrB,UAAU,CAAC,SAAS,EAAE,gBAAgB,GAAG,kBAAkB;IA0E3D,YAAY,CACV,eAAe,EAAE,SAAS,EAC1B,IAAI,EAAE,SAAS,EACf,aAAa,EAAE,SAAS;CAW3B"}
@@ -23,15 +23,16 @@ class MarginfiFlProvider extends flProviderBase_1.FlProviderBase {
23
23
  }
24
24
  }
25
25
  async setAvailableBanks() {
26
+ const bankAccounts = (0, constants_1.getMarginfiAccounts)(this.programEnv).bankAccounts;
26
27
  const availableBanks = [];
27
28
  const checkIfUsable = (group, mint) => {
28
- if (Object.keys(constants_1.MARGINFI_ACCOUNTS[group]).includes(mint.toString())) {
29
- availableBanks.push(constants_1.MARGINFI_ACCOUNTS[group][mint.toString()].bank);
29
+ if (Object.keys(bankAccounts[group]).includes(mint)) {
30
+ availableBanks.push(bankAccounts[group][mint].bank);
30
31
  }
31
32
  };
32
- for (const group of Object.keys(constants_1.MARGINFI_ACCOUNTS)) {
33
- checkIfUsable(group, this.supplyMint);
34
- checkIfUsable(group, this.debtMint);
33
+ for (const group of Object.keys(bankAccounts)) {
34
+ checkIfUsable(group, this.supplyMint.toString());
35
+ checkIfUsable(group, this.debtMint.toString());
35
36
  }
36
37
  const banks = await (0, marginfi_sdk_1.safeFetchAllBank)(this.umi, availableBanks.map((x) => (0, umi_1.publicKey)(x)));
37
38
  if (!(0, utils_1.safeGetPrice)(this.supplyMint) || !(0, utils_1.safeGetPrice)(this.debtMint)) {
@@ -179,10 +180,9 @@ class MarginfiFlProvider extends flProviderBase_1.FlProviderBase {
179
180
  if (x.bankPk.toString() === bank.publicKey.toString()) {
180
181
  flBankHadPrevBalance = true;
181
182
  }
182
- // TODO: Don't dynamically pull from bank until Marginfi sorts out their price oracle issues.
183
- // const bankData = await safeFetchBank(this.umi, publicKey(accounts.data.bank));
184
- // const priceOracle = bankData!.config.oracleKeys[0];
185
- const priceOracle = (0, umi_1.publicKey)((0, utils_1.findMarginfiAccounts)((0, umi_web3js_adapters_1.toWeb3JsPublicKey)(x.bankPk)).priceOracle);
183
+ const priceOracle = (0, umi_1.publicKey)(await (0, utils_1.getMarginfiPriceOracle)(this.umi, {
184
+ pk: (0, umi_web3js_adapters_1.toWeb3JsPublicKey)(x.bankPk),
185
+ }));
186
186
  remainingAccounts.push(...[
187
187
  {
188
188
  pubkey: x.bankPk,
@@ -1 +1 @@
1
- {"version":3,"file":"solautoClient.d.ts","sourceRoot":"","sources":["../../../src/services/solauto/solautoClient.ts"],"names":[],"mappings":"AAAA,OAAO,gCAAgC,CAAC;AACxC,OAAO,EAA6B,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACvE,OAAO,EACL,kBAAkB,EAMnB,MAAM,0BAA0B,CAAC;AAElC,OAAO,EACL,kBAAkB,EAClB,eAAe,EACf,aAAa,EACb,iBAAiB,EACjB,gCAAgC,EAEhC,sBAAsB,EAGvB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAML,cAAc,EACf,MAAM,aAAa,CAAC;AAErB,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC3D,OAAO,EACL,oBAAoB,EACpB,wBAAwB,EACzB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAEL,iBAAiB,EAClB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAErD,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;IACrB,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB,aAAa,CAAC,EAAE,SAAS,CAAC;CAC3B;AAED,8BAAsB,aAAc,SAAQ,oBAAoB;IACvD,eAAe,EAAG,eAAe,CAAC;IAClC,KAAK,EAAG,UAAU,CAAC;IAEnB,SAAS,EAAG,SAAS,CAAC;IAEtB,UAAU,EAAG,MAAM,CAAC;IACpB,WAAW,EAAG,OAAO,CAAC;IACtB,GAAG,EAAG,iBAAiB,CAAC;IAExB,gBAAgB,EAAG,SAAS,CAAC;IAC7B,cAAc,EAAG,SAAS,CAAC;IAE3B,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,UAAU,EAAG,oBAAoB,CAAC;IAClC,cAAc,EAAE,cAAc,CAAwB;IAE7D,OAAO,CAAC,mBAAmB,CAAqB;IAChD,OAAO,CAAC,iBAAiB,CAAqB;IAExC,UAAU,CAAC,IAAI,EAAE,iBAAiB;IAmFxC,kBAAkB,IAAI,SAAS,GAAG,SAAS;IAO3C,gBAAgB,IAAI,SAAS,GAAG,SAAS;IAOnC,kBAAkB,CAAC,OAAO,CAAC,EAAE,OAAO;IAkB1C,mBAAmB,IAAI,MAAM,EAAE;IAS/B,gBAAgB,IAAI,SAAS,EAAE;IAoBzB,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;IA4DK,cAAc,IAAI,OAAO,CAAC;QAC9B,aAAa,EAAE,MAAM,CAAC;QACtB,WAAW,EAAE,MAAM,CAAC;KACrB,CAAC;IAgBF,cAAc,CACZ,QAAQ,CAAC,EAAE,gCAAgC,EAC3C,GAAG,CAAC,EAAE,kBAAkB,GACvB,kBAAkB;IA0BrB,gBAAgB,CAAC,IAAI,EAAE,sBAAsB,GAAG,kBAAkB;IAsDlE,QAAQ,CAAC,eAAe,IAAI,kBAAkB;IAE9C,WAAW,IAAI,kBAAkB;IAgCjC,QAAQ,CAAC,SAAS,IAAI,kBAAkB;IAExC,qBAAqB,CAAC,IAAI,EAAE,iBAAiB,GAAG,kBAAkB;IAsFlE,QAAQ,CAAC,WAAW,CAClB,aAAa,EAAE,aAAa,EAC5B,IAAI,EAAE,gBAAgB,GACrB,kBAAkB;CACtB"}
1
+ {"version":3,"file":"solautoClient.d.ts","sourceRoot":"","sources":["../../../src/services/solauto/solautoClient.ts"],"names":[],"mappings":"AAAA,OAAO,gCAAgC,CAAC;AACxC,OAAO,EAA6B,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACvE,OAAO,EACL,kBAAkB,EAMnB,MAAM,0BAA0B,CAAC;AAElC,OAAO,EACL,kBAAkB,EAClB,eAAe,EACf,aAAa,EACb,iBAAiB,EACjB,gCAAgC,EAEhC,sBAAsB,EAGvB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAML,cAAc,EACf,MAAM,aAAa,CAAC;AAErB,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC3D,OAAO,EACL,oBAAoB,EACpB,wBAAwB,EACzB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAEL,iBAAiB,EAClB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAErD,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;IACrB,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB,aAAa,CAAC,EAAE,SAAS,CAAC;CAC3B;AAED,8BAAsB,aAAc,SAAQ,oBAAoB;IACvD,eAAe,EAAG,eAAe,CAAC;IAClC,KAAK,EAAG,UAAU,CAAC;IAEnB,SAAS,EAAG,SAAS,CAAC;IAEtB,UAAU,EAAG,MAAM,CAAC;IACpB,WAAW,EAAG,OAAO,CAAC;IACtB,GAAG,EAAG,iBAAiB,CAAC;IAExB,gBAAgB,EAAG,SAAS,CAAC;IAC7B,cAAc,EAAG,SAAS,CAAC;IAE3B,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,UAAU,EAAG,oBAAoB,CAAC;IAClC,cAAc,EAAE,cAAc,CAAwB;IAE7D,OAAO,CAAC,mBAAmB,CAAqB;IAChD,OAAO,CAAC,iBAAiB,CAAqB;IAExC,UAAU,CAAC,IAAI,EAAE,iBAAiB;IAoFxC,kBAAkB,IAAI,SAAS,GAAG,SAAS;IAO3C,gBAAgB,IAAI,SAAS,GAAG,SAAS;IAOnC,kBAAkB,CAAC,OAAO,CAAC,EAAE,OAAO;IAkB1C,mBAAmB,IAAI,MAAM,EAAE;IAS/B,gBAAgB,IAAI,SAAS,EAAE;IAgBzB,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;IAgEK,cAAc,IAAI,OAAO,CAAC;QAC9B,aAAa,EAAE,MAAM,CAAC;QACtB,WAAW,EAAE,MAAM,CAAC;KACrB,CAAC;IAgBF,cAAc,CACZ,QAAQ,CAAC,EAAE,gCAAgC,EAC3C,GAAG,CAAC,EAAE,kBAAkB,GACvB,kBAAkB;IA0BrB,gBAAgB,CAAC,IAAI,EAAE,sBAAsB,GAAG,kBAAkB;IAsDlE,QAAQ,CAAC,eAAe,IAAI,kBAAkB;IAE9C,WAAW,IAAI,kBAAkB;IAgCjC,QAAQ,CAAC,SAAS,IAAI,kBAAkB;IAExC,qBAAqB,CAAC,IAAI,EAAE,iBAAiB,GAAG,kBAAkB;IAsFlE,QAAQ,CAAC,WAAW,CAClB,aAAa,EAAE,aAAa,EAC5B,IAAI,EAAE,gBAAgB,GACrB,kBAAkB;CACtB"}
@@ -31,6 +31,7 @@ class SolautoClient extends referralStateManager_1.ReferralStateManager {
31
31
  lendingPool: args.lendingPool,
32
32
  lpUserAccount: args.lpUserAccount,
33
33
  lendingPlatform: this.lendingPlatform,
34
+ lpEnv: this.lpEnv,
34
35
  }, this.contextUpdates);
35
36
  this.positionSupplyTa = (0, utils_1.getTokenAccount)(this.pos.publicKey, this.pos.supplyMint());
36
37
  this.signerSupplyTa = (0, utils_1.getTokenAccount)((0, umi_web3js_adapters_1.toWeb3JsPublicKey)(this.signer.publicKey), this.pos.supplyMint());
@@ -94,12 +95,8 @@ class SolautoClient extends referralStateManager_1.ReferralStateManager {
94
95
  return [
95
96
  this.authority,
96
97
  ...(this.authorityLutAddress ? [this.authorityLutAddress] : []),
97
- ...((0, umi_web3js_adapters_1.toWeb3JsPublicKey)(this.signer.publicKey).equals(this.authority)
98
- ? [this.signerSupplyTa]
99
- : []),
100
- ...((0, umi_web3js_adapters_1.toWeb3JsPublicKey)(this.signer.publicKey).equals(this.authority)
101
- ? [this.signerDebtTa]
102
- : []),
98
+ this.signerSupplyTa,
99
+ this.signerDebtTa,
103
100
  this.pos.publicKey,
104
101
  this.positionSupplyTa,
105
102
  this.positionDebtTa,
@@ -119,6 +116,9 @@ class SolautoClient extends referralStateManager_1.ReferralStateManager {
119
116
  return lookupTable?.value?.state.addresses ?? [];
120
117
  }
121
118
  async updateLookupTable() {
119
+ if (!(0, umi_web3js_adapters_1.toWeb3JsPublicKey)(this.signer.publicKey).equals(this.authority)) {
120
+ return undefined;
121
+ }
122
122
  const existingLutAccounts = await this.fetchExistingAuthorityLutAccounts();
123
123
  if (this.lutAccountsToAdd().every((element) => existingLutAccounts
124
124
  .map((x) => x.toString().toLowerCase())
@@ -1,11 +1,12 @@
1
1
  import { PublicKey } from "@solana/web3.js";
2
2
  import { Signer, TransactionBuilder } from "@metaplex-foundation/umi";
3
3
  import { MarginfiAssetAccounts, RebalanceDetails } from "../../types";
4
+ import { MarginfiProgramAccounts } from "../../constants";
4
5
  import { DCASettingsInpArgs, LendingPlatform, RebalanceStep, SolautoActionArgs, SolautoSettingsParametersInpArgs } from "../../generated";
5
6
  import { SolautoClient, SolautoClientArgs } from "./solautoClient";
6
7
  export declare class SolautoMarginfiClient extends SolautoClient {
7
8
  lendingPlatform: LendingPlatform;
8
- marginfiProgram: PublicKey;
9
+ mfiAccounts: MarginfiProgramAccounts;
9
10
  marginfiAccount: PublicKey | Signer;
10
11
  marginfiAccountPk: PublicKey;
11
12
  marginfiGroup: PublicKey;
@@ -1 +1 @@
1
- {"version":3,"file":"solautoMarginfiClient.d.ts","sourceRoot":"","sources":["../../../src/services/solauto/solautoMarginfiClient.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAA8B,MAAM,iBAAiB,CAAC;AACxE,OAAO,EACL,MAAM,EACN,kBAAkB,EAInB,MAAM,0BAA0B,CAAC;AAElC,OAAO,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAKtE,OAAO,EACL,kBAAkB,EAClB,eAAe,EAGf,aAAa,EACb,iBAAiB,EAEjB,gCAAgC,EAOjC,MAAM,iBAAiB,CAAC;AAezB,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAEnE,qBAAa,qBAAsB,SAAQ,aAAa;IAC/C,eAAe,kBAA4B;IAE3C,eAAe,EAAG,SAAS,CAAC;IAE5B,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;IAE7B,UAAU,CAAC,IAAI,EAAE,iBAAiB;IA0ExC,mBAAmB,IAAI,MAAM,EAAE;IAI/B,gBAAgB,IAAI,SAAS,EAAE;IAI/B,yBAAyB,CAAC,eAAe,EAAE,MAAM,GAAG,kBAAkB;IAStE,cAAc,CACZ,QAAQ,CAAC,EAAE,gCAAgC,EAC3C,GAAG,CAAC,EAAE,kBAAkB,GACvB,kBAAkB;IAMrB,OAAO,CAAC,sBAAsB;IA0C9B,eAAe,IAAI,kBAAkB;IAYrC,SAAS,IAAI,kBAAkB;IAc/B,qBAAqB,CAAC,IAAI,EAAE,iBAAiB,GAAG,kBAAkB;IAUlE,OAAO,CAAC,6BAA6B;IAmErC,OAAO,CAAC,oCAAoC;IA0D5C,WAAW,CACT,aAAa,EAAE,aAAa,EAC5B,IAAI,EAAE,gBAAgB,GACrB,kBAAkB;CAiGtB"}
1
+ {"version":3,"file":"solautoMarginfiClient.d.ts","sourceRoot":"","sources":["../../../src/services/solauto/solautoMarginfiClient.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAA8B,MAAM,iBAAiB,CAAC;AACxE,OAAO,EACL,MAAM,EACN,kBAAkB,EAInB,MAAM,0BAA0B,CAAC;AAElC,OAAO,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AACtE,OAAO,EAAuB,uBAAuB,EAAE,MAAM,iBAAiB,CAAC;AAC/E,OAAO,EACL,kBAAkB,EAClB,eAAe,EAGf,aAAa,EACb,iBAAiB,EAEjB,gCAAgC,EAOjC,MAAM,iBAAiB,CAAC;AAgBzB,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAEnE,qBAAa,qBAAsB,SAAQ,aAAa;IAC/C,eAAe,kBAA4B;IAE3C,WAAW,EAAG,uBAAuB,CAAC;IAEtC,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;IAE7B,UAAU,CAAC,IAAI,EAAE,iBAAiB;IAiExC,mBAAmB,IAAI,MAAM,EAAE;IAO/B,gBAAgB,IAAI,SAAS,EAAE;IAI/B,yBAAyB,CAAC,eAAe,EAAE,MAAM,GAAG,kBAAkB;IAStE,cAAc,CACZ,QAAQ,CAAC,EAAE,gCAAgC,EAC3C,GAAG,CAAC,EAAE,kBAAkB,GACvB,kBAAkB;IAMrB,OAAO,CAAC,sBAAsB;IA0C9B,eAAe,IAAI,kBAAkB;IAYrC,SAAS,IAAI,kBAAkB;IAc/B,qBAAqB,CAAC,IAAI,EAAE,iBAAiB,GAAG,kBAAkB;IAUlE,OAAO,CAAC,6BAA6B;IAmErC,OAAO,CAAC,oCAAoC;IA0D5C,WAAW,CACT,aAAa,EAAE,aAAa,EAC5B,IAAI,EAAE,gBAAgB,GACrB,kBAAkB;CAiGtB"}
@@ -16,7 +16,7 @@ class SolautoMarginfiClient extends solautoClient_1.SolautoClient {
16
16
  }
17
17
  async initialize(args) {
18
18
  await super.initialize(args);
19
- this.marginfiProgram = (0, umi_web3js_adapters_1.toWeb3JsPublicKey)(this.umi.programs.get("marginfi").publicKey);
19
+ this.mfiAccounts = (0, constants_1.getMarginfiAccounts)(this.lpEnv);
20
20
  this.marginfiGroup = await this.pos.lendingPool();
21
21
  if (this.selfManaged) {
22
22
  this.marginfiAccount =
@@ -46,22 +46,20 @@ class SolautoMarginfiClient extends solautoClient_1.SolautoClient {
46
46
  this.otherSigners.push(this.marginfiAccount);
47
47
  }
48
48
  this.marginfiSupplyAccounts =
49
- constants_1.MARGINFI_ACCOUNTS[this.marginfiGroup.toString()][this.pos.supplyMint().toString()];
49
+ this.mfiAccounts.bankAccounts[this.marginfiGroup.toString()][this.pos.supplyMint().toString()];
50
50
  this.marginfiDebtAccounts =
51
- constants_1.MARGINFI_ACCOUNTS[this.marginfiGroup.toString()][this.pos.debtMint().toString()];
52
- // TODO: Don't dynamically pull oracle from bank until Marginfi sorts out their price oracle issues.
53
- // const [supplyBank, debtBank] = await safeFetchAllBank(this.umi, [
54
- // publicKey(this.marginfiSupplyAccounts.bank),
55
- // publicKey(this.marginfiDebtAccounts.bank),
56
- // ]);
57
- // this.supplyPriceOracle = toWeb3JsPublicKey(supplyBank.config.oracleKeys[0]);
58
- // this.debtPriceOracle = toWeb3JsPublicKey(debtBank.config.oracleKeys[0]);
59
- this.supplyPriceOracle = new web3_js_1.PublicKey(this.marginfiSupplyAccounts.priceOracle);
60
- this.debtPriceOracle = new web3_js_1.PublicKey(this.marginfiDebtAccounts.priceOracle);
51
+ this.mfiAccounts.bankAccounts[this.marginfiGroup.toString()][this.pos.debtMint().toString()];
52
+ [this.supplyPriceOracle, this.debtPriceOracle] =
53
+ await this.pos.priceOracles();
61
54
  this.log("Marginfi account:", this.marginfiAccountPk.toString());
55
+ this.log("Supply price oracle:", this.supplyPriceOracle.toString());
56
+ this.log("Debt price oracle:", this.debtPriceOracle.toString());
62
57
  }
63
58
  defaultLookupTables() {
64
- return [constants_1.MARGINFI_ACCOUNTS_LOOKUP_TABLE, ...super.defaultLookupTables()];
59
+ return [
60
+ this.mfiAccounts.lookupTable.toString(),
61
+ ...super.defaultLookupTables(),
62
+ ];
65
63
  }
66
64
  lutAccountsToAdd() {
67
65
  return [...super.lutAccountsToAdd(), this.marginfiAccountPk];
@@ -86,7 +84,7 @@ class SolautoMarginfiClient extends solautoClient_1.SolautoClient {
86
84
  }
87
85
  return (0, generated_1.marginfiOpenPosition)(this.umi, {
88
86
  signer: this.signer,
89
- marginfiProgram: (0, umi_1.publicKey)(this.marginfiProgram),
87
+ marginfiProgram: (0, umi_1.publicKey)(this.mfiAccounts.program),
90
88
  signerReferralState: (0, umi_1.publicKey)(this.referralState),
91
89
  referredByState: this.referredByState
92
90
  ? (0, umi_1.publicKey)(this.referredByState)
@@ -128,7 +126,7 @@ class SolautoMarginfiClient extends solautoClient_1.SolautoClient {
128
126
  refreshIx() {
129
127
  return (0, generated_1.marginfiRefreshData)(this.umi, {
130
128
  signer: this.signer,
131
- marginfiProgram: (0, umi_1.publicKey)(this.marginfiProgram),
129
+ marginfiProgram: (0, umi_1.publicKey)(this.mfiAccounts.program),
132
130
  marginfiGroup: (0, umi_1.publicKey)(this.marginfiGroup),
133
131
  marginfiAccount: (0, umi_1.publicKey)(this.marginfiAccount),
134
132
  supplyBank: (0, umi_1.publicKey)(this.marginfiSupplyAccounts.bank),
@@ -228,7 +226,7 @@ class SolautoMarginfiClient extends solautoClient_1.SolautoClient {
228
226
  }
229
227
  return (0, generated_1.marginfiProtocolInteraction)(this.umi, {
230
228
  signer: this.signer,
231
- marginfiProgram: (0, umi_1.publicKey)(this.marginfiProgram),
229
+ marginfiProgram: (0, umi_1.publicKey)(this.mfiAccounts.program),
232
230
  solautoPosition: (0, umi_1.publicKey)(this.pos.publicKey),
233
231
  marginfiGroup: (0, umi_1.publicKey)(this.marginfiGroup),
234
232
  marginfiAccount: (0, umi_1.publicKey)(this.marginfiAccountPk),
@@ -262,7 +260,7 @@ class SolautoMarginfiClient extends solautoClient_1.SolautoClient {
262
260
  const addAuthorityTas = this.selfManaged || data.values.tokenBalanceChange !== undefined;
263
261
  return (0, generated_1.marginfiRebalance)(this.umi, {
264
262
  signer: this.signer,
265
- marginfiProgram: (0, umi_1.publicKey)(this.marginfiProgram),
263
+ marginfiProgram: (0, umi_1.publicKey)(this.mfiAccounts.program),
266
264
  ixsSysvar: (0, umi_1.publicKey)(web3_js_1.SYSVAR_INSTRUCTIONS_PUBKEY),
267
265
  solautoFeesTa: (0, umi_1.publicKey)(data.values.rebalanceDirection === generated_1.RebalanceDirection.Boost
268
266
  ? this.solautoFeesSupplyTa
@@ -1 +1 @@
1
- {"version":3,"file":"transactionUtils.d.ts","sourceRoot":"","sources":["../../../src/services/transactions/transactionUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAA8B,MAAM,iBAAiB,CAAC;AAKxE,OAAO,EAIL,kBAAkB,EAClB,GAAG,EAGJ,MAAM,0BAA0B,CAAC;AAgBlC,OAAO,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AA4BjE,OAAO,EAAE,qBAAqB,EAAyB,MAAM,aAAa,CAAC;AAuL3E,wBAAsB,qBAAqB,CACzC,MAAM,EAAE,aAAa,EACrB,EAAE,EAAE,kBAAkB,EACtB,sBAAsB,EAAE,MAAM,EAAE,GAC/B,OAAO,CAAC,kBAAkB,CAAC,CAyF7B;AA6LD,wBAAsB,oBAAoB,CACxC,MAAM,EAAE,aAAa,EACrB,EAAE,EAAE,kBAAkB,GACrB,OAAO,CAAC,CAAC,kBAAkB,EAAE,kBAAkB,CAAC,CAAC,CA0BnD;AAED,wBAAsB,gCAAgC,CACpD,eAAe,EAAE,oBAAoB,EACrC,YAAY,EAAE,SAAS,EACvB,eAAe,EAAE,SAAS,GACzB,OAAO,CAAC,qBAAqB,GAAG,SAAS,CAAC,CAuC5C;AAED,wBAAgB,YAAY,CAC1B,GAAG,EAAE,GAAG,EACR,GAAG,EAAE,kBAAkB,EAAE,EACzB,KAAK,EAAE,KAAK,EACZ,oBAAoB,CAAC,EAAE,OAAO;;;;EA8G/B"}
1
+ {"version":3,"file":"transactionUtils.d.ts","sourceRoot":"","sources":["../../../src/services/transactions/transactionUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAA8B,MAAM,iBAAiB,CAAC;AAKxE,OAAO,EAIL,kBAAkB,EAClB,GAAG,EAGJ,MAAM,0BAA0B,CAAC;AAgBlC,OAAO,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AA2BjE,OAAO,EAAE,qBAAqB,EAAyB,MAAM,aAAa,CAAC;AAwL3E,wBAAsB,qBAAqB,CACzC,MAAM,EAAE,aAAa,EACrB,EAAE,EAAE,kBAAkB,EACtB,sBAAsB,EAAE,MAAM,EAAE,GAC/B,OAAO,CAAC,kBAAkB,CAAC,CAyF7B;AA6LD,wBAAsB,oBAAoB,CACxC,MAAM,EAAE,aAAa,EACrB,EAAE,EAAE,kBAAkB,GACrB,OAAO,CAAC,CAAC,kBAAkB,EAAE,kBAAkB,CAAC,CAAC,CA0BnD;AAED,wBAAsB,gCAAgC,CACpD,eAAe,EAAE,oBAAoB,EACrC,YAAY,EAAE,SAAS,EACvB,eAAe,EAAE,SAAS,GACzB,OAAO,CAAC,qBAAqB,GAAG,SAAS,CAAC,CAuC5C;AAED,wBAAgB,YAAY,CAC1B,GAAG,EAAE,GAAG,EACR,GAAG,EAAE,kBAAkB,EAAE,EACzB,KAAK,EAAE,KAAK,EACZ,oBAAoB,CAAC,EAAE,OAAO;;;;EA8G/B"}