@haven-fi/solauto-sdk 1.0.25 → 1.0.27
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/dist/clients/solautoClient.d.ts +4 -4
- package/dist/clients/solautoClient.d.ts.map +1 -1
- package/dist/clients/solautoClient.js +25 -23
- package/dist/clients/solautoMarginfiClient.d.ts +1 -0
- package/dist/clients/solautoMarginfiClient.d.ts.map +1 -1
- package/dist/clients/solautoMarginfiClient.js +84 -23
- package/dist/generated/instructions/closePosition.d.ts +4 -4
- package/dist/generated/instructions/closePosition.d.ts.map +1 -1
- package/dist/generated/instructions/closePosition.js +8 -8
- package/dist/generated/instructions/marginfiProtocolInteraction.d.ts +2 -2
- package/dist/generated/instructions/marginfiProtocolInteraction.d.ts.map +1 -1
- package/dist/generated/instructions/marginfiProtocolInteraction.js +4 -4
- package/dist/generated/instructions/marginfiRebalance.d.ts +2 -0
- package/dist/generated/instructions/marginfiRebalance.d.ts.map +1 -1
- package/dist/generated/instructions/marginfiRebalance.js +17 -7
- package/dist/transactions/transactionUtils.d.ts.map +1 -1
- package/dist/transactions/transactionUtils.js +111 -21
- package/dist/transactions/transactionsManager.d.ts.map +1 -1
- package/dist/transactions/transactionsManager.js +6 -2
- package/dist/types/solauto.d.ts +13 -0
- package/dist/types/solauto.d.ts.map +1 -0
- package/dist/types/solauto.js +2 -0
- package/dist/utils/jupiterUtils.d.ts.map +1 -1
- package/dist/utils/jupiterUtils.js +1 -0
- package/dist/utils/marginfiUtils.d.ts +5 -1
- package/dist/utils/marginfiUtils.d.ts.map +1 -1
- package/dist/utils/marginfiUtils.js +8 -2
- package/dist/utils/solauto/generalUtils.d.ts +1 -5
- package/dist/utils/solauto/generalUtils.d.ts.map +1 -1
- package/dist/utils/solauto/generalUtils.js +6 -2
- package/dist/utils/solauto/rebalanceUtils.js +2 -1
- package/package.json +1 -1
- package/src/clients/solautoClient.ts +33 -31
- package/src/clients/solautoMarginfiClient.ts +89 -31
- package/src/generated/instructions/closePosition.ts +12 -12
- package/src/generated/instructions/marginfiProtocolInteraction.ts +6 -6
- package/src/generated/instructions/marginfiRebalance.ts +19 -7
- package/src/transactions/transactionUtils.ts +140 -36
- package/src/transactions/transactionsManager.ts +8 -6
- package/src/types/solauto.ts +14 -0
- package/src/utils/jupiterUtils.ts +1 -0
- package/src/utils/marginfiUtils.ts +11 -3
- package/src/utils/solauto/generalUtils.ts +21 -12
- package/src/utils/solauto/rebalanceUtils.ts +2 -2
- package/tests/transactions/solautoMarginfi.ts +44 -25
- package/tests/unit/lookupTables.ts +4 -3
|
@@ -88,7 +88,9 @@ export async function getAllMarginfiAccountsByAuthority(
|
|
|
88
88
|
umi: Umi,
|
|
89
89
|
authority: PublicKey,
|
|
90
90
|
compatibleWithSolauto?: boolean
|
|
91
|
-
): Promise<
|
|
91
|
+
): Promise<
|
|
92
|
+
{ marginfiAccount: PublicKey; supplyMint?: PublicKey; debtMint?: PublicKey }[]
|
|
93
|
+
> {
|
|
92
94
|
const marginfiAccounts = await umi.rpc.getProgramAccounts(
|
|
93
95
|
MARGINFI_PROGRAM_ID,
|
|
94
96
|
{
|
|
@@ -123,9 +125,15 @@ export async function getAllMarginfiAccountsByAuthority(
|
|
|
123
125
|
);
|
|
124
126
|
return positionStates
|
|
125
127
|
.filter((x) => x.state !== undefined)
|
|
126
|
-
.map((x) =>
|
|
128
|
+
.map((x) => ({
|
|
129
|
+
marginfiAccount: toWeb3JsPublicKey(x.publicKey),
|
|
130
|
+
supplyMint: toWeb3JsPublicKey(x.state!.supply.mint),
|
|
131
|
+
debtMint: toWeb3JsPublicKey(x.state!.debt.mint),
|
|
132
|
+
}));
|
|
127
133
|
} else {
|
|
128
|
-
return marginfiAccounts.map((x) =>
|
|
134
|
+
return marginfiAccounts.map((x) => ({
|
|
135
|
+
marginfiAccount: toWeb3JsPublicKey(x.publicKey),
|
|
136
|
+
}));
|
|
129
137
|
}
|
|
130
138
|
}
|
|
131
139
|
|
|
@@ -27,6 +27,10 @@ import {
|
|
|
27
27
|
getAllMarginfiAccountsByAuthority,
|
|
28
28
|
getMarginfiAccountPositionState,
|
|
29
29
|
} from "../marginfiUtils";
|
|
30
|
+
import {
|
|
31
|
+
SelfManagedPositionDetails,
|
|
32
|
+
SolautoPositionDetails,
|
|
33
|
+
} from "../../types/solauto";
|
|
30
34
|
|
|
31
35
|
function newPeriodsPassed(
|
|
32
36
|
automation: AutomationSettings,
|
|
@@ -278,12 +282,6 @@ export async function getReferralsByUser(
|
|
|
278
282
|
return accounts.map((x) => toWeb3JsPublicKey(x.publicKey));
|
|
279
283
|
}
|
|
280
284
|
|
|
281
|
-
export interface SolautoPositionDetails {
|
|
282
|
-
positionId: number;
|
|
283
|
-
lendingPlatform: LendingPlatform;
|
|
284
|
-
protocolAccount?: PublicKey;
|
|
285
|
-
}
|
|
286
|
-
|
|
287
285
|
export async function getAllPositionsByAuthority(
|
|
288
286
|
umi: Umi,
|
|
289
287
|
user: PublicKey
|
|
@@ -295,16 +293,27 @@ export async function getAllPositionsByAuthority(
|
|
|
295
293
|
...solautoManagedPositions.map((x) => ({
|
|
296
294
|
positionId: x.positionId,
|
|
297
295
|
lendingPlatform: x.lendingPlatform,
|
|
296
|
+
selfManaged: false,
|
|
298
297
|
}))
|
|
299
298
|
);
|
|
300
299
|
|
|
301
|
-
const marginfiPositions = await getAllMarginfiAccountsByAuthority(
|
|
300
|
+
const marginfiPositions = await getAllMarginfiAccountsByAuthority(
|
|
301
|
+
umi,
|
|
302
|
+
user,
|
|
303
|
+
true
|
|
304
|
+
);
|
|
302
305
|
allPositions.push(
|
|
303
|
-
...marginfiPositions.map(
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
306
|
+
...marginfiPositions.map(
|
|
307
|
+
(x) =>
|
|
308
|
+
({
|
|
309
|
+
positionId: 0,
|
|
310
|
+
selfManaged: true,
|
|
311
|
+
lendingPlatform: LendingPlatform.Marginfi,
|
|
312
|
+
protocolAccount: x.marginfiAccount,
|
|
313
|
+
supplyMint: x.supplyMint,
|
|
314
|
+
debtMint: x.debtMint,
|
|
315
|
+
}) as SelfManagedPositionDetails
|
|
316
|
+
)
|
|
308
317
|
);
|
|
309
318
|
|
|
310
319
|
// TODO support other platforms
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { PublicKey } from "@solana/web3.js";
|
|
2
2
|
import { SolautoClient } from "../../clients/solautoClient";
|
|
3
|
-
import { PositionTokenUsage } from "../../generated";
|
|
3
|
+
import { FeeType, PositionTokenUsage } from "../../generated";
|
|
4
4
|
import {
|
|
5
5
|
eligibleForNextAutomationPeriod,
|
|
6
6
|
getAdjustedSettingsFromAutomation,
|
|
@@ -188,7 +188,7 @@ export function getRebalanceValues(
|
|
|
188
188
|
if (increasingLeverage) {
|
|
189
189
|
adjustmentFeeBps = getSolautoFeesBps(
|
|
190
190
|
client.referredByState !== undefined,
|
|
191
|
-
client.solautoPositionData
|
|
191
|
+
client.solautoPositionData?.feeType ?? FeeType.Small
|
|
192
192
|
).total;
|
|
193
193
|
}
|
|
194
194
|
|
|
@@ -25,7 +25,7 @@ describe("Solauto Marginfi tests", async () => {
|
|
|
25
25
|
|
|
26
26
|
const payForTransactions = false;
|
|
27
27
|
const useJitoBundle = false;
|
|
28
|
-
const positionId =
|
|
28
|
+
const positionId = 0;
|
|
29
29
|
|
|
30
30
|
it("open - deposit - borrow - rebalance to 0 - withdraw - close", async () => {
|
|
31
31
|
const client = new SolautoMarginfiClient(process.env.HELIUS_API_KEY!, true);
|
|
@@ -45,6 +45,11 @@ describe("Solauto Marginfi tests", async () => {
|
|
|
45
45
|
{
|
|
46
46
|
signer,
|
|
47
47
|
positionId,
|
|
48
|
+
marginfiAccount: new PublicKey(
|
|
49
|
+
"4nNvUXF5YqHFcH2nGweSiuvy1ct7V5FXfoCLKFYUN36z"
|
|
50
|
+
),
|
|
51
|
+
supplyMint: NATIVE_MINT,
|
|
52
|
+
debtMint: new PublicKey(USDC_MINT),
|
|
48
53
|
}
|
|
49
54
|
);
|
|
50
55
|
|
|
@@ -58,29 +63,29 @@ describe("Solauto Marginfi tests", async () => {
|
|
|
58
63
|
targetBoostToBps: none(),
|
|
59
64
|
};
|
|
60
65
|
|
|
61
|
-
if (client.solautoPositionData === null) {
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
66
|
+
// if (client.solautoPositionData === null) {
|
|
67
|
+
// transactionItems.push(
|
|
68
|
+
// new TransactionItem(async () => {
|
|
69
|
+
// return {
|
|
70
|
+
// tx: client.openPosition(),
|
|
71
|
+
// };
|
|
72
|
+
// }, "open position")
|
|
73
|
+
// );
|
|
69
74
|
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
}
|
|
75
|
+
// const initialSupplyUsd = 50;
|
|
76
|
+
// transactionItems.push(
|
|
77
|
+
// new TransactionItem(async () => {
|
|
78
|
+
// const [supplyPrice] = await getTokenPrices([supply]);
|
|
79
|
+
// return {
|
|
80
|
+
// tx: client.protocolInteraction(
|
|
81
|
+
// solautoAction("Deposit", [
|
|
82
|
+
// toBaseUnit(initialSupplyUsd / supplyPrice, supplyDecimals),
|
|
83
|
+
// ])
|
|
84
|
+
// ),
|
|
85
|
+
// };
|
|
86
|
+
// }, "deposit")
|
|
87
|
+
// );
|
|
88
|
+
// }
|
|
84
89
|
|
|
85
90
|
// transactionItems.push(
|
|
86
91
|
// new TransactionItem(
|
|
@@ -101,10 +106,24 @@ describe("Solauto Marginfi tests", async () => {
|
|
|
101
106
|
// )
|
|
102
107
|
// );
|
|
103
108
|
|
|
109
|
+
// const initialSupplyUsd = 50;
|
|
110
|
+
// transactionItems.push(
|
|
111
|
+
// new TransactionItem(async () => {
|
|
112
|
+
// const [supplyPrice] = await getTokenPrices([supply]);
|
|
113
|
+
// return {
|
|
114
|
+
// tx: client.protocolInteraction(
|
|
115
|
+
// solautoAction("Deposit", [
|
|
116
|
+
// toBaseUnit(initialSupplyUsd / supplyPrice, supplyDecimals),
|
|
117
|
+
// ])
|
|
118
|
+
// ),
|
|
119
|
+
// };
|
|
120
|
+
// }, "deposit")
|
|
121
|
+
// );
|
|
122
|
+
|
|
104
123
|
transactionItems.push(
|
|
105
124
|
new TransactionItem(
|
|
106
125
|
async (attemptNum) =>
|
|
107
|
-
await buildSolautoRebalanceTransaction(client,
|
|
126
|
+
await buildSolautoRebalanceTransaction(client, 5000, attemptNum),
|
|
108
127
|
"rebalance"
|
|
109
128
|
)
|
|
110
129
|
);
|
|
@@ -141,7 +160,7 @@ describe("Solauto Marginfi tests", async () => {
|
|
|
141
160
|
transactionItems,
|
|
142
161
|
undefined,
|
|
143
162
|
!payForTransactions,
|
|
144
|
-
useJitoBundle
|
|
163
|
+
useJitoBundle
|
|
145
164
|
).send();
|
|
146
165
|
});
|
|
147
166
|
});
|
|
@@ -1,14 +1,15 @@
|
|
|
1
1
|
import { describe, it } from 'mocha';
|
|
2
|
-
import { PublicKey } from "@solana/web3.js";
|
|
2
|
+
import { clusterApiUrl, Connection, PublicKey } from "@solana/web3.js";
|
|
3
3
|
import {
|
|
4
4
|
MARGINFI_ACCOUNTS,
|
|
5
5
|
MARGINFI_ACCOUNTS_LOOKUP_TABLE,
|
|
6
6
|
} from "../../src/constants/marginfiAccounts";
|
|
7
|
-
|
|
7
|
+
|
|
8
|
+
const conn = new Connection(clusterApiUrl("mainnet-beta"), "confirmed");
|
|
8
9
|
|
|
9
10
|
describe("Assert lookup tables up-to-date", async () => {
|
|
10
11
|
it("marginfi accounts LUT should have everything", async () => {
|
|
11
|
-
const lookupTable = await
|
|
12
|
+
const lookupTable = await conn.getAddressLookupTable(
|
|
12
13
|
new PublicKey(MARGINFI_ACCOUNTS_LOOKUP_TABLE)
|
|
13
14
|
);
|
|
14
15
|
if (lookupTable === null) {
|