@haven-fi/solauto-sdk 1.0.182 → 1.0.184
Sign up to get free protection for your applications and to get access to all the features.
- package/dist/clients/txHandler.d.ts.map +1 -1
- package/dist/clients/txHandler.js +3 -3
- package/dist/constants/solautoConstants.d.ts +6 -0
- package/dist/constants/solautoConstants.d.ts.map +1 -1
- package/dist/constants/solautoConstants.js +7 -1
- package/dist/transactions/transactionUtils.d.ts.map +1 -1
- package/dist/transactions/transactionUtils.js +2 -2
- package/dist/utils/generalUtils.d.ts +1 -0
- package/dist/utils/generalUtils.d.ts.map +1 -1
- package/dist/utils/generalUtils.js +8 -2
- package/dist/utils/jitoUtils.js +6 -6
- package/dist/utils/jupiterUtils.d.ts.map +1 -1
- package/dist/utils/jupiterUtils.js +6 -8
- package/dist/utils/solanaUtils.js +8 -8
- package/dist/utils/solauto/generalUtils.d.ts +0 -1
- package/dist/utils/solauto/generalUtils.d.ts.map +1 -1
- package/dist/utils/solauto/generalUtils.js +0 -11
- package/dist/utils/solauto/rebalanceUtils.d.ts +1 -1
- package/dist/utils/solauto/rebalanceUtils.d.ts.map +1 -1
- package/dist/utils/solauto/rebalanceUtils.js +1 -1
- package/package.json +1 -1
- package/src/clients/txHandler.ts +4 -4
- package/src/constants/solautoConstants.ts +10 -1
- package/src/transactions/transactionUtils.ts +1 -7
- package/src/utils/generalUtils.ts +8 -3
- package/src/utils/jitoUtils.ts +6 -6
- package/src/utils/jupiterUtils.ts +7 -9
- package/src/utils/solanaUtils.ts +9 -9
- package/src/utils/solauto/generalUtils.ts +0 -13
- package/src/utils/solauto/rebalanceUtils.ts +0 -1
- package/dist/utils/deleteme.d.ts +0 -2
- package/dist/utils/deleteme.d.ts.map +0 -1
- package/dist/utils/deleteme.js +0 -21
- package/src/utils/deleteme.ts +0 -40
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"txHandler.d.ts","sourceRoot":"","sources":["../../src/clients/txHandler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,0BAA0B,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;
|
1
|
+
{"version":3,"file":"txHandler.d.ts","sourceRoot":"","sources":["../../src/clients/txHandler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,0BAA0B,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAI7C,8BAAsB,SAAS;IAOpB,SAAS,CAAC,EAAE,OAAO;IANrB,YAAY,EAAG,MAAM,CAAC;IACtB,GAAG,EAAG,GAAG,CAAC;IACV,UAAU,EAAG,UAAU,CAAC;gBAG7B,YAAY,EAAE,MAAM,EACb,SAAS,CAAC,EAAE,OAAO,YAAA;IAS5B,GAAG,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI;IAIzB,QAAQ,CAAC,mBAAmB,IAAI,MAAM,EAAE;IAExC,QAAQ,CAAC,kBAAkB,CAAC,OAAO,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;CAC9D"}
|
@@ -2,6 +2,7 @@
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
3
3
|
exports.TxHandler = void 0;
|
4
4
|
const utils_1 = require("../utils");
|
5
|
+
const constants_1 = require("../constants");
|
5
6
|
class TxHandler {
|
6
7
|
constructor(heliusApiUrl, localTest) {
|
7
8
|
this.localTest = localTest;
|
@@ -9,11 +10,10 @@ class TxHandler {
|
|
9
10
|
const [connection, umi] = (0, utils_1.getSolanaRpcConnection)(this.heliusApiUrl);
|
10
11
|
this.connection = connection;
|
11
12
|
this.umi = umi;
|
13
|
+
constants_1.RUNTIME_DATA.localTest = Boolean(localTest);
|
12
14
|
}
|
13
15
|
log(...args) {
|
14
|
-
|
15
|
-
console.log(...args);
|
16
|
-
}
|
16
|
+
(0, utils_1.consoleLog)(...args);
|
17
17
|
}
|
18
18
|
}
|
19
19
|
exports.TxHandler = TxHandler;
|
@@ -11,4 +11,10 @@ export declare const PRICES: {
|
|
11
11
|
};
|
12
12
|
export declare const SOLAUTO_LUT = "9D4xwZwDf46n9ft5gQxZzq3rBbdRXsXojKQLZbBdskPY";
|
13
13
|
export declare const STANDARD_LUT_ACCOUNTS: string[];
|
14
|
+
declare class RuntimeData {
|
15
|
+
localTest: boolean;
|
16
|
+
constructor();
|
17
|
+
}
|
18
|
+
export declare const RUNTIME_DATA: RuntimeData;
|
19
|
+
export {};
|
14
20
|
//# sourceMappingURL=solautoConstants.d.ts.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"solautoConstants.d.ts","sourceRoot":"","sources":["../../src/constants/solautoConstants.ts"],"names":[],"mappings":"AAgBA,eAAO,MAAM,YAAY,QAAQ,CAAC;AAElC,eAAO,MAAM,qBAAqB,OAAO,CAAC;AAC1C,eAAO,MAAM,iCAAiC,IAAI,CAAC;AACnD,eAAO,MAAM,iBAAiB,KAAK,CAAC;AACpC,eAAO,MAAM,iBAAiB,KAAK,CAAC;AAQpC,eAAO,MAAM,MAAM,EAAE;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;KAAE,CAAA;CAAO,CAAC;AAE9E,eAAO,MAAM,WAAW,iDAAiD,CAAC;AAE1E,eAAO,MAAM,qBAAqB,UAWjC,CAAC"}
|
1
|
+
{"version":3,"file":"solautoConstants.d.ts","sourceRoot":"","sources":["../../src/constants/solautoConstants.ts"],"names":[],"mappings":"AAgBA,eAAO,MAAM,YAAY,QAAQ,CAAC;AAElC,eAAO,MAAM,qBAAqB,OAAO,CAAC;AAC1C,eAAO,MAAM,iCAAiC,IAAI,CAAC;AACnD,eAAO,MAAM,iBAAiB,KAAK,CAAC;AACpC,eAAO,MAAM,iBAAiB,KAAK,CAAC;AAQpC,eAAO,MAAM,MAAM,EAAE;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;KAAE,CAAA;CAAO,CAAC;AAE9E,eAAO,MAAM,WAAW,iDAAiD,CAAC;AAE1E,eAAO,MAAM,qBAAqB,UAWjC,CAAC;AAEF,cAAM,WAAW;IACR,SAAS,EAAE,OAAO,CAAC;;CAI3B;AAED,eAAO,MAAM,YAAY,aAAoB,CAAC"}
|
@@ -1,6 +1,6 @@
|
|
1
1
|
"use strict";
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
-
exports.STANDARD_LUT_ACCOUNTS = exports.SOLAUTO_LUT = exports.PRICES = exports.MIN_BOOST_GAP_BPS = exports.MIN_REPAY_GAP_BPS = exports.MIN_POSITION_STATE_FRESHNESS_SECS = exports.DEFAULT_LIMIT_GAP_BPS = exports.BASIS_POINTS = void 0;
|
3
|
+
exports.RUNTIME_DATA = exports.STANDARD_LUT_ACCOUNTS = exports.SOLAUTO_LUT = exports.PRICES = exports.MIN_BOOST_GAP_BPS = exports.MIN_REPAY_GAP_BPS = exports.MIN_POSITION_STATE_FRESHNESS_SECS = exports.DEFAULT_LIMIT_GAP_BPS = exports.BASIS_POINTS = void 0;
|
4
4
|
const web3_js_1 = require("@solana/web3.js");
|
5
5
|
const spl_token_1 = require("@solana/spl-token");
|
6
6
|
// import { JitoRpcConnection } from "jito-ts";
|
@@ -31,3 +31,9 @@ exports.STANDARD_LUT_ACCOUNTS = [
|
|
31
31
|
web3_js_1.SYSVAR_INSTRUCTIONS_PUBKEY.toString(),
|
32
32
|
jupiter_sdk_1.JUPITER_PROGRAM_ID
|
33
33
|
];
|
34
|
+
class RuntimeData {
|
35
|
+
constructor() {
|
36
|
+
this.localTest = false;
|
37
|
+
}
|
38
|
+
}
|
39
|
+
exports.RUNTIME_DATA = new RuntimeData();
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"transactionUtils.d.ts","sourceRoot":"","sources":["../../src/transactions/transactionUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,kBAAkB,EAClB,GAAG,EAGJ,MAAM,0BAA0B,CAAC;AAElC,OAAO,EAAE,SAAS,EAA8B,MAAM,iBAAiB,CAAC;AAKxE,OAAO,EAGL,aAAa,EAYd,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAiOzD,wBAAsB,qBAAqB,CACzC,MAAM,EAAE,aAAa,EACrB,EAAE,EAAE,kBAAkB,EACtB,sBAAsB,EAAE,MAAM,EAAE,GAC/B,OAAO,CAAC,kBAAkB,CAAC,CA+G7B;AAmLD,wBAAsB,oBAAoB,CACxC,MAAM,EAAE,aAAa,EACrB,EAAE,EAAE,kBAAkB,GACrB,OAAO,CAAC,CAAC,kBAAkB,EAAE,kBAAkB,CAAC,CAAC,CA0BnD;AAED,wBAAgB,8BAA8B,CAAC,MAAM,EAAE,aAAa,WAwCnE;AAED,wBAAsB,gCAAgC,CACpD,MAAM,EAAE,aAAa,EACrB,2BAA2B,CAAC,EAAE,MAAM,EACpC,UAAU,CAAC,EAAE,MAAM,GAClB,OAAO,CACN;IACE,EAAE,EAAE,kBAAkB,CAAC;IACvB,oBAAoB,EAAE,MAAM,EAAE,CAAC;CAChC,GACD,SAAS,CACZ,
|
1
|
+
{"version":3,"file":"transactionUtils.d.ts","sourceRoot":"","sources":["../../src/transactions/transactionUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,kBAAkB,EAClB,GAAG,EAGJ,MAAM,0BAA0B,CAAC;AAElC,OAAO,EAAE,SAAS,EAA8B,MAAM,iBAAiB,CAAC;AAKxE,OAAO,EAGL,aAAa,EAYd,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAiOzD,wBAAsB,qBAAqB,CACzC,MAAM,EAAE,aAAa,EACrB,EAAE,EAAE,kBAAkB,EACtB,sBAAsB,EAAE,MAAM,EAAE,GAC/B,OAAO,CAAC,kBAAkB,CAAC,CA+G7B;AAmLD,wBAAsB,oBAAoB,CACxC,MAAM,EAAE,aAAa,EACrB,EAAE,EAAE,kBAAkB,GACrB,OAAO,CAAC,CAAC,kBAAkB,EAAE,kBAAkB,CAAC,CAAC,CA0BnD;AAED,wBAAgB,8BAA8B,CAAC,MAAM,EAAE,aAAa,WAwCnE;AAED,wBAAsB,gCAAgC,CACpD,MAAM,EAAE,aAAa,EACrB,2BAA2B,CAAC,EAAE,MAAM,EACpC,UAAU,CAAC,EAAE,MAAM,GAClB,OAAO,CACN;IACE,EAAE,EAAE,kBAAkB,CAAC;IACvB,oBAAoB,EAAE,MAAM,EAAE,CAAC;CAChC,GACD,SAAS,CACZ,CAkHA;AAED,wBAAsB,gCAAgC,CACpD,GAAG,EAAE,GAAG,EACR,aAAa,EAAE,aAAa,EAC5B,YAAY,EAAE,SAAS,GACtB,OAAO,CAAC,CAAC,kBAAkB,EAAE,MAAM,EAAE,CAAC,GAAG,SAAS,CAAC,CAmCrD;AAED,wBAAgB,YAAY,CAAC,EAAE,EAAE,kBAAkB,EAAE,KAAK,EAAE,GAAG;;;;EAwC9D"}
|
@@ -361,8 +361,8 @@ async function buildSolautoRebalanceTransaction(client, targetLiqUtilizationRate
|
|
361
361
|
const values = (0, rebalanceUtils_1.getRebalanceValues)(client.solautoPositionState, client.solautoPositionSettings(), client.solautoPositionActiveDca(), (0, generalUtils_1.currentUnixSeconds)(), (0, generalUtils_1.safeGetPrice)(client.supplyMint), (0, generalUtils_1.safeGetPrice)(client.debtMint), targetLiqUtilizationRateBps);
|
362
362
|
client.log("Rebalance values: ", values);
|
363
363
|
const swapDetails = (0, rebalanceUtils_1.getJupSwapRebalanceDetails)(client, values, targetLiqUtilizationRateBps, attemptNum);
|
364
|
-
const { jupQuote,
|
365
|
-
const flashLoan = (0, rebalanceUtils_1.getFlashLoanDetails)(client, values, jupQuote
|
364
|
+
const { jupQuote, lookupTableAddresses, setupInstructions, tokenLedgerIx, swapIx, } = await (0, jupiterUtils_1.getJupSwapTransaction)(client.signer, swapDetails, attemptNum);
|
365
|
+
const flashLoan = (0, rebalanceUtils_1.getFlashLoanDetails)(client, values, jupQuote);
|
366
366
|
let tx = (0, umi_1.transactionBuilder)();
|
367
367
|
if (requiresRefreshBeforeRebalance(client)) {
|
368
368
|
tx = tx.add(client.refresh());
|
@@ -1,5 +1,6 @@
|
|
1
1
|
import { PublicKey } from "@solana/web3.js";
|
2
2
|
import { MaybeRpcAccount, Umi, PublicKey as UmiPublicKey } from "@metaplex-foundation/umi";
|
3
|
+
export declare function consoleLog(...args: any[]): void;
|
3
4
|
export declare function generateRandomU8(): number;
|
4
5
|
export declare function generateRandomU64(): bigint;
|
5
6
|
export declare function currentUnixSeconds(): number;
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"generalUtils.d.ts","sourceRoot":"","sources":["../../src/utils/generalUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EACL,eAAe,EAEf,GAAG,EACH,SAAS,IAAI,YAAY,EAC1B,MAAM,0BAA0B,CAAC;AAKlC,wBAAgB,gBAAgB,IAAI,MAAM,CAEzC;AAED,wBAAgB,iBAAiB,IAAI,MAAM,CAO1C;AAED,wBAAgB,kBAAkB,IAAI,MAAM,CAE3C;AAED,wBAAsB,uBAAuB,CAC3C,GAAG,EAAE,GAAG,EACR,EAAE,EAAE,SAAS,GACZ,OAAO,CAAC,OAAO,CAAC,CAKlB;AAED,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAEnE;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAU1E;AAED,wBAAsB,gBAAgB,CAAC,KAAK,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAwD5E;AAED,wBAAgB,YAAY,CAC1B,IAAI,EAAE,SAAS,GAAG,YAAY,GAAG,SAAS,GACzC,MAAM,GAAG,SAAS,CAKpB;AAED,MAAM,MAAM,aAAa,GAAG,KAAK,CAAC,KAAK,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,KAAK,CAAC,CAAC;AAEjE,wBAAgB,2BAA2B,CAAC,CAAC,EAC3C,EAAE,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,EACtC,OAAO,GAAE,MAAU,EACnB,KAAK,GAAE,MAAY,EACnB,aAAa,CAAC,EAAE,aAAa,GAC5B,OAAO,CAAC,CAAC,CAAC,CA8BZ"}
|
1
|
+
{"version":3,"file":"generalUtils.d.ts","sourceRoot":"","sources":["../../src/utils/generalUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EACL,eAAe,EAEf,GAAG,EACH,SAAS,IAAI,YAAY,EAC1B,MAAM,0BAA0B,CAAC;AAKlC,wBAAgB,UAAU,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI,CAI/C;AACD,wBAAgB,gBAAgB,IAAI,MAAM,CAEzC;AAED,wBAAgB,iBAAiB,IAAI,MAAM,CAO1C;AAED,wBAAgB,kBAAkB,IAAI,MAAM,CAE3C;AAED,wBAAsB,uBAAuB,CAC3C,GAAG,EAAE,GAAG,EACR,EAAE,EAAE,SAAS,GACZ,OAAO,CAAC,OAAO,CAAC,CAKlB;AAED,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAEnE;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAU1E;AAED,wBAAsB,gBAAgB,CAAC,KAAK,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAwD5E;AAED,wBAAgB,YAAY,CAC1B,IAAI,EAAE,SAAS,GAAG,YAAY,GAAG,SAAS,GACzC,MAAM,GAAG,SAAS,CAKpB;AAED,MAAM,MAAM,aAAa,GAAG,KAAK,CAAC,KAAK,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,KAAK,CAAC,CAAC;AAEjE,wBAAgB,2BAA2B,CAAC,CAAC,EAC3C,EAAE,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,EACtC,OAAO,GAAE,MAAU,EACnB,KAAK,GAAE,MAAY,EACnB,aAAa,CAAC,EAAE,aAAa,GAC5B,OAAO,CAAC,CAAC,CAAC,CA8BZ"}
|
@@ -1,5 +1,6 @@
|
|
1
1
|
"use strict";
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
exports.consoleLog = consoleLog;
|
3
4
|
exports.generateRandomU8 = generateRandomU8;
|
4
5
|
exports.generateRandomU64 = generateRandomU64;
|
5
6
|
exports.currentUnixSeconds = currentUnixSeconds;
|
@@ -13,6 +14,11 @@ const umi_1 = require("@metaplex-foundation/umi");
|
|
13
14
|
const pythConstants_1 = require("../constants/pythConstants");
|
14
15
|
const numberUtils_1 = require("./numberUtils");
|
15
16
|
const solautoConstants_1 = require("../constants/solautoConstants");
|
17
|
+
function consoleLog(...args) {
|
18
|
+
if (solautoConstants_1.RUNTIME_DATA.localTest) {
|
19
|
+
console.log(...args);
|
20
|
+
}
|
21
|
+
}
|
16
22
|
function generateRandomU8() {
|
17
23
|
return Math.floor(Math.random() * 255 + 1);
|
18
24
|
}
|
@@ -104,9 +110,9 @@ function retryWithExponentialBackoff(fn, retries = 5, delay = 150, errorsToThrow
|
|
104
110
|
return;
|
105
111
|
}
|
106
112
|
if (attemptNum < retries) {
|
107
|
-
|
113
|
+
consoleLog(error);
|
108
114
|
setTimeout(() => {
|
109
|
-
|
115
|
+
consoleLog("Retrying...");
|
110
116
|
return attempt(attemptNum);
|
111
117
|
}, delay);
|
112
118
|
delay *= 2;
|
package/dist/utils/jitoUtils.js
CHANGED
@@ -45,7 +45,7 @@
|
|
45
45
|
// const nextLeader = await searcher.getNextScheduledLeader();
|
46
46
|
// const numSlots = nextLeader.nextLeaderSlot - nextLeader.currentSlot;
|
47
47
|
// isLeaderSlot = numSlots <= distanceFromJitoSlot && numSlots > 1;
|
48
|
-
//
|
48
|
+
// consoleLog(`Next jito leader slot in ${numSlots} slots`);
|
49
49
|
// await new Promise((r) => setTimeout(r, 500));
|
50
50
|
// }
|
51
51
|
// }
|
@@ -70,7 +70,7 @@
|
|
70
70
|
// simulationResult.value.transactionResults.forEach((tx) => {
|
71
71
|
// if (tx.err) {
|
72
72
|
// tx.logs?.forEach((x) => {
|
73
|
-
//
|
73
|
+
// consoleLog(x);
|
74
74
|
// });
|
75
75
|
// throw tx.err;
|
76
76
|
// }
|
@@ -102,10 +102,10 @@
|
|
102
102
|
// async function sendJitoBundle(bundle: Bundle): Promise<BundleResult> {
|
103
103
|
// await waitUntilJitoNextLeader();
|
104
104
|
// let searcher = getSearcherClient();
|
105
|
-
//
|
105
|
+
// consoleLog("Sending bundle...");
|
106
106
|
// try {
|
107
107
|
// const resp = await searcher.sendBundle(bundle);
|
108
|
-
//
|
108
|
+
// consoleLog("Send bundle response:", resp);
|
109
109
|
// } catch (e) {
|
110
110
|
// console.error("Error sending bundle:", e);
|
111
111
|
// }
|
@@ -115,12 +115,12 @@
|
|
115
115
|
// if (res.accepted || res.processed || res.finalized) {
|
116
116
|
// resolve(res);
|
117
117
|
// } else {
|
118
|
-
//
|
118
|
+
// consoleLog(res);
|
119
119
|
// return reject("Bundle not accepted");
|
120
120
|
// }
|
121
121
|
// },
|
122
122
|
// (err) => {
|
123
|
-
//
|
123
|
+
// consoleLog("Error: ", err);
|
124
124
|
// return reject(err);
|
125
125
|
// }
|
126
126
|
// );
|
@@ -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;AAGpE,OAAO,EAGL,aAAa,EACd,MAAM,aAAa,CAAC;AAMrB,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,SAAS,CAAC;IACrB,UAAU,EAAE,SAAS,CAAC;IACtB,iBAAiB,EAAE,SAAS,CAAC;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAgBD,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,aAAa,CAAC;IACxB,cAAc,EAAE,MAAM,CAAC;IACvB,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,EAC3B,UAAU,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,kBAAkB,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;AAMrB,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,SAAS,CAAC;IACrB,UAAU,EAAE,SAAS,CAAC;IACtB,iBAAiB,EAAE,SAAS,CAAC;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAgBD,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,aAAa,CAAC;IACxB,cAAc,EAAE,MAAM,CAAC;IACvB,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,EAC3B,UAAU,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,kBAAkB,CAAC,CAkF7B"}
|
@@ -21,7 +21,7 @@ function createTransactionInstruction(instruction) {
|
|
21
21
|
});
|
22
22
|
}
|
23
23
|
async function getJupSwapTransaction(signer, swapDetails, attemptNum) {
|
24
|
-
|
24
|
+
(0, generalUtils_1.consoleLog)("Getting jup quote...");
|
25
25
|
const quoteResponse = await (0, generalUtils_1.retryWithExponentialBackoff)(async () => await jupApi.quoteGet({
|
26
26
|
amount: Number(swapDetails.amount),
|
27
27
|
inputMint: swapDetails.inputMint.toString(),
|
@@ -38,14 +38,12 @@ async function getJupSwapTransaction(signer, swapDetails, attemptNum) {
|
|
38
38
|
const finalPriceSlippageBps = Math.round(Math.max(50, quoteResponse.slippageBps, priceImpactBps) *
|
39
39
|
(1 + (swapDetails.slippageIncFactor ?? 0)));
|
40
40
|
quoteResponse.slippageBps = finalPriceSlippageBps;
|
41
|
-
|
41
|
+
(0, generalUtils_1.consoleLog)(quoteResponse);
|
42
42
|
if (swapDetails.exactOut) {
|
43
|
-
console.log(quoteResponse.inAmount);
|
44
43
|
quoteResponse.inAmount = (parseInt(quoteResponse.inAmount) +
|
45
|
-
Math.ceil(parseInt(quoteResponse.inAmount) * (0, numberUtils_1.fromBps)(
|
46
|
-
console.log(quoteResponse.inAmount);
|
44
|
+
Math.ceil(parseInt(quoteResponse.inAmount) * (0, numberUtils_1.fromBps)(finalPriceSlippageBps))).toString();
|
47
45
|
}
|
48
|
-
|
46
|
+
(0, generalUtils_1.consoleLog)("Getting jup instructions...");
|
49
47
|
const instructions = await jupApi.swapInstructionsPost({
|
50
48
|
swapRequest: {
|
51
49
|
userPublicKey: signer.publicKey.toString(),
|
@@ -58,9 +56,9 @@ async function getJupSwapTransaction(signer, swapDetails, attemptNum) {
|
|
58
56
|
if (!instructions.swapInstruction) {
|
59
57
|
throw new Error("No swap instruction was returned by Jupiter");
|
60
58
|
}
|
61
|
-
|
59
|
+
(0, generalUtils_1.consoleLog)("Raw price impact bps:", priceImpactBps);
|
62
60
|
const finalPriceImpactBps = priceImpactBps * (1 + (swapDetails.slippageIncFactor ?? 0));
|
63
|
-
|
61
|
+
(0, generalUtils_1.consoleLog)("Increased price impact bps:", finalPriceImpactBps);
|
64
62
|
return {
|
65
63
|
jupQuote: quoteResponse,
|
66
64
|
priceImpactBps: finalPriceImpactBps,
|
@@ -128,7 +128,7 @@ async function simulateTransaction(connection, transaction) {
|
|
128
128
|
});
|
129
129
|
if (simulationResult.value.err) {
|
130
130
|
simulationResult.value.logs?.forEach((x) => {
|
131
|
-
|
131
|
+
(0, generalUtils_1.consoleLog)(x);
|
132
132
|
});
|
133
133
|
throw simulationResult.value.err;
|
134
134
|
}
|
@@ -149,17 +149,17 @@ async function getComputeUnitPriceEstimate(umi, tx, prioritySetting) {
|
|
149
149
|
return feeEstimate;
|
150
150
|
}
|
151
151
|
async function sendSingleOptimizedTransaction(umi, connection, tx, txType, attemptNum, prioritySetting = types_1.PriorityFeeSetting.Default, onAwaitingSign) {
|
152
|
-
|
153
|
-
|
154
|
-
|
152
|
+
(0, generalUtils_1.consoleLog)("Sending single optimized transaction...");
|
153
|
+
(0, generalUtils_1.consoleLog)("Instructions: ", tx.getInstructions().length);
|
154
|
+
(0, generalUtils_1.consoleLog)("Serialized transaction size: ", tx.getTransactionSize(umi));
|
155
155
|
const feeEstimate = await getComputeUnitPriceEstimate(umi, tx, prioritySetting);
|
156
|
-
|
156
|
+
(0, generalUtils_1.consoleLog)("Compute unit price: ", feeEstimate);
|
157
157
|
let computeUnitLimit = undefined;
|
158
158
|
if (txType !== "skip-simulation") {
|
159
159
|
// TODO: we should only retry simulation if it's not a solauto error
|
160
160
|
const simulationResult = await (0, generalUtils_1.retryWithExponentialBackoff)(async () => await simulateTransaction(connection, (0, umi_web3js_adapters_1.toWeb3JsTransaction)(await (await assembleFinalTransaction(umi.identity, tx, feeEstimate, 1400000).setLatestBlockhash(umi)).build(umi))), 3);
|
161
161
|
computeUnitLimit = Math.round(simulationResult.value.unitsConsumed * 1.1);
|
162
|
-
|
162
|
+
(0, generalUtils_1.consoleLog)("Compute unit limit: ", computeUnitLimit);
|
163
163
|
}
|
164
164
|
if (txType !== "only-simulate") {
|
165
165
|
onAwaitingSign?.();
|
@@ -171,8 +171,8 @@ async function sendSingleOptimizedTransaction(umi, connection, tx, txType, attem
|
|
171
171
|
confirm: { commitment: "confirmed" },
|
172
172
|
});
|
173
173
|
const txSig = bs58_1.default.encode(result.signature);
|
174
|
-
|
175
|
-
|
174
|
+
(0, generalUtils_1.consoleLog)(`Transaction signature: ${txSig}`);
|
175
|
+
(0, generalUtils_1.consoleLog)(`https://solscan.io/tx/${txSig}`);
|
176
176
|
if (result.result.value.err !== null) {
|
177
177
|
throw new Error(result.result.value.err.toString());
|
178
178
|
}
|
@@ -2,7 +2,6 @@ import { PublicKey } from "@solana/web3.js";
|
|
2
2
|
import { 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";
|
5
|
-
export declare function findMintByTicker(ticker: string): PublicKey;
|
6
5
|
export declare function nextAutomationPeriodTimestamp(automation: AutomationSettings): number;
|
7
6
|
export declare function eligibleForNextAutomationPeriod(automation: AutomationSettings, currentUnixTime: number): boolean;
|
8
7
|
export declare function getUpdatedValueFromAutomation(currValue: number, targetValue: number, automation: AutomationSettings, currentUnixTimestamp: number): number;
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"generalUtils.d.ts","sourceRoot":"","sources":["../../../src/utils/solauto/generalUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAA+B,GAAG,EAAE,MAAM,0BAA0B,CAAC;AAC5E,OAAO,EACL,kBAAkB,EAClB,WAAW,EACX,kBAAkB,EAElB,aAAa,EACb,YAAY,EAEZ,yBAAyB,EACzB,gCAAgC,EAChC,SAAS,EAIV,MAAM,iBAAiB,CAAC;AAezB,OAAO,EAAE,eAAe,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;
|
1
|
+
{"version":3,"file":"generalUtils.d.ts","sourceRoot":"","sources":["../../../src/utils/solauto/generalUtils.ts"],"names":[],"mappings":"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"}
|
@@ -1,7 +1,6 @@
|
|
1
1
|
"use strict";
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
3
3
|
exports.LivePositionUpdates = void 0;
|
4
|
-
exports.findMintByTicker = findMintByTicker;
|
5
4
|
exports.nextAutomationPeriodTimestamp = nextAutomationPeriodTimestamp;
|
6
5
|
exports.eligibleForNextAutomationPeriod = eligibleForNextAutomationPeriod;
|
7
6
|
exports.getUpdatedValueFromAutomation = getUpdatedValueFromAutomation;
|
@@ -24,16 +23,6 @@ const accountUtils_1 = require("../accountUtils");
|
|
24
23
|
const umi_web3js_adapters_1 = require("@metaplex-foundation/umi-web3js-adapters");
|
25
24
|
const constants_1 = require("../../constants");
|
26
25
|
const marginfiUtils_1 = require("../marginfiUtils");
|
27
|
-
function findMintByTicker(ticker) {
|
28
|
-
for (const key in constants_1.TOKEN_INFO) {
|
29
|
-
const account = constants_1.TOKEN_INFO[key];
|
30
|
-
if (account.ticker.toString().toLowerCase() ===
|
31
|
-
ticker.toString().toLowerCase()) {
|
32
|
-
return new web3_js_1.PublicKey(key);
|
33
|
-
}
|
34
|
-
}
|
35
|
-
throw new Error(`Token mint not found by the ticker: ${ticker}`);
|
36
|
-
}
|
37
26
|
function newPeriodsPassed(automation, currentUnixTimestamp) {
|
38
27
|
return Math.min(automation.targetPeriods, automation.periodsPassed +
|
39
28
|
Math.floor((currentUnixTimestamp - Number(automation.unixStartDate)) /
|
@@ -16,6 +16,6 @@ export interface FlashLoanDetails {
|
|
16
16
|
baseUnitAmount: bigint;
|
17
17
|
mint: PublicKey;
|
18
18
|
}
|
19
|
-
export declare function getFlashLoanDetails(client: SolautoClient, values: RebalanceValues, jupQuote: QuoteResponse
|
19
|
+
export declare function getFlashLoanDetails(client: SolautoClient, values: RebalanceValues, jupQuote: QuoteResponse): FlashLoanDetails | undefined;
|
20
20
|
export declare function getJupSwapRebalanceDetails(client: SolautoClient, values: RebalanceValues, targetLiqUtilizationRateBps?: number, attemptNum?: number): JupSwapDetails;
|
21
21
|
//# sourceMappingURL=rebalanceUtils.d.ts.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"rebalanceUtils.d.ts","sourceRoot":"","sources":["../../../src/utils/solauto/rebalanceUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAC5D,OAAO,EACL,WAAW,EACX,aAAa,EAEb,yBAAyB,EACzB,SAAS,EACV,MAAM,iBAAiB,CAAC;AAOzB,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AA+IjD,MAAM,WAAW,eAAe;IAC9B,kBAAkB,EAAE,OAAO,CAAC;IAC5B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,qBAAqB,EAAE,OAAO,CAAC;IAC/B,aAAa,EAAE,MAAM,CAAC;IACtB,gBAAgB,EAAE,MAAM,CAAC;IACzB,YAAY,CAAC,EAAE,SAAS,CAAC;CAC1B;AAED,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,aAAa,EACpB,QAAQ,EAAE,yBAAyB,GAAG,SAAS,EAC/C,GAAG,EAAE,WAAW,GAAG,SAAS,EAC5B,eAAe,EAAE,MAAM,EACvB,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,EACjB,2BAA2B,CAAC,EAAE,MAAM,EACpC,WAAW,CAAC,EAAE,MAAM,GACnB,eAAe,CAoEjB;AAED,MAAM,WAAW,gBAAgB;IAC/B,cAAc,EAAE,MAAM,CAAC;IACvB,IAAI,EAAE,SAAS,CAAC;CACjB;AAED,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,aAAa,EACrB,MAAM,EAAE,eAAe,EACvB,QAAQ,EAAE,aAAa,
|
1
|
+
{"version":3,"file":"rebalanceUtils.d.ts","sourceRoot":"","sources":["../../../src/utils/solauto/rebalanceUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAC5D,OAAO,EACL,WAAW,EACX,aAAa,EAEb,yBAAyB,EACzB,SAAS,EACV,MAAM,iBAAiB,CAAC;AAOzB,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AA+IjD,MAAM,WAAW,eAAe;IAC9B,kBAAkB,EAAE,OAAO,CAAC;IAC5B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,qBAAqB,EAAE,OAAO,CAAC;IAC/B,aAAa,EAAE,MAAM,CAAC;IACtB,gBAAgB,EAAE,MAAM,CAAC;IACzB,YAAY,CAAC,EAAE,SAAS,CAAC;CAC1B;AAED,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,aAAa,EACpB,QAAQ,EAAE,yBAAyB,GAAG,SAAS,EAC/C,GAAG,EAAE,WAAW,GAAG,SAAS,EAC5B,eAAe,EAAE,MAAM,EACvB,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,EACjB,2BAA2B,CAAC,EAAE,MAAM,EACpC,WAAW,CAAC,EAAE,MAAM,GACnB,eAAe,CAoEjB;AAED,MAAM,WAAW,gBAAgB;IAC/B,cAAc,EAAE,MAAM,CAAC;IACvB,IAAI,EAAE,SAAS,CAAC;CACjB;AAED,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,aAAa,EACrB,MAAM,EAAE,eAAe,EACvB,QAAQ,EAAE,aAAa,GACtB,gBAAgB,GAAG,SAAS,CA0D9B;AAED,wBAAgB,0BAA0B,CACxC,MAAM,EAAE,aAAa,EACrB,MAAM,EAAE,eAAe,EACvB,2BAA2B,CAAC,EAAE,MAAM,EACpC,UAAU,CAAC,EAAE,MAAM,GAClB,cAAc,CAyChB"}
|
@@ -116,7 +116,7 @@ function getRebalanceValues(state, settings, dca, currentUnixTime, supplyPrice,
|
|
116
116
|
dcaTokenType: dca?.tokenType,
|
117
117
|
};
|
118
118
|
}
|
119
|
-
function getFlashLoanDetails(client, values, jupQuote
|
119
|
+
function getFlashLoanDetails(client, values, jupQuote) {
|
120
120
|
let supplyUsd = (0, numberUtils_1.fromBaseUnit)(client.solautoPositionState.supply.amountUsed.baseAmountUsdValue, generalAccounts_1.USD_DECIMALS) +
|
121
121
|
(values.dcaTokenType === generated_1.TokenType.Supply ? values.amountUsdToDcaIn : 0);
|
122
122
|
let debtUsd = (0, numberUtils_1.fromBaseUnit)(client.solautoPositionState.debt.amountUsed.baseAmountUsdValue, generalAccounts_1.USD_DECIMALS);
|
package/package.json
CHANGED
package/src/clients/txHandler.ts
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
import { Umi } from "@metaplex-foundation/umi";
|
2
2
|
import { Connection } from "@solana/web3.js";
|
3
|
-
import { getSolanaRpcConnection } from "../utils";
|
3
|
+
import { consoleLog, getSolanaRpcConnection } from "../utils";
|
4
|
+
import { RUNTIME_DATA } from "../constants";
|
4
5
|
|
5
6
|
export abstract class TxHandler {
|
6
7
|
public heliusApiUrl!: string;
|
@@ -15,12 +16,11 @@ export abstract class TxHandler {
|
|
15
16
|
const [connection, umi] = getSolanaRpcConnection(this.heliusApiUrl);
|
16
17
|
this.connection = connection;
|
17
18
|
this.umi = umi;
|
19
|
+
RUNTIME_DATA.localTest = Boolean(localTest);
|
18
20
|
}
|
19
21
|
|
20
22
|
log(...args: any[]): void {
|
21
|
-
|
22
|
-
console.log(...args);
|
23
|
-
}
|
23
|
+
consoleLog(...args);
|
24
24
|
}
|
25
25
|
|
26
26
|
abstract defaultLookupTables(): string[];
|
@@ -42,4 +42,13 @@ export const STANDARD_LUT_ACCOUNTS = [
|
|
42
42
|
SYSVAR_RENT_PUBKEY.toString(),
|
43
43
|
SYSVAR_INSTRUCTIONS_PUBKEY.toString(),
|
44
44
|
JUPITER_PROGRAM_ID
|
45
|
-
];
|
45
|
+
];
|
46
|
+
|
47
|
+
class RuntimeData {
|
48
|
+
public localTest: boolean;
|
49
|
+
constructor() {
|
50
|
+
this.localTest = false;
|
51
|
+
}
|
52
|
+
}
|
53
|
+
|
54
|
+
export const RUNTIME_DATA = new RuntimeData();
|
@@ -666,18 +666,12 @@ export async function buildSolautoRebalanceTransaction(
|
|
666
666
|
);
|
667
667
|
const {
|
668
668
|
jupQuote,
|
669
|
-
priceImpactBps,
|
670
669
|
lookupTableAddresses,
|
671
670
|
setupInstructions,
|
672
671
|
tokenLedgerIx,
|
673
672
|
swapIx,
|
674
673
|
} = await getJupSwapTransaction(client.signer, swapDetails, attemptNum);
|
675
|
-
const flashLoan = getFlashLoanDetails(
|
676
|
-
client,
|
677
|
-
values,
|
678
|
-
jupQuote,
|
679
|
-
priceImpactBps
|
680
|
-
);
|
674
|
+
const flashLoan = getFlashLoanDetails(client, values, jupQuote);
|
681
675
|
|
682
676
|
let tx = transactionBuilder();
|
683
677
|
|
@@ -7,8 +7,13 @@ import {
|
|
7
7
|
} from "@metaplex-foundation/umi";
|
8
8
|
import { PYTH_PRICE_FEED_IDS } from "../constants/pythConstants";
|
9
9
|
import { fromBaseUnit, toBaseUnit } from "./numberUtils";
|
10
|
-
import { PRICES } from "../constants/solautoConstants";
|
10
|
+
import { PRICES, RUNTIME_DATA } from "../constants/solautoConstants";
|
11
11
|
|
12
|
+
export function consoleLog(...args: any[]): void {
|
13
|
+
if (RUNTIME_DATA.localTest) {
|
14
|
+
console.log(...args);
|
15
|
+
}
|
16
|
+
}
|
12
17
|
export function generateRandomU8(): number {
|
13
18
|
return Math.floor(Math.random() * 255 + 1);
|
14
19
|
}
|
@@ -143,9 +148,9 @@ export function retryWithExponentialBackoff<T>(
|
|
143
148
|
}
|
144
149
|
|
145
150
|
if (attemptNum < retries) {
|
146
|
-
|
151
|
+
consoleLog(error);
|
147
152
|
setTimeout(() => {
|
148
|
-
|
153
|
+
consoleLog("Retrying...");
|
149
154
|
return attempt(attemptNum);
|
150
155
|
}, delay);
|
151
156
|
delay *= 2;
|
package/src/utils/jitoUtils.ts
CHANGED
@@ -48,7 +48,7 @@
|
|
48
48
|
// const nextLeader = await searcher.getNextScheduledLeader();
|
49
49
|
// const numSlots = nextLeader.nextLeaderSlot - nextLeader.currentSlot;
|
50
50
|
// isLeaderSlot = numSlots <= distanceFromJitoSlot && numSlots > 1;
|
51
|
-
//
|
51
|
+
// consoleLog(`Next jito leader slot in ${numSlots} slots`);
|
52
52
|
// await new Promise((r) => setTimeout(r, 500));
|
53
53
|
// }
|
54
54
|
// }
|
@@ -76,7 +76,7 @@
|
|
76
76
|
// simulationResult.value.transactionResults.forEach((tx) => {
|
77
77
|
// if (tx.err) {
|
78
78
|
// tx.logs?.forEach((x) => {
|
79
|
-
//
|
79
|
+
// consoleLog(x);
|
80
80
|
// });
|
81
81
|
// throw tx.err;
|
82
82
|
// }
|
@@ -112,10 +112,10 @@
|
|
112
112
|
// await waitUntilJitoNextLeader();
|
113
113
|
// let searcher = getSearcherClient();
|
114
114
|
|
115
|
-
//
|
115
|
+
// consoleLog("Sending bundle...");
|
116
116
|
// try {
|
117
117
|
// const resp = await searcher.sendBundle(bundle);
|
118
|
-
//
|
118
|
+
// consoleLog("Send bundle response:", resp);
|
119
119
|
// } catch (e) {
|
120
120
|
// console.error("Error sending bundle:", e);
|
121
121
|
// }
|
@@ -126,12 +126,12 @@
|
|
126
126
|
// if (res.accepted || res.processed || res.finalized) {
|
127
127
|
// resolve(res);
|
128
128
|
// } else {
|
129
|
-
//
|
129
|
+
// consoleLog(res);
|
130
130
|
// return reject("Bundle not accepted");
|
131
131
|
// }
|
132
132
|
// },
|
133
133
|
// (err) => {
|
134
|
-
//
|
134
|
+
// consoleLog("Error: ", err);
|
135
135
|
// return reject(err);
|
136
136
|
// }
|
137
137
|
// );
|
@@ -12,7 +12,7 @@ import {
|
|
12
12
|
QuoteResponse,
|
13
13
|
} from "@jup-ag/api";
|
14
14
|
import { getTokenAccount } from "./accountUtils";
|
15
|
-
import { retryWithExponentialBackoff } from "./generalUtils";
|
15
|
+
import { consoleLog, retryWithExponentialBackoff } from "./generalUtils";
|
16
16
|
|
17
17
|
const jupApi = createJupiterApiClient();
|
18
18
|
|
@@ -54,7 +54,7 @@ export async function getJupSwapTransaction(
|
|
54
54
|
swapDetails: JupSwapDetails,
|
55
55
|
attemptNum?: number
|
56
56
|
): Promise<JupSwapTransaction> {
|
57
|
-
|
57
|
+
consoleLog("Getting jup quote...");
|
58
58
|
const quoteResponse = await retryWithExponentialBackoff(
|
59
59
|
async () =>
|
60
60
|
await jupApi.quoteGet({
|
@@ -79,18 +79,16 @@ export async function getJupSwapTransaction(
|
|
79
79
|
(1 + (swapDetails.slippageIncFactor ?? 0))
|
80
80
|
);
|
81
81
|
quoteResponse.slippageBps = finalPriceSlippageBps;
|
82
|
-
|
82
|
+
consoleLog(quoteResponse);
|
83
83
|
|
84
84
|
if (swapDetails.exactOut) {
|
85
|
-
console.log(quoteResponse.inAmount);
|
86
85
|
quoteResponse.inAmount = (
|
87
86
|
parseInt(quoteResponse.inAmount) +
|
88
|
-
Math.ceil(parseInt(quoteResponse.inAmount) * fromBps(
|
87
|
+
Math.ceil(parseInt(quoteResponse.inAmount) * fromBps(finalPriceSlippageBps))
|
89
88
|
).toString();
|
90
|
-
console.log(quoteResponse.inAmount);
|
91
89
|
}
|
92
90
|
|
93
|
-
|
91
|
+
consoleLog("Getting jup instructions...");
|
94
92
|
const instructions = await jupApi.swapInstructionsPost({
|
95
93
|
swapRequest: {
|
96
94
|
userPublicKey: signer.publicKey.toString(),
|
@@ -108,10 +106,10 @@ export async function getJupSwapTransaction(
|
|
108
106
|
throw new Error("No swap instruction was returned by Jupiter");
|
109
107
|
}
|
110
108
|
|
111
|
-
|
109
|
+
consoleLog("Raw price impact bps:", priceImpactBps);
|
112
110
|
const finalPriceImpactBps =
|
113
111
|
priceImpactBps * (1 + (swapDetails.slippageIncFactor ?? 0));
|
114
|
-
|
112
|
+
consoleLog("Increased price impact bps:", finalPriceImpactBps);
|
115
113
|
|
116
114
|
return {
|
117
115
|
jupQuote: quoteResponse,
|
package/src/utils/solanaUtils.ts
CHANGED
@@ -31,7 +31,7 @@ import {
|
|
31
31
|
createTransferInstruction,
|
32
32
|
} from "@solana/spl-token";
|
33
33
|
import { getTokenAccount } from "./accountUtils";
|
34
|
-
import { arraysAreEqual, retryWithExponentialBackoff } from "./generalUtils";
|
34
|
+
import { arraysAreEqual, consoleLog, retryWithExponentialBackoff } from "./generalUtils";
|
35
35
|
import {
|
36
36
|
getLendingAccountEndFlashloanInstructionDataSerializer,
|
37
37
|
getLendingAccountStartFlashloanInstructionDataSerializer,
|
@@ -239,7 +239,7 @@ async function simulateTransaction(
|
|
239
239
|
});
|
240
240
|
if (simulationResult.value.err) {
|
241
241
|
simulationResult.value.logs?.forEach((x: any) => {
|
242
|
-
|
242
|
+
consoleLog(x);
|
243
243
|
});
|
244
244
|
throw simulationResult.value.err;
|
245
245
|
}
|
@@ -277,16 +277,16 @@ export async function sendSingleOptimizedTransaction(
|
|
277
277
|
prioritySetting: PriorityFeeSetting = PriorityFeeSetting.Default,
|
278
278
|
onAwaitingSign?: () => void
|
279
279
|
): Promise<Uint8Array | undefined> {
|
280
|
-
|
281
|
-
|
282
|
-
|
280
|
+
consoleLog("Sending single optimized transaction...");
|
281
|
+
consoleLog("Instructions: ", tx.getInstructions().length);
|
282
|
+
consoleLog("Serialized transaction size: ", tx.getTransactionSize(umi));
|
283
283
|
|
284
284
|
const feeEstimate = await getComputeUnitPriceEstimate(
|
285
285
|
umi,
|
286
286
|
tx,
|
287
287
|
prioritySetting
|
288
288
|
);
|
289
|
-
|
289
|
+
consoleLog("Compute unit price: ", feeEstimate);
|
290
290
|
|
291
291
|
let computeUnitLimit = undefined;
|
292
292
|
if (txType !== "skip-simulation") {
|
@@ -312,7 +312,7 @@ export async function sendSingleOptimizedTransaction(
|
|
312
312
|
computeUnitLimit = Math.round(
|
313
313
|
simulationResult.value.unitsConsumed! * 1.1
|
314
314
|
);
|
315
|
-
|
315
|
+
consoleLog("Compute unit limit: ", computeUnitLimit);
|
316
316
|
}
|
317
317
|
|
318
318
|
if (txType !== "only-simulate") {
|
@@ -330,8 +330,8 @@ export async function sendSingleOptimizedTransaction(
|
|
330
330
|
confirm: { commitment: "confirmed" },
|
331
331
|
});
|
332
332
|
const txSig = bs58.encode(result.signature);
|
333
|
-
|
334
|
-
|
333
|
+
consoleLog(`Transaction signature: ${txSig}`);
|
334
|
+
consoleLog(`https://solscan.io/tx/${txSig}`);
|
335
335
|
if (result.result.value.err !== null) {
|
336
336
|
throw new Error(result.result.value.err.toString());
|
337
337
|
}
|
@@ -31,19 +31,6 @@ import {
|
|
31
31
|
import { getAllMarginfiAccountsByAuthority } from "../marginfiUtils";
|
32
32
|
import { RebalanceAction, SolautoPositionDetails } from "../../types/solauto";
|
33
33
|
|
34
|
-
export function findMintByTicker(ticker: string): PublicKey {
|
35
|
-
for (const key in TOKEN_INFO) {
|
36
|
-
const account = TOKEN_INFO[key];
|
37
|
-
if (
|
38
|
-
account.ticker.toString().toLowerCase() ===
|
39
|
-
ticker.toString().toLowerCase()
|
40
|
-
) {
|
41
|
-
return new PublicKey(key);
|
42
|
-
}
|
43
|
-
}
|
44
|
-
throw new Error(`Token mint not found by the ticker: ${ticker}`);
|
45
|
-
}
|
46
|
-
|
47
34
|
function newPeriodsPassed(
|
48
35
|
automation: AutomationSettings,
|
49
36
|
currentUnixTimestamp: number
|
package/dist/utils/deleteme.d.ts
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"file":"deleteme.d.ts","sourceRoot":"","sources":["../../src/utils/deleteme.ts"],"names":[],"mappings":""}
|
package/dist/utils/deleteme.js
DELETED
@@ -1,21 +0,0 @@
|
|
1
|
-
"use strict";
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
-
const numberUtils_1 = require("./numberUtils");
|
4
|
-
// TODO delete this file
|
5
|
-
async function check() {
|
6
|
-
let supply = 458948;
|
7
|
-
let debt = 212846;
|
8
|
-
let supply_weight = 0.899999976158142;
|
9
|
-
let debt_weight = 1.100000023841858;
|
10
|
-
let liq_threshold = (supply_weight / debt_weight) * 10000;
|
11
|
-
console.log(liq_threshold);
|
12
|
-
let liq_utilization_rate = (0, numberUtils_1.getLiqUtilzationRateBps)(supply, debt, liq_threshold);
|
13
|
-
console.log(liq_utilization_rate);
|
14
|
-
let debt_adjustment_usd = (0, numberUtils_1.getDebtAdjustmentUsd)(liq_threshold, supply, debt, 6000, 0);
|
15
|
-
supply += debt_adjustment_usd;
|
16
|
-
debt += debt_adjustment_usd;
|
17
|
-
liq_utilization_rate = (0, numberUtils_1.getLiqUtilzationRateBps)(supply, debt, liq_threshold);
|
18
|
-
console.log(debt_adjustment_usd);
|
19
|
-
console.log(liq_utilization_rate);
|
20
|
-
}
|
21
|
-
check();
|
package/src/utils/deleteme.ts
DELETED
@@ -1,40 +0,0 @@
|
|
1
|
-
import { getDebtAdjustmentUsd, getLiqUtilzationRateBps } from "./numberUtils";
|
2
|
-
|
3
|
-
// TODO delete this file
|
4
|
-
async function check() {
|
5
|
-
let supply = 458948;
|
6
|
-
let debt = 212846;
|
7
|
-
let supply_weight = 0.899999976158142;
|
8
|
-
let debt_weight = 1.100000023841858;
|
9
|
-
let liq_threshold = (supply_weight / debt_weight) * 10000;
|
10
|
-
|
11
|
-
console.log(liq_threshold);
|
12
|
-
let liq_utilization_rate = getLiqUtilzationRateBps(
|
13
|
-
supply,
|
14
|
-
debt,
|
15
|
-
liq_threshold
|
16
|
-
);
|
17
|
-
console.log!(liq_utilization_rate);
|
18
|
-
|
19
|
-
let debt_adjustment_usd = getDebtAdjustmentUsd(
|
20
|
-
liq_threshold,
|
21
|
-
supply,
|
22
|
-
debt,
|
23
|
-
6000,
|
24
|
-
0
|
25
|
-
);
|
26
|
-
|
27
|
-
supply += debt_adjustment_usd;
|
28
|
-
debt += debt_adjustment_usd;
|
29
|
-
|
30
|
-
liq_utilization_rate = getLiqUtilzationRateBps(
|
31
|
-
supply,
|
32
|
-
debt,
|
33
|
-
liq_threshold
|
34
|
-
);
|
35
|
-
|
36
|
-
console.log(debt_adjustment_usd);
|
37
|
-
console.log!(liq_utilization_rate);
|
38
|
-
}
|
39
|
-
|
40
|
-
check();
|