@haven-fi/solauto-sdk 1.0.450 → 1.0.452
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/transactions/transactionsManager.d.ts +10 -3
- package/dist/transactions/transactionsManager.d.ts.map +1 -1
- package/dist/transactions/transactionsManager.js +18 -5
- package/dist/utils/jitoUtils.d.ts.map +1 -1
- package/dist/utils/jitoUtils.js +5 -6
- package/dist/utils/marginfiUtils.d.ts.map +1 -1
- package/dist/utils/marginfiUtils.js +2 -0
- package/dist/utils/numberUtils.js +1 -1
- package/dist/utils/solauto/rebalanceUtils.d.ts.map +1 -1
- package/dist/utils/solauto/rebalanceUtils.js +3 -1
- package/local/shared.ts +1 -1
- package/package.json +1 -1
- package/src/transactions/transactionsManager.ts +33 -4
- package/src/utils/jitoUtils.ts +5 -4
- package/src/utils/marginfiUtils.ts +3 -0
- package/src/utils/numberUtils.ts +1 -1
- package/src/utils/solauto/rebalanceUtils.ts +5 -1
- package/tests/transactions/solautoMarginfi.ts +2 -2
@@ -32,6 +32,11 @@ export type TransactionManagerStatuses = {
|
|
32
32
|
simulationSuccessful?: boolean;
|
33
33
|
txSig?: string;
|
34
34
|
}[];
|
35
|
+
interface RetryConfig {
|
36
|
+
signableRetries?: number;
|
37
|
+
totalRetries?: number;
|
38
|
+
retryDelay?: number;
|
39
|
+
}
|
35
40
|
export declare class TransactionsManager {
|
36
41
|
private txHandler;
|
37
42
|
private statusCallback?;
|
@@ -39,11 +44,12 @@ export declare class TransactionsManager {
|
|
39
44
|
private priorityFeeSetting;
|
40
45
|
private atomically;
|
41
46
|
private errorsToThrow?;
|
42
|
-
private retries;
|
43
|
-
private retryDelay;
|
44
47
|
private statuses;
|
45
48
|
private lookupTables;
|
46
|
-
|
49
|
+
private signableRetries;
|
50
|
+
private totalRetries;
|
51
|
+
private retryDelay;
|
52
|
+
constructor(txHandler: SolautoClient | ReferralStateManager, statusCallback?: ((statuses: TransactionManagerStatuses) => void) | undefined, txType?: TransactionRunType | undefined, priorityFeeSetting?: PriorityFeeSetting, atomically?: boolean, errorsToThrow?: ErrorsToThrow | undefined, retryConfig?: RetryConfig);
|
47
53
|
private assembleTransactionSets;
|
48
54
|
private updateStatus;
|
49
55
|
private debugAccounts;
|
@@ -57,4 +63,5 @@ export declare class TransactionsManager {
|
|
57
63
|
private refreshItemSet;
|
58
64
|
private sendTransaction;
|
59
65
|
}
|
66
|
+
export {};
|
60
67
|
//# sourceMappingURL=transactionsManager.d.ts.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"transactionsManager.d.ts","sourceRoot":"","sources":["../../src/transactions/transactionsManager.ts"],"names":[],"mappings":"AACA,OAAO,EAGL,kBAAkB,EAEnB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAMzD,OAAO,EACL,aAAa,EAEd,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EACL,kBAAkB,EAElB,qBAAqB,EACrB,kBAAkB,EACnB,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,oBAAoB,EAAa,MAAM,YAAY,CAAC;AAW7D,qBAAa,wBAAyB,SAAQ,KAAK;gBACrC,OAAO,EAAE,MAAM;CAK5B;AAqCD,qBAAa,eAAe;IAMjB,OAAO,EAAE,CACd,UAAU,EAAE,MAAM,KACf,OAAO,CAAC,qBAAqB,GAAG,SAAS,CAAC;IACxC,IAAI,CAAC,EAAE,MAAM;IARtB,oBAAoB,EAAG,MAAM,EAAE,CAAC;IAChC,EAAE,CAAC,EAAE,kBAAkB,CAAC;IACjB,WAAW,EAAE,OAAO,CAAS;gBAG3B,OAAO,EAAE,CACd,UAAU,EAAE,MAAM,KACf,OAAO,CAAC,qBAAqB,GAAG,SAAS,CAAC,EACxC,IAAI,CAAC,EAAE,MAAM,YAAA;IAGhB,UAAU;IAKV,OAAO,CAAC,UAAU,EAAE,MAAM;IAMhC,cAAc,IAAI,MAAM,EAAE;CAY3B;AA0FD,oBAAY,iBAAiB;IAC3B,OAAO,YAAY;IACnB,UAAU,eAAe;IACzB,MAAM,WAAW;IACjB,UAAU,eAAe;IACzB,MAAM,WAAW;CAClB;AAED,MAAM,MAAM,0BAA0B,GAAG;IACvC,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,iBAAiB,CAAC;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,EAAE,CAAC;AAEJ,qBAAa,mBAAmB;
|
1
|
+
{"version":3,"file":"transactionsManager.d.ts","sourceRoot":"","sources":["../../src/transactions/transactionsManager.ts"],"names":[],"mappings":"AACA,OAAO,EAGL,kBAAkB,EAEnB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAMzD,OAAO,EACL,aAAa,EAEd,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EACL,kBAAkB,EAElB,qBAAqB,EACrB,kBAAkB,EACnB,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,oBAAoB,EAAa,MAAM,YAAY,CAAC;AAW7D,qBAAa,wBAAyB,SAAQ,KAAK;gBACrC,OAAO,EAAE,MAAM;CAK5B;AAqCD,qBAAa,eAAe;IAMjB,OAAO,EAAE,CACd,UAAU,EAAE,MAAM,KACf,OAAO,CAAC,qBAAqB,GAAG,SAAS,CAAC;IACxC,IAAI,CAAC,EAAE,MAAM;IARtB,oBAAoB,EAAG,MAAM,EAAE,CAAC;IAChC,EAAE,CAAC,EAAE,kBAAkB,CAAC;IACjB,WAAW,EAAE,OAAO,CAAS;gBAG3B,OAAO,EAAE,CACd,UAAU,EAAE,MAAM,KACf,OAAO,CAAC,qBAAqB,GAAG,SAAS,CAAC,EACxC,IAAI,CAAC,EAAE,MAAM,YAAA;IAGhB,UAAU;IAKV,OAAO,CAAC,UAAU,EAAE,MAAM;IAMhC,cAAc,IAAI,MAAM,EAAE;CAY3B;AA0FD,oBAAY,iBAAiB;IAC3B,OAAO,YAAY;IACnB,UAAU,eAAe;IACzB,MAAM,WAAW;IACjB,UAAU,eAAe;IACzB,MAAM,WAAW;CAClB;AAED,MAAM,MAAM,0BAA0B,GAAG;IACvC,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,iBAAiB,CAAC;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,EAAE,CAAC;AAEJ,UAAU,WAAW;IACnB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,qBAAa,mBAAmB;IAQ5B,OAAO,CAAC,SAAS;IACjB,OAAO,CAAC,cAAc,CAAC;IACvB,OAAO,CAAC,MAAM,CAAC;IACf,OAAO,CAAC,kBAAkB;IAC1B,OAAO,CAAC,UAAU;IAClB,OAAO,CAAC,aAAa,CAAC;IAZxB,OAAO,CAAC,QAAQ,CAAkC;IAClD,OAAO,CAAC,YAAY,CAAe;IACnC,OAAO,CAAC,eAAe,CAAS;IAChC,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,UAAU,CAAS;gBAGjB,SAAS,EAAE,aAAa,GAAG,oBAAoB,EAC/C,cAAc,CAAC,GAAE,CAAC,QAAQ,EAAE,0BAA0B,KAAK,IAAI,aAAA,EAC/D,MAAM,CAAC,EAAE,kBAAkB,YAAA,EAC3B,kBAAkB,GAAE,kBAA2C,EAC/D,UAAU,GAAE,OAAe,EAC3B,aAAa,CAAC,EAAE,aAAa,YAAA,EACrC,WAAW,CAAC,EAAE,WAAW;YAab,uBAAuB;IAwCrC,OAAO,CAAC,YAAY;YA6CN,aAAa;IAoB3B,OAAO,CAAC,4BAA4B;IAgBpC,OAAO,CAAC,mBAAmB;YAoBb,SAAS;IAiBV,UAAU,CACrB,YAAY,EAAE,eAAe,EAAE,GAC9B,OAAO,CAAC,0BAA0B,CAAC;IA+FzB,IAAI,CACf,KAAK,EAAE,eAAe,EAAE,GACvB,OAAO,CAAC,0BAA0B,CAAC;YA4BxB,6BAA6B;YAiI7B,qBAAqB;YAmDrB,cAAc;YAqCd,eAAe;CA0D9B"}
|
@@ -142,17 +142,20 @@ var TransactionStatus;
|
|
142
142
|
TransactionStatus["Failed"] = "Failed";
|
143
143
|
})(TransactionStatus || (exports.TransactionStatus = TransactionStatus = {}));
|
144
144
|
class TransactionsManager {
|
145
|
-
constructor(txHandler, statusCallback, txType, priorityFeeSetting = types_1.PriorityFeeSetting.Min, atomically = false, errorsToThrow,
|
145
|
+
constructor(txHandler, statusCallback, txType, priorityFeeSetting = types_1.PriorityFeeSetting.Min, atomically = false, errorsToThrow, retryConfig) {
|
146
146
|
this.txHandler = txHandler;
|
147
147
|
this.statusCallback = statusCallback;
|
148
148
|
this.txType = txType;
|
149
149
|
this.priorityFeeSetting = priorityFeeSetting;
|
150
150
|
this.atomically = atomically;
|
151
151
|
this.errorsToThrow = errorsToThrow;
|
152
|
-
this.retries = retries;
|
153
|
-
this.retryDelay = retryDelay;
|
154
152
|
this.statuses = [];
|
155
153
|
this.lookupTables = new LookupTables(this.txHandler.defaultLookupTables(), this.txHandler.umi);
|
154
|
+
this.signableRetries =
|
155
|
+
retryConfig?.signableRetries ?? retryConfig?.totalRetries ?? 3;
|
156
|
+
this.totalRetries =
|
157
|
+
retryConfig?.totalRetries ?? retryConfig?.signableRetries ?? 4;
|
158
|
+
this.retryDelay = retryConfig?.retryDelay ?? 150;
|
156
159
|
}
|
157
160
|
async assembleTransactionSets(items) {
|
158
161
|
let transactionSets = [];
|
@@ -335,6 +338,11 @@ class TransactionsManager {
|
|
335
338
|
let num = 0;
|
336
339
|
let transactions = [];
|
337
340
|
await (0, generalUtils_1.retryWithExponentialBackoff)(async (attemptNum, prevError) => {
|
341
|
+
if (prevError &&
|
342
|
+
this.statuses.filter((x) => x.simulationSuccessful).length >
|
343
|
+
this.signableRetries) {
|
344
|
+
throw prevError;
|
345
|
+
}
|
338
346
|
num = attemptNum;
|
339
347
|
if (attemptNum > 0) {
|
340
348
|
for (let i = 0; i < itemSets.length; i++) {
|
@@ -367,7 +375,7 @@ class TransactionsManager {
|
|
367
375
|
throw error ? error : new Error("Unknown error");
|
368
376
|
}
|
369
377
|
this.updateStatusForSets(itemSets, TransactionStatus.Successful, attemptNum, txSigs);
|
370
|
-
}, this.
|
378
|
+
}, this.totalRetries, this.retryDelay, this.errorsToThrow).catch((e) => {
|
371
379
|
this.txHandler.log("Capturing error info...");
|
372
380
|
const errorDetails = (0, transactionUtils_1.getErrorInfo)(this.txHandler.umi, transactions, e, itemSets.filter((x) => this.statuses.find((y) => x.name() === y.name)?.simulationSuccessful).length === itemSets.length);
|
373
381
|
const errorString = `${errorDetails.errorName ?? "Unknown error"}: ${errorDetails.errorInfo?.split("\n")[0] ?? "unknown"}`;
|
@@ -385,6 +393,11 @@ class TransactionsManager {
|
|
385
393
|
let itemSet = itemSets[currentIndex];
|
386
394
|
let num = 0;
|
387
395
|
await (0, generalUtils_1.retryWithExponentialBackoff)(async (attemptNum, prevError) => {
|
396
|
+
if (prevError &&
|
397
|
+
this.statuses.filter((x) => x.simulationSuccessful).length >
|
398
|
+
this.signableRetries) {
|
399
|
+
throw prevError;
|
400
|
+
}
|
388
401
|
num = attemptNum;
|
389
402
|
if (currentIndex > 0 || attemptNum > 0) {
|
390
403
|
itemSet = await this.refreshItemSet(itemSets, currentIndex, attemptNum);
|
@@ -399,7 +412,7 @@ class TransactionsManager {
|
|
399
412
|
await this.debugAccounts(itemSet, tx);
|
400
413
|
await this.sendTransaction(tx, itemSet.name(), attemptNum, this.getUpdatedPriorityFeeSetting(prevError, attemptNum));
|
401
414
|
}
|
402
|
-
}, this.
|
415
|
+
}, this.totalRetries, this.retryDelay, this.errorsToThrow);
|
403
416
|
}
|
404
417
|
async refreshItemSet(itemSets, currentIndex, attemptNum) {
|
405
418
|
const itemSet = itemSets[currentIndex];
|
@@ -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;AAGzB,OAAO,EACL,MAAM,EACN,kBAAkB,EAClB,GAAG,EAEH,kBAAkB,EACnB,MAAM,0BAA0B,CAAC;AAQlC,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAMlE,wBAAgB,mBAAmB,IAAI,SAAS,CAa/C;
|
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;AAGzB,OAAO,EACL,MAAM,EACN,kBAAkB,EAClB,GAAG,EAEH,kBAAkB,EACnB,MAAM,0BAA0B,CAAC;AAQlC,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAMlE,wBAAgB,mBAAmB,IAAI,SAAS,CAa/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"}
|
package/dist/utils/jitoUtils.js
CHANGED
@@ -8,7 +8,6 @@ exports.getRequiredSigners = getRequiredSigners;
|
|
8
8
|
exports.sendJitoBundledTransactions = sendJitoBundledTransactions;
|
9
9
|
const web3_js_1 = require("@solana/web3.js");
|
10
10
|
const umi_web3js_adapters_1 = require("@metaplex-foundation/umi-web3js-adapters");
|
11
|
-
const solautoConstants_1 = require("../constants/solautoConstants");
|
12
11
|
const solanaUtils_1 = require("./solanaUtils");
|
13
12
|
const generalUtils_1 = require("./generalUtils");
|
14
13
|
const types_1 = require("../types");
|
@@ -129,8 +128,8 @@ async function umiToVersionedTransactions(umi, blockhash, userSigner, otherSigne
|
|
129
128
|
}
|
130
129
|
return builtTxs.map((x) => (0, umi_web3js_adapters_1.toWeb3JsTransaction)(x));
|
131
130
|
}
|
132
|
-
async function getBundleStatus(bundleId) {
|
133
|
-
const res = await axios_1.default.post(
|
131
|
+
async function getBundleStatus(umi, bundleId) {
|
132
|
+
const res = await axios_1.default.post(umi.rpc.getEndpoint(), {
|
134
133
|
jsonrpc: "2.0",
|
135
134
|
id: 1,
|
136
135
|
method: "getBundleStatuses",
|
@@ -141,11 +140,11 @@ async function getBundleStatus(bundleId) {
|
|
141
140
|
}
|
142
141
|
return res.data.result;
|
143
142
|
}
|
144
|
-
async function pollBundleStatus(bundleId, interval = 1000, timeout = 40000) {
|
143
|
+
async function pollBundleStatus(umi, bundleId, interval = 1000, timeout = 40000) {
|
145
144
|
const endTime = Date.now() + timeout;
|
146
145
|
while (Date.now() < endTime) {
|
147
146
|
await new Promise((resolve) => setTimeout(resolve, interval));
|
148
|
-
const statuses = await getBundleStatus(bundleId);
|
147
|
+
const statuses = await getBundleStatus(umi, bundleId);
|
149
148
|
if (statuses?.value?.length > 0) {
|
150
149
|
(0, generalUtils_1.consoleLog)("Statuses:", statuses);
|
151
150
|
const status = statuses.value[0].confirmation_status;
|
@@ -182,7 +181,7 @@ async function sendJitoBundle(umi, transactions) {
|
|
182
181
|
}
|
183
182
|
const bundleId = resp.data.result;
|
184
183
|
(0, generalUtils_1.consoleLog)("Bundle ID:", bundleId);
|
185
|
-
return bundleId ? await pollBundleStatus(bundleId) : [];
|
184
|
+
return bundleId ? await pollBundleStatus(umi, bundleId) : [];
|
186
185
|
}
|
187
186
|
function getRequiredSigners(message) {
|
188
187
|
const { numRequiredSignatures, numReadonlySignedAccounts } = message.header;
|
@@ -1 +1 @@
|
|
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,iCAAiC,CAC/C,UAAU,EAAE,IAAI,EAChB,QAAQ,EAAE,IAAI,EACd,WAAW,EAAE,MAAM,GAClB,CAAC,MAAM,EAAE,MAAM,CAAC,CA6BlB;AAED,wBAAsB,gCAAgC,CACpD,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,CA4C3B;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,
|
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,iCAAiC,CAC/C,UAAU,EAAE,IAAI,EAChB,QAAQ,EAAE,IAAI,EACd,WAAW,EAAE,MAAM,GAClB,CAAC,MAAM,EAAE,MAAM,CAAC,CA6BlB;AAED,wBAAsB,gCAAgC,CACpD,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,CA4C3B;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,CA6LpC;AA+DD,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,IAAI,oBAU7C;AAED,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,IAAI,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAgBnE;AAED,wBAAgB,oBAAoB,CAAC,eAAe,EAAE,eAAe,WASpE"}
|
@@ -253,6 +253,8 @@ async function getMarginfiAccountPositionState(umi, protocolAccount, marginfiGro
|
|
253
253
|
}, supplyPrice);
|
254
254
|
const supplyUsd = (0, numberUtils_1.fromBaseUnit)(supplyUsage.amountUsed.baseAmountUsdValue, generalAccounts_1.USD_DECIMALS);
|
255
255
|
const debtUsd = (0, numberUtils_1.fromBaseUnit)(debtUsage?.amountUsed?.baseAmountUsdValue ?? BigInt(0), generalAccounts_1.USD_DECIMALS);
|
256
|
+
console.log("Asset weight init", (0, numberUtils_1.bytesToI80F48)(supplyBank.config.assetWeightInit.value));
|
257
|
+
console.log("Liability weight init", (0, numberUtils_1.bytesToI80F48)(debtBank.config.liabilityWeightInit.value));
|
256
258
|
return {
|
257
259
|
liqUtilizationRateBps: (0, numberUtils_1.getLiqUtilzationRateBps)(supplyUsd, debtUsd, (0, numberUtils_1.toBps)(liqThreshold)),
|
258
260
|
netWorth: {
|
@@ -119,7 +119,7 @@ function getMaxLiqUtilizationRateBps(maxLtvBps, liqThresholdBps, offsetFromMaxLt
|
|
119
119
|
1); // -1 to account for any rounding issues
|
120
120
|
}
|
121
121
|
function maxRepayFromBps(maxLtvBps, liqThresholdBps) {
|
122
|
-
return Math.min(
|
122
|
+
return Math.min(8700, getMaxLiqUtilizationRateBps(maxLtvBps, liqThresholdBps - 1000, 0.01));
|
123
123
|
}
|
124
124
|
function maxRepayToBps(maxLtvBps, liqThresholdBps) {
|
125
125
|
return Math.min(maxRepayFromBps(maxLtvBps, liqThresholdBps) - constants_1.MIN_REPAY_GAP_BPS, getMaxLiqUtilizationRateBps(maxLtvBps, liqThresholdBps, 0.01));
|
@@ -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,kBAAkB,EAClB,yBAAyB,EACzB,SAAS,EACV,MAAM,iBAAiB,CAAC;AAOzB,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;
|
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,kBAAkB,EAClB,yBAAyB,EACzB,SAAS,EACV,MAAM,iBAAiB,CAAC;AAOzB,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAcjD,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAoI9C,MAAM,WAAW,eAAe;IAC9B,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;IACzB,eAAe,EAAE,eAAe,CAAC;IACjC,kBAAkB,EAAE,kBAAkB,CAAC;IACvC,OAAO,EAAE,MAAM,CAAC;CACjB;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,GACnC,eAAe,CA2DjB;AAED,wBAAgB,0BAA0B,CACxC,MAAM,EAAE,aAAa,EACrB,MAAM,EAAE,eAAe;;;EAsDxB;AAED,MAAM,WAAW,gBAAgB;IAC/B,cAAc,EAAE,MAAM,CAAC;IACvB,IAAI,EAAE,SAAS,CAAC;IAChB,gBAAgB,EAAE,OAAO,CAAC;CAC3B;AAED,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,aAAa,EACrB,MAAM,EAAE,eAAe,EACvB,QAAQ,EAAE,aAAa,GACtB,gBAAgB,GAAG,SAAS,CAmC9B;AAED,wBAAgB,0BAA0B,CACxC,MAAM,EAAE,aAAa,EACrB,MAAM,EAAE,eAAe,EACvB,2BAA2B,CAAC,EAAE,MAAM,EACpC,UAAU,CAAC,EAAE,MAAM,GAClB,cAAc,CA4DhB"}
|
@@ -82,7 +82,8 @@ function getTargetRateAndDcaAmount(state, settings, dca, currentUnixTime, target
|
|
82
82
|
}
|
83
83
|
}
|
84
84
|
function getRebalanceValues(state, settings, dca, currentUnixTime, supplyPrice, debtPrice, targetLiqUtilizationRateBps) {
|
85
|
-
|
85
|
+
let { targetRateBps, amountToDcaIn } = getTargetRateAndDcaAmount(state, settings, dca, currentUnixTime, targetLiqUtilizationRateBps);
|
86
|
+
// targetRateBps = 6500;
|
86
87
|
const amountUsdToDcaIn = (0, numberUtils_1.fromBaseUnit)(BigInt(Math.round(amountToDcaIn ?? 0)), state.debt.decimals) *
|
87
88
|
(dca?.tokenType === generated_1.TokenType.Debt ? debtPrice : supplyPrice);
|
88
89
|
const rebalanceDirection = amountUsdToDcaIn > 0 || state.liqUtilizationRateBps <= targetRateBps
|
@@ -93,6 +94,7 @@ function getRebalanceValues(state, settings, dca, currentUnixTime, supplyPrice,
|
|
93
94
|
amountUsdToDcaIn;
|
94
95
|
const debtUsd = (0, numberUtils_1.fromBaseUnit)(state.debt.amountUsed.baseAmountUsdValue, generalAccounts_1.USD_DECIMALS);
|
95
96
|
let debtAdjustmentUsd = (0, numberUtils_1.getDebtAdjustmentUsd)(state.liqThresholdBps, supplyUsd, debtUsd, targetRateBps, adjustmentFeeBps);
|
97
|
+
(0, generalUtils_2.consoleLog)("Target rate:", targetRateBps);
|
96
98
|
const maxRepayTo = (0, numberUtils_1.maxRepayToBps)(state.maxLtvBps, state.liqThresholdBps);
|
97
99
|
return {
|
98
100
|
debtAdjustmentUsd,
|
package/local/shared.ts
CHANGED
@@ -21,7 +21,7 @@ export function getSecretKey(keypairFilename: string = "id"): Uint8Array {
|
|
21
21
|
);
|
22
22
|
}
|
23
23
|
|
24
|
-
const keypair = Keypair.fromSecretKey(getSecretKey("solauto-
|
24
|
+
const keypair = Keypair.fromSecretKey(getSecretKey("solauto-fees"));
|
25
25
|
const [connection, _] = getSolanaRpcConnection(buildHeliusApiUrl(process.env.HELIUS_API_KEY ?? ""));
|
26
26
|
|
27
27
|
async function createAndSendV0Tx(txInstructions: TransactionInstruction[]) {
|
package/package.json
CHANGED
@@ -218,9 +218,18 @@ export type TransactionManagerStatuses = {
|
|
218
218
|
txSig?: string;
|
219
219
|
}[];
|
220
220
|
|
221
|
+
interface RetryConfig {
|
222
|
+
signableRetries?: number;
|
223
|
+
totalRetries?: number;
|
224
|
+
retryDelay?: number;
|
225
|
+
}
|
226
|
+
|
221
227
|
export class TransactionsManager {
|
222
228
|
private statuses: TransactionManagerStatuses = [];
|
223
229
|
private lookupTables: LookupTables;
|
230
|
+
private signableRetries: number;
|
231
|
+
private totalRetries: number;
|
232
|
+
private retryDelay: number;
|
224
233
|
|
225
234
|
constructor(
|
226
235
|
private txHandler: SolautoClient | ReferralStateManager,
|
@@ -229,13 +238,17 @@ export class TransactionsManager {
|
|
229
238
|
private priorityFeeSetting: PriorityFeeSetting = PriorityFeeSetting.Min,
|
230
239
|
private atomically: boolean = false,
|
231
240
|
private errorsToThrow?: ErrorsToThrow,
|
232
|
-
|
233
|
-
private retryDelay: number = 150
|
241
|
+
retryConfig?: RetryConfig
|
234
242
|
) {
|
235
243
|
this.lookupTables = new LookupTables(
|
236
244
|
this.txHandler.defaultLookupTables(),
|
237
245
|
this.txHandler.umi
|
238
246
|
);
|
247
|
+
this.signableRetries =
|
248
|
+
retryConfig?.signableRetries ?? retryConfig?.totalRetries ?? 3;
|
249
|
+
this.totalRetries =
|
250
|
+
retryConfig?.totalRetries ?? retryConfig?.signableRetries ?? 4;
|
251
|
+
this.retryDelay = retryConfig?.retryDelay ?? 150;
|
239
252
|
}
|
240
253
|
|
241
254
|
private async assembleTransactionSets(
|
@@ -529,6 +542,14 @@ export class TransactionsManager {
|
|
529
542
|
|
530
543
|
await retryWithExponentialBackoff(
|
531
544
|
async (attemptNum, prevError) => {
|
545
|
+
if (
|
546
|
+
prevError &&
|
547
|
+
this.statuses.filter((x) => x.simulationSuccessful).length >
|
548
|
+
this.signableRetries
|
549
|
+
) {
|
550
|
+
throw prevError;
|
551
|
+
}
|
552
|
+
|
532
553
|
num = attemptNum;
|
533
554
|
|
534
555
|
if (attemptNum > 0) {
|
@@ -609,7 +630,7 @@ export class TransactionsManager {
|
|
609
630
|
txSigs
|
610
631
|
);
|
611
632
|
},
|
612
|
-
this.
|
633
|
+
this.totalRetries,
|
613
634
|
this.retryDelay,
|
614
635
|
this.errorsToThrow
|
615
636
|
).catch((e: Error) => {
|
@@ -653,6 +674,14 @@ export class TransactionsManager {
|
|
653
674
|
|
654
675
|
await retryWithExponentialBackoff(
|
655
676
|
async (attemptNum, prevError) => {
|
677
|
+
if (
|
678
|
+
prevError &&
|
679
|
+
this.statuses.filter((x) => x.simulationSuccessful).length >
|
680
|
+
this.signableRetries
|
681
|
+
) {
|
682
|
+
throw prevError;
|
683
|
+
}
|
684
|
+
|
656
685
|
num = attemptNum;
|
657
686
|
|
658
687
|
if (currentIndex > 0 || attemptNum > 0) {
|
@@ -681,7 +710,7 @@ export class TransactionsManager {
|
|
681
710
|
);
|
682
711
|
}
|
683
712
|
},
|
684
|
-
this.
|
713
|
+
this.totalRetries,
|
685
714
|
this.retryDelay,
|
686
715
|
this.errorsToThrow
|
687
716
|
);
|
package/src/utils/jitoUtils.ts
CHANGED
@@ -196,8 +196,8 @@ async function umiToVersionedTransactions(
|
|
196
196
|
return builtTxs.map((x) => toWeb3JsTransaction(x));
|
197
197
|
}
|
198
198
|
|
199
|
-
async function getBundleStatus(bundleId: string) {
|
200
|
-
const res = await axios.post(
|
199
|
+
async function getBundleStatus(umi: Umi, bundleId: string) {
|
200
|
+
const res = await axios.post(umi.rpc.getEndpoint(), {
|
201
201
|
jsonrpc: "2.0",
|
202
202
|
id: 1,
|
203
203
|
method: "getBundleStatuses",
|
@@ -211,6 +211,7 @@ async function getBundleStatus(bundleId: string) {
|
|
211
211
|
}
|
212
212
|
|
213
213
|
async function pollBundleStatus(
|
214
|
+
umi: Umi,
|
214
215
|
bundleId: string,
|
215
216
|
interval = 1000,
|
216
217
|
timeout = 40000
|
@@ -218,7 +219,7 @@ async function pollBundleStatus(
|
|
218
219
|
const endTime = Date.now() + timeout;
|
219
220
|
while (Date.now() < endTime) {
|
220
221
|
await new Promise((resolve) => setTimeout(resolve, interval));
|
221
|
-
const statuses = await getBundleStatus(bundleId);
|
222
|
+
const statuses = await getBundleStatus(umi, bundleId);
|
222
223
|
if (statuses?.value?.length > 0) {
|
223
224
|
consoleLog("Statuses:", statuses);
|
224
225
|
const status = statuses.value[0].confirmation_status;
|
@@ -260,7 +261,7 @@ async function sendJitoBundle(
|
|
260
261
|
|
261
262
|
const bundleId = resp.data.result;
|
262
263
|
consoleLog("Bundle ID:", bundleId);
|
263
|
-
return bundleId ? await pollBundleStatus(bundleId) : [];
|
264
|
+
return bundleId ? await pollBundleStatus(umi, bundleId) : [];
|
264
265
|
}
|
265
266
|
|
266
267
|
export function getRequiredSigners(message: TransactionMessage) {
|
@@ -464,6 +464,9 @@ export async function getMarginfiAccountPositionState(
|
|
464
464
|
USD_DECIMALS
|
465
465
|
);
|
466
466
|
|
467
|
+
console.log("Asset weight init", bytesToI80F48(supplyBank.config.assetWeightInit.value));
|
468
|
+
console.log("Liability weight init", bytesToI80F48(debtBank.config.liabilityWeightInit.value));
|
469
|
+
|
467
470
|
return {
|
468
471
|
liqUtilizationRateBps: getLiqUtilzationRateBps(
|
469
472
|
supplyUsd,
|
package/src/utils/numberUtils.ts
CHANGED
@@ -166,7 +166,7 @@ export function getMaxLiqUtilizationRateBps(
|
|
166
166
|
|
167
167
|
export function maxRepayFromBps(maxLtvBps: number, liqThresholdBps: number) {
|
168
168
|
return Math.min(
|
169
|
-
|
169
|
+
8700,
|
170
170
|
getMaxLiqUtilizationRateBps(maxLtvBps, liqThresholdBps - 1000, 0.01)
|
171
171
|
);
|
172
172
|
}
|
@@ -24,6 +24,7 @@ import {
|
|
24
24
|
getLiqUtilzationRateBps,
|
25
25
|
getMaxLiqUtilizationRateBps,
|
26
26
|
getSolautoFeesBps,
|
27
|
+
maxBoostToBps,
|
27
28
|
maxRepayToBps,
|
28
29
|
toBaseUnit,
|
29
30
|
} from "../numberUtils";
|
@@ -180,7 +181,7 @@ export function getRebalanceValues(
|
|
180
181
|
debtPrice: number,
|
181
182
|
targetLiqUtilizationRateBps?: number
|
182
183
|
): RebalanceValues {
|
183
|
-
|
184
|
+
let { targetRateBps, amountToDcaIn } = getTargetRateAndDcaAmount(
|
184
185
|
state,
|
185
186
|
settings,
|
186
187
|
dca,
|
@@ -188,6 +189,8 @@ export function getRebalanceValues(
|
|
188
189
|
targetLiqUtilizationRateBps
|
189
190
|
);
|
190
191
|
|
192
|
+
// targetRateBps = 6500;
|
193
|
+
|
191
194
|
const amountUsdToDcaIn =
|
192
195
|
fromBaseUnit(BigInt(Math.round(amountToDcaIn ?? 0)), state.debt.decimals) *
|
193
196
|
(dca?.tokenType === TokenType.Debt ? debtPrice : supplyPrice);
|
@@ -218,6 +221,7 @@ export function getRebalanceValues(
|
|
218
221
|
adjustmentFeeBps
|
219
222
|
);
|
220
223
|
|
224
|
+
consoleLog("Target rate:", targetRateBps);
|
221
225
|
const maxRepayTo = maxRepayToBps(state.maxLtvBps, state.liqThresholdBps);
|
222
226
|
return {
|
223
227
|
debtAdjustmentUsd,
|
@@ -40,7 +40,7 @@ describe("Solauto Marginfi tests", async () => {
|
|
40
40
|
// const signer = setupTest();
|
41
41
|
const signer = setupTest("solauto-manager");
|
42
42
|
|
43
|
-
const payForTransactions =
|
43
|
+
const payForTransactions = true;
|
44
44
|
const testProgram = false;
|
45
45
|
const positionId = 1;
|
46
46
|
|
@@ -58,7 +58,7 @@ describe("Solauto Marginfi tests", async () => {
|
|
58
58
|
await client.initialize({
|
59
59
|
signer,
|
60
60
|
positionId,
|
61
|
-
authority: new PublicKey("
|
61
|
+
authority: new PublicKey("7GMmfZdCgJSCawA7roGiGgvueU3XoEHQXUtiCnuDYUde"),
|
62
62
|
// new: true,
|
63
63
|
// marginfiAccount: new PublicKey(
|
64
64
|
// ""
|