@haven-fi/solauto-sdk 1.0.711 → 1.0.713
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/services/rebalance/rebalanceTxBuilder.d.ts +2 -1
- package/dist/services/rebalance/rebalanceTxBuilder.d.ts.map +1 -1
- package/dist/services/rebalance/rebalanceTxBuilder.js +3 -2
- package/dist/services/transactions/manager/transactionsManager.d.ts +1 -0
- package/dist/services/transactions/manager/transactionsManager.d.ts.map +1 -1
- package/dist/services/transactions/manager/transactionsManager.js +18 -7
- package/dist/utils/instructionUtils.d.ts +1 -1
- package/dist/utils/instructionUtils.d.ts.map +1 -1
- package/dist/utils/instructionUtils.js +2 -2
- package/local/txSandbox.ts +2 -2
- package/package.json +1 -1
- package/src/services/rebalance/rebalanceTxBuilder.ts +3 -2
- package/src/services/transactions/manager/transactionsManager.ts +31 -11
- package/src/utils/instructionUtils.ts +4 -2
@@ -4,12 +4,13 @@ export declare class RebalanceTxBuilder {
|
|
4
4
|
private client;
|
5
5
|
private targetLiqUtilizationRateBps?;
|
6
6
|
private optimizeSize?;
|
7
|
+
private bpsDistanceFromRebalance?;
|
7
8
|
private values;
|
8
9
|
private rebalanceType;
|
9
10
|
private swapManager;
|
10
11
|
private flRequirements?;
|
11
12
|
private priceType;
|
12
|
-
constructor(client: SolautoClient, targetLiqUtilizationRateBps?: number | undefined, optimizeSize?: boolean | undefined);
|
13
|
+
constructor(client: SolautoClient, targetLiqUtilizationRateBps?: number | undefined, optimizeSize?: boolean | undefined, bpsDistanceFromRebalance?: number | undefined);
|
13
14
|
private shouldProceedWithRebalance;
|
14
15
|
private getRebalanceValues;
|
15
16
|
private getFlLiquiditySource;
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"rebalanceTxBuilder.d.ts","sourceRoot":"","sources":["../../../src/services/rebalance/rebalanceTxBuilder.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,EAGL,qBAAqB,EACtB,MAAM,aAAa,CAAC;AAiCrB,qBAAa,kBAAkB;IAQ3B,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,2BAA2B,CAAC;IACpC,OAAO,CAAC,YAAY,CAAC;
|
1
|
+
{"version":3,"file":"rebalanceTxBuilder.d.ts","sourceRoot":"","sources":["../../../src/services/rebalance/rebalanceTxBuilder.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,EAGL,qBAAqB,EACtB,MAAM,aAAa,CAAC;AAiCrB,qBAAa,kBAAkB;IAQ3B,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,2BAA2B,CAAC;IACpC,OAAO,CAAC,YAAY,CAAC;IACrB,OAAO,CAAC,wBAAwB,CAAC;IAVnC,OAAO,CAAC,MAAM,CAAmB;IACjC,OAAO,CAAC,aAAa,CAAwB;IAC7C,OAAO,CAAC,WAAW,CAAwB;IAC3C,OAAO,CAAC,cAAc,CAAC,CAAwB;IAC/C,OAAO,CAAC,SAAS,CAAiC;gBAGxC,MAAM,EAAE,aAAa,EACrB,2BAA2B,CAAC,EAAE,MAAM,YAAA,EACpC,YAAY,CAAC,EAAE,OAAO,YAAA,EACtB,wBAAwB,CAAC,EAAE,MAAM,YAAA;IAG3C,OAAO,CAAC,0BAA0B;IAclC,OAAO,CAAC,kBAAkB;IAc1B,OAAO,CAAC,oBAAoB;IAwC5B,OAAO,CAAC,iCAAiC;YAgC3B,qBAAqB;IA0CnC,OAAO,CAAC,mBAAmB;IAwB3B,OAAO,CAAC,gBAAgB;IA+BxB,OAAO,CAAC,yBAAyB;YAqBnB,mBAAmB;YAyBnB,sBAAsB;YAyBtB,mBAAmB;IAsFpB,gBAAgB,CAC3B,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,qBAAqB,GAAG,SAAS,CAAC;CAe9C"}
|
@@ -10,10 +10,11 @@ const rebalanceValues_1 = require("./rebalanceValues");
|
|
10
10
|
const solautoFees_1 = require("./solautoFees");
|
11
11
|
const rebalanceSwapManager_1 = require("./rebalanceSwapManager");
|
12
12
|
class RebalanceTxBuilder {
|
13
|
-
constructor(client, targetLiqUtilizationRateBps, optimizeSize) {
|
13
|
+
constructor(client, targetLiqUtilizationRateBps, optimizeSize, bpsDistanceFromRebalance) {
|
14
14
|
this.client = client;
|
15
15
|
this.targetLiqUtilizationRateBps = targetLiqUtilizationRateBps;
|
16
16
|
this.optimizeSize = optimizeSize;
|
17
|
+
this.bpsDistanceFromRebalance = bpsDistanceFromRebalance;
|
17
18
|
this.priceType = generated_1.PriceType.Realtime;
|
18
19
|
}
|
19
20
|
shouldProceedWithRebalance() {
|
@@ -22,7 +23,7 @@ class RebalanceTxBuilder {
|
|
22
23
|
}
|
23
24
|
return (this.client.pos.supplyUsd() > 0 &&
|
24
25
|
(this.targetLiqUtilizationRateBps !== undefined ||
|
25
|
-
this.client.pos.eligibleForRebalance()));
|
26
|
+
this.client.pos.eligibleForRebalance(this.bpsDistanceFromRebalance)));
|
26
27
|
}
|
27
28
|
getRebalanceValues() {
|
28
29
|
return (0, rebalanceValues_1.getRebalanceValues)(this.client.pos, this.priceType, this.targetLiqUtilizationRateBps, solautoFees_1.SolautoFeesBps.create(this.client.isReferred, this.targetLiqUtilizationRateBps, this.client.pos.netWorthUsd(this.priceType)), this.flRequirements?.flFeeBps ?? 0);
|
@@ -55,6 +55,7 @@ export declare class TransactionsManager<T extends TxHandler> {
|
|
55
55
|
protected getUpdatedPriorityFeeSetting(prevError: Error | undefined, attemptNum: number): PriorityFeeSetting;
|
56
56
|
private updateStatusForSets;
|
57
57
|
send(items: TransactionItem[]): Promise<TransactionManagerStatuses>;
|
58
|
+
private shouldProceedToSend;
|
58
59
|
private processTransactionsAtomically;
|
59
60
|
private processTransactionSet;
|
60
61
|
private refreshItemSets;
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"transactionsManager.d.ts","sourceRoot":"","sources":["../../../../src/services/transactions/manager/transactionsManager.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,EACL,kBAAkB,EAElB,kBAAkB,EACnB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAEL,aAAa,EAId,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAE1C,OAAO,EAAE,YAAY,EAAE,eAAe,EAAkB,MAAM,UAAU,CAAC;AAEzE,qBAAa,wBAAyB,SAAQ,KAAK;gBACrC,OAAO,EAAE,MAAM;CAK5B;AAED,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,MAAM,WAAW,uBAAuB,CAAC,CAAC,SAAS,SAAS;IAC1D,SAAS,EAAE,CAAC,CAAC;IACb,cAAc,CAAC,EAAE,CAAC,QAAQ,EAAE,0BAA0B,KAAK,IAAI,CAAC;IAChE,SAAS,CAAC,EAAE,kBAAkB,CAAC;IAC/B,kBAAkB,CAAC,EAAE,kBAAkB,CAAC;IACxC,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,WAAW,CAAC,EAAE,WAAW,CAAC;CAC3B;AAED,qBAAa,mBAAmB,CAAC,CAAC,SAAS,SAAS;IAClD,SAAS,CAAC,SAAS,EAAE,CAAC,CAAC;IACvB,SAAS,CAAC,cAAc,CAAC,EAAE,CAAC,QAAQ,EAAE,0BAA0B,KAAK,IAAI,CAAC;IAC1E,SAAS,CAAC,SAAS,CAAC,EAAE,kBAAkB,CAAC;IACzC,SAAS,CAAC,kBAAkB,EAAE,kBAAkB,CAAC;IACjD,SAAS,CAAC,UAAU,EAAE,OAAO,CAAC;IAC9B,SAAS,CAAC,aAAa,CAAC,EAAE,aAAa,CAAC;IACxC,SAAS,CAAC,QAAQ,EAAE,0BAA0B,CAAM;IACpD,SAAS,CAAC,YAAY,EAAE,YAAY,CAAC;IACrC,SAAS,CAAC,eAAe,EAAE,MAAM,CAAC;IAClC,SAAS,CAAC,YAAY,EAAE,MAAM,CAAC;IAC/B,SAAS,CAAC,UAAU,EAAE,MAAM,CAAC;IAE7B,kBAAkB,SAAmB;gBAEzB,IAAI,EAAE,uBAAuB,CAAC,CAAC,CAAC;YAmB9B,uBAAuB;IA0CrC,OAAO,CAAC,YAAY;YA6CN,aAAa;IAoB3B,SAAS,CAAC,4BAA4B,CACpC,SAAS,EAAE,KAAK,GAAG,SAAS,EAC5B,UAAU,EAAE,MAAM;IAcpB,OAAO,CAAC,mBAAmB;IAoBd,IAAI,CACf,KAAK,EAAE,eAAe,EAAE,GACvB,OAAO,CAAC,0BAA0B,CAAC;
|
1
|
+
{"version":3,"file":"transactionsManager.d.ts","sourceRoot":"","sources":["../../../../src/services/transactions/manager/transactionsManager.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,EACL,kBAAkB,EAElB,kBAAkB,EACnB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAEL,aAAa,EAId,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAE1C,OAAO,EAAE,YAAY,EAAE,eAAe,EAAkB,MAAM,UAAU,CAAC;AAEzE,qBAAa,wBAAyB,SAAQ,KAAK;gBACrC,OAAO,EAAE,MAAM;CAK5B;AAED,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,MAAM,WAAW,uBAAuB,CAAC,CAAC,SAAS,SAAS;IAC1D,SAAS,EAAE,CAAC,CAAC;IACb,cAAc,CAAC,EAAE,CAAC,QAAQ,EAAE,0BAA0B,KAAK,IAAI,CAAC;IAChE,SAAS,CAAC,EAAE,kBAAkB,CAAC;IAC/B,kBAAkB,CAAC,EAAE,kBAAkB,CAAC;IACxC,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,WAAW,CAAC,EAAE,WAAW,CAAC;CAC3B;AAED,qBAAa,mBAAmB,CAAC,CAAC,SAAS,SAAS;IAClD,SAAS,CAAC,SAAS,EAAE,CAAC,CAAC;IACvB,SAAS,CAAC,cAAc,CAAC,EAAE,CAAC,QAAQ,EAAE,0BAA0B,KAAK,IAAI,CAAC;IAC1E,SAAS,CAAC,SAAS,CAAC,EAAE,kBAAkB,CAAC;IACzC,SAAS,CAAC,kBAAkB,EAAE,kBAAkB,CAAC;IACjD,SAAS,CAAC,UAAU,EAAE,OAAO,CAAC;IAC9B,SAAS,CAAC,aAAa,CAAC,EAAE,aAAa,CAAC;IACxC,SAAS,CAAC,QAAQ,EAAE,0BAA0B,CAAM;IACpD,SAAS,CAAC,YAAY,EAAE,YAAY,CAAC;IACrC,SAAS,CAAC,eAAe,EAAE,MAAM,CAAC;IAClC,SAAS,CAAC,YAAY,EAAE,MAAM,CAAC;IAC/B,SAAS,CAAC,UAAU,EAAE,MAAM,CAAC;IAE7B,kBAAkB,SAAmB;gBAEzB,IAAI,EAAE,uBAAuB,CAAC,CAAC,CAAC;YAmB9B,uBAAuB;IA0CrC,OAAO,CAAC,YAAY;YA6CN,aAAa;IAoB3B,SAAS,CAAC,4BAA4B,CACpC,SAAS,EAAE,KAAK,GAAG,SAAS,EAC5B,UAAU,EAAE,MAAM;IAcpB,OAAO,CAAC,mBAAmB;IAoBd,IAAI,CACf,KAAK,EAAE,eAAe,EAAE,GACvB,OAAO,CAAC,0BAA0B,CAAC;IA8BtC,OAAO,CAAC,mBAAmB;YAoBb,6BAA6B;YAwJ7B,qBAAqB;YAmDrB,eAAe;cAkDb,eAAe,CAC7B,EAAE,EAAE,kBAAkB,EACtB,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,MAAM,EAClB,kBAAkB,CAAC,EAAE,kBAAkB,EACvC,SAAS,CAAC,EAAE,kBAAkB;CAyDjC"}
|
@@ -165,6 +165,19 @@ class TransactionsManager {
|
|
165
165
|
}
|
166
166
|
return this.statuses;
|
167
167
|
}
|
168
|
+
shouldProceedToSend(itemSets, attemptNum) {
|
169
|
+
if (!itemSets) {
|
170
|
+
return false;
|
171
|
+
}
|
172
|
+
const newItemSetNames = itemSets.flatMap((x) => x.items.map((y) => y.name ?? ""));
|
173
|
+
if (newItemSetNames.length === 1 &&
|
174
|
+
newItemSetNames[0] === this.updateOracleTxName) {
|
175
|
+
(0, utils_1.consoleLog)("Skipping unnecessary oracle update");
|
176
|
+
this.updateStatusForSets(itemSets, TransactionStatus.Skipped, attemptNum);
|
177
|
+
return false;
|
178
|
+
}
|
179
|
+
return true;
|
180
|
+
}
|
168
181
|
async processTransactionsAtomically(itemSets) {
|
169
182
|
let num = 0;
|
170
183
|
let priorityFeeSetting;
|
@@ -186,6 +199,9 @@ class TransactionsManager {
|
|
186
199
|
itemSets = refreshedSets;
|
187
200
|
}
|
188
201
|
}
|
202
|
+
if (!this.shouldProceedToSend(itemSets, attemptNum)) {
|
203
|
+
return;
|
204
|
+
}
|
189
205
|
transactions = [];
|
190
206
|
for (const set of itemSets) {
|
191
207
|
transactions.push(await set.getSingleTransaction());
|
@@ -242,8 +258,9 @@ class TransactionsManager {
|
|
242
258
|
const refreshedSets = await this.refreshItemSets(itemSets, attemptNum, prevError, currentIndex);
|
243
259
|
itemSet = refreshedSets ? refreshedSets[0] : undefined;
|
244
260
|
}
|
245
|
-
if (!itemSet)
|
261
|
+
if (!itemSet || !this.shouldProceedToSend([itemSet], attemptNum)) {
|
246
262
|
return;
|
263
|
+
}
|
247
264
|
const tx = await itemSet.getSingleTransaction();
|
248
265
|
if (tx.getInstructions().length === 0) {
|
249
266
|
this.updateStatus(itemSet.name(), TransactionStatus.Skipped, attemptNum);
|
@@ -272,12 +289,6 @@ class TransactionsManager {
|
|
272
289
|
...itemSets.slice(currentIndex + 1).flatMap((set) => set.items),
|
273
290
|
]
|
274
291
|
: itemSets.flatMap((set) => set.items));
|
275
|
-
const newItemSetNames = newItemSets.map((x) => x.name());
|
276
|
-
if (newItemSetNames.length === 1 &&
|
277
|
-
newItemSetNames[0] === this.updateOracleTxName) {
|
278
|
-
(0, utils_1.consoleLog)("Skipping unnecessary oracle update");
|
279
|
-
return undefined;
|
280
|
-
}
|
281
292
|
if (currentIndex !== undefined && newItemSets.length > 1) {
|
282
293
|
itemSets.splice(currentIndex, itemSets.length - currentIndex, ...newItemSets);
|
283
294
|
const startOfQueuedStatuses = this.statuses.findIndex((x) => x.status === TransactionStatus.Queued);
|
@@ -10,6 +10,6 @@ export declare function deposit(client: SolautoClient, baseUnitAmount: bigint):
|
|
10
10
|
export declare function borrow(client: SolautoClient, baseUnitAmount: bigint): TransactionItem;
|
11
11
|
export declare function withdraw(client: SolautoClient, amount: "All" | bigint): TransactionItem;
|
12
12
|
export declare function repay(client: SolautoClient, amount: "All" | bigint): TransactionItem;
|
13
|
-
export declare function rebalance(client: SolautoClient, targetLiqUtilizationRateBps?: number): TransactionItem;
|
13
|
+
export declare function rebalance(client: SolautoClient, targetLiqUtilizationRateBps?: number, bpsDistanceFromRebalance?: number): TransactionItem;
|
14
14
|
export declare function swapThenDeposit(client: SolautoClient, depositMint: PublicKey, depositAmountBaseUnit: bigint): TransactionItem[];
|
15
15
|
//# sourceMappingURL=instructionUtils.d.ts.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"instructionUtils.d.ts","sourceRoot":"","sources":["../../src/utils/instructionUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAsB,MAAM,0BAA0B,CAAC;AAChF,OAAO,EACL,kBAAkB,EAClB,gCAAgC,EACjC,MAAM,cAAc,CAAC;AACtB,OAAO,EAGL,aAAa,EAEb,eAAe,EAEhB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAG5C,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,aAAa,EACrB,aAAa,EAAE,gCAAgC,EAC/C,GAAG,CAAC,EAAE,kBAAkB,mBAQzB;AAED,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,aAAa,mBAOzD;AAED,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,aAAa,EACrB,QAAQ,EAAE,gBAAgB,CAAC,gCAAgC,CAAC,EAC5D,GAAG,EAAE,gBAAgB,CAAC,kBAAkB,CAAC,mBAY1C;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,aAAa,mBAOrD;AAED,wBAAgB,OAAO,CAAC,MAAM,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,mBAUpE;AAED,wBAAgB,MAAM,CAAC,MAAM,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,mBAWnE;AAED,wBAAgB,QAAQ,CAAC,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,KAAK,GAAG,MAAM,mBAerE;AAED,wBAAgB,KAAK,CAAC,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,KAAK,GAAG,MAAM,mBAclE;AAED,wBAAgB,SAAS,CACvB,MAAM,EAAE,aAAa,EACrB,2BAA2B,CAAC,EAAE,MAAM,
|
1
|
+
{"version":3,"file":"instructionUtils.d.ts","sourceRoot":"","sources":["../../src/utils/instructionUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAsB,MAAM,0BAA0B,CAAC;AAChF,OAAO,EACL,kBAAkB,EAClB,gCAAgC,EACjC,MAAM,cAAc,CAAC;AACtB,OAAO,EAGL,aAAa,EAEb,eAAe,EAEhB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAG5C,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,aAAa,EACrB,aAAa,EAAE,gCAAgC,EAC/C,GAAG,CAAC,EAAE,kBAAkB,mBAQzB;AAED,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,aAAa,mBAOzD;AAED,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,aAAa,EACrB,QAAQ,EAAE,gBAAgB,CAAC,gCAAgC,CAAC,EAC5D,GAAG,EAAE,gBAAgB,CAAC,kBAAkB,CAAC,mBAY1C;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,aAAa,mBAOrD;AAED,wBAAgB,OAAO,CAAC,MAAM,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,mBAUpE;AAED,wBAAgB,MAAM,CAAC,MAAM,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,mBAWnE;AAED,wBAAgB,QAAQ,CAAC,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,KAAK,GAAG,MAAM,mBAerE;AAED,wBAAgB,KAAK,CAAC,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,KAAK,GAAG,MAAM,mBAclE;AAED,wBAAgB,SAAS,CACvB,MAAM,EAAE,aAAa,EACrB,2BAA2B,CAAC,EAAE,MAAM,EACpC,wBAAwB,CAAC,EAAE,MAAM,mBAalC;AAED,wBAAgB,eAAe,CAC7B,MAAM,EAAE,aAAa,EACrB,WAAW,EAAE,SAAS,EACtB,qBAAqB,EAAE,MAAM,qBAyC9B"}
|
@@ -77,8 +77,8 @@ function repay(client, amount) {
|
|
77
77
|
}),
|
78
78
|
}), "repay");
|
79
79
|
}
|
80
|
-
function rebalance(client, targetLiqUtilizationRateBps) {
|
81
|
-
return new services_1.TransactionItem(async (attemptNum, prevError) => await new services_1.RebalanceTxBuilder(client, targetLiqUtilizationRateBps, attemptNum > 2 && prevError instanceof services_1.TransactionTooLargeError).buildRebalanceTx(attemptNum), "rebalance", true);
|
80
|
+
function rebalance(client, targetLiqUtilizationRateBps, bpsDistanceFromRebalance) {
|
81
|
+
return new services_1.TransactionItem(async (attemptNum, prevError) => await new services_1.RebalanceTxBuilder(client, targetLiqUtilizationRateBps, attemptNum > 2 && prevError instanceof services_1.TransactionTooLargeError, bpsDistanceFromRebalance).buildRebalanceTx(attemptNum), "rebalance", true);
|
82
82
|
}
|
83
83
|
function swapThenDeposit(client, depositMint, depositAmountBaseUnit) {
|
84
84
|
return [
|
package/local/txSandbox.ts
CHANGED
@@ -47,8 +47,8 @@ export async function main() {
|
|
47
47
|
});
|
48
48
|
|
49
49
|
await client.initializeExistingSolautoPosition({
|
50
|
-
positionId:
|
51
|
-
authority: new PublicKey("
|
50
|
+
positionId: 1,
|
51
|
+
authority: new PublicKey("96929DasYJ2nbfdsFmUNzns2BQ9wKVfXbNoUDbc9zFUS"),
|
52
52
|
// lpUserAccount: new PublicKey(
|
53
53
|
// "GEokw9jqbh6d1xUNA3qaeYFFetbSR5Y1nt7C3chwwgSz"
|
54
54
|
// ),
|
package/package.json
CHANGED
@@ -49,7 +49,8 @@ export class RebalanceTxBuilder {
|
|
49
49
|
constructor(
|
50
50
|
private client: SolautoClient,
|
51
51
|
private targetLiqUtilizationRateBps?: number,
|
52
|
-
private optimizeSize?: boolean
|
52
|
+
private optimizeSize?: boolean,
|
53
|
+
private bpsDistanceFromRebalance?: number
|
53
54
|
) {}
|
54
55
|
|
55
56
|
private shouldProceedWithRebalance() {
|
@@ -62,7 +63,7 @@ export class RebalanceTxBuilder {
|
|
62
63
|
return (
|
63
64
|
this.client.pos.supplyUsd() > 0 &&
|
64
65
|
(this.targetLiqUtilizationRateBps !== undefined ||
|
65
|
-
this.client.pos.eligibleForRebalance())
|
66
|
+
this.client.pos.eligibleForRebalance(this.bpsDistanceFromRebalance))
|
66
67
|
);
|
67
68
|
}
|
68
69
|
|
@@ -267,6 +267,26 @@ export class TransactionsManager<T extends TxHandler> {
|
|
267
267
|
return this.statuses;
|
268
268
|
}
|
269
269
|
|
270
|
+
private shouldProceedToSend(itemSets: TransactionSet[], attemptNum: number) {
|
271
|
+
if (!itemSets) {
|
272
|
+
return false;
|
273
|
+
}
|
274
|
+
|
275
|
+
const newItemSetNames = itemSets.flatMap((x) =>
|
276
|
+
x.items.map((y) => y.name ?? "")
|
277
|
+
);
|
278
|
+
if (
|
279
|
+
newItemSetNames.length === 1 &&
|
280
|
+
newItemSetNames[0] === this.updateOracleTxName
|
281
|
+
) {
|
282
|
+
consoleLog("Skipping unnecessary oracle update");
|
283
|
+
this.updateStatusForSets(itemSets, TransactionStatus.Skipped, attemptNum);
|
284
|
+
return false;
|
285
|
+
}
|
286
|
+
|
287
|
+
return true;
|
288
|
+
}
|
289
|
+
|
270
290
|
private async processTransactionsAtomically(itemSets: TransactionSet[]) {
|
271
291
|
let num = 0;
|
272
292
|
let priorityFeeSetting: PriorityFeeSetting;
|
@@ -283,7 +303,10 @@ export class TransactionsManager<T extends TxHandler> {
|
|
283
303
|
}
|
284
304
|
|
285
305
|
num = attemptNum;
|
286
|
-
priorityFeeSetting = this.getUpdatedPriorityFeeSetting(
|
306
|
+
priorityFeeSetting = this.getUpdatedPriorityFeeSetting(
|
307
|
+
prevError,
|
308
|
+
attemptNum
|
309
|
+
);
|
287
310
|
|
288
311
|
if (attemptNum > 0) {
|
289
312
|
const refreshedSets = await this.refreshItemSets(
|
@@ -298,6 +321,10 @@ export class TransactionsManager<T extends TxHandler> {
|
|
298
321
|
}
|
299
322
|
}
|
300
323
|
|
324
|
+
if (!this.shouldProceedToSend(itemSets, attemptNum)) {
|
325
|
+
return;
|
326
|
+
}
|
327
|
+
|
301
328
|
transactions = [];
|
302
329
|
for (const set of itemSets) {
|
303
330
|
transactions.push(await set.getSingleTransaction());
|
@@ -436,7 +463,9 @@ export class TransactionsManager<T extends TxHandler> {
|
|
436
463
|
);
|
437
464
|
itemSet = refreshedSets ? refreshedSets[0] : undefined;
|
438
465
|
}
|
439
|
-
if (!itemSet)
|
466
|
+
if (!itemSet || !this.shouldProceedToSend([itemSet], attemptNum)) {
|
467
|
+
return;
|
468
|
+
}
|
440
469
|
|
441
470
|
const tx = await itemSet.getSingleTransaction();
|
442
471
|
if (tx.getInstructions().length === 0) {
|
@@ -487,15 +516,6 @@ export class TransactionsManager<T extends TxHandler> {
|
|
487
516
|
: itemSets.flatMap((set) => set.items)
|
488
517
|
);
|
489
518
|
|
490
|
-
const newItemSetNames = newItemSets.map((x) => x.name());
|
491
|
-
if (
|
492
|
-
newItemSetNames.length === 1 &&
|
493
|
-
newItemSetNames[0] === this.updateOracleTxName
|
494
|
-
) {
|
495
|
-
consoleLog("Skipping unnecessary oracle update");
|
496
|
-
return undefined;
|
497
|
-
}
|
498
|
-
|
499
519
|
if (currentIndex !== undefined && newItemSets.length > 1) {
|
500
520
|
itemSets.splice(
|
501
521
|
currentIndex,
|
@@ -122,14 +122,16 @@ export function repay(client: SolautoClient, amount: "All" | bigint) {
|
|
122
122
|
|
123
123
|
export function rebalance(
|
124
124
|
client: SolautoClient,
|
125
|
-
targetLiqUtilizationRateBps?: number
|
125
|
+
targetLiqUtilizationRateBps?: number,
|
126
|
+
bpsDistanceFromRebalance?: number
|
126
127
|
) {
|
127
128
|
return new TransactionItem(
|
128
129
|
async (attemptNum, prevError) =>
|
129
130
|
await new RebalanceTxBuilder(
|
130
131
|
client,
|
131
132
|
targetLiqUtilizationRateBps,
|
132
|
-
attemptNum > 2 && prevError instanceof TransactionTooLargeError
|
133
|
+
attemptNum > 2 && prevError instanceof TransactionTooLargeError,
|
134
|
+
bpsDistanceFromRebalance
|
133
135
|
).buildRebalanceTx(attemptNum),
|
134
136
|
"rebalance",
|
135
137
|
true
|