@haven-fi/solauto-sdk 1.0.543 → 1.0.545

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.
@@ -14,7 +14,7 @@ export declare const PRICES: {
14
14
  };
15
15
  export declare const JITO_BLOCK_ENGINE = "https://mainnet.block-engine.jito.wtf";
16
16
  export declare const JITO_TIP_ACCOUNTS: string[];
17
- export declare const SOLAUTO_LUT = "9D4xwZwDf46n9ft5gQxZzq3rBbdRXsXojKQLZbBdskPY";
17
+ export declare const SOLAUTO_LUT = "8b7KefQDroVLGao71J5H3hFwABeyMCgCrLpXWssNFhk9";
18
18
  export declare const STANDARD_LUT_ACCOUNTS: string[];
19
19
  export declare const BROKEN_TOKENS: string[];
20
20
  //# sourceMappingURL=solautoConstants.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"solautoConstants.d.ts","sourceRoot":"","sources":["../../src/constants/solautoConstants.ts"],"names":[],"mappings":"AAAA,OAAO,EAKL,SAAS,EACV,MAAM,iBAAiB,CAAC;AASzB,eAAO,MAAM,oBAAoB,WAEhC,CAAC;AACF,eAAO,MAAM,oBAAoB,WAEhC,CAAC;AAIF,eAAO,MAAM,YAAY,QAAQ,CAAC;AAElC,eAAO,MAAM,iCAAiC,IAAI,CAAC;AACnD,eAAO,MAAM,iBAAiB,KAAK,CAAC;AACpC,eAAO,MAAM,iBAAiB,KAAK,CAAC;AACpC,eAAO,MAAM,0BAA0B,OAAO,CAAC;AAE/C,eAAO,MAAM,MAAM,EAAE;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAA;CAAO,CAAC;AAE7E,eAAO,MAAM,iBAAiB,0CAA0C,CAAC;AAEzE,eAAO,MAAM,iBAAiB,UAS7B,CAAC;AAEF,eAAO,MAAM,WAAW,iDAAiD,CAAC;AAC1E,eAAO,MAAM,qBAAqB,UAaR,CAAC;AAG3B,eAAO,MAAM,aAAa,UAOzB,CAAA"}
1
+ {"version":3,"file":"solautoConstants.d.ts","sourceRoot":"","sources":["../../src/constants/solautoConstants.ts"],"names":[],"mappings":"AAAA,OAAO,EAKL,SAAS,EACV,MAAM,iBAAiB,CAAC;AASzB,eAAO,MAAM,oBAAoB,WAEhC,CAAC;AACF,eAAO,MAAM,oBAAoB,WAEhC,CAAC;AAIF,eAAO,MAAM,YAAY,QAAQ,CAAC;AAElC,eAAO,MAAM,iCAAiC,IAAI,CAAC;AACnD,eAAO,MAAM,iBAAiB,KAAK,CAAC;AACpC,eAAO,MAAM,iBAAiB,KAAK,CAAC;AACpC,eAAO,MAAM,0BAA0B,OAAO,CAAC;AAE/C,eAAO,MAAM,MAAM,EAAE;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAA;CAAO,CAAC;AAE7E,eAAO,MAAM,iBAAiB,0CAA0C,CAAC;AAEzE,eAAO,MAAM,iBAAiB,UAS7B,CAAC;AAMF,eAAO,MAAM,WAAW,iDAAiD,CAAC;AAC1E,eAAO,MAAM,qBAAqB,UAYR,CAAC;AAG3B,eAAO,MAAM,aAAa,UAOzB,CAAA"}
@@ -26,7 +26,11 @@ exports.JITO_TIP_ACCOUNTS = [
26
26
  "DttWaMuVvTiduZRnguLF7jNxTgiMBZ1hyAumKUiL2KRL",
27
27
  "3AVi9Tg9Uo68tJfuvoKvqKNWKkC5wPdSSdeBnizKZ6jT",
28
28
  ];
29
- exports.SOLAUTO_LUT = "9D4xwZwDf46n9ft5gQxZzq3rBbdRXsXojKQLZbBdskPY";
29
+ // "9D4xwZwDf46n9ft5gQxZzq3rBbdRXsXojKQLZbBdskPY";
30
+ // "J97FEQeJzChRnaAjNy3dRvm9FBavKqAdxo8jKXzw17ut"
31
+ // "ByhmNseaYZXBDcBm6xhbgarwixgjym6H4ddLsvgoL3BL"
32
+ // "2VJK8AHqtiaiJKYbBtFr3EHV4Hcy1FHCiEYQFmUvxot8"
33
+ exports.SOLAUTO_LUT = "8b7KefQDroVLGao71J5H3hFwABeyMCgCrLpXWssNFhk9";
30
34
  exports.STANDARD_LUT_ACCOUNTS = [
31
35
  web3_js_1.PublicKey.default,
32
36
  exports.SOLAUTO_PROD_PROGRAM,
@@ -39,7 +43,6 @@ exports.STANDARD_LUT_ACCOUNTS = [
39
43
  web3_js_1.SYSVAR_RENT_PUBKEY,
40
44
  web3_js_1.SYSVAR_INSTRUCTIONS_PUBKEY,
41
45
  jupiter_sdk_1.JUPITER_PROGRAM_ID,
42
- ...exports.JITO_TIP_ACCOUNTS
43
46
  ].map((x) => x.toString());
44
47
  // TODO:
45
48
  exports.BROKEN_TOKENS = [
@@ -1 +1 @@
1
- {"version":3,"file":"jitoUtils.d.ts","sourceRoot":"","sources":["../../src/utils/jitoUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,UAAU,EACV,SAAS,EAKV,MAAM,iBAAiB,CAAC;AAMzB,OAAO,EACL,MAAM,EACN,kBAAkB,EAClB,GAAG,EAEH,kBAAkB,EAEnB,MAAM,0BAA0B,CAAC;AAQlC,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAMlE,wBAAgB,mBAAmB,IAAI,SAAS,CAG/C;AA+ND,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,kBAAkB;;;;IAkB7D;AAED,wBAAsB,2BAA2B,CAC/C,GAAG,EAAE,GAAG,EACR,UAAU,EAAE,UAAU,EACtB,UAAU,EAAE,MAAM,EAClB,YAAY,EAAE,MAAM,EAAE,EACtB,GAAG,EAAE,kBAAkB,EAAE,EACzB,MAAM,CAAC,EAAE,kBAAkB,EAC3B,kBAAkB,GAAE,kBAA2C,EAC/D,cAAc,CAAC,EAAE,MAAM,IAAI,GAC1B,OAAO,CAAC,MAAM,EAAE,GAAG,SAAS,CAAC,CA8F/B"}
1
+ {"version":3,"file":"jitoUtils.d.ts","sourceRoot":"","sources":["../../src/utils/jitoUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,UAAU,EACV,SAAS,EAKV,MAAM,iBAAiB,CAAC;AAMzB,OAAO,EACL,MAAM,EACN,kBAAkB,EAClB,GAAG,EAEH,kBAAkB,EAEnB,MAAM,0BAA0B,CAAC;AAQlC,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAMlE,wBAAgB,mBAAmB,IAAI,SAAS,CAG/C;AAqOD,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,kBAAkB;;;;IAkB7D;AAED,wBAAsB,2BAA2B,CAC/C,GAAG,EAAE,GAAG,EACR,UAAU,EAAE,UAAU,EACtB,UAAU,EAAE,MAAM,EAClB,YAAY,EAAE,MAAM,EAAE,EACtB,GAAG,EAAE,kBAAkB,EAAE,EACzB,MAAM,CAAC,EAAE,kBAAkB,EAC3B,kBAAkB,GAAE,kBAA2C,EAC/D,cAAc,CAAC,EAAE,MAAM,IAAI,GAC1B,OAAO,CAAC,MAAM,EAAE,GAAG,SAAS,CAAC,CA+F/B"}
@@ -93,7 +93,7 @@ async function simulateJitoBundle(umi, txs) {
93
93
  else if (res.error && res.error.message) {
94
94
  throw new Error(res.error.message);
95
95
  }
96
- return res;
96
+ return res.result.value;
97
97
  });
98
98
  const transactionResults = simulationResult.transactionResults;
99
99
  return transactionResults;
@@ -170,6 +170,12 @@ async function sendJitoBundle(umi, transactions) {
170
170
  throw e;
171
171
  }
172
172
  }
173
+ if (resp?.data?.error?.message === "All providers failed") {
174
+ throw new Error(resp.data.error.responses[0].response.error.message);
175
+ }
176
+ else if (resp.data.error) {
177
+ throw new Error(resp.data.error);
178
+ }
173
179
  const bundleId = resp.data.result;
174
180
  (0, generalUtils_1.consoleLog)("Bundle ID:", bundleId);
175
181
  return bundleId ? await pollBundleStatus(umi, bundleId) : [];
@@ -207,7 +213,6 @@ async function sendJitoBundledTransactions(umi, connection, userSigner, otherSig
207
213
  let simulationResults;
208
214
  if (txType !== "skip-simulation") {
209
215
  builtTxs = await umiToVersionedTransactions(umi, latestBlockhash, userSigner, otherSigners, txs, false, feeEstimates);
210
- (0, generalUtils_1.consoleLog)(builtTxs.map((x) => x.message.compiledInstructions.map((y) => x.message.staticAccountKeys[y.programIdIndex].toString())));
211
216
  simulationResults = await simulateJitoBundle(umi, builtTxs);
212
217
  }
213
218
  if (txType !== "only-simulate") {
@@ -215,6 +220,13 @@ async function sendJitoBundledTransactions(umi, connection, userSigner, otherSig
215
220
  builtTxs = await umiToVersionedTransactions(umi, latestBlockhash, userSigner, otherSigners, txs, true, feeEstimates, simulationResults
216
221
  ? simulationResults.map((x) => x.unitsConsumed * 1.15)
217
222
  : undefined);
223
+ // consoleLog(
224
+ // builtTxs.map((x) =>
225
+ // x.message.compiledInstructions.map((y) =>
226
+ // x.message.staticAccountKeys[y.programIdIndex].toString()
227
+ // )
228
+ // )
229
+ // );
218
230
  const serializedTxs = builtTxs.map((x) => x.serialize());
219
231
  if (serializedTxs.find((x) => x.length > 1232)) {
220
232
  throw new Error("A transaction is too large");
@@ -101,7 +101,7 @@ async function getJupPriceData(mints, mayIncludeSpamTokens) {
101
101
  if (invalidValues && !mayIncludeSpamTokens) {
102
102
  throw new Error("Invalid price values");
103
103
  }
104
- const trueData = Object.entries(result).reduce((acc, [key, val]) => val.extraInfo?.quotedPrice?.sellAt === null
104
+ const trueData = Object.entries(result).reduce((acc, [key, val]) => !val?.extraInfo?.quotedPrice?.sellAt
105
105
  ? { ...acc, [key]: { ...val, price: "0" } }
106
106
  : { ...acc, [key]: val }, {});
107
107
  return trueData;
@@ -1,6 +1,6 @@
1
1
  import { publicKey } from "@metaplex-foundation/umi";
2
2
  import {
3
- buildHeliusApiUrl,
3
+ buildIronforgeApiUrl,
4
4
  calcNetWorthUsd,
5
5
  calcSupplyUsd,
6
6
  currentUnixSeconds,
@@ -20,17 +20,10 @@ import { PublicKey } from "@solana/web3.js";
20
20
  import { toWeb3JsPublicKey } from "@metaplex-foundation/umi-web3js-adapters";
21
21
  import path from "path";
22
22
  import { config } from "dotenv";
23
+ import { getBatches } from "./shared";
23
24
 
24
25
  config({ path: path.join(__dirname, ".env") });
25
26
 
26
- function getBatches<T>(items: T[], batchSize: number): T[][] {
27
- const batches: T[][] = [];
28
- for (let i = 0; i < items.length; i += batchSize) {
29
- batches.push(items.slice(i, i + batchSize));
30
- }
31
- return batches;
32
- }
33
-
34
27
  export function roundToDecimals(value: number, decimals: number = 2): number {
35
28
  if (!value || isNaN(value)) {
36
29
  return value;
@@ -96,7 +89,7 @@ export function formatNumber(
96
89
 
97
90
  async function main(filterWhitelist: boolean) {
98
91
  const [_, umi] = getSolanaRpcConnection(
99
- buildHeliusApiUrl(process.env.HELIUS_API_KEY!),
92
+ buildIronforgeApiUrl(process.env.IRONFORGE_API_KEY!),
100
93
  SOLAUTO_PROD_PROGRAM
101
94
  );
102
95
 
package/local/shared.ts CHANGED
@@ -10,6 +10,14 @@ import {
10
10
  } from "@solana/web3.js";
11
11
  import { buildHeliusApiUrl, getSolanaRpcConnection } from "../src/utils/solanaUtils";
12
12
 
13
+ export function getBatches<T>(items: T[], batchSize: number): T[][] {
14
+ const batches: T[][] = [];
15
+ for (let i = 0; i < items.length; i += batchSize) {
16
+ batches.push(items.slice(i, i + batchSize));
17
+ }
18
+ return batches;
19
+ }
20
+
13
21
  function loadSecretKey(keypairPath: string) {
14
22
  const secretKey = JSON.parse(fs.readFileSync(keypairPath, "utf8"));
15
23
  return new Uint8Array(secretKey);
@@ -59,16 +67,20 @@ async function addAddressesIfNeeded(
59
67
  const addresses = addressesToAdd
60
68
  .filter((x) => !existingAddresses.includes(x))
61
69
  .map((x) => new PublicKey(x));
62
-
70
+
63
71
  if (addresses.length > 0) {
64
- await createAndSendV0Tx([
65
- AddressLookupTableProgram.extendLookupTable({
66
- payer: keypair.publicKey,
67
- authority: keypair.publicKey,
68
- lookupTable: lookupTableAddress,
69
- addresses,
70
- }),
71
- ]);
72
+ const batches = getBatches(addresses, 20);
73
+ for (const addressBatch of batches) {
74
+ console.log(addressBatch.map(x => x.toString()));
75
+ await createAndSendV0Tx([
76
+ AddressLookupTableProgram.extendLookupTable({
77
+ payer: keypair.publicKey,
78
+ authority: keypair.publicKey,
79
+ lookupTable: lookupTableAddress,
80
+ addresses: addressBatch,
81
+ }),
82
+ ]);
83
+ }
72
84
  }
73
85
  }
74
86
 
@@ -87,7 +99,7 @@ export async function updateLookupTable(
87
99
  });
88
100
  lookupTableAddress = addr;
89
101
  console.log("Lookup Table Address:", lookupTableAddress.toString());
90
- createAndSendV0Tx([createLutIx]);
102
+ await createAndSendV0Tx([createLutIx]);
91
103
  }
92
104
 
93
105
  const existingAccounts =
@@ -17,7 +17,7 @@ import {
17
17
  } from "../src/utils";
18
18
  import { SWITCHBOARD_PRICE_FEED_IDS } from "../src/constants/switchboardConstants";
19
19
 
20
- const LOOKUP_TABLE_ADDRESS = new PublicKey(SOLAUTO_LUT);
20
+ const LOOKUP_TABLE_ADDRESS = Boolean(SOLAUTO_LUT) ? new PublicKey(SOLAUTO_LUT) : undefined;
21
21
  const solautoManagerTokenAccounts = getTokenAccounts(
22
22
  SOLAUTO_MANAGER,
23
23
  ALL_SUPPORTED_TOKENS.map((x) => new PublicKey(x))
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@haven-fi/solauto-sdk",
3
- "version": "1.0.543",
3
+ "version": "1.0.545",
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",
@@ -44,7 +44,11 @@ export const JITO_TIP_ACCOUNTS = [
44
44
  "3AVi9Tg9Uo68tJfuvoKvqKNWKkC5wPdSSdeBnizKZ6jT",
45
45
  ];
46
46
 
47
- export const SOLAUTO_LUT = "9D4xwZwDf46n9ft5gQxZzq3rBbdRXsXojKQLZbBdskPY";
47
+ // "9D4xwZwDf46n9ft5gQxZzq3rBbdRXsXojKQLZbBdskPY";
48
+ // "J97FEQeJzChRnaAjNy3dRvm9FBavKqAdxo8jKXzw17ut"
49
+ // "ByhmNseaYZXBDcBm6xhbgarwixgjym6H4ddLsvgoL3BL"
50
+ // "2VJK8AHqtiaiJKYbBtFr3EHV4Hcy1FHCiEYQFmUvxot8"
51
+ export const SOLAUTO_LUT = "8b7KefQDroVLGao71J5H3hFwABeyMCgCrLpXWssNFhk9";
48
52
  export const STANDARD_LUT_ACCOUNTS = [
49
53
  PublicKey.default,
50
54
  SOLAUTO_PROD_PROGRAM,
@@ -57,7 +61,6 @@ export const STANDARD_LUT_ACCOUNTS = [
57
61
  SYSVAR_RENT_PUBKEY,
58
62
  SYSVAR_INSTRUCTIONS_PUBKEY,
59
63
  JUPITER_PROGRAM_ID,
60
- ...JITO_TIP_ACCOUNTS
61
64
  ].map((x) => x.toString());
62
65
 
63
66
  // TODO:
@@ -139,7 +139,7 @@ async function simulateJitoBundle(umi: Umi, txs: VersionedTransaction[]) {
139
139
  throw new Error(res.error.message);
140
140
  }
141
141
 
142
- return res;
142
+ return res.result.value;
143
143
  });
144
144
 
145
145
  const transactionResults =
@@ -253,6 +253,12 @@ async function sendJitoBundle(
253
253
  }
254
254
  }
255
255
 
256
+ if (resp?.data?.error?.message === "All providers failed") {
257
+ throw new Error(resp.data.error.responses[0].response.error.message);
258
+ } else if (resp.data.error) {
259
+ throw new Error(resp.data.error);
260
+ }
261
+
256
262
  const bundleId = resp.data.result;
257
263
  consoleLog("Bundle ID:", bundleId);
258
264
  return bundleId ? await pollBundleStatus(umi, bundleId) : [];
@@ -311,6 +317,7 @@ export async function sendJitoBundledTransactions(
311
317
  );
312
318
 
313
319
  txs[0] = txs[0].prepend(getTipInstruction(userSigner, 150_000));
320
+
314
321
  const feeEstimates =
315
322
  priorityFeeSetting !== PriorityFeeSetting.None
316
323
  ? await Promise.all(
@@ -342,13 +349,6 @@ export async function sendJitoBundledTransactions(
342
349
  false,
343
350
  feeEstimates
344
351
  );
345
- consoleLog(
346
- builtTxs.map((x) =>
347
- x.message.compiledInstructions.map((y) =>
348
- x.message.staticAccountKeys[y.programIdIndex].toString()
349
- )
350
- )
351
- );
352
352
  simulationResults = await simulateJitoBundle(umi, builtTxs);
353
353
  }
354
354
 
@@ -367,6 +367,13 @@ export async function sendJitoBundledTransactions(
367
367
  ? simulationResults.map((x) => x.unitsConsumed! * 1.15)
368
368
  : undefined
369
369
  );
370
+ // consoleLog(
371
+ // builtTxs.map((x) =>
372
+ // x.message.compiledInstructions.map((y) =>
373
+ // x.message.staticAccountKeys[y.programIdIndex].toString()
374
+ // )
375
+ // )
376
+ // );
370
377
 
371
378
  const serializedTxs = builtTxs.map((x) => x.serialize());
372
379
  if (serializedTxs.find((x) => x.length > 1232)) {
@@ -204,7 +204,7 @@ export async function getJupPriceData(
204
204
  result as { [key: string]: any }
205
205
  ).reduce(
206
206
  (acc, [key, val]) =>
207
- val.extraInfo?.quotedPrice?.sellAt === null
207
+ !val?.extraInfo?.quotedPrice?.sellAt
208
208
  ? { ...acc, [key]: { ...val, price: "0" } }
209
209
  : { ...acc, [key]: val },
210
210
  {}
@@ -1,5 +1,5 @@
1
1
  import { describe, it } from "mocha";
2
- import { none, publicKey, some } from "@metaplex-foundation/umi";
2
+ import { none, publicKey, some, Umi } from "@metaplex-foundation/umi";
3
3
  import { setupTest } from "../shared";
4
4
  import { SolautoMarginfiClient } from "../../src/clients/solautoMarginfiClient";
5
5
  import {
@@ -43,6 +43,29 @@ import {
43
43
  import { PriorityFeeSetting } from "../../src/types";
44
44
  import { buildIronforgeApiUrl, fromBaseUnit, tokenInfo, USD_DECIMALS } from "../../dist";
45
45
 
46
+ async function getAssets(
47
+ umi: Umi,
48
+ mints: PublicKey[]
49
+ ) {
50
+ const response = await fetch(umi.rpc.getEndpoint(), {
51
+ method: 'POST',
52
+ headers: {
53
+ 'Content-Type': 'application/json',
54
+ },
55
+ body: JSON.stringify({
56
+ jsonrpc: '2.0',
57
+ id: 'get-assets',
58
+ method: 'getAssetBatch',
59
+ params: {
60
+ ids: mints.map((x) => x.toString()),
61
+ },
62
+ }),
63
+ });
64
+ const res = await response.json();
65
+ return res;
66
+ }
67
+
68
+
46
69
  describe("Solauto Marginfi tests", async () => {
47
70
  // const signer = setupTest();
48
71
  const signer = setupTest("solauto-manager");
@@ -62,18 +85,21 @@ describe("Solauto Marginfi tests", async () => {
62
85
  const supplyDecimals = 6;
63
86
  const debtDecimals = 6;
64
87
 
65
- await client.initialize({
66
- signer,
67
- positionId,
68
- authority: new PublicKey("FKYQs7KgRvaKQHxXwb8HKfoBcFdSxLL3JvHWpPdVQ16v"),
69
- // new: true,
70
- // marginfiAccount: new PublicKey(
71
- // ""
72
- // ),
73
- // marginfiGroup: new PublicKey(""),
74
- // supplyMint: new PublicKey(""),
75
- // debtMint: new PublicKey(USDC),
76
- });
88
+ // await client.initialize({
89
+ // signer,
90
+ // positionId,
91
+ // authority: new PublicKey("FKYQs7KgRvaKQHxXwb8HKfoBcFdSxLL3JvHWpPdVQ16v"),
92
+ // // new: true,
93
+ // // marginfiAccount: new PublicKey(
94
+ // // ""
95
+ // // ),
96
+ // // marginfiGroup: new PublicKey(""),
97
+ // // supplyMint: new PublicKey(""),
98
+ // // debtMint: new PublicKey(USDC),
99
+ // });
100
+
101
+ console.log(await getAssets(client.umi, [NATIVE_MINT, new PublicKey(USDC)]));
102
+ return;
77
103
 
78
104
  const transactionItems: TransactionItem[] = [];
79
105
  // const settingParams: SolautoSettingsParametersInpArgs = {