@haven-fi/solauto-sdk 1.0.3 → 1.0.5
Sign up to get free protection for your applications and to get access to all the features.
- package/dist/utils/jupiterUtils.d.ts.map +1 -1
- package/dist/utils/jupiterUtils.js +3 -2
- package/dist/utils/solanaUtils.d.ts +0 -2
- package/dist/utils/solanaUtils.d.ts.map +1 -1
- package/dist/utils/solanaUtils.js +3 -14
- package/package.json +1 -1
- package/src/utils/jupiterUtils.ts +4 -2
- package/src/utils/solanaUtils.ts +2 -16
- package/tests/shared.ts +13 -1
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"jupiterUtils.d.ts","sourceRoot":"","sources":["../../src/utils/jupiterUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,MAAM,EACN,kBAAkB,EAEnB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,SAAS,EAA0B,MAAM,iBAAiB,CAAC;
|
1
|
+
{"version":3,"file":"jupiterUtils.d.ts","sourceRoot":"","sources":["../../src/utils/jupiterUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,MAAM,EACN,kBAAkB,EAEnB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,SAAS,EAA0B,MAAM,iBAAiB,CAAC;AAGpE,OAAO,EAGL,aAAa,EACd,MAAM,aAAa,CAAC;AAKrB,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,SAAS,CAAC;IACrB,UAAU,EAAE,SAAS,CAAC;IACtB,iBAAiB,EAAE,SAAS,CAAC;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAgBD,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,aAAa,CAAC;IACxB,oBAAoB,EAAE,MAAM,EAAE,CAAC;IAC/B,iBAAiB,EAAE,kBAAkB,CAAC;IACtC,aAAa,EAAE,kBAAkB,CAAC;IAClC,MAAM,EAAE,kBAAkB,CAAC;CAC5B;AAED,wBAAsB,qBAAqB,CACzC,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,cAAc,GAC1B,OAAO,CAAC,kBAAkB,CAAC,CA+D7B"}
|
@@ -5,7 +5,6 @@ const umi_1 = require("@metaplex-foundation/umi");
|
|
5
5
|
const web3_js_1 = require("@solana/web3.js");
|
6
6
|
const solanaUtils_1 = require("./solanaUtils");
|
7
7
|
const numberUtils_1 = require("./numberUtils");
|
8
|
-
const console_1 = require("console");
|
9
8
|
const api_1 = require("@jup-ag/api");
|
10
9
|
const accountUtils_1 = require("./accountUtils");
|
11
10
|
const jupApi = (0, api_1.createJupiterApiClient)();
|
@@ -47,7 +46,9 @@ async function getJupSwapTransaction(signer, swapDetails) {
|
|
47
46
|
destinationTokenAccount: (0, accountUtils_1.getTokenAccount)(swapDetails.destinationWallet, swapDetails.outputMint).toString(),
|
48
47
|
},
|
49
48
|
});
|
50
|
-
|
49
|
+
if (!instructions.swapInstruction) {
|
50
|
+
throw new Error("No swap instruction was returned by Jupiter");
|
51
|
+
}
|
51
52
|
return {
|
52
53
|
jupQuote: quoteResponse,
|
53
54
|
lookupTableAddresses: instructions.addressLookupTableAddresses,
|
@@ -1,8 +1,6 @@
|
|
1
1
|
import { AddressLookupTableInput, Signer, TransactionBuilder, WrappedInstruction } from "@metaplex-foundation/umi";
|
2
2
|
import { PublicKey, TransactionInstruction } from "@solana/web3.js";
|
3
3
|
import { SolautoClient } from "../clients/solautoClient";
|
4
|
-
export declare function loadSecretKey(keypairPath: string): Uint8Array;
|
5
|
-
export declare function getSecretKey(keypairFilename?: string): Uint8Array;
|
6
4
|
export declare function currentUnixSecondsSolana(): Promise<number>;
|
7
5
|
export declare function getWrappedInstruction(signer: Signer, ix: TransactionInstruction): WrappedInstruction;
|
8
6
|
export declare function setComputeUnitLimitUmiIx(signer: Signer, maxComputeUnits: number): WrappedInstruction;
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"solanaUtils.d.ts","sourceRoot":"","sources":["../../src/utils/solanaUtils.ts"],"names":[],"mappings":"
|
1
|
+
{"version":3,"file":"solanaUtils.d.ts","sourceRoot":"","sources":["../../src/utils/solanaUtils.ts"],"names":[],"mappings":"AACA,OAAO,EACL,uBAAuB,EACvB,MAAM,EACN,kBAAkB,EAClB,kBAAkB,EAGnB,MAAM,0BAA0B,CAAC;AAMlC,OAAO,EAGL,SAAS,EAIT,sBAAsB,EAEvB,MAAM,iBAAiB,CAAC;AAOzB,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAQzD,wBAAsB,wBAAwB,IAAI,OAAO,CAAC,MAAM,CAAC,CAQhE;AAED,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,MAAM,EACd,EAAE,EAAE,sBAAsB,GACzB,kBAAkB,CAMpB;AAED,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,MAAM,EACd,eAAe,EAAE,MAAM,GACtB,kBAAkB,CAOpB;AAED,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,GACf,kBAAkB,CAOpB;AAED,wBAAgB,iCAAiC,CAC/C,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,SAAS,EACjB,IAAI,EAAE,SAAS,GACd,kBAAkB,CAUpB;AAED,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,SAAS,EACtB,QAAQ,EAAE,MAAM,GACf,kBAAkB,CASpB;AAED,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,MAAM,EACd,YAAY,EAAE,SAAS,EACvB,SAAS,EAAE,SAAS,GACnB,kBAAkB,CAKpB;AAED,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,SAAS,EACjB,IAAI,EAAE,SAAS,EACf,SAAS,EAAE,SAAS,EACpB,MAAM,EAAE,MAAM,GACb,kBAAkB,CAKpB;AAED,wBAAsB,qBAAqB,CACzC,oBAAoB,EAAE,MAAM,EAAE,GAC7B,OAAO,CAAC,uBAAuB,EAAE,CAAC,CAkBpC;AAED,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,MAAM,EACd,EAAE,EAAE,kBAAkB,EACtB,gBAAgB,EAAE,MAAM,EACxB,gBAAgB,CAAC,EAAE,MAAM,sBA4D1B;AAiBD,wBAAsB,2BAA2B,CAC/C,EAAE,EAAE,kBAAkB,EACtB,UAAU,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,MAAM,CAAC,CAcjB;AAED,wBAAsB,8BAA8B,CAClD,MAAM,EAAE,aAAa,EACrB,EAAE,EAAE,kBAAkB,EACtB,YAAY,CAAC,EAAE,OAAO,EACtB,UAAU,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC,CAqDjC"}
|
@@ -3,10 +3,8 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
4
4
|
};
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
6
|
-
exports.sendSingleOptimizedTransaction = exports.getComputeUnitPriceEstimate = exports.assembleFinalTransaction = exports.getAdressLookupInputs = exports.splTokenTransferUmiIx = exports.closeTokenAccountUmiIx = exports.systemTransferUmiIx = exports.createAssociatedTokenAccountUmiIx = exports.setComputeUnitPriceUmiIx = exports.setComputeUnitLimitUmiIx = exports.getWrappedInstruction = exports.currentUnixSecondsSolana =
|
7
|
-
const fs_1 = __importDefault(require("fs"));
|
6
|
+
exports.sendSingleOptimizedTransaction = exports.getComputeUnitPriceEstimate = exports.assembleFinalTransaction = exports.getAdressLookupInputs = exports.splTokenTransferUmiIx = exports.closeTokenAccountUmiIx = exports.systemTransferUmiIx = exports.createAssociatedTokenAccountUmiIx = exports.setComputeUnitPriceUmiIx = exports.setComputeUnitLimitUmiIx = exports.getWrappedInstruction = exports.currentUnixSecondsSolana = void 0;
|
8
7
|
const bs58_1 = __importDefault(require("bs58"));
|
9
|
-
const path_1 = __importDefault(require("path"));
|
10
8
|
const umi_1 = require("@metaplex-foundation/umi");
|
11
9
|
const umi_web3js_adapters_1 = require("@metaplex-foundation/umi-web3js-adapters");
|
12
10
|
const web3_js_1 = require("@solana/web3.js");
|
@@ -15,15 +13,6 @@ const accountUtils_1 = require("./accountUtils");
|
|
15
13
|
const solautoConstants_1 = require("../constants/solautoConstants");
|
16
14
|
const generalUtils_1 = require("./generalUtils");
|
17
15
|
const marginfi_sdk_1 = require("../marginfi-sdk");
|
18
|
-
function loadSecretKey(keypairPath) {
|
19
|
-
const secretKey = JSON.parse(fs_1.default.readFileSync(keypairPath, "utf8"));
|
20
|
-
return new Uint8Array(secretKey);
|
21
|
-
}
|
22
|
-
exports.loadSecretKey = loadSecretKey;
|
23
|
-
function getSecretKey(keypairFilename = "id") {
|
24
|
-
return loadSecretKey(path_1.default.join(process.env.HOME, ".config", "solana", keypairFilename + ".json"));
|
25
|
-
}
|
26
|
-
exports.getSecretKey = getSecretKey;
|
27
16
|
async function currentUnixSecondsSolana() {
|
28
17
|
return await (0, generalUtils_1.retryWithExponentialBackoff)(async () => {
|
29
18
|
const blockTime = await solautoConstants_1.CONNECTION.getBlockTime(await solautoConstants_1.CONNECTION.getSlot());
|
@@ -152,7 +141,6 @@ async function getComputeUnitPriceEstimate(tx, attemptNum) {
|
|
152
141
|
},
|
153
142
|
]);
|
154
143
|
const feeEstimate = Math.round(resp.priorityFeeEstimate);
|
155
|
-
console.log("Compute unit price: ", feeEstimate);
|
156
144
|
return feeEstimate;
|
157
145
|
}
|
158
146
|
exports.getComputeUnitPriceEstimate = getComputeUnitPriceEstimate;
|
@@ -161,9 +149,10 @@ async function sendSingleOptimizedTransaction(client, tx, simulateOnly, attemptN
|
|
161
149
|
client.log("Instructions: ", tx.getInstructions().length);
|
162
150
|
client.log("Serialized transaction size: ", tx.getTransactionSize(solautoConstants_1.UMI));
|
163
151
|
const feeEstimate = await getComputeUnitPriceEstimate(tx, attemptNum);
|
152
|
+
client.log("Compute unit price: ", feeEstimate);
|
164
153
|
const simulationResult = await (0, generalUtils_1.retryWithExponentialBackoff)(async () => await simulateTransaction((0, umi_web3js_adapters_1.toWeb3JsTransaction)(await (await assembleFinalTransaction(client.signer, tx, feeEstimate, 1400000).setLatestBlockhash(solautoConstants_1.UMI)).buildAndSign(solautoConstants_1.UMI))));
|
165
154
|
const computeUnitLimit = Math.round(simulationResult.value.unitsConsumed * 1.15);
|
166
|
-
|
155
|
+
client.log("Compute unit limit: ", computeUnitLimit);
|
167
156
|
if (!simulateOnly) {
|
168
157
|
const result = await (0, generalUtils_1.retryWithExponentialBackoff)(async () => await assembleFinalTransaction(client.signer, tx, feeEstimate, computeUnitLimit).sendAndConfirm(solautoConstants_1.UMI, {
|
169
158
|
send: {
|
package/package.json
CHANGED
@@ -6,7 +6,6 @@ import {
|
|
6
6
|
import { PublicKey, TransactionInstruction } from "@solana/web3.js";
|
7
7
|
import { getWrappedInstruction } from "./solanaUtils";
|
8
8
|
import { toBps } from "./numberUtils";
|
9
|
-
import { assert } from "console";
|
10
9
|
import {
|
11
10
|
createJupiterApiClient,
|
12
11
|
Instruction,
|
@@ -87,7 +86,10 @@ export async function getJupSwapTransaction(
|
|
87
86
|
},
|
88
87
|
});
|
89
88
|
|
90
|
-
|
89
|
+
if (!instructions.swapInstruction) {
|
90
|
+
throw new Error("No swap instruction was returned by Jupiter");
|
91
|
+
}
|
92
|
+
|
91
93
|
return {
|
92
94
|
jupQuote: quoteResponse,
|
93
95
|
lookupTableAddresses: instructions.addressLookupTableAddresses,
|
package/src/utils/solanaUtils.ts
CHANGED
@@ -1,6 +1,4 @@
|
|
1
|
-
import fs from "fs";
|
2
1
|
import bs58 from "bs58";
|
3
|
-
import path from "path";
|
4
2
|
import {
|
5
3
|
AddressLookupTableInput,
|
6
4
|
Signer,
|
@@ -23,7 +21,6 @@ import {
|
|
23
21
|
SystemProgram,
|
24
22
|
TransactionInstruction,
|
25
23
|
VersionedTransaction,
|
26
|
-
TransactionError,
|
27
24
|
} from "@solana/web3.js";
|
28
25
|
import {
|
29
26
|
createAssociatedTokenAccountIdempotentInstruction,
|
@@ -39,17 +36,6 @@ import {
|
|
39
36
|
getLendingAccountStartFlashloanInstructionDataSerializer,
|
40
37
|
} from "../marginfi-sdk";
|
41
38
|
|
42
|
-
export function loadSecretKey(keypairPath: string) {
|
43
|
-
const secretKey = JSON.parse(fs.readFileSync(keypairPath, "utf8"));
|
44
|
-
return new Uint8Array(secretKey);
|
45
|
-
}
|
46
|
-
|
47
|
-
export function getSecretKey(keypairFilename: string = "id"): Uint8Array {
|
48
|
-
return loadSecretKey(
|
49
|
-
path.join(process.env.HOME!, ".config", "solana", keypairFilename + ".json")
|
50
|
-
);
|
51
|
-
}
|
52
|
-
|
53
39
|
export async function currentUnixSecondsSolana(): Promise<number> {
|
54
40
|
return await retryWithExponentialBackoff(async () => {
|
55
41
|
const blockTime = await CONNECTION.getBlockTime(await CONNECTION.getSlot());
|
@@ -268,7 +254,6 @@ export async function getComputeUnitPriceEstimate(
|
|
268
254
|
},
|
269
255
|
]);
|
270
256
|
const feeEstimate = Math.round((resp as any).priorityFeeEstimate as number);
|
271
|
-
console.log("Compute unit price: ", feeEstimate);
|
272
257
|
|
273
258
|
return feeEstimate;
|
274
259
|
}
|
@@ -284,6 +269,7 @@ export async function sendSingleOptimizedTransaction(
|
|
284
269
|
client.log("Serialized transaction size: ", tx.getTransactionSize(UMI));
|
285
270
|
|
286
271
|
const feeEstimate = await getComputeUnitPriceEstimate(tx, attemptNum);
|
272
|
+
client.log("Compute unit price: ", feeEstimate);
|
287
273
|
|
288
274
|
const simulationResult = await retryWithExponentialBackoff(
|
289
275
|
async () =>
|
@@ -304,7 +290,7 @@ export async function sendSingleOptimizedTransaction(
|
|
304
290
|
const computeUnitLimit = Math.round(
|
305
291
|
simulationResult.value.unitsConsumed! * 1.15
|
306
292
|
);
|
307
|
-
|
293
|
+
client.log("Compute unit limit: ", computeUnitLimit);
|
308
294
|
|
309
295
|
if (!simulateOnly) {
|
310
296
|
const result = await retryWithExponentialBackoff(
|
package/tests/shared.ts
CHANGED
@@ -1,7 +1,19 @@
|
|
1
|
+
import path from "path";
|
2
|
+
import fs from "fs";
|
1
3
|
import { Signer, createSignerFromKeypair } from "@metaplex-foundation/umi";
|
2
4
|
import { Connection, clusterApiUrl } from "@solana/web3.js";
|
3
5
|
import { createUmi } from "@metaplex-foundation/umi-bundle-defaults";
|
4
|
-
|
6
|
+
|
7
|
+
export function loadSecretKey(keypairPath: string) {
|
8
|
+
const secretKey = JSON.parse(fs.readFileSync(keypairPath, "utf8"));
|
9
|
+
return new Uint8Array(secretKey);
|
10
|
+
}
|
11
|
+
|
12
|
+
export function getSecretKey(keypairFilename: string = "id"): Uint8Array {
|
13
|
+
return loadSecretKey(
|
14
|
+
path.join(process.env.HOME!, ".config", "solana", keypairFilename + ".json")
|
15
|
+
);
|
16
|
+
}
|
5
17
|
|
6
18
|
export function setupTest(keypairFilename?: string): Signer {
|
7
19
|
const umi = createUmi(
|