@haven-fi/solauto-sdk 1.0.324 → 1.0.326
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/solautoMarginfiClient.d.ts.map +1 -1
- package/dist/clients/solautoMarginfiClient.js +1 -1
- package/dist/utils/jitoUtils.d.ts.map +1 -1
- package/dist/utils/jitoUtils.js +16 -6
- package/dist/utils/marginfiUtils.d.ts +2 -2
- package/dist/utils/marginfiUtils.d.ts.map +1 -1
- package/dist/utils/marginfiUtils.js +11 -1
- package/dist/utils/solauto/generalUtils.d.ts +2 -2
- package/dist/utils/solauto/generalUtils.d.ts.map +1 -1
- package/dist/utils/solauto/generalUtils.js +2 -2
- package/local/createISMAccounts.ts +1 -1
- package/local/{createFeeAccounts.ts → createTokenAccounts.ts} +10 -6
- package/local/updateSolautoLUT.ts +2 -4
- package/package.json +2 -2
- package/src/clients/solautoMarginfiClient.ts +1 -2
- package/src/utils/jitoUtils.ts +17 -8
- package/src/utils/marginfiUtils.ts +11 -1
- package/src/utils/solauto/generalUtils.ts +1 -2
- package/tests/unit/accounts.ts +55 -16
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"solautoMarginfiClient.d.ts","sourceRoot":"","sources":["../../src/clients/solautoMarginfiClient.ts"],"names":[],"mappings":"AAIA,OAAO,EACL,MAAM,EACN,kBAAkB,EAMnB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,SAAS,EAA8B,MAAM,iBAAiB,CAAC;AACxE,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACnE,OAAO,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAM1D,OAAO,EACL,kBAAkB,EAElB,aAAa,EAGb,iBAAiB,EACjB,wBAAwB,EACxB,gCAAgC,EAKjC,MAAM,cAAc,CAAC;AAGtB,OAAO,EAEL,eAAe,EAUhB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,gBAAgB,EAChB,eAAe,EAChB,MAAM,iCAAiC,CAAC;AAQzC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAG5C,MAAM,WAAW,yBAA0B,SAAQ,iBAAiB;IAClE,eAAe,CAAC,EAAE,SAAS,GAAG,MAAM,CAAC;IACrC,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,aAAa,CAAC,EAAE,SAAS,CAAC;CAC3B;AAED,qBAAa,qBAAsB,SAAQ,aAAa;IACtD,OAAO,CAAC,WAAW,CAAkB;IAE9B,eAAe,EAAG,SAAS,CAAC;IAE5B,sBAAsB,EAAE,MAAM,CAAa;IAC3C,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;IAG5B,iCAAiC,CAAC,EAAE,MAAM,CAAC;IAC3C,6BAA6B,EAAG,SAAS,CAAC;IAC1C,2BAA2B,CAAC,EAAE,eAAe,CAAC;IAE/C,UAAU,CAAC,IAAI,EAAE,yBAAyB;IAkE1C,8BAA8B;
|
1
|
+
{"version":3,"file":"solautoMarginfiClient.d.ts","sourceRoot":"","sources":["../../src/clients/solautoMarginfiClient.ts"],"names":[],"mappings":"AAIA,OAAO,EACL,MAAM,EACN,kBAAkB,EAMnB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,SAAS,EAA8B,MAAM,iBAAiB,CAAC;AACxE,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACnE,OAAO,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAM1D,OAAO,EACL,kBAAkB,EAElB,aAAa,EAGb,iBAAiB,EACjB,wBAAwB,EACxB,gCAAgC,EAKjC,MAAM,cAAc,CAAC;AAGtB,OAAO,EAEL,eAAe,EAUhB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,gBAAgB,EAChB,eAAe,EAChB,MAAM,iCAAiC,CAAC;AAQzC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAG5C,MAAM,WAAW,yBAA0B,SAAQ,iBAAiB;IAClE,eAAe,CAAC,EAAE,SAAS,GAAG,MAAM,CAAC;IACrC,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,aAAa,CAAC,EAAE,SAAS,CAAC;CAC3B;AAED,qBAAa,qBAAsB,SAAQ,aAAa;IACtD,OAAO,CAAC,WAAW,CAAkB;IAE9B,eAAe,EAAG,SAAS,CAAC;IAE5B,sBAAsB,EAAE,MAAM,CAAa;IAC3C,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;IAG5B,iCAAiC,CAAC,EAAE,MAAM,CAAC;IAC3C,6BAA6B,EAAG,SAAS,CAAC;IAC1C,2BAA2B,CAAC,EAAE,eAAe,CAAC;IAE/C,UAAU,CAAC,IAAI,EAAE,yBAAyB;IAkE1C,8BAA8B;IA6CpC,eAAe,IAAI,SAAS;IAI5B,mBAAmB,IAAI,MAAM,EAAE;IAI/B,gBAAgB,IAAI,SAAS,EAAE;IAUzB,wBAAwB,IAAI,OAAO,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,CAAC;IA0BvE,yBAAyB,CAAC,eAAe,EAAE,MAAM,GAAG,kBAAkB;IAStE,YAAY,CACV,aAAa,CAAC,EAAE,gCAAgC,EAChD,GAAG,CAAC,EAAE,kBAAkB,GACvB,kBAAkB;IAMrB,OAAO,CAAC,sBAAsB;IA6C9B,OAAO,IAAI,kBAAkB;IAc7B,mBAAmB,CAAC,IAAI,EAAE,iBAAiB,GAAG,kBAAkB;IAUhE,OAAO,CAAC,6BAA6B;IAmErC,OAAO,CAAC,oCAAoC;IA0D5C,SAAS,CACP,aAAa,EAAE,GAAG,GAAG,GAAG,EACxB,QAAQ,EAAE,aAAa,EACvB,aAAa,EAAE,wBAAwB,EACvC,eAAe,EAAE,eAAe,EAChC,SAAS,CAAC,EAAE,gBAAgB,EAC5B,2BAA2B,CAAC,EAAE,MAAM,GACnC,kBAAkB;IAgFrB,WAAW,CACT,gBAAgB,EAAE,gBAAgB,EAClC,uBAAuB,EAAE,SAAS,GACjC,kBAAkB;IA2BrB,UAAU,CAAC,gBAAgB,EAAE,gBAAgB,GAAG,kBAAkB;IAoF5D,qBAAqB,IAAI,OAAO,CAAC,aAAa,GAAG,SAAS,CAAC;CA8ClE"}
|
@@ -62,7 +62,7 @@ class SolautoMarginfiClient extends solautoClient_1.SolautoClient {
|
|
62
62
|
this.initialized = true;
|
63
63
|
}
|
64
64
|
async setIntermediaryMarginfiDetails() {
|
65
|
-
const existingMarginfiAccounts = (await (0, marginfiUtils_1.getAllMarginfiAccountsByAuthority)(this.
|
65
|
+
const existingMarginfiAccounts = (await (0, marginfiUtils_1.getAllMarginfiAccountsByAuthority)(this.umi, (0, umi_web3js_adapters_1.toWeb3JsPublicKey)(this.signer.publicKey), this.marginfiGroup))
|
66
66
|
.filter((x) => !x.marginfiAccount.equals(this.marginfiAccountPk))
|
67
67
|
.sort((a, b) => a.marginfiAccount.toString().localeCompare(b.marginfiAccount.toString()));
|
68
68
|
const compatibleMarginfiAccounts = existingMarginfiAccounts.length > 0
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"jitoUtils.d.ts","sourceRoot":"","sources":["../../src/utils/jitoUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAwB,MAAM,iBAAiB,CAAC;AAGlE,OAAO,EACL,MAAM,EACN,kBAAkB,EAClB,GAAG,EAEJ,MAAM,0BAA0B,CAAC;AAQlC,OAAO,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAK9C,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,SAAS,CAAC,CAa9D;
|
1
|
+
{"version":3,"file":"jitoUtils.d.ts","sourceRoot":"","sources":["../../src/utils/jitoUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAwB,MAAM,iBAAiB,CAAC;AAGlE,OAAO,EACL,MAAM,EACN,kBAAkB,EAClB,GAAG,EAEJ,MAAM,0BAA0B,CAAC;AAQlC,OAAO,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAK9C,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,SAAS,CAAC,CAa9D;AAuHD,wBAAsB,2BAA2B,CAC/C,GAAG,EAAE,GAAG,EACR,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,kBAAkB,EAAE,EACzB,YAAY,CAAC,EAAE,OAAO,EACtB,kBAAkB,GAAE,kBAA2C,GAC9D,OAAO,CAAC,MAAM,EAAE,GAAG,SAAS,CAAC,CA8C/B"}
|
package/dist/utils/jitoUtils.js
CHANGED
@@ -85,12 +85,22 @@ async function pollBundleStatus(bundleId, interval = 1000, timeout = 40000) {
|
|
85
85
|
return [];
|
86
86
|
}
|
87
87
|
async function sendJitoBundle(transactions) {
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
88
|
+
let resp;
|
89
|
+
try {
|
90
|
+
resp = await axios_1.default.post(`${solautoConstants_1.JITO_BLOCK_ENGINE}/api/v1/bundles`, {
|
91
|
+
jsonrpc: "2.0",
|
92
|
+
id: 1,
|
93
|
+
method: "sendBundle",
|
94
|
+
params: [transactions],
|
95
|
+
});
|
96
|
+
}
|
97
|
+
catch (e) {
|
98
|
+
if (e.response) {
|
99
|
+
console.error("Jito send bundle error:", e.response.data);
|
100
|
+
console.error("Jito send bundle error:", e.response.data.error);
|
101
|
+
throw e;
|
102
|
+
}
|
103
|
+
}
|
94
104
|
const bundleId = resp.data.result;
|
95
105
|
(0, generalUtils_1.consoleLog)("Bundle ID:", bundleId);
|
96
106
|
return bundleId ? await pollBundleStatus(bundleId) : [];
|
@@ -1,4 +1,4 @@
|
|
1
|
-
import {
|
1
|
+
import { PublicKey } from "@solana/web3.js";
|
2
2
|
import { Umi } from "@metaplex-foundation/umi";
|
3
3
|
import { Bank, MarginfiAccount } from "../marginfi-sdk";
|
4
4
|
import { MarginfiAssetAccounts } from "../types/accounts";
|
@@ -16,7 +16,7 @@ export declare function getMaxLtvAndLiqThreshold(umi: Umi, marginfiGroup: Public
|
|
16
16
|
mint: PublicKey;
|
17
17
|
bank?: Bank | null;
|
18
18
|
}, supplyPrice?: number): Promise<[number, number]>;
|
19
|
-
export declare function getAllMarginfiAccountsByAuthority(
|
19
|
+
export declare function getAllMarginfiAccountsByAuthority(umi: Umi, authority: PublicKey, group?: PublicKey, compatibleWithSolauto?: boolean): Promise<{
|
20
20
|
marginfiAccount: PublicKey;
|
21
21
|
supplyMint?: PublicKey;
|
22
22
|
debtMint?: PublicKey;
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"marginfiUtils.d.ts","sourceRoot":"","sources":["../../src/utils/marginfiUtils.ts"],"names":[],"mappings":"AAAA,OAAO,
|
1
|
+
{"version":3,"file":"marginfiUtils.d.ts","sourceRoot":"","sources":["../../src/utils/marginfiUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACxD,OAAO,EAAa,GAAG,EAAE,MAAM,0BAA0B,CAAC;AAE1D,OAAO,EACL,IAAI,EAGJ,eAAe,EAGhB,MAAM,iBAAiB,CAAC;AAazB,OAAO,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAsB,MAAM,cAAc,CAAC;AAEjE,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAI7D,UAAU,wBAAyB,SAAQ,qBAAqB;IAC9D,IAAI,EAAE,SAAS,CAAC;CACjB;AAED,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,SAAS,GACd,wBAAwB,CAY1B;AAED,wBAAgB,yBAAyB,CACvC,UAAU,EAAE,IAAI,EAChB,QAAQ,EAAE,IAAI,EACd,WAAW,EAAE,MAAM,GAClB,CAAC,MAAM,EAAE,MAAM,CAAC,CA6BlB;AAED,wBAAsB,wBAAwB,CAC5C,GAAG,EAAE,GAAG,EACR,aAAa,EAAE,SAAS,EACxB,MAAM,EAAE;IACN,IAAI,EAAE,SAAS,CAAC;IAChB,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;CACpB,EACD,IAAI,EAAE;IACJ,IAAI,EAAE,SAAS,CAAC;IAChB,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;CACpB,EACD,WAAW,CAAC,EAAE,MAAM,GACnB,OAAO,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAwC3B;AAED,wBAAsB,iCAAiC,CACrD,GAAG,EAAE,GAAG,EACR,SAAS,EAAE,SAAS,EACpB,KAAK,CAAC,EAAE,SAAS,EACjB,qBAAqB,CAAC,EAAE,OAAO,GAC9B,OAAO,CACR;IAAE,eAAe,EAAE,SAAS,CAAC;IAAC,UAAU,CAAC,EAAE,SAAS,CAAC;IAAC,QAAQ,CAAC,EAAE,SAAS,CAAA;CAAE,EAAE,CAC/E,CAiEA;AAED,wBAAgB,iCAAiC,CAC/C,IAAI,EAAE,IAAI,GAAG,IAAI,EACjB,OAAO,EAAE,OAAO,UAejB;AAsDD,UAAU,aAAa;IACrB,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,UAAU,CAAC,EAAE,UAAU,CAAC;CACzB;AAED,KAAK,UAAU,GAAG;IAAE,CAAC,KAAK,EAAE,MAAM,GAAG;QAAE,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAAA;CAAE,CAAC;AAEhE,wBAAsB,+BAA+B,CACnD,GAAG,EAAE,GAAG,EACR,eAAe,EAAE;IAAE,EAAE,EAAE,SAAS,CAAC;IAAC,IAAI,CAAC,EAAE,eAAe,CAAA;CAAE,EAC1D,aAAa,CAAC,EAAE,SAAS,EACzB,MAAM,CAAC,EAAE,aAAa,EACtB,IAAI,CAAC,EAAE,aAAa,EACpB,mBAAmB,CAAC,EAAE,mBAAmB,GACxC,OAAO,CAAC,aAAa,GAAG,SAAS,CAAC,CAiLpC;AA+DD,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,IAAI,oBAU7C;AAED,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,IAAI,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAgBnE"}
|
@@ -66,7 +66,7 @@ async function getMaxLtvAndLiqThreshold(umi, marginfiGroup, supply, debt, supply
|
|
66
66
|
}
|
67
67
|
return calcMaxLtvAndLiqThreshold(supply.bank, debt.bank, supplyPrice);
|
68
68
|
}
|
69
|
-
async function getAllMarginfiAccountsByAuthority(
|
69
|
+
async function getAllMarginfiAccountsByAuthority(umi, authority, group, compatibleWithSolauto) {
|
70
70
|
const marginfiAccounts = await umi.rpc.getProgramAccounts(marginfi_sdk_1.MARGINFI_PROGRAM_ID, {
|
71
71
|
commitment: "confirmed",
|
72
72
|
dataSlice: {
|
@@ -83,6 +83,16 @@ async function getAllMarginfiAccountsByAuthority(conn, umi, authority, compatibl
|
|
83
83
|
offset: 40, // Anchor account discriminator + group pubkey
|
84
84
|
},
|
85
85
|
},
|
86
|
+
...(group
|
87
|
+
? [
|
88
|
+
{
|
89
|
+
memcmp: {
|
90
|
+
bytes: new Uint8Array(group.toBuffer()),
|
91
|
+
offset: 8,
|
92
|
+
},
|
93
|
+
},
|
94
|
+
]
|
95
|
+
: []),
|
86
96
|
],
|
87
97
|
});
|
88
98
|
if (compatibleWithSolauto) {
|
@@ -1,4 +1,4 @@
|
|
1
|
-
import {
|
1
|
+
import { PublicKey } from "@solana/web3.js";
|
2
2
|
import { Program, Umi } from "@metaplex-foundation/umi";
|
3
3
|
import { AutomationSettings, DCASettings, DCASettingsInpArgs, PositionState, PositionType, SolautoSettingsParameters, SolautoSettingsParametersInpArgs, TokenType } from "../../generated";
|
4
4
|
import { RebalanceAction, SolautoPositionDetails } from "../../types/solauto";
|
@@ -12,7 +12,7 @@ export declare function eligibleForRefresh(positionState: PositionState, positio
|
|
12
12
|
export declare function getSolautoManagedPositions(umi: Umi, authority?: PublicKey, positionTypeFilter?: PositionType): Promise<SolautoPositionDetails[]>;
|
13
13
|
export declare function getAllReferralStates(umi: Umi): Promise<PublicKey[]>;
|
14
14
|
export declare function getReferralsByUser(umi: Umi, user: PublicKey): Promise<PublicKey[]>;
|
15
|
-
export declare function getAllPositionsByAuthority(
|
15
|
+
export declare function getAllPositionsByAuthority(umi: Umi, user: PublicKey, positionTypeFilter?: PositionType): Promise<SolautoPositionDetails[]>;
|
16
16
|
export declare function positionStateWithLatestPrices(state: PositionState, supplyPrice?: number, debtPrice?: number): Promise<PositionState>;
|
17
17
|
interface AssetProps {
|
18
18
|
mint: PublicKey;
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"generalUtils.d.ts","sourceRoot":"","sources":["../../../src/utils/solauto/generalUtils.ts"],"names":[],"mappings":"AAAA,OAAO,
|
1
|
+
{"version":3,"file":"generalUtils.d.ts","sourceRoot":"","sources":["../../../src/utils/solauto/generalUtils.ts"],"names":[],"mappings":"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"}
|
@@ -236,7 +236,7 @@ async function getReferralsByUser(umi, user) {
|
|
236
236
|
});
|
237
237
|
return accounts.map((x) => (0, umi_web3js_adapters_1.toWeb3JsPublicKey)(x.publicKey));
|
238
238
|
}
|
239
|
-
async function getAllPositionsByAuthority(
|
239
|
+
async function getAllPositionsByAuthority(umi, user, positionTypeFilter) {
|
240
240
|
const solautoCompatiblePositions = await Promise.all([
|
241
241
|
(async () => {
|
242
242
|
const solautoManagedPositions = await getSolautoManagedPositions(umi, user, positionTypeFilter);
|
@@ -249,7 +249,7 @@ async function getAllPositionsByAuthority(conn, umi, user, positionTypeFilter) {
|
|
249
249
|
if (positionTypeFilter === generated_1.PositionType.SafeLoan) {
|
250
250
|
return [];
|
251
251
|
}
|
252
|
-
let marginfiPositions = await (0, marginfiUtils_1.getAllMarginfiAccountsByAuthority)(
|
252
|
+
let marginfiPositions = await (0, marginfiUtils_1.getAllMarginfiAccountsByAuthority)(umi, user, undefined, true);
|
253
253
|
marginfiPositions = marginfiPositions.filter((x) => x.supplyMint &&
|
254
254
|
(x.debtMint.equals(web3_js_1.PublicKey.default) ||
|
255
255
|
constants_1.ALL_SUPPORTED_TOKENS.includes(x.debtMint.toString())));
|
@@ -24,7 +24,7 @@ async function createIntermediarySolautoManagerAccounts() {
|
|
24
24
|
|
25
25
|
umi = umi.use(signerIdentity(signer));
|
26
26
|
|
27
|
-
const accounts = await getAllMarginfiAccountsByAuthority(
|
27
|
+
const accounts = await getAllMarginfiAccountsByAuthority(umi, SOLAUTO_MANAGER, undefined, false);
|
28
28
|
const data = await safeFetchAllMarginfiAccount(umi, accounts.map(x => publicKey(x.marginfiAccount)));
|
29
29
|
const existingMarginfiGroups = data.map(x => x.group.toString());
|
30
30
|
|
@@ -1,5 +1,9 @@
|
|
1
1
|
import { PublicKey } from "@solana/web3.js";
|
2
|
-
import {
|
2
|
+
import {
|
3
|
+
ALL_SUPPORTED_TOKENS,
|
4
|
+
SOLAUTO_FEES_WALLET,
|
5
|
+
SOLAUTO_MANAGER,
|
6
|
+
} from "../src/constants";
|
3
7
|
import {
|
4
8
|
buildHeliusApiUrl,
|
5
9
|
createAssociatedTokenAccountUmiIx,
|
@@ -16,12 +20,12 @@ import {
|
|
16
20
|
transactionBuilder,
|
17
21
|
} from "@metaplex-foundation/umi";
|
18
22
|
|
19
|
-
async function
|
23
|
+
async function createTokenAccounts(wallet: PublicKey) {
|
20
24
|
let [connection, umi] = getSolanaRpcConnection(
|
21
25
|
buildHeliusApiUrl(process.env.HELIUS_API_KEY!)
|
22
26
|
);
|
23
27
|
|
24
|
-
const secretKey = getSecretKey(
|
28
|
+
const secretKey = getSecretKey();
|
25
29
|
const signerKeypair = umi.eddsa.createKeypairFromSecretKey(secretKey);
|
26
30
|
const signer = createSignerFromKeypair(umi, signerKeypair);
|
27
31
|
|
@@ -29,7 +33,7 @@ async function create() {
|
|
29
33
|
|
30
34
|
const tokenAccounts = await umi.rpc.getAccounts(
|
31
35
|
ALL_SUPPORTED_TOKENS.map((x) =>
|
32
|
-
publicKey(getTokenAccount(
|
36
|
+
publicKey(getTokenAccount(wallet, new PublicKey(x)))
|
33
37
|
)
|
34
38
|
);
|
35
39
|
|
@@ -37,7 +41,7 @@ async function create() {
|
|
37
41
|
if (!accounts[0].exists) {
|
38
42
|
const tx = createAssociatedTokenAccountUmiIx(
|
39
43
|
signer,
|
40
|
-
|
44
|
+
wallet,
|
41
45
|
new PublicKey(accounts[1])
|
42
46
|
);
|
43
47
|
await sendSingleOptimizedTransaction(
|
@@ -49,4 +53,4 @@ async function create() {
|
|
49
53
|
}
|
50
54
|
}
|
51
55
|
|
52
|
-
|
56
|
+
createTokenAccounts(SOLAUTO_FEES_WALLET);
|
@@ -28,14 +28,12 @@ const solautoFeeWalletTokenAccounts = getTokenAccounts(
|
|
28
28
|
);
|
29
29
|
|
30
30
|
export async function updateSolautoLut(additionalAccounts?: string[]) {
|
31
|
-
const [
|
31
|
+
const [_, umi] = getSolanaRpcConnection(
|
32
32
|
buildHeliusApiUrl(process.env.HELIUS_API_KEY!)
|
33
33
|
);
|
34
34
|
const ismAccounts = await getAllMarginfiAccountsByAuthority(
|
35
|
-
connection,
|
36
35
|
umi,
|
37
|
-
SOLAUTO_MANAGER
|
38
|
-
false
|
36
|
+
SOLAUTO_MANAGER
|
39
37
|
);
|
40
38
|
|
41
39
|
return updateLookupTable(
|
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "@haven-fi/solauto-sdk",
|
3
|
-
"version": "1.0.
|
3
|
+
"version": "1.0.326",
|
4
4
|
"main": "dist/index.js",
|
5
5
|
"types": "dist/index.d.ts",
|
6
6
|
"description": "Typescript SDK for the Solauto program on the Solana blockchain",
|
@@ -14,7 +14,7 @@
|
|
14
14
|
"update-lut:solauto": "npx ts-node local/updateSolautoLUT.ts",
|
15
15
|
"update-lut:marginfi": "npx ts-node local/updateMarginfiLUT.ts",
|
16
16
|
"create-ism-accounts": "npx ts-node local/createISMAccounts.ts",
|
17
|
-
"create-
|
17
|
+
"create-token-accounts": "npx ts-node local/createTokenAccounts.ts"
|
18
18
|
},
|
19
19
|
"dependencies": {
|
20
20
|
"@coral-xyz/anchor": "^0.30.1",
|
@@ -158,10 +158,9 @@ export class SolautoMarginfiClient extends SolautoClient {
|
|
158
158
|
async setIntermediaryMarginfiDetails() {
|
159
159
|
const existingMarginfiAccounts = (
|
160
160
|
await getAllMarginfiAccountsByAuthority(
|
161
|
-
this.connection,
|
162
161
|
this.umi,
|
163
162
|
toWeb3JsPublicKey(this.signer.publicKey),
|
164
|
-
|
163
|
+
this.marginfiGroup
|
165
164
|
)
|
166
165
|
)
|
167
166
|
.filter((x) => !x.marginfiAccount.equals(this.marginfiAccountPk))
|
package/src/utils/jitoUtils.ts
CHANGED
@@ -127,15 +127,24 @@ async function pollBundleStatus(
|
|
127
127
|
}
|
128
128
|
|
129
129
|
async function sendJitoBundle(transactions: string[]): Promise<string[]> {
|
130
|
-
|
131
|
-
|
132
|
-
{
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
130
|
+
let resp: any;
|
131
|
+
try {
|
132
|
+
resp = await axios.post<{ result: string }>(
|
133
|
+
`${JITO_BLOCK_ENGINE}/api/v1/bundles`,
|
134
|
+
{
|
135
|
+
jsonrpc: "2.0",
|
136
|
+
id: 1,
|
137
|
+
method: "sendBundle",
|
138
|
+
params: [transactions],
|
139
|
+
}
|
140
|
+
);
|
141
|
+
} catch (e: any) {
|
142
|
+
if (e.response) {
|
143
|
+
console.error("Jito send bundle error:", e.response.data);
|
144
|
+
console.error("Jito send bundle error:", e.response.data.error);
|
145
|
+
throw e;
|
137
146
|
}
|
138
|
-
|
147
|
+
}
|
139
148
|
|
140
149
|
const bundleId = resp.data.result;
|
141
150
|
consoleLog("Bundle ID:", bundleId);
|
@@ -138,9 +138,9 @@ export async function getMaxLtvAndLiqThreshold(
|
|
138
138
|
}
|
139
139
|
|
140
140
|
export async function getAllMarginfiAccountsByAuthority(
|
141
|
-
conn: Connection,
|
142
141
|
umi: Umi,
|
143
142
|
authority: PublicKey,
|
143
|
+
group?: PublicKey,
|
144
144
|
compatibleWithSolauto?: boolean
|
145
145
|
): Promise<
|
146
146
|
{ marginfiAccount: PublicKey; supplyMint?: PublicKey; debtMint?: PublicKey }[]
|
@@ -163,6 +163,16 @@ export async function getAllMarginfiAccountsByAuthority(
|
|
163
163
|
offset: 40, // Anchor account discriminator + group pubkey
|
164
164
|
},
|
165
165
|
},
|
166
|
+
...(group
|
167
|
+
? [
|
168
|
+
{
|
169
|
+
memcmp: {
|
170
|
+
bytes: new Uint8Array(group.toBuffer()),
|
171
|
+
offset: 8,
|
172
|
+
},
|
173
|
+
},
|
174
|
+
]
|
175
|
+
: []),
|
166
176
|
],
|
167
177
|
}
|
168
178
|
);
|
@@ -368,7 +368,6 @@ export async function getReferralsByUser(
|
|
368
368
|
}
|
369
369
|
|
370
370
|
export async function getAllPositionsByAuthority(
|
371
|
-
conn: Connection,
|
372
371
|
umi: Umi,
|
373
372
|
user: PublicKey,
|
374
373
|
positionTypeFilter?: PositionType
|
@@ -392,9 +391,9 @@ export async function getAllPositionsByAuthority(
|
|
392
391
|
}
|
393
392
|
|
394
393
|
let marginfiPositions = await getAllMarginfiAccountsByAuthority(
|
395
|
-
conn,
|
396
394
|
umi,
|
397
395
|
user,
|
396
|
+
undefined,
|
398
397
|
true
|
399
398
|
);
|
400
399
|
marginfiPositions = marginfiPositions.filter(
|
package/tests/unit/accounts.ts
CHANGED
@@ -9,30 +9,69 @@ import {
|
|
9
9
|
} from "../../src/utils/solanaUtils";
|
10
10
|
import { publicKey } from "@metaplex-foundation/umi";
|
11
11
|
import { assert } from "chai";
|
12
|
-
import {
|
13
|
-
|
12
|
+
import {
|
13
|
+
getAllMarginfiAccountsByAuthority,
|
14
|
+
getTokenAccount,
|
15
|
+
} from "../../src/utils";
|
16
|
+
import {
|
17
|
+
MARGINFI_ACCOUNTS,
|
18
|
+
SOLAUTO_FEES_WALLET,
|
19
|
+
SOLAUTO_MANAGER,
|
20
|
+
} from "../../src/constants";
|
14
21
|
import { PublicKey } from "@solana/web3.js";
|
22
|
+
import { safeFetchAllMarginfiAccount } from "../../src/marginfi-sdk";
|
23
|
+
import { toWeb3JsPublicKey } from "@metaplex-foundation/umi-web3js-adapters";
|
24
|
+
|
25
|
+
async function hasTokenAccounts(wallet: PublicKey) {
|
26
|
+
let [_, umi] = getSolanaRpcConnection(
|
27
|
+
buildHeliusApiUrl(process.env.HELIUS_API_KEY!)
|
28
|
+
);
|
29
|
+
|
30
|
+
const tokenAccounts = await umi.rpc.getAccounts(
|
31
|
+
ALL_SUPPORTED_TOKENS.map((x) =>
|
32
|
+
publicKey(getTokenAccount(wallet, new PublicKey(x)))
|
33
|
+
)
|
34
|
+
);
|
35
|
+
for (let i = 0; i < tokenAccounts.length; i++) {
|
36
|
+
console.log(tokenAccounts[i].publicKey.toString());
|
37
|
+
if (!tokenAccounts[i].exists) {
|
38
|
+
console.log(
|
39
|
+
`Missing ${wallet.toString()} TA for `,
|
40
|
+
TOKEN_INFO[ALL_SUPPORTED_TOKENS[i].toString()].ticker
|
41
|
+
);
|
42
|
+
}
|
43
|
+
}
|
44
|
+
assert(tokenAccounts.filter((x) => !x.exists).length === 0);
|
45
|
+
}
|
15
46
|
|
16
47
|
describe("Assert Solauto fee token accounts are created", async () => {
|
17
48
|
it("all Solauto fee token accounts created", async () => {
|
49
|
+
await hasTokenAccounts(SOLAUTO_FEES_WALLET);
|
50
|
+
});
|
51
|
+
|
52
|
+
it("ISM accounts for every supported Marginfi group", async () => {
|
18
53
|
let [_, umi] = getSolanaRpcConnection(
|
19
54
|
buildHeliusApiUrl(process.env.HELIUS_API_KEY!)
|
20
55
|
);
|
21
56
|
|
22
|
-
const
|
23
|
-
|
24
|
-
|
25
|
-
|
57
|
+
const ismAccounts = await getAllMarginfiAccountsByAuthority(
|
58
|
+
umi,
|
59
|
+
SOLAUTO_MANAGER,
|
60
|
+
undefined,
|
61
|
+
false
|
26
62
|
);
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
63
|
+
const ismData = await safeFetchAllMarginfiAccount(
|
64
|
+
umi,
|
65
|
+
ismAccounts.map((x) => publicKey(x.marginfiAccount))
|
66
|
+
);
|
67
|
+
const supportedMarginfiGroups = Object.keys(MARGINFI_ACCOUNTS).map(
|
68
|
+
(x) => new PublicKey(x)
|
69
|
+
);
|
70
|
+
const missingIsmAccounts = supportedMarginfiGroups.filter(
|
71
|
+
(group) => !ismData.find((x) => group.equals(toWeb3JsPublicKey(x.group)))
|
72
|
+
);
|
73
|
+
|
74
|
+
console.log("Missing ISM accounts", missingIsmAccounts);
|
75
|
+
assert(missingIsmAccounts.length === 0);
|
37
76
|
});
|
38
77
|
});
|