@haven-fi/solauto-sdk 1.0.238 → 1.0.240
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 +8 -4
- package/dist/transactions/transactionsManager.d.ts.map +1 -1
- package/dist/transactions/transactionsManager.js +66 -67
- package/dist/types/solauto.d.ts +1 -0
- package/dist/types/solauto.d.ts.map +1 -1
- package/dist/types/solauto.js +2 -1
- package/dist/utils/generalUtils.d.ts +1 -1
- package/dist/utils/generalUtils.d.ts.map +1 -1
- package/dist/utils/generalUtils.js +3 -3
- package/package.json +1 -1
- package/src/transactions/transactionsManager.ts +107 -96
- package/src/types/solauto.ts +2 -0
- package/src/utils/generalUtils.ts +4 -4
- package/tests/transactions/solautoMarginfi.ts +22 -10
|
@@ -35,18 +35,22 @@ export declare class TransactionsManager {
|
|
|
35
35
|
private txHandler;
|
|
36
36
|
private statusCallback?;
|
|
37
37
|
private txType?;
|
|
38
|
-
private
|
|
38
|
+
private priorityFeeSetting;
|
|
39
39
|
private errorsToThrow?;
|
|
40
40
|
private retries;
|
|
41
41
|
private retryDelay;
|
|
42
42
|
private statuses;
|
|
43
43
|
private lookupTables;
|
|
44
|
-
constructor(txHandler: SolautoClient | ReferralStateManager, statusCallback?: ((statuses: TransactionManagerStatuses) => void) | undefined, txType?: TransactionRunType | undefined,
|
|
44
|
+
constructor(txHandler: SolautoClient | ReferralStateManager, statusCallback?: ((statuses: TransactionManagerStatuses) => void) | undefined, txType?: TransactionRunType | undefined, priorityFeeSetting?: PriorityFeeSetting, errorsToThrow?: ErrorsToThrow | undefined, retries?: number, retryDelay?: number);
|
|
45
45
|
private assembleTransactionSets;
|
|
46
46
|
private updateStatus;
|
|
47
47
|
private debugAccounts;
|
|
48
|
-
|
|
49
|
-
|
|
48
|
+
private getUpdatedPriorityFeeSetting;
|
|
49
|
+
private updateStatusForSets;
|
|
50
|
+
clientSend(transactions: TransactionItem[]): Promise<TransactionManagerStatuses>;
|
|
51
|
+
send(items: TransactionItem[], initialized?: boolean): Promise<TransactionManagerStatuses>;
|
|
52
|
+
private processTransactionSet;
|
|
53
|
+
private refreshItemSet;
|
|
50
54
|
private sendTransaction;
|
|
51
55
|
}
|
|
52
56
|
//# 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;AAKzD,OAAO,EACL,aAAa,EAEd,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EACL,kBAAkB,
|
|
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;AAKzD,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;AAI7D,qBAAa,wBAAyB,SAAQ,KAAK;gBACrC,OAAO,EAAE,MAAM;CAK5B;AAqCD,qBAAa,eAAe;IAKjB,OAAO,EAAE,CACd,UAAU,EAAE,MAAM,KACf,OAAO,CAAC,qBAAqB,GAAG,SAAS,CAAC;IACxC,IAAI,CAAC,EAAE,MAAM;IAPtB,oBAAoB,EAAG,MAAM,EAAE,CAAC;IAChC,EAAE,CAAC,EAAE,kBAAkB,CAAC;gBAGf,OAAO,EAAE,CACd,UAAU,EAAE,MAAM,KACf,OAAO,CAAC,qBAAqB,GAAG,SAAS,CAAC,EACxC,IAAI,CAAC,EAAE,MAAM,YAAA;IAGhB,UAAU;IAIV,OAAO,CAAC,UAAU,EAAE,MAAM;IAMhC,cAAc,IAAI,MAAM,EAAE;CAY3B;AAgFD,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;IAK5B,OAAO,CAAC,SAAS;IACjB,OAAO,CAAC,cAAc,CAAC;IACvB,OAAO,CAAC,MAAM,CAAC;IACf,OAAO,CAAC,kBAAkB;IAC1B,OAAO,CAAC,aAAa,CAAC;IACtB,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,UAAU;IAVpB,OAAO,CAAC,QAAQ,CAAkC;IAClD,OAAO,CAAC,YAAY,CAAe;gBAGzB,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,aAAa,CAAC,EAAE,aAAa,YAAA,EAC7B,OAAO,GAAE,MAAU,EACnB,UAAU,GAAE,MAAY;YAQpB,uBAAuB;IAwCrC,OAAO,CAAC,YAAY;YA8CN,aAAa;IAoB3B,OAAO,CAAC,4BAA4B;IAUpC,OAAO,CAAC,mBAAmB;IAMd,UAAU,CACrB,YAAY,EAAE,eAAe,EAAE,GAC9B,OAAO,CAAC,0BAA0B,CAAC;IAyEzB,IAAI,CACf,KAAK,EAAE,eAAe,EAAE,EACxB,WAAW,CAAC,EAAE,OAAO,GACpB,OAAO,CAAC,0BAA0B,CAAC;YA6BxB,qBAAqB;YAiDrB,cAAc;YAqBd,eAAe;CAkD9B"}
|
|
@@ -9,11 +9,13 @@ const umi_1 = require("@metaplex-foundation/umi");
|
|
|
9
9
|
const solanaUtils_1 = require("../utils/solanaUtils");
|
|
10
10
|
const generalUtils_1 = require("../utils/generalUtils");
|
|
11
11
|
const transactionUtils_1 = require("./transactionUtils");
|
|
12
|
+
const types_1 = require("../types");
|
|
13
|
+
const web3_js_1 = require("@solana/web3.js");
|
|
12
14
|
// import { sendJitoBundledTransactions } from "../utils/jitoUtils";
|
|
13
15
|
class TransactionTooLargeError extends Error {
|
|
14
16
|
constructor(message) {
|
|
15
17
|
super(message);
|
|
16
|
-
this.name =
|
|
18
|
+
this.name = "TransactionTooLargeError";
|
|
17
19
|
Object.setPrototypeOf(this, TransactionTooLargeError.prototype);
|
|
18
20
|
}
|
|
19
21
|
}
|
|
@@ -127,11 +129,11 @@ var TransactionStatus;
|
|
|
127
129
|
TransactionStatus["Failed"] = "Failed";
|
|
128
130
|
})(TransactionStatus || (exports.TransactionStatus = TransactionStatus = {}));
|
|
129
131
|
class TransactionsManager {
|
|
130
|
-
constructor(txHandler, statusCallback, txType,
|
|
132
|
+
constructor(txHandler, statusCallback, txType, priorityFeeSetting = types_1.PriorityFeeSetting.Min, errorsToThrow, retries = 4, retryDelay = 150) {
|
|
131
133
|
this.txHandler = txHandler;
|
|
132
134
|
this.statusCallback = statusCallback;
|
|
133
135
|
this.txType = txType;
|
|
134
|
-
this.
|
|
136
|
+
this.priorityFeeSetting = priorityFeeSetting;
|
|
135
137
|
this.errorsToThrow = errorsToThrow;
|
|
136
138
|
this.retries = retries;
|
|
137
139
|
this.retryDelay = retryDelay;
|
|
@@ -222,7 +224,19 @@ class TransactionsManager {
|
|
|
222
224
|
}
|
|
223
225
|
}
|
|
224
226
|
}
|
|
225
|
-
|
|
227
|
+
getUpdatedPriorityFeeSetting(prevError) {
|
|
228
|
+
if (prevError instanceof web3_js_1.TransactionExpiredBlockheightExceededError) {
|
|
229
|
+
const currIdx = types_1.priorityFeeSettingValues.indexOf(this.priorityFeeSetting);
|
|
230
|
+
return types_1.priorityFeeSettingValues[Math.min(types_1.priorityFeeSettingValues.length - 1, currIdx + 1)];
|
|
231
|
+
}
|
|
232
|
+
return this.priorityFeeSetting;
|
|
233
|
+
}
|
|
234
|
+
updateStatusForSets(itemSets) {
|
|
235
|
+
itemSets.forEach((itemSet) => {
|
|
236
|
+
this.updateStatus(itemSet.name(), TransactionStatus.Queued, 0);
|
|
237
|
+
});
|
|
238
|
+
}
|
|
239
|
+
async clientSend(transactions) {
|
|
226
240
|
const items = [...transactions];
|
|
227
241
|
const client = this.txHandler;
|
|
228
242
|
const updateLookupTable = await client.updateLookupTable();
|
|
@@ -230,7 +244,7 @@ class TransactionsManager {
|
|
|
230
244
|
if (updateLookupTable &&
|
|
231
245
|
updateLookupTable.updateLutTx.getInstructions().length > 0 &&
|
|
232
246
|
updateLookupTable?.needsToBeIsolated) {
|
|
233
|
-
await (0, generalUtils_1.retryWithExponentialBackoff)(async (attemptNum) => await this.sendTransaction(updateLookupTable.updateLutTx, updateLutTxName, attemptNum,
|
|
247
|
+
await (0, generalUtils_1.retryWithExponentialBackoff)(async (attemptNum, prevError) => await this.sendTransaction(updateLookupTable.updateLutTx, updateLutTxName, attemptNum, this.getUpdatedPriorityFeeSetting(prevError)), 3, 150, this.errorsToThrow);
|
|
234
248
|
}
|
|
235
249
|
this.lookupTables.defaultLuts = client.defaultLookupTables();
|
|
236
250
|
for (const item of items) {
|
|
@@ -254,7 +268,7 @@ class TransactionsManager {
|
|
|
254
268
|
items.push(chore);
|
|
255
269
|
this.txHandler.log("Chores after: ", choresAfter.getInstructions().length);
|
|
256
270
|
}
|
|
257
|
-
const result = await this.send(items,
|
|
271
|
+
const result = await this.send(items, true).catch((e) => {
|
|
258
272
|
client.resetLiveTxUpdates(false);
|
|
259
273
|
throw e;
|
|
260
274
|
});
|
|
@@ -263,7 +277,7 @@ class TransactionsManager {
|
|
|
263
277
|
}
|
|
264
278
|
return result;
|
|
265
279
|
}
|
|
266
|
-
async send(items,
|
|
280
|
+
async send(items, initialized) {
|
|
267
281
|
this.statuses = [];
|
|
268
282
|
this.lookupTables.reset();
|
|
269
283
|
if (!initialized) {
|
|
@@ -272,73 +286,58 @@ class TransactionsManager {
|
|
|
272
286
|
}
|
|
273
287
|
}
|
|
274
288
|
const itemSets = await this.assembleTransactionSets(items);
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
this.
|
|
289
|
+
this.updateStatusForSets(itemSets);
|
|
290
|
+
if (this.txType === "only-simulate" && itemSets.length > 1) {
|
|
291
|
+
this.txHandler.log("Only simulate and more than 1 transaction. Skipping...");
|
|
292
|
+
return [];
|
|
278
293
|
}
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
// });
|
|
284
|
-
// await sendJitoBundledTransactions(
|
|
285
|
-
// this.client,
|
|
286
|
-
// await Promise.all(itemSets.map((x) => x.getSingleTransaction())),
|
|
287
|
-
// this.simulateOnly
|
|
288
|
-
// );
|
|
289
|
-
// TODO: check if successful or not
|
|
290
|
-
// itemSets.forEach((set) => {
|
|
291
|
-
// this.updateStatus(set.name(), TransactionStatus.Successful);
|
|
292
|
-
// });
|
|
294
|
+
let currentIndex = 0;
|
|
295
|
+
while (currentIndex < itemSets.length) {
|
|
296
|
+
await this.processTransactionSet(itemSets, currentIndex);
|
|
297
|
+
currentIndex++;
|
|
293
298
|
}
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
this.txHandler.log(this.statuses);
|
|
312
|
-
itemSets.splice(i + 1, itemSets.length - i - 1, ...newItemSets.slice(1));
|
|
313
|
-
}
|
|
314
|
-
return newItemSets.length > 0 ? newItemSets[0] : undefined;
|
|
315
|
-
};
|
|
316
|
-
let itemSet = itemSets[i];
|
|
317
|
-
await (0, generalUtils_1.retryWithExponentialBackoff)(async (attemptNum) => {
|
|
318
|
-
itemSet =
|
|
319
|
-
i > 0 || attemptNum > 0
|
|
320
|
-
? await getFreshItemSet(itemSet, attemptNum)
|
|
321
|
-
: itemSet;
|
|
322
|
-
if (!itemSet) {
|
|
323
|
-
return;
|
|
324
|
-
}
|
|
325
|
-
const tx = await itemSet.getSingleTransaction();
|
|
326
|
-
if (tx.getInstructions().length === 0) {
|
|
327
|
-
this.updateStatus(itemSet.name(), TransactionStatus.Skipped, attemptNum);
|
|
328
|
-
}
|
|
329
|
-
else {
|
|
330
|
-
await this.debugAccounts(itemSet, tx);
|
|
331
|
-
await this.sendTransaction(tx, itemSet.name(), attemptNum, prioritySetting);
|
|
332
|
-
}
|
|
333
|
-
}, this.retries, this.retryDelay, this.errorsToThrow);
|
|
299
|
+
return this.statuses;
|
|
300
|
+
}
|
|
301
|
+
async processTransactionSet(itemSets, currentIndex) {
|
|
302
|
+
let itemSet = itemSets[currentIndex];
|
|
303
|
+
await (0, generalUtils_1.retryWithExponentialBackoff)(async (attemptNum, prevError) => {
|
|
304
|
+
if (currentIndex > 0 || attemptNum > 0) {
|
|
305
|
+
itemSet = await this.refreshItemSet(itemSets, currentIndex, attemptNum);
|
|
306
|
+
}
|
|
307
|
+
if (!itemSet)
|
|
308
|
+
return;
|
|
309
|
+
const tx = await itemSet.getSingleTransaction();
|
|
310
|
+
if (tx.getInstructions().length === 0) {
|
|
311
|
+
this.updateStatus(itemSet.name(), TransactionStatus.Skipped, attemptNum);
|
|
312
|
+
}
|
|
313
|
+
else {
|
|
314
|
+
await this.debugAccounts(itemSet, tx);
|
|
315
|
+
await this.sendTransaction(tx, itemSet.name(), attemptNum, this.getUpdatedPriorityFeeSetting(prevError));
|
|
334
316
|
}
|
|
317
|
+
}, this.retries, this.retryDelay, this.errorsToThrow).catch((e) => {
|
|
318
|
+
if (itemSet) {
|
|
319
|
+
this.updateStatus(itemSet.name(), TransactionStatus.Failed, this.retries);
|
|
320
|
+
}
|
|
321
|
+
throw e;
|
|
322
|
+
});
|
|
323
|
+
}
|
|
324
|
+
async refreshItemSet(itemSets, currentIndex, attemptNum) {
|
|
325
|
+
const itemSet = itemSets[currentIndex];
|
|
326
|
+
await itemSet.refetchAll(attemptNum);
|
|
327
|
+
const newItemSets = await this.assembleTransactionSets([
|
|
328
|
+
...itemSet.items,
|
|
329
|
+
...itemSets.slice(currentIndex + 1).flatMap((set) => set.items),
|
|
330
|
+
]);
|
|
331
|
+
if (newItemSets.length > 1) {
|
|
332
|
+
itemSets.splice(currentIndex + 1, itemSets.length - currentIndex - 1, ...newItemSets.slice(1));
|
|
333
|
+
this.updateStatusForSets(newItemSets.slice(1));
|
|
335
334
|
}
|
|
336
|
-
return
|
|
335
|
+
return newItemSets[0];
|
|
337
336
|
}
|
|
338
|
-
async sendTransaction(tx, txName, attemptNum,
|
|
337
|
+
async sendTransaction(tx, txName, attemptNum, priorityFeeSetting) {
|
|
339
338
|
this.updateStatus(txName, TransactionStatus.Processing, attemptNum);
|
|
340
339
|
try {
|
|
341
|
-
const txSig = await (0, solanaUtils_1.sendSingleOptimizedTransaction)(this.txHandler.umi, this.txHandler.connection, tx, this.txType,
|
|
340
|
+
const txSig = await (0, solanaUtils_1.sendSingleOptimizedTransaction)(this.txHandler.umi, this.txHandler.connection, tx, this.txType, priorityFeeSetting, () => this.updateStatus(txName, TransactionStatus.Processing, attemptNum, undefined, true));
|
|
342
341
|
this.updateStatus(txName, TransactionStatus.Successful, attemptNum, txSig ? bs58_1.default.encode(txSig) : undefined);
|
|
343
342
|
}
|
|
344
343
|
catch (e) {
|
package/dist/types/solauto.d.ts
CHANGED
|
@@ -18,6 +18,7 @@ export declare enum PriorityFeeSetting {
|
|
|
18
18
|
Default = "Medium",
|
|
19
19
|
High = "High"
|
|
20
20
|
}
|
|
21
|
+
export declare const priorityFeeSettingValues: PriorityFeeSetting[];
|
|
21
22
|
export type RebalanceAction = "boost" | "repay" | "dca";
|
|
22
23
|
export type TransactionRunType = "skip-simulation" | "only-simulate" | "normal";
|
|
23
24
|
export interface TransactionItemInputs {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"solauto.d.ts","sourceRoot":"","sources":["../../src/types/solauto.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAE9D,MAAM,WAAW,sBAAsB;IACrC,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,SAAS,EAAE,SAAS,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,YAAY,CAAC;IAC3B,eAAe,EAAE,eAAe,CAAC;IACjC,eAAe,CAAC,EAAE,SAAS,CAAC;IAC5B,UAAU,CAAC,EAAE,SAAS,CAAC;IACvB,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB;AAED,oBAAY,kBAAkB;IAC5B,IAAI,SAAS;IACb,GAAG,QAAQ;IACX,GAAG,QAAQ;IACX,OAAO,WAAW;IAClB,IAAI,SAAS;CACd;AAED,MAAM,MAAM,eAAe,GAAG,OAAO,GAAG,OAAO,GAAG,KAAK,CAAC;AAExD,MAAM,MAAM,kBAAkB,GAAG,iBAAiB,GAAG,eAAe,GAAG,QAAQ,CAAC;AAEhF,MAAM,WAAW,qBAAqB;IACpC,EAAE,EAAE,kBAAkB,CAAC;IACvB,oBAAoB,CAAC,EAAE,MAAM,EAAE,CAAC;CACjC"}
|
|
1
|
+
{"version":3,"file":"solauto.d.ts","sourceRoot":"","sources":["../../src/types/solauto.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAE9D,MAAM,WAAW,sBAAsB;IACrC,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,SAAS,EAAE,SAAS,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,YAAY,CAAC;IAC3B,eAAe,EAAE,eAAe,CAAC;IACjC,eAAe,CAAC,EAAE,SAAS,CAAC;IAC5B,UAAU,CAAC,EAAE,SAAS,CAAC;IACvB,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB;AAED,oBAAY,kBAAkB;IAC5B,IAAI,SAAS;IACb,GAAG,QAAQ;IACX,GAAG,QAAQ;IACX,OAAO,WAAW;IAClB,IAAI,SAAS;CACd;AAED,eAAO,MAAM,wBAAwB,EAAwC,kBAAkB,EAAE,CAAC;AAElG,MAAM,MAAM,eAAe,GAAG,OAAO,GAAG,OAAO,GAAG,KAAK,CAAC;AAExD,MAAM,MAAM,kBAAkB,GAAG,iBAAiB,GAAG,eAAe,GAAG,QAAQ,CAAC;AAEhF,MAAM,WAAW,qBAAqB;IACpC,EAAE,EAAE,kBAAkB,CAAC;IACvB,oBAAoB,CAAC,EAAE,MAAM,EAAE,CAAC;CACjC"}
|
package/dist/types/solauto.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.PriorityFeeSetting = void 0;
|
|
3
|
+
exports.priorityFeeSettingValues = exports.PriorityFeeSetting = void 0;
|
|
4
4
|
var PriorityFeeSetting;
|
|
5
5
|
(function (PriorityFeeSetting) {
|
|
6
6
|
PriorityFeeSetting["None"] = "None";
|
|
@@ -9,3 +9,4 @@ var PriorityFeeSetting;
|
|
|
9
9
|
PriorityFeeSetting["Default"] = "Medium";
|
|
10
10
|
PriorityFeeSetting["High"] = "High";
|
|
11
11
|
})(PriorityFeeSetting || (exports.PriorityFeeSetting = PriorityFeeSetting = {}));
|
|
12
|
+
exports.priorityFeeSettingValues = Object.values(PriorityFeeSetting);
|
|
@@ -10,5 +10,5 @@ export declare function arraysAreEqual(arrayA: number[], arrayB: number[]): bool
|
|
|
10
10
|
export declare function fetchTokenPrices(mints: PublicKey[]): Promise<number[]>;
|
|
11
11
|
export declare function safeGetPrice(mint: PublicKey | UmiPublicKey | undefined): number | undefined;
|
|
12
12
|
export type ErrorsToThrow = Array<new (...args: any[]) => Error>;
|
|
13
|
-
export declare function retryWithExponentialBackoff<T>(fn: (attemptNum: number) => Promise<T>, retries?: number, delay?: number, errorsToThrow?: ErrorsToThrow): Promise<T>;
|
|
13
|
+
export declare function retryWithExponentialBackoff<T>(fn: (attemptNum: number, prevErr?: Error) => Promise<T>, retries?: number, delay?: number, errorsToThrow?: ErrorsToThrow): Promise<T>;
|
|
14
14
|
//# sourceMappingURL=generalUtils.d.ts.map
|
|
@@ -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,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,CAsD5E;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,
|
|
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,CAsD5E;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,EAAE,OAAO,CAAC,EAAE,KAAK,KAAK,OAAO,CAAC,CAAC,CAAC,EACvD,OAAO,GAAE,MAAU,EACnB,KAAK,GAAE,MAAY,EACnB,aAAa,CAAC,EAAE,aAAa,GAC5B,OAAO,CAAC,CAAC,CAAC,CA8BZ"}
|
|
@@ -97,8 +97,8 @@ function safeGetPrice(mint) {
|
|
|
97
97
|
}
|
|
98
98
|
function retryWithExponentialBackoff(fn, retries = 5, delay = 150, errorsToThrow) {
|
|
99
99
|
return new Promise((resolve, reject) => {
|
|
100
|
-
const attempt = (attemptNum) => {
|
|
101
|
-
fn(attemptNum)
|
|
100
|
+
const attempt = (attemptNum, prevErr) => {
|
|
101
|
+
fn(attemptNum, prevErr)
|
|
102
102
|
.then(resolve)
|
|
103
103
|
.catch((error) => {
|
|
104
104
|
attemptNum++;
|
|
@@ -111,7 +111,7 @@ function retryWithExponentialBackoff(fn, retries = 5, delay = 150, errorsToThrow
|
|
|
111
111
|
consoleLog(error);
|
|
112
112
|
setTimeout(() => {
|
|
113
113
|
consoleLog("Retrying...");
|
|
114
|
-
return attempt(attemptNum);
|
|
114
|
+
return attempt(attemptNum, error);
|
|
115
115
|
}, delay);
|
|
116
116
|
delay *= 2;
|
|
117
117
|
}
|
package/package.json
CHANGED
|
@@ -17,16 +17,18 @@ import {
|
|
|
17
17
|
import { getErrorInfo, getTransactionChores } from "./transactionUtils";
|
|
18
18
|
import {
|
|
19
19
|
PriorityFeeSetting,
|
|
20
|
+
priorityFeeSettingValues,
|
|
20
21
|
TransactionItemInputs,
|
|
21
22
|
TransactionRunType,
|
|
22
23
|
} from "../types";
|
|
23
24
|
import { ReferralStateManager, TxHandler } from "../clients";
|
|
25
|
+
import { TransactionExpiredBlockheightExceededError } from "@solana/web3.js";
|
|
24
26
|
// import { sendJitoBundledTransactions } from "../utils/jitoUtils";
|
|
25
27
|
|
|
26
28
|
export class TransactionTooLargeError extends Error {
|
|
27
29
|
constructor(message: string) {
|
|
28
30
|
super(message);
|
|
29
|
-
this.name =
|
|
31
|
+
this.name = "TransactionTooLargeError";
|
|
30
32
|
Object.setPrototypeOf(this, TransactionTooLargeError.prototype);
|
|
31
33
|
}
|
|
32
34
|
}
|
|
@@ -204,10 +206,10 @@ export class TransactionsManager {
|
|
|
204
206
|
private txHandler: SolautoClient | ReferralStateManager,
|
|
205
207
|
private statusCallback?: (statuses: TransactionManagerStatuses) => void,
|
|
206
208
|
private txType?: TransactionRunType,
|
|
207
|
-
private
|
|
209
|
+
private priorityFeeSetting: PriorityFeeSetting = PriorityFeeSetting.Min,
|
|
208
210
|
private errorsToThrow?: ErrorsToThrow,
|
|
209
211
|
private retries: number = 4,
|
|
210
|
-
private retryDelay: number = 150
|
|
212
|
+
private retryDelay: number = 150
|
|
211
213
|
) {
|
|
212
214
|
this.lookupTables = new LookupTables(
|
|
213
215
|
this.txHandler.defaultLookupTables(),
|
|
@@ -321,9 +323,24 @@ export class TransactionsManager {
|
|
|
321
323
|
}
|
|
322
324
|
}
|
|
323
325
|
|
|
326
|
+
private getUpdatedPriorityFeeSetting(prevError?: Error) {
|
|
327
|
+
if (prevError instanceof TransactionExpiredBlockheightExceededError) {
|
|
328
|
+
const currIdx = priorityFeeSettingValues.indexOf(this.priorityFeeSetting);
|
|
329
|
+
return priorityFeeSettingValues[
|
|
330
|
+
Math.min(priorityFeeSettingValues.length - 1, currIdx + 1)
|
|
331
|
+
];
|
|
332
|
+
}
|
|
333
|
+
return this.priorityFeeSetting;
|
|
334
|
+
}
|
|
335
|
+
|
|
336
|
+
private updateStatusForSets(itemSets: TransactionSet[]) {
|
|
337
|
+
itemSets.forEach((itemSet) => {
|
|
338
|
+
this.updateStatus(itemSet.name(), TransactionStatus.Queued, 0);
|
|
339
|
+
});
|
|
340
|
+
}
|
|
341
|
+
|
|
324
342
|
public async clientSend(
|
|
325
|
-
transactions: TransactionItem[]
|
|
326
|
-
prioritySetting?: PriorityFeeSetting
|
|
343
|
+
transactions: TransactionItem[]
|
|
327
344
|
): Promise<TransactionManagerStatuses> {
|
|
328
345
|
const items = [...transactions];
|
|
329
346
|
const client = this.txHandler as SolautoClient;
|
|
@@ -336,12 +353,12 @@ export class TransactionsManager {
|
|
|
336
353
|
updateLookupTable?.needsToBeIsolated
|
|
337
354
|
) {
|
|
338
355
|
await retryWithExponentialBackoff(
|
|
339
|
-
async (attemptNum) =>
|
|
356
|
+
async (attemptNum, prevError) =>
|
|
340
357
|
await this.sendTransaction(
|
|
341
358
|
updateLookupTable.updateLutTx,
|
|
342
359
|
updateLutTxName,
|
|
343
360
|
attemptNum,
|
|
344
|
-
|
|
361
|
+
this.getUpdatedPriorityFeeSetting(prevError)
|
|
345
362
|
),
|
|
346
363
|
3,
|
|
347
364
|
150,
|
|
@@ -385,7 +402,7 @@ export class TransactionsManager {
|
|
|
385
402
|
);
|
|
386
403
|
}
|
|
387
404
|
|
|
388
|
-
const result = await this.send(items,
|
|
405
|
+
const result = await this.send(items, true).catch((e) => {
|
|
389
406
|
client.resetLiveTxUpdates(false);
|
|
390
407
|
throw e;
|
|
391
408
|
});
|
|
@@ -399,7 +416,6 @@ export class TransactionsManager {
|
|
|
399
416
|
|
|
400
417
|
public async send(
|
|
401
418
|
items: TransactionItem[],
|
|
402
|
-
prioritySetting?: PriorityFeeSetting,
|
|
403
419
|
initialized?: boolean
|
|
404
420
|
): Promise<TransactionManagerStatuses> {
|
|
405
421
|
this.statuses = [];
|
|
@@ -412,104 +428,99 @@ export class TransactionsManager {
|
|
|
412
428
|
}
|
|
413
429
|
|
|
414
430
|
const itemSets = await this.assembleTransactionSets(items);
|
|
415
|
-
|
|
416
|
-
for (const itemSet of itemSets) {
|
|
417
|
-
this.updateStatus(itemSet.name(), TransactionStatus.Queued, 0);
|
|
418
|
-
}
|
|
431
|
+
this.updateStatusForSets(itemSets);
|
|
419
432
|
|
|
420
|
-
if (this.
|
|
421
|
-
|
|
422
|
-
|
|
433
|
+
if (this.txType === "only-simulate" && itemSets.length > 1) {
|
|
434
|
+
this.txHandler.log(
|
|
435
|
+
"Only simulate and more than 1 transaction. Skipping..."
|
|
423
436
|
);
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
}
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
return;
|
|
479
|
-
}
|
|
480
|
-
const tx = await itemSet.getSingleTransaction();
|
|
481
|
-
|
|
482
|
-
if (tx.getInstructions().length === 0) {
|
|
483
|
-
this.updateStatus(
|
|
484
|
-
itemSet.name(),
|
|
485
|
-
TransactionStatus.Skipped,
|
|
486
|
-
attemptNum
|
|
487
|
-
);
|
|
488
|
-
} else {
|
|
489
|
-
await this.debugAccounts(itemSet, tx);
|
|
490
|
-
await this.sendTransaction(
|
|
491
|
-
tx,
|
|
492
|
-
itemSet.name(),
|
|
493
|
-
attemptNum,
|
|
494
|
-
prioritySetting
|
|
495
|
-
);
|
|
496
|
-
}
|
|
497
|
-
},
|
|
437
|
+
return [];
|
|
438
|
+
}
|
|
439
|
+
|
|
440
|
+
let currentIndex = 0;
|
|
441
|
+
while (currentIndex < itemSets.length) {
|
|
442
|
+
await this.processTransactionSet(itemSets, currentIndex);
|
|
443
|
+
currentIndex++;
|
|
444
|
+
}
|
|
445
|
+
|
|
446
|
+
return this.statuses;
|
|
447
|
+
}
|
|
448
|
+
|
|
449
|
+
private async processTransactionSet(
|
|
450
|
+
itemSets: TransactionSet[],
|
|
451
|
+
currentIndex: number
|
|
452
|
+
) {
|
|
453
|
+
let itemSet: TransactionSet | undefined = itemSets[currentIndex];
|
|
454
|
+
|
|
455
|
+
await retryWithExponentialBackoff(
|
|
456
|
+
async (attemptNum, prevError) => {
|
|
457
|
+
if (currentIndex > 0 || attemptNum > 0) {
|
|
458
|
+
itemSet = await this.refreshItemSet(
|
|
459
|
+
itemSets,
|
|
460
|
+
currentIndex,
|
|
461
|
+
attemptNum
|
|
462
|
+
);
|
|
463
|
+
}
|
|
464
|
+
if (!itemSet) return;
|
|
465
|
+
|
|
466
|
+
const tx = await itemSet.getSingleTransaction();
|
|
467
|
+
if (tx.getInstructions().length === 0) {
|
|
468
|
+
this.updateStatus(
|
|
469
|
+
itemSet.name(),
|
|
470
|
+
TransactionStatus.Skipped,
|
|
471
|
+
attemptNum
|
|
472
|
+
);
|
|
473
|
+
} else {
|
|
474
|
+
await this.debugAccounts(itemSet, tx);
|
|
475
|
+
await this.sendTransaction(
|
|
476
|
+
tx,
|
|
477
|
+
itemSet.name(),
|
|
478
|
+
attemptNum,
|
|
479
|
+
this.getUpdatedPriorityFeeSetting(prevError)
|
|
480
|
+
);
|
|
481
|
+
}
|
|
482
|
+
},
|
|
483
|
+
this.retries,
|
|
484
|
+
this.retryDelay,
|
|
485
|
+
this.errorsToThrow
|
|
486
|
+
).catch((e) => {
|
|
487
|
+
if (itemSet) {
|
|
488
|
+
this.updateStatus(
|
|
489
|
+
itemSet.name(),
|
|
490
|
+
TransactionStatus.Failed,
|
|
498
491
|
this.retries,
|
|
499
|
-
this.retryDelay,
|
|
500
|
-
this.errorsToThrow
|
|
501
492
|
);
|
|
502
493
|
}
|
|
503
|
-
|
|
494
|
+
throw e;
|
|
495
|
+
});
|
|
496
|
+
}
|
|
504
497
|
|
|
505
|
-
|
|
498
|
+
private async refreshItemSet(
|
|
499
|
+
itemSets: TransactionSet[],
|
|
500
|
+
currentIndex: number,
|
|
501
|
+
attemptNum: number
|
|
502
|
+
): Promise<TransactionSet | undefined> {
|
|
503
|
+
const itemSet = itemSets[currentIndex];
|
|
504
|
+
await itemSet.refetchAll(attemptNum);
|
|
505
|
+
|
|
506
|
+
const newItemSets = await this.assembleTransactionSets([
|
|
507
|
+
...itemSet.items,
|
|
508
|
+
...itemSets.slice(currentIndex + 1).flatMap((set) => set.items),
|
|
509
|
+
]);
|
|
510
|
+
|
|
511
|
+
if (newItemSets.length > 1) {
|
|
512
|
+
itemSets.splice(currentIndex + 1, itemSets.length - currentIndex - 1, ...newItemSets.slice(1));
|
|
513
|
+
this.updateStatusForSets(newItemSets.slice(1));
|
|
514
|
+
}
|
|
515
|
+
|
|
516
|
+
return newItemSets[0];
|
|
506
517
|
}
|
|
507
518
|
|
|
508
519
|
private async sendTransaction(
|
|
509
520
|
tx: TransactionBuilder,
|
|
510
521
|
txName: string,
|
|
511
522
|
attemptNum: number,
|
|
512
|
-
|
|
523
|
+
priorityFeeSetting?: PriorityFeeSetting
|
|
513
524
|
) {
|
|
514
525
|
this.updateStatus(txName, TransactionStatus.Processing, attemptNum);
|
|
515
526
|
try {
|
|
@@ -518,7 +529,7 @@ export class TransactionsManager {
|
|
|
518
529
|
this.txHandler.connection,
|
|
519
530
|
tx,
|
|
520
531
|
this.txType,
|
|
521
|
-
|
|
532
|
+
priorityFeeSetting,
|
|
522
533
|
() =>
|
|
523
534
|
this.updateStatus(
|
|
524
535
|
txName,
|
package/src/types/solauto.ts
CHANGED
|
@@ -21,6 +21,8 @@ export enum PriorityFeeSetting {
|
|
|
21
21
|
High = "High",
|
|
22
22
|
}
|
|
23
23
|
|
|
24
|
+
export const priorityFeeSettingValues = Object.values(PriorityFeeSetting) as PriorityFeeSetting[];
|
|
25
|
+
|
|
24
26
|
export type RebalanceAction = "boost" | "repay" | "dca";
|
|
25
27
|
|
|
26
28
|
export type TransactionRunType = "skip-simulation" | "only-simulate" | "normal";
|
|
@@ -125,14 +125,14 @@ export function safeGetPrice(
|
|
|
125
125
|
export type ErrorsToThrow = Array<new (...args: any[]) => Error>;
|
|
126
126
|
|
|
127
127
|
export function retryWithExponentialBackoff<T>(
|
|
128
|
-
fn: (attemptNum: number) => Promise<T>,
|
|
128
|
+
fn: (attemptNum: number, prevErr?: Error) => Promise<T>,
|
|
129
129
|
retries: number = 5,
|
|
130
130
|
delay: number = 150,
|
|
131
131
|
errorsToThrow?: ErrorsToThrow
|
|
132
132
|
): Promise<T> {
|
|
133
133
|
return new Promise((resolve, reject) => {
|
|
134
|
-
const attempt = (attemptNum: number) => {
|
|
135
|
-
fn(attemptNum)
|
|
134
|
+
const attempt = (attemptNum: number, prevErr?: Error) => {
|
|
135
|
+
fn(attemptNum, prevErr)
|
|
136
136
|
.then(resolve)
|
|
137
137
|
.catch((error: Error) => {
|
|
138
138
|
attemptNum++;
|
|
@@ -149,7 +149,7 @@ export function retryWithExponentialBackoff<T>(
|
|
|
149
149
|
consoleLog(error);
|
|
150
150
|
setTimeout(() => {
|
|
151
151
|
consoleLog("Retrying...");
|
|
152
|
-
return attempt(attemptNum);
|
|
152
|
+
return attempt(attemptNum, error);
|
|
153
153
|
}, delay);
|
|
154
154
|
delay *= 2;
|
|
155
155
|
} else {
|
|
@@ -14,9 +14,10 @@ import {
|
|
|
14
14
|
toBaseUnit,
|
|
15
15
|
} from "../../src/utils/numberUtils";
|
|
16
16
|
import { NATIVE_MINT } from "@solana/spl-token";
|
|
17
|
-
import { fetchTokenPrices } from "../../src/utils/generalUtils";
|
|
17
|
+
import { consoleLog, fetchTokenPrices } from "../../src/utils/generalUtils";
|
|
18
18
|
import {
|
|
19
19
|
TransactionItem,
|
|
20
|
+
TransactionManagerStatuses,
|
|
20
21
|
TransactionsManager,
|
|
21
22
|
} from "../../src/transactions/transactionsManager";
|
|
22
23
|
import { PublicKey } from "@solana/web3.js";
|
|
@@ -29,8 +30,7 @@ describe("Solauto Marginfi tests", async () => {
|
|
|
29
30
|
// const signer = setupTest("solauto-manager");
|
|
30
31
|
|
|
31
32
|
const payForTransactions = false;
|
|
32
|
-
const
|
|
33
|
-
const positionId = 1;
|
|
33
|
+
const positionId = 2;
|
|
34
34
|
|
|
35
35
|
it("open - deposit - borrow - rebalance to 0 - withdraw - close", async () => {
|
|
36
36
|
const client = new SolautoMarginfiClient(
|
|
@@ -49,8 +49,8 @@ describe("Solauto Marginfi tests", async () => {
|
|
|
49
49
|
// marginfiAccount: new PublicKey(
|
|
50
50
|
// "4nNvUXF5YqHFcH2nGweSiuvy1ct7V5FXfoCLKFYUN36z"
|
|
51
51
|
// ),
|
|
52
|
-
|
|
53
|
-
|
|
52
|
+
supplyMint: NATIVE_MINT,
|
|
53
|
+
debtMint: new PublicKey(USDC),
|
|
54
54
|
});
|
|
55
55
|
|
|
56
56
|
const transactionItems: TransactionItem[] = [];
|
|
@@ -78,7 +78,7 @@ describe("Solauto Marginfi tests", async () => {
|
|
|
78
78
|
// // const [supplyPrice] = await fetchTokenPrices([supply]);
|
|
79
79
|
// return {
|
|
80
80
|
// tx: client.protocolInteraction(
|
|
81
|
-
// solautoAction("Deposit", [toBaseUnit(
|
|
81
|
+
// solautoAction("Deposit", [toBaseUnit(0.5, supplyDecimals)])
|
|
82
82
|
// ),
|
|
83
83
|
// };
|
|
84
84
|
// }, "deposit")
|
|
@@ -117,6 +117,14 @@ describe("Solauto Marginfi tests", async () => {
|
|
|
117
117
|
)
|
|
118
118
|
);
|
|
119
119
|
|
|
120
|
+
// transactionItems.push(
|
|
121
|
+
// new TransactionItem(
|
|
122
|
+
// async (attemptNum) =>
|
|
123
|
+
// await buildSolautoRebalanceTransaction(client, 0, attemptNum),
|
|
124
|
+
// "rebalance"
|
|
125
|
+
// )
|
|
126
|
+
// );
|
|
127
|
+
|
|
120
128
|
// transactionItems.push(
|
|
121
129
|
// new TransactionItem(
|
|
122
130
|
// async () => ({
|
|
@@ -137,11 +145,15 @@ describe("Solauto Marginfi tests", async () => {
|
|
|
137
145
|
// )
|
|
138
146
|
// );
|
|
139
147
|
|
|
140
|
-
await new TransactionsManager(
|
|
148
|
+
const statuses = await new TransactionsManager(
|
|
141
149
|
client,
|
|
142
|
-
|
|
150
|
+
(statuses: TransactionManagerStatuses) => {
|
|
151
|
+
console.log(statuses);
|
|
152
|
+
},
|
|
143
153
|
!payForTransactions ? "only-simulate" : "normal",
|
|
144
|
-
|
|
145
|
-
).clientSend(transactionItems
|
|
154
|
+
PriorityFeeSetting.Low
|
|
155
|
+
).clientSend(transactionItems);
|
|
156
|
+
|
|
157
|
+
// console.log(statuses);
|
|
146
158
|
});
|
|
147
159
|
});
|