@haven-fi/solauto-sdk 1.0.626 → 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.
- package/README.md +115 -0
- package/dist/constants/marginfiAccounts.d.ts +3 -4
- package/dist/constants/marginfiAccounts.d.ts.map +1 -1
- package/dist/constants/marginfiAccounts.js +9 -37
- package/dist/constants/pythConstants.d.ts +4 -0
- package/dist/constants/pythConstants.d.ts.map +1 -1
- package/dist/constants/pythConstants.js +5 -1
- package/dist/services/flashLoans/marginfiFlProvider.d.ts.map +1 -1
- package/dist/services/flashLoans/marginfiFlProvider.js +7 -8
- package/dist/services/solauto/solautoClient.d.ts.map +1 -1
- package/dist/services/solauto/solautoClient.js +5 -6
- package/dist/services/solauto/solautoMarginfiClient.d.ts.map +1 -1
- package/dist/services/solauto/solautoMarginfiClient.js +4 -9
- package/dist/services/transactions/transactionUtils.d.ts.map +1 -1
- package/dist/services/transactions/transactionUtils.js +3 -2
- package/dist/solautoPosition/marginfiSolautoPositionEx.d.ts +5 -0
- package/dist/solautoPosition/marginfiSolautoPositionEx.d.ts.map +1 -1
- package/dist/solautoPosition/marginfiSolautoPositionEx.js +15 -2
- package/dist/solautoPosition/solautoPositionEx.d.ts +2 -0
- package/dist/solautoPosition/solautoPositionEx.d.ts.map +1 -1
- package/dist/solautoPosition/utils.js +1 -1
- package/dist/types/accounts.d.ts +0 -1
- package/dist/types/accounts.d.ts.map +1 -1
- package/dist/utils/generalUtils.d.ts +1 -0
- package/dist/utils/generalUtils.d.ts.map +1 -1
- package/dist/utils/generalUtils.js +10 -0
- package/dist/utils/index.d.ts +1 -0
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +1 -0
- package/dist/utils/marginfiUtils.d.ts +7 -2
- package/dist/utils/marginfiUtils.d.ts.map +1 -1
- package/dist/utils/marginfiUtils.js +44 -11
- package/dist/utils/pythUtils.d.ts +21 -0
- package/dist/utils/pythUtils.d.ts.map +1 -0
- package/dist/utils/pythUtils.js +67 -0
- package/dist/utils/solautoUtils.js +1 -1
- package/local/txSandbox.ts +3 -3
- package/local/updateMarginfiLUT.ts +9 -15
- package/package.json +1 -1
- package/src/constants/marginfiAccounts.ts +13 -39
- package/src/constants/pythConstants.ts +8 -0
- package/src/services/flashLoans/marginfiFlProvider.ts +9 -9
- package/src/services/solauto/solautoClient.ts +6 -6
- package/src/services/solauto/solautoMarginfiClient.ts +5 -11
- package/src/services/transactions/transactionUtils.ts +1 -1
- package/src/solautoPosition/marginfiSolautoPositionEx.ts +22 -3
- package/src/solautoPosition/solautoPositionEx.ts +2 -0
- package/src/solautoPosition/utils.ts +1 -1
- package/src/types/accounts.ts +0 -1
- package/src/utils/generalUtils.ts +12 -0
- package/src/utils/index.ts +1 -0
- package/src/utils/marginfiUtils.ts +75 -17
- package/src/utils/pythUtils.ts +84 -0
- package/src/utils/solautoUtils.ts +1 -1
- package/tests/unit/accounts.ts +7 -13
- 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,9 +1,7 @@
|
|
1
1
|
import { PublicKey } from "@solana/web3.js";
|
2
2
|
import { MarginfiAssetAccounts } from "../types/accounts";
|
3
3
|
import { ProgramEnv } from "../types";
|
4
|
-
export
|
5
|
-
export declare const MARGINFI_STAGING_PROGRAM: PublicKey;
|
6
|
-
export type MarginfiAccountsMap = {
|
4
|
+
export type MarginfiBankAccountsMap = {
|
7
5
|
[group: string]: {
|
8
6
|
[token: string]: MarginfiAssetAccounts;
|
9
7
|
};
|
@@ -12,7 +10,8 @@ export interface MarginfiProgramAccounts {
|
|
12
10
|
program: PublicKey;
|
13
11
|
defaultGroup: PublicKey;
|
14
12
|
lookupTable: PublicKey;
|
15
|
-
bankAccounts:
|
13
|
+
bankAccounts: MarginfiBankAccountsMap;
|
16
14
|
}
|
17
15
|
export declare function getMarginfiAccounts(programEnv?: ProgramEnv, marginfiGroup?: PublicKey): MarginfiProgramAccounts;
|
16
|
+
export declare function isMarginfiProgram(programId: PublicKey): boolean;
|
18
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;AAE1D,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,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,36 +23,31 @@ 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_PROGRAM = exports.MARGINFI_PROD_PROGRAM = void 0;
|
27
26
|
exports.getMarginfiAccounts = getMarginfiAccounts;
|
27
|
+
exports.isMarginfiProgram = isMarginfiProgram;
|
28
28
|
const web3_js_1 = require("@solana/web3.js");
|
29
29
|
const spl_token_1 = require("@solana/spl-token");
|
30
30
|
const tokens = __importStar(require("./tokenConstants"));
|
31
|
-
const
|
32
|
-
|
33
|
-
exports.MARGINFI_STAGING_PROGRAM = new web3_js_1.PublicKey("stag8sTKds2h4KzjUw3zKTsxbqvT4XKHdaR9X9E6Rct");
|
31
|
+
const MARGINFI_PROD_PROGRAM = new web3_js_1.PublicKey("MFv2hWf31Z9kbCa1snEPYctwafyhdvnV7FZnsebVacA");
|
32
|
+
const MARGINFI_STAGING_PROGRAM = new web3_js_1.PublicKey("stag8sTKds2h4KzjUw3zKTsxbqvT4XKHdaR9X9E6Rct");
|
34
33
|
const PROD_DEFAULT_MARGINFI_GROUP = "4qp6Fx6tnZkY5Wropq9wUYgtFxXKwE6viZxFHg3rdAG8";
|
35
34
|
const STAGING_DEFAULT_MARGINFI_GROUP = "FCPfpHA69EbS8f9KKSreTRkXbzFpunsKuYf5qNmnJjpo";
|
36
|
-
const USDC_PRICE_ORACLE = "Dpw1EAVrSB1ibxiDQyTAW6Zip3J4Btk2x4SgApQCeFbX";
|
37
35
|
const MARGINFI_STAGING_ACCOUNTS = {
|
38
36
|
[STAGING_DEFAULT_MARGINFI_GROUP]: {
|
39
37
|
[spl_token_1.NATIVE_MINT.toString()]: {
|
40
38
|
bank: "3evdJSa25nsUiZzEUzd92UNa13TPRJrje1dRyiQP5Lhp",
|
41
39
|
liquidityVault: "FVXESa7wCd1tf3o9LGroBc3Ym8Gpcq1HdsLek6oo7Ykv",
|
42
40
|
vaultAuthority: "DuYk1WGq8UsjW5ThLtaehFLrnJeupTjtF7TaPzja9LBQ",
|
43
|
-
priceOracle: "7UVimffxr9ow1uXYxsr4LHAcV58mLzhmwaeKvJ1pjLiE",
|
44
41
|
},
|
45
42
|
[tokens.USDC]: {
|
46
43
|
bank: "Ek5JSFJFD8QgXM6rPDCzf31XhDp1q3xezaWYSkJWqbqc",
|
47
44
|
liquidityVault: "6n7xXMni5WJKUMb4Vm5Zis6UaUtGF5xEGmagZNVWWoKB",
|
48
45
|
vaultAuthority: "9mXNyA5yS4WSTpYUa5gi3yBrSJWWM7XNPNDWRzWGjdVe",
|
49
|
-
priceOracle: USDC_PRICE_ORACLE,
|
50
46
|
},
|
51
47
|
[tokens.USDT]: {
|
52
48
|
bank: "4WFCsVXwfnQvZG52VvPwae7CtL13PUFVWdjkw5YCRBo6",
|
53
49
|
liquidityVault: "BFSyniKfXU9rHqUvHLKeZMivQsAKWTE7HZ1fW6vZcvJp",
|
54
50
|
vaultAuthority: "Fgxe3SUMzcNuLtT9Xkv8QhhWXCmu4VxynzUMwCF4HvJd",
|
55
|
-
priceOracle: "HT2PLQBcG5EiCcNSaMHAjSgd9F98ecpATbk4Sk5oYuM",
|
56
51
|
},
|
57
52
|
},
|
58
53
|
};
|
@@ -62,115 +57,96 @@ const MARGINFI_PROD_ACCOUNTS = {
|
|
62
57
|
bank: "CCKtUs6Cgwo4aaQUmBPmyoApH2gUDErxNZCAntD6LYGh",
|
63
58
|
liquidityVault: "2eicbpitfJXDwqCuFAmPgDP7t2oUotnAzbGzRKLMgSLe",
|
64
59
|
vaultAuthority: "DD3AeAssFvjqTvRTrRAtpfjkBF8FpVKnFuwnMLN9haXD",
|
65
|
-
priceOracle: "7UVimffxr9ow1uXYxsr4LHAcV58mLzhmwaeKvJ1pjLiE",
|
66
60
|
},
|
67
61
|
[tokens.B_SOL]: {
|
68
62
|
bank: "6hS9i46WyTq1KXcoa2Chas2Txh9TJAVr6n1t3tnrE23K",
|
69
63
|
liquidityVault: "2WMipeKDB2CENxbzdmnVrRbsxCA2LY6kCtBe6AAqDP9p",
|
70
64
|
vaultAuthority: "8RcZHucpVHkHWRRdMhJZsxBK9mqKSYnMKGqtF84U8YEo",
|
71
|
-
priceOracle: "5cN76Xm2Dtx9MnrQqBDeZZRsWruTTcw37UruznAdSvvE",
|
72
65
|
},
|
73
66
|
[tokens.M_SOL]: {
|
74
67
|
bank: "22DcjMZrMwC5Bpa5AGBsmjc5V9VuQrXG6N9ZtdUNyYGE",
|
75
68
|
liquidityVault: "B6HqNn83a2bLqo4i5ygjLHJgD11ePtQksUyx4MjD55DV",
|
76
69
|
vaultAuthority: "6YxGd65JbXzgFGWjE44jsyVeCnZp7Bb1wfL9jDia1n8w",
|
77
|
-
priceOracle: "5CKzb9j4ChgLUt8Gfm5CNGLN6khXKiqMbnGAW4cgXgxK",
|
78
70
|
},
|
79
71
|
[tokens.JITO_SOL]: {
|
80
72
|
bank: "Bohoc1ikHLD7xKJuzTyiTyCwzaL5N7ggJQu75A8mKYM8",
|
81
73
|
liquidityVault: "38VGtXd2pDPq9FMh1z6AVjcHCoHgvWyMhdNyamDTeeks",
|
82
74
|
vaultAuthority: "7Ng54qf7BrCcZLqXmKA9WSR7SVRn4q6RX1YpLksBQ21A",
|
83
|
-
priceOracle: "AxaxyeDT8JnWERSaTKvFXvPKkEdxnamKSqpWbsSjYg1g",
|
84
75
|
},
|
85
76
|
[tokens.LST]: {
|
86
77
|
bank: "DMoqjmsuoru986HgfjqrKEvPv8YBufvBGADHUonkadC5",
|
87
78
|
liquidityVault: "DMQUXpb6K5L8osgV4x3NeEPUoJCf2VBgnA8FQusDjSou",
|
88
79
|
vaultAuthority: "6PWVauGLhBFHUJspsnBVZHr56ZnbvmhSD2gS7czBHGpE",
|
89
|
-
priceOracle: "7aT9A5knp62jVvnEW33xaWopaPHa3Y7ggULyYiUsDhu8",
|
90
80
|
},
|
91
81
|
[tokens.INF]: {
|
92
82
|
bank: "AwLRW3aPMMftXEjgWhTkYwM9CGBHdtKecvahCJZBwAqY",
|
93
83
|
liquidityVault: "HQ1CGcqRshMhuonTGTnnmgw9ffcXxizGdZ6F6PKffWWi",
|
94
84
|
vaultAuthority: "AEZb1XH5bfLwqk3hBKDuLfWyJKdLTgDPCkgn64BJKcvV",
|
95
|
-
priceOracle: "Ceg5oePJv1a6RR541qKeQaTepvERA3i8SvyueX9tT8Sq",
|
96
85
|
},
|
97
86
|
[tokens.H_SOL]: {
|
98
87
|
bank: "GJCi1uj3kYPZ64puA5sLUiCQfFapxT2xnREzrbDzFkYY",
|
99
88
|
liquidityVault: "8M97jkdr4rJtPnQ4yQ9stD6qVwaUvjrBdDPDbHJnPJLf",
|
100
89
|
vaultAuthority: "8x7mgTn5RvHR8Tn3CJqexSuQwrs6MLEy8csuXCDVvvpt",
|
101
|
-
priceOracle: switchboardConstants_1.SWITCHBOARD_PRICE_FEED_IDS[tokens.H_SOL.toString()].feedId,
|
102
90
|
},
|
103
91
|
[tokens.JUP_SOL]: {
|
104
92
|
bank: "8LaUZadNqtzuCG7iCvZd7d5cbquuYfv19KjAg6GPuuCb",
|
105
93
|
liquidityVault: "B1zjqKPoYp9bTMhzFADaAvjyGb49FMitLpi6P3Pa3YR6",
|
106
94
|
vaultAuthority: "93Qqsge2jHVsWLd8vas4cWghrsZJooMUr5JKN5DtcfMX",
|
107
|
-
priceOracle: switchboardConstants_1.SWITCHBOARD_PRICE_FEED_IDS[tokens.JUP_SOL.toString()].feedId,
|
108
95
|
},
|
109
96
|
[tokens.JUP]: {
|
110
97
|
bank: "Guu5uBc8k1WK1U2ihGosNaCy57LSgCkpWAabtzQqrQf8",
|
111
98
|
liquidityVault: "4w49W4fNDn778wsBa6TNq9hvebZKU17ymsptrEZ8zrsm",
|
112
99
|
vaultAuthority: "2MBwwAhL3c73Jy7HkWd9ofzh1bU39JBabrZCFQR2tUof",
|
113
|
-
priceOracle: "7dbob1psH1iZBS7qPsm3Kwbf5DzSXK8Jyg31CTgTnxH5",
|
114
100
|
},
|
115
101
|
[tokens.JTO]: {
|
116
102
|
bank: "EdB7YADw4XUt6wErT8kHGCUok4mnTpWGzPUU9rWDebzb",
|
117
103
|
liquidityVault: "3bY1DEkXodGmPMG5f7ABA12228MBG5JdAAKf5cgkB6G1",
|
118
104
|
vaultAuthority: "H2b4f2fGSKFortxwzrMZBnYVfr2yrKVUakg4Md9be3Wv",
|
119
|
-
priceOracle: "7ajR2zA4MGMMTqRAVjghTKqPPn4kbrj3pYkAVRVwTGzP",
|
120
105
|
},
|
121
106
|
[tokens.JLP]: {
|
122
107
|
bank: "Amtw3n7GZe5SWmyhMhaFhDTi39zbTkLeWErBsmZXwpDa",
|
123
108
|
liquidityVault: "9xfyL8gxbV77VvhdgFmacHyLEG4h7d2eDWkSMfhXUPQ",
|
124
109
|
vaultAuthority: "F4RSGd4BRXscCqAVG3rFLiPVpo7v6j1drVqnvSM3rBKH",
|
125
|
-
priceOracle: "2TTGSRSezqFzeLUH8JwRUbtN66XLLaymfYsWRTMjfiMw",
|
126
110
|
},
|
127
111
|
[tokens.WBTC]: {
|
128
112
|
bank: "BKsfDJCMbYep6gr9pq8PsmJbb5XGLHbAJzUV8vmorz7a",
|
129
113
|
liquidityVault: "CMNdnjfaDQZo3VMoX31wZQBnSGu5FMmb1CnBaU4tApZk",
|
130
114
|
vaultAuthority: "7P2TQHYgVJkXv1VPaREsL5Pi1gnNjVif5aF3pJewZ9kj",
|
131
|
-
priceOracle: "4cSM2e6rvbGQUFiJbqytoVMi5GgghSMr8LwVrT9VPSPo",
|
132
115
|
},
|
133
116
|
[tokens.WETH]: {
|
134
117
|
bank: "BkUyfXjbBBALcfZvw76WAFRvYQ21xxMWWeoPtJrUqG3z",
|
135
118
|
liquidityVault: "AxPJtiTEDksJWvCqNHCziK4uUcabqfmwW41dqtZrPFkp",
|
136
119
|
vaultAuthority: "ELXogWuyXrFyUG1vevffVbEhVxdFrHf2GCJTtRGKBWdM",
|
137
|
-
priceOracle: "42amVS4KgzR9rA28tkVYqVXjq9Qa8dcZQMbH5EYFX6XC",
|
138
120
|
},
|
139
121
|
[tokens.HNT]: {
|
140
122
|
bank: "JBcir4DPRPYVUpks9hkS1jtHMXejfeBo4xJGv3AYYHg6",
|
141
123
|
liquidityVault: "E8Q7u5e9L9Uykx16em75ERT9wfbBPtkNL8gsRjoP8GB9",
|
142
124
|
vaultAuthority: "AjsyrYpgaH275DBSnvNWdGK33hVycSFuXN87FKnX6fVY",
|
143
|
-
priceOracle: "4DdmDswskDxXGpwHrXUfn2CNUm9rt21ac79GHNTN3J33",
|
144
125
|
},
|
145
126
|
[tokens.PYTH]: {
|
146
127
|
bank: "E4td8i8PT2BZkMygzW4MGHCv2KPPs57dvz5W2ZXf9Twu",
|
147
128
|
liquidityVault: "DUrAkkaMAckzes7so9T5frXm9YFFgjAAm3MMwHwTfVJq",
|
148
129
|
vaultAuthority: "9b5KdVnbbfEQ2qhLeFjWvcAx2VWe9XHx7ZgayZyL9a6C",
|
149
|
-
priceOracle: "8vjchtMuJNY4oFQdTi8yCe6mhCaNBFaUbktT482TpLPS",
|
150
130
|
},
|
151
131
|
[tokens.USDC]: {
|
152
132
|
bank: "2s37akK2eyBbp8DZgCm7RtsaEz8eJP3Nxd4urLHQv7yB",
|
153
133
|
liquidityVault: "7jaiZR5Sk8hdYN9MxTpczTcwbWpb5WEoxSANuUwveuat",
|
154
134
|
vaultAuthority: "3uxNepDbmkDNq6JhRja5Z8QwbTrfmkKP8AKZV5chYDGG",
|
155
|
-
priceOracle: USDC_PRICE_ORACLE,
|
156
135
|
},
|
157
136
|
[tokens.USDT]: {
|
158
137
|
bank: "HmpMfL8942u22htC4EMiWgLX931g3sacXFR6KjuLgKLV",
|
159
138
|
liquidityVault: "77t6Fi9qj4s4z22K1toufHtstM8rEy7Y3ytxik7mcsTy",
|
160
139
|
vaultAuthority: "9r6z6KgkEytHCdQWNxvDQH98PsfU98f1m5PCg47mY2XE",
|
161
|
-
priceOracle: "HT2PLQBcG5EiCcNSaMHAjSgd9F98ecpATbk4Sk5oYuM",
|
162
140
|
},
|
163
141
|
[tokens.BONK]: {
|
164
142
|
bank: "DeyH7QxWvnbbaVB4zFrf4hoq7Q8z1ZT14co42BGwGtfM",
|
165
143
|
liquidityVault: "7FdQsXmCW3N5JQbknj3F9Yqq73er9VZJjGhEEMS8Ct2A",
|
166
144
|
vaultAuthority: "26kcZkdjJc94PdhqiLiEaGiLCYgAVVUfpDaZyK4cqih3",
|
167
|
-
priceOracle: "DBE3N8uNjhKPRHfANdwGvCZghWXyLPdqdSbEW2XFwBiX",
|
168
145
|
},
|
169
146
|
[tokens.WIF]: {
|
170
147
|
bank: "9dpu8KL5ABYiD3WP2Cnajzg1XaotcJvZspv29Y1Y3tn1",
|
171
148
|
liquidityVault: "4kT3EXc5dDVndUU9mV6EH3Jh3CSEvpcCZjuMkwqrtxUy",
|
172
149
|
vaultAuthority: "9gNrvvZ9RuTyRWooiEEypwcXU6kyXW8yWuhXU8tWUH5L",
|
173
|
-
priceOracle: "6B23K3tkb51vLZA14jcEQVCA1pfHptzEHFA93V5dYwbT",
|
174
150
|
},
|
175
151
|
},
|
176
152
|
["DQ2jqDJw9uzTwttf6h6r217BQ7kws3jZbJXDkfbCJa1q"]: {
|
@@ -178,13 +154,11 @@ const MARGINFI_PROD_ACCOUNTS = {
|
|
178
154
|
bank: "845oEvt1oduoBj5zQxTr21cWWaUVnRjGerJuW3yMo2nn",
|
179
155
|
liquidityVault: "At6R64ip51zay4dT6k1WnVGETSMcaiY5vggD5DVTgxri",
|
180
156
|
vaultAuthority: "dNraDCWb5usDSoW4kD1Mi2E9WsNu6EABcQZqnrDfjNb",
|
181
|
-
priceOracle: switchboardConstants_1.SWITCHBOARD_PRICE_FEED_IDS[tokens.POPCAT.toString()].feedId,
|
182
157
|
},
|
183
158
|
[tokens.USDC]: {
|
184
159
|
bank: "EXrnNVfLagt3j4hCHSD9WqK75o6dkZBtjpnrSrSC78MA",
|
185
160
|
liquidityVault: "D9HSUYz3Rg2cTH65dUPaQS1MYxofNTeLecsAjiBgVPur",
|
186
161
|
vaultAuthority: "5ivKgJnxQ9CewJcKYSPQUiQFdfJki6YS87FqohnMSsFM",
|
187
|
-
priceOracle: USDC_PRICE_ORACLE,
|
188
162
|
},
|
189
163
|
},
|
190
164
|
["EpzY5EYF1A5eFDRfjtsPXSYMPmEx1FXKaXPnouTMF4dm"]: {
|
@@ -192,13 +166,11 @@ const MARGINFI_PROD_ACCOUNTS = {
|
|
192
166
|
bank: "3J5rKmCi7JXG6qmiobFJyAidVTnnNAMGj4jomfBxKGRM",
|
193
167
|
liquidityVault: "863K9YPVT3xbUGFZevrQJLqMux3UdRkwNQ6usAp4hJyy",
|
194
168
|
vaultAuthority: "Qsv2rnNRdv59AwRU3YmGPMCTdKT41CDAKyYAr4srCJR",
|
195
|
-
priceOracle: switchboardConstants_1.SWITCHBOARD_PRICE_FEED_IDS[tokens.RETARDIO.toString()].feedId,
|
196
169
|
},
|
197
170
|
[tokens.USDC]: {
|
198
171
|
bank: "6cgYhBFWCc5sNHxkvSRhd5H9AdAHR41zKwuF37HmLry5",
|
199
172
|
liquidityVault: "7orVfNL5ZjqvdSaDgYLgBk4i5B3AnwFXNqqAvJbx6DFy",
|
200
173
|
vaultAuthority: "G4Azxk4PYtNRmDZkJppYo3rNAinkZXzYpQPG5dVDh4Nj",
|
201
|
-
priceOracle: USDC_PRICE_ORACLE,
|
202
174
|
},
|
203
175
|
},
|
204
176
|
["G1rt3EpQ43K3bY457rhukQGRAo2QxydFAGRKqnjKzyr5"]: {
|
@@ -206,13 +178,11 @@ const MARGINFI_PROD_ACCOUNTS = {
|
|
206
178
|
bank: "Dj3PndQ3j1vuga5ApiFWWAfQ4h3wBtgS2SeLZBT2LD4g",
|
207
179
|
liquidityVault: "BRcRMDVPBQzXNXWtSS6bNotcGxhVsxfiAt1qf8nFVUpx",
|
208
180
|
vaultAuthority: "36SgFh1qBRyj1PEhsn7Kg9Sfwbrn7rHP7kvTM5o5n6AL",
|
209
|
-
priceOracle: switchboardConstants_1.SWITCHBOARD_PRICE_FEED_IDS[tokens.BILLY.toString()].feedId,
|
210
181
|
},
|
211
182
|
[tokens.USDC]: {
|
212
183
|
bank: "A7vBgCowCYeja7GTc3pyqUBdC9Gkue2gWaMjGZW38meM",
|
213
184
|
liquidityVault: "DBGhZ8TJTG2Pacdva27zY9etaro24o1tTA3LToSjYHbx",
|
214
185
|
vaultAuthority: "Cg6BCqkGny7A2AXCV8rikhHXM82wqqfzmdsTobEeTQkH",
|
215
|
-
priceOracle: USDC_PRICE_ORACLE,
|
216
186
|
},
|
217
187
|
},
|
218
188
|
["DESG67cExEcw7d6MmENLEzaocR8pLrhfiw9VrNtGWUKD"]: {
|
@@ -220,13 +190,11 @@ const MARGINFI_PROD_ACCOUNTS = {
|
|
220
190
|
bank: "Br3yzg2WSb81RaFWK9UsKtq8fD5viwooZG34mKqQWxdM",
|
221
191
|
liquidityVault: "J45Je52qv2rDBuCQWPwp3bjRhf3bGzRWhKZtGDuLooCX",
|
222
192
|
vaultAuthority: "CKDsAKjNruDSz4tmUairh8PDGD1Rqh9WMTLWERYnnZrH",
|
223
|
-
priceOracle: switchboardConstants_1.SWITCHBOARD_PRICE_FEED_IDS[tokens.HMTR.toString()].feedId,
|
224
193
|
},
|
225
194
|
[tokens.USDC]: {
|
226
195
|
bank: "9yNnhJ8c1vGbu3DMf6eeeUi6TDJ2ddGgaRA88rL2R3rP",
|
227
196
|
liquidityVault: "4U1UBjXrPrW7JuQ894JbLUBqcb5LFfK9rfkWFwT7EdQ9",
|
228
197
|
vaultAuthority: "CY74V1r48kuuHA6APD3AaU2oPV1mBqe9srikrQQSHNR6",
|
229
|
-
priceOracle: USDC_PRICE_ORACLE,
|
230
198
|
},
|
231
199
|
},
|
232
200
|
};
|
@@ -245,7 +213,7 @@ function getMarginfiAccounts(programEnv, marginfiGroup) {
|
|
245
213
|
}
|
246
214
|
if (programEnv === "Prod") {
|
247
215
|
return {
|
248
|
-
program:
|
216
|
+
program: MARGINFI_PROD_PROGRAM,
|
249
217
|
defaultGroup: new web3_js_1.PublicKey(PROD_DEFAULT_MARGINFI_GROUP),
|
250
218
|
lookupTable: new web3_js_1.PublicKey(MARGINFI_PROD_ACCOUNTS_LOOKUP_TABLE),
|
251
219
|
bankAccounts: MARGINFI_PROD_ACCOUNTS,
|
@@ -253,10 +221,14 @@ function getMarginfiAccounts(programEnv, marginfiGroup) {
|
|
253
221
|
}
|
254
222
|
else {
|
255
223
|
return {
|
256
|
-
program:
|
224
|
+
program: MARGINFI_STAGING_PROGRAM,
|
257
225
|
defaultGroup: new web3_js_1.PublicKey(STAGING_DEFAULT_MARGINFI_GROUP),
|
258
226
|
lookupTable: new web3_js_1.PublicKey(MARGINFI_STAGING_ACCOUNTS_LOOKUP_TABLE),
|
259
227
|
bankAccounts: MARGINFI_STAGING_ACCOUNTS,
|
260
228
|
};
|
261
229
|
}
|
262
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":"
|
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;
|
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"}
|
@@ -26,13 +26,13 @@ class MarginfiFlProvider extends flProviderBase_1.FlProviderBase {
|
|
26
26
|
const bankAccounts = (0, constants_1.getMarginfiAccounts)(this.programEnv).bankAccounts;
|
27
27
|
const availableBanks = [];
|
28
28
|
const checkIfUsable = (group, mint) => {
|
29
|
-
if (Object.keys(bankAccounts[group]).includes(mint
|
30
|
-
availableBanks.push(bankAccounts[group][mint
|
29
|
+
if (Object.keys(bankAccounts[group]).includes(mint)) {
|
30
|
+
availableBanks.push(bankAccounts[group][mint].bank);
|
31
31
|
}
|
32
32
|
};
|
33
33
|
for (const group of Object.keys(bankAccounts)) {
|
34
|
-
checkIfUsable(group, this.supplyMint);
|
35
|
-
checkIfUsable(group, this.debtMint);
|
34
|
+
checkIfUsable(group, this.supplyMint.toString());
|
35
|
+
checkIfUsable(group, this.debtMint.toString());
|
36
36
|
}
|
37
37
|
const banks = await (0, marginfi_sdk_1.safeFetchAllBank)(this.umi, availableBanks.map((x) => (0, umi_1.publicKey)(x)));
|
38
38
|
if (!(0, utils_1.safeGetPrice)(this.supplyMint) || !(0, utils_1.safeGetPrice)(this.debtMint)) {
|
@@ -180,10 +180,9 @@ class MarginfiFlProvider extends flProviderBase_1.FlProviderBase {
|
|
180
180
|
if (x.bankPk.toString() === bank.publicKey.toString()) {
|
181
181
|
flBankHadPrevBalance = true;
|
182
182
|
}
|
183
|
-
|
184
|
-
|
185
|
-
|
186
|
-
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
|
+
}));
|
187
186
|
remainingAccounts.push(...[
|
188
187
|
{
|
189
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;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;
|
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"}
|
@@ -95,12 +95,8 @@ class SolautoClient extends referralStateManager_1.ReferralStateManager {
|
|
95
95
|
return [
|
96
96
|
this.authority,
|
97
97
|
...(this.authorityLutAddress ? [this.authorityLutAddress] : []),
|
98
|
-
|
99
|
-
|
100
|
-
: []),
|
101
|
-
...((0, umi_web3js_adapters_1.toWeb3JsPublicKey)(this.signer.publicKey).equals(this.authority)
|
102
|
-
? [this.signerDebtTa]
|
103
|
-
: []),
|
98
|
+
this.signerSupplyTa,
|
99
|
+
this.signerDebtTa,
|
104
100
|
this.pos.publicKey,
|
105
101
|
this.positionSupplyTa,
|
106
102
|
this.positionDebtTa,
|
@@ -120,6 +116,9 @@ class SolautoClient extends referralStateManager_1.ReferralStateManager {
|
|
120
116
|
return lookupTable?.value?.state.addresses ?? [];
|
121
117
|
}
|
122
118
|
async updateLookupTable() {
|
119
|
+
if (!(0, umi_web3js_adapters_1.toWeb3JsPublicKey)(this.signer.publicKey).equals(this.authority)) {
|
120
|
+
return undefined;
|
121
|
+
}
|
123
122
|
const existingLutAccounts = await this.fetchExistingAuthorityLutAccounts();
|
124
123
|
if (this.lutAccountsToAdd().every((element) => existingLutAccounts
|
125
124
|
.map((x) => x.toString().toLowerCase())
|
@@ -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;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;
|
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"}
|
@@ -49,16 +49,11 @@ class SolautoMarginfiClient extends solautoClient_1.SolautoClient {
|
|
49
49
|
this.mfiAccounts.bankAccounts[this.marginfiGroup.toString()][this.pos.supplyMint().toString()];
|
50
50
|
this.marginfiDebtAccounts =
|
51
51
|
this.mfiAccounts.bankAccounts[this.marginfiGroup.toString()][this.pos.debtMint().toString()];
|
52
|
-
|
53
|
-
|
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);
|
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
59
|
return [
|
@@ -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;
|
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"}
|
@@ -14,6 +14,7 @@ const marginfi_sdk_1 = require("../../marginfi-sdk");
|
|
14
14
|
const swap_1 = require("../swap");
|
15
15
|
const jupiter_sdk_1 = require("../../jupiter-sdk");
|
16
16
|
const types_1 = require("../../types");
|
17
|
+
const constants_1 = require("../../constants");
|
17
18
|
function getWSolUsage(client, solautoActions, initiatingDcaIn, cancellingDcaIn) {
|
18
19
|
const supplyIsWsol = client.pos.supplyMint().equals(spl_token_1.NATIVE_MINT);
|
19
20
|
const debtIsWsol = client.pos.debtMint().equals(spl_token_1.NATIVE_MINT);
|
@@ -204,7 +205,7 @@ function getSolautoActions(umi, tx) {
|
|
204
205
|
}
|
205
206
|
catch { }
|
206
207
|
}
|
207
|
-
if ((0,
|
208
|
+
if ((0, constants_1.isMarginfiProgram)((0, umi_web3js_adapters_1.toWeb3JsPublicKey)(x.programId))) {
|
208
209
|
try {
|
209
210
|
const serializer = (0, marginfi_sdk_1.getLendingAccountDepositInstructionDataSerializer)();
|
210
211
|
const discriminator = (0, utils_1.uint8ArrayToBigInt)(serializer
|
@@ -388,7 +389,7 @@ function getErrorInfo(umi, txs, error, simulationSuccessful) {
|
|
388
389
|
}
|
389
390
|
else if (errCode !== undefined &&
|
390
391
|
errIx &&
|
391
|
-
(0,
|
392
|
+
(0, constants_1.isMarginfiProgram)((0, umi_web3js_adapters_1.toWeb3JsPublicKey)(errIx.programId))) {
|
392
393
|
programName = "Marginfi";
|
393
394
|
programError = marginfiError;
|
394
395
|
}
|
@@ -1,10 +1,15 @@
|
|
1
1
|
import { PublicKey } from "@solana/web3.js";
|
2
|
+
import { Bank } from "../marginfi-sdk";
|
2
3
|
import { SolautoPositionEx } from "./solautoPositionEx";
|
4
|
+
import { LendingPlatform } from "../generated";
|
3
5
|
export declare class MarginfiSolautoPositionEx extends SolautoPositionEx {
|
6
|
+
lendingPlatform: LendingPlatform;
|
4
7
|
private marginfiAccountData;
|
5
8
|
private supplyBank;
|
6
9
|
private debtBank;
|
7
10
|
lendingPool(): Promise<PublicKey>;
|
11
|
+
getBanks(): Promise<Bank[]>;
|
12
|
+
priceOracles(): Promise<PublicKey[]>;
|
8
13
|
maxLtvAndLiqThresholdBps(): Promise<[number, number]>;
|
9
14
|
supplyLiquidityAvailable(): number;
|
10
15
|
refreshPositionState(): Promise<void>;
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"marginfiSolautoPositionEx.d.ts","sourceRoot":"","sources":["../../src/solautoPosition/marginfiSolautoPositionEx.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;
|
1
|
+
{"version":3,"file":"marginfiSolautoPositionEx.d.ts","sourceRoot":"","sources":["../../src/solautoPosition/marginfiSolautoPositionEx.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EACL,IAAI,EAIL,MAAM,iBAAiB,CAAC;AAYzB,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAE/C,qBAAa,yBAA0B,SAAQ,iBAAiB;IAC9D,eAAe,kBAA4B;IAE3C,OAAO,CAAC,mBAAmB,CAAgC;IAC3D,OAAO,CAAC,UAAU,CAAqB;IACvC,OAAO,CAAC,QAAQ,CAAqB;IAExB,WAAW,IAAI,OAAO,CAAC,SAAS,CAAC;IAyBxC,QAAQ,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;IAgB3B,YAAY,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;IASpC,wBAAwB,IAAI,OAAO,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAa3D,wBAAwB,IAAI,MAAM;IAO5B,oBAAoB,IAAI,OAAO,CAAC,IAAI,CAAC;CA0B5C"}
|
@@ -8,9 +8,11 @@ const umi_web3js_adapters_1 = require("@metaplex-foundation/umi-web3js-adapters"
|
|
8
8
|
const utils_1 = require("../utils");
|
9
9
|
const constants_1 = require("../constants");
|
10
10
|
const solautoPositionEx_1 = require("./solautoPositionEx");
|
11
|
+
const generated_1 = require("../generated");
|
11
12
|
class MarginfiSolautoPositionEx extends solautoPositionEx_1.SolautoPositionEx {
|
12
13
|
constructor() {
|
13
14
|
super(...arguments);
|
15
|
+
this.lendingPlatform = generated_1.LendingPlatform.Marginfi;
|
14
16
|
this.marginfiAccountData = null;
|
15
17
|
this.supplyBank = null;
|
16
18
|
this.debtBank = null;
|
@@ -30,7 +32,7 @@ class MarginfiSolautoPositionEx extends solautoPositionEx_1.SolautoPositionEx {
|
|
30
32
|
}
|
31
33
|
return this.lp;
|
32
34
|
}
|
33
|
-
async
|
35
|
+
async getBanks() {
|
34
36
|
if (!this.supplyBank || !this.debtBank) {
|
35
37
|
const group = (await this.lendingPool()).toString();
|
36
38
|
const bankAccounts = (0, constants_1.getMarginfiAccounts)(this.lpEnv).bankAccounts;
|
@@ -41,8 +43,19 @@ class MarginfiSolautoPositionEx extends solautoPositionEx_1.SolautoPositionEx {
|
|
41
43
|
(0, umi_1.publicKey)(debtBank),
|
42
44
|
]);
|
43
45
|
}
|
46
|
+
return [this.supplyBank, this.debtBank];
|
47
|
+
}
|
48
|
+
async priceOracles() {
|
49
|
+
const [supplyBank, debtBank] = await this.getBanks();
|
50
|
+
return await Promise.all([
|
51
|
+
(0, utils_1.getMarginfiPriceOracle)(this.umi, { data: supplyBank }),
|
52
|
+
(0, utils_1.getMarginfiPriceOracle)(this.umi, { data: debtBank }),
|
53
|
+
]);
|
54
|
+
}
|
55
|
+
async maxLtvAndLiqThresholdBps() {
|
56
|
+
const [supplyBank, debtBank] = await this.getBanks();
|
44
57
|
const [supplyPrice] = await (0, utils_1.fetchTokenPrices)([this.supplyMint()]);
|
45
|
-
const [maxLtvBps, liqThresholdBps] = (0, utils_1.calcMarginfiMaxLtvAndLiqThresholdBps)(
|
58
|
+
const [maxLtvBps, liqThresholdBps] = (0, utils_1.calcMarginfiMaxLtvAndLiqThresholdBps)(supplyBank, debtBank, supplyPrice);
|
46
59
|
return [maxLtvBps, liqThresholdBps];
|
47
60
|
}
|
48
61
|
supplyLiquidityAvailable() {
|
@@ -23,6 +23,7 @@ interface PositionExArgs {
|
|
23
23
|
contextUpdates?: ContextUpdates;
|
24
24
|
}
|
25
25
|
export declare abstract class SolautoPositionEx {
|
26
|
+
lendingPlatform: LendingPlatform;
|
26
27
|
umi: Umi;
|
27
28
|
publicKey: PublicKey;
|
28
29
|
protected _data: SolautoPositionExData;
|
@@ -61,6 +62,7 @@ export declare abstract class SolautoPositionEx {
|
|
61
62
|
debtLiquidityAvailable(): number;
|
62
63
|
debtLiquidityUsdAvailable(): number;
|
63
64
|
abstract maxLtvAndLiqThresholdBps(): Promise<[number, number]>;
|
65
|
+
abstract priceOracles(): Promise<PublicKey[]>;
|
64
66
|
abstract supplyLiquidityAvailable(): number;
|
65
67
|
sufficientLiquidityToBoost(): boolean;
|
66
68
|
eligibleForRebalance(bpsDistanceThreshold?: number): RebalanceAction | undefined;
|