@haven-fi/solauto-sdk 1.0.634 → 1.0.636
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 +1 -0
- package/dist/services/rebalance/rebalanceTxBuilder.d.ts.map +1 -1
- package/dist/services/rebalance/rebalanceTxBuilder.js +24 -6
- package/dist/services/rebalance/rebalanceValues.d.ts +1 -1
- package/dist/services/rebalance/rebalanceValues.d.ts.map +1 -1
- package/dist/services/rebalance/rebalanceValues.js +4 -1
- package/dist/services/transactions/transactionUtils.d.ts.map +1 -1
- package/dist/services/transactions/transactionUtils.js +0 -8
- package/dist/solautoPosition/solautoPositionEx.d.ts +2 -2
- package/dist/solautoPosition/solautoPositionEx.d.ts.map +1 -1
- package/dist/solautoPosition/solautoPositionEx.js +7 -4
- package/local/txSandbox.ts +28 -32
- package/package.json +1 -1
- package/src/services/rebalance/rebalanceTxBuilder.ts +29 -10
- package/src/services/rebalance/rebalanceValues.ts +6 -3
- package/src/services/transactions/transactionUtils.ts +0 -9
- package/src/solautoPosition/solautoPositionEx.ts +17 -6
@@ -16,6 +16,7 @@ export declare class RebalanceTxBuilder {
|
|
16
16
|
private getFlashLoanDetails;
|
17
17
|
private setRebalanceType;
|
18
18
|
private realtimeUsdToEmaUsd;
|
19
|
+
private getInitialRebalanceValues;
|
19
20
|
private setRebalanceDetails;
|
20
21
|
private refreshBeforeRebalance;
|
21
22
|
private assembleTransaction;
|
@@ -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;AA0BrB,qBAAa,kBAAkB;IAQ3B,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,2BAA2B,CAAC;IARtC,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,
|
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;AA0BrB,qBAAa,kBAAkB;IAQ3B,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,2BAA2B,CAAC;IARtC,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;IAG9C,OAAO,CAAC,0BAA0B;IAQlC,OAAO,CAAC,kBAAkB;IAc1B,OAAO,CAAC,oBAAoB;YAyCd,qBAAqB;IAyCnC,OAAO,CAAC,mBAAmB;IAwB3B,OAAO,CAAC,gBAAgB;IA+BxB,OAAO,CAAC,mBAAmB;IAO3B,OAAO,CAAC,yBAAyB;YA4BnB,mBAAmB;YAwBnB,sBAAsB;YAyBtB,mBAAmB;IAkEpB,gBAAgB,CAC3B,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,qBAAqB,GAAG,SAAS,CAAC;CAe9C"}
|
@@ -13,6 +13,7 @@ class RebalanceTxBuilder {
|
|
13
13
|
constructor(client, targetLiqUtilizationRateBps) {
|
14
14
|
this.client = client;
|
15
15
|
this.targetLiqUtilizationRateBps = targetLiqUtilizationRateBps;
|
16
|
+
this.priceType = generated_1.PriceType.Realtime;
|
16
17
|
}
|
17
18
|
shouldProceedWithRebalance() {
|
18
19
|
return (this.client.pos.supplyUsd() > 0 &&
|
@@ -117,14 +118,27 @@ class RebalanceTxBuilder {
|
|
117
118
|
return ((realtimeAmountUsd / (0, utils_1.safeGetPrice)(mint, generated_1.PriceType.Realtime)) *
|
118
119
|
(0, utils_1.safeGetPrice)(mint, generated_1.PriceType.Ema));
|
119
120
|
}
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
121
|
+
getInitialRebalanceValues() {
|
122
|
+
let rebalanceValues = this.getRebalanceValues();
|
123
|
+
if (!rebalanceValues) {
|
124
|
+
return undefined;
|
125
|
+
}
|
126
|
+
const postRebalanceEmaUtilRateBps = (0, utils_1.getLiqUtilzationRateBps)(this.realtimeUsdToEmaUsd(rebalanceValues.endResult.supplyUsd, this.client.pos.supplyMint), this.realtimeUsdToEmaUsd(rebalanceValues.endResult.debtUsd, this.client.pos.debtMint), this.client.pos.state.liqThresholdBps);
|
124
127
|
if (postRebalanceEmaUtilRateBps > this.client.pos.maxBoostToBps) {
|
125
128
|
this.priceType = generated_1.PriceType.Ema;
|
126
|
-
|
129
|
+
rebalanceValues = this.getRebalanceValues();
|
130
|
+
if (!rebalanceValues) {
|
131
|
+
return undefined;
|
132
|
+
}
|
127
133
|
}
|
134
|
+
return rebalanceValues;
|
135
|
+
}
|
136
|
+
async setRebalanceDetails(attemptNum) {
|
137
|
+
const rebalanceValues = this.getInitialRebalanceValues();
|
138
|
+
if (!rebalanceValues) {
|
139
|
+
return false;
|
140
|
+
}
|
141
|
+
this.values = rebalanceValues;
|
128
142
|
this.flRequirements = await this.flashLoanRequirements(attemptNum);
|
129
143
|
if (this.flRequirements?.flFeeBps) {
|
130
144
|
this.values = this.getRebalanceValues(this.flRequirements.flFeeBps);
|
@@ -132,6 +146,7 @@ class RebalanceTxBuilder {
|
|
132
146
|
this.swapManager = new rebalanceSwapManager_1.RebalanceSwapManager(this.client, this.values, this.flRequirements, this.targetLiqUtilizationRateBps);
|
133
147
|
await this.swapManager.setSwapParams(attemptNum);
|
134
148
|
this.setRebalanceType();
|
149
|
+
return true;
|
135
150
|
}
|
136
151
|
async refreshBeforeRebalance() {
|
137
152
|
if (this.client.selfManaged ||
|
@@ -200,7 +215,10 @@ class RebalanceTxBuilder {
|
|
200
215
|
this.client.log("Not eligible for a rebalance");
|
201
216
|
return undefined;
|
202
217
|
}
|
203
|
-
await this.setRebalanceDetails(attemptNum);
|
218
|
+
const proceed = await this.setRebalanceDetails(attemptNum);
|
219
|
+
if (!proceed) {
|
220
|
+
return undefined;
|
221
|
+
}
|
204
222
|
return await this.assembleTransaction();
|
205
223
|
}
|
206
224
|
}
|
@@ -26,6 +26,6 @@ export interface RebalanceValues extends DebtAdjustment {
|
|
26
26
|
tokenBalanceChange?: TokenBalanceChange;
|
27
27
|
repayingCloseToMaxLtv: boolean;
|
28
28
|
}
|
29
|
-
export declare function getRebalanceValues(solautoPosition: SolautoPositionEx, priceType: PriceType, targetLiqUtilizationRateBps?: number, solautoFeeBps?: SolautoFeesBps, flFeeBps?: number): RebalanceValues;
|
29
|
+
export declare function getRebalanceValues(solautoPosition: SolautoPositionEx, priceType: PriceType, targetLiqUtilizationRateBps?: number, solautoFeeBps?: SolautoFeesBps, flFeeBps?: number): RebalanceValues | undefined;
|
30
30
|
export {};
|
31
31
|
//# sourceMappingURL=rebalanceValues.d.ts.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"rebalanceValues.d.ts","sourceRoot":"","sources":["../../../src/services/rebalance/rebalanceValues.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,SAAS,EACT,kBAAkB,EAClB,kBAAkB,EAEnB,MAAM,iBAAiB,CAAC;AAOzB,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAE/C,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,cAAc;IAC7B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,SAAS,EAAE,cAAc,CAAC;IAC1B,iCAAiC,EAAE,MAAM,CAAC;CAC3C;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,UAAU,yBAAyB;IACjC,MAAM,EAAE,cAAc,CAAC;IACvB,iCAAiC,EAAE,MAAM,CAAC;CAC3C;AAED,wBAAgB,sBAAsB,CACpC,iBAAiB,EAAE,MAAM,EACzB,GAAG,EAAE,cAAc,EACnB,YAAY,EAAE,MAAM,EACpB,IAAI,CAAC,EAAE,gBAAgB,GACtB,yBAAyB,CA8B3B;AAED,wBAAgB,iBAAiB,CAC/B,eAAe,EAAE,MAAM,EACvB,GAAG,EAAE,cAAc,EACnB,2BAA2B,EAAE,MAAM,EACnC,IAAI,CAAC,EAAE,gBAAgB,GACtB,cAAc,CAgChB;AA2ED,MAAM,WAAW,eAAgB,SAAQ,cAAc;IACrD,kBAAkB,EAAE,kBAAkB,CAAC;IACvC,kBAAkB,CAAC,EAAE,kBAAkB,CAAC;IACxC,qBAAqB,EAAE,OAAO,CAAC;CAChC;AAED,wBAAgB,kBAAkB,CAChC,eAAe,EAAE,iBAAiB,EAClC,SAAS,EAAE,SAAS,EACpB,2BAA2B,CAAC,EAAE,MAAM,EACpC,aAAa,CAAC,EAAE,cAAc,EAC9B,QAAQ,CAAC,EAAE,MAAM,GAChB,eAAe,
|
1
|
+
{"version":3,"file":"rebalanceValues.d.ts","sourceRoot":"","sources":["../../../src/services/rebalance/rebalanceValues.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,SAAS,EACT,kBAAkB,EAClB,kBAAkB,EAEnB,MAAM,iBAAiB,CAAC;AAOzB,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAE/C,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,cAAc;IAC7B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,SAAS,EAAE,cAAc,CAAC;IAC1B,iCAAiC,EAAE,MAAM,CAAC;CAC3C;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,UAAU,yBAAyB;IACjC,MAAM,EAAE,cAAc,CAAC;IACvB,iCAAiC,EAAE,MAAM,CAAC;CAC3C;AAED,wBAAgB,sBAAsB,CACpC,iBAAiB,EAAE,MAAM,EACzB,GAAG,EAAE,cAAc,EACnB,YAAY,EAAE,MAAM,EACpB,IAAI,CAAC,EAAE,gBAAgB,GACtB,yBAAyB,CA8B3B;AAED,wBAAgB,iBAAiB,CAC/B,eAAe,EAAE,MAAM,EACvB,GAAG,EAAE,cAAc,EACnB,2BAA2B,EAAE,MAAM,EACnC,IAAI,CAAC,EAAE,gBAAgB,GACtB,cAAc,CAgChB;AA2ED,MAAM,WAAW,eAAgB,SAAQ,cAAc;IACrD,kBAAkB,EAAE,kBAAkB,CAAC;IACvC,kBAAkB,CAAC,EAAE,kBAAkB,CAAC;IACxC,qBAAqB,EAAE,OAAO,CAAC;CAChC;AAED,wBAAgB,kBAAkB,CAChC,eAAe,EAAE,iBAAiB,EAClC,SAAS,EAAE,SAAS,EACpB,2BAA2B,CAAC,EAAE,MAAM,EACpC,aAAa,CAAC,EAAE,cAAc,EAC9B,QAAQ,CAAC,EAAE,MAAM,GAChB,eAAe,GAAG,SAAS,CA8C7B"}
|
@@ -67,7 +67,7 @@ function getTargetLiqUtilizationRateBps(solautoPosition, priceType, targetLiqUti
|
|
67
67
|
// else if (tokenBalanceChange !== null) {
|
68
68
|
// return currentRate;
|
69
69
|
// }
|
70
|
-
|
70
|
+
return undefined;
|
71
71
|
}
|
72
72
|
function getAdjustedPositionValues(solautoPosition, priceType, tokenBalanceChange) {
|
73
73
|
let supplyUsd = solautoPosition.supplyUsd(priceType);
|
@@ -100,6 +100,9 @@ function getRebalanceDirection(solautoPosition, targetLtvBps) {
|
|
100
100
|
function getRebalanceValues(solautoPosition, priceType, targetLiqUtilizationRateBps, solautoFeeBps, flFeeBps) {
|
101
101
|
const tokenBalanceChange = getTokenBalanceChange();
|
102
102
|
const targetRate = getTargetLiqUtilizationRateBps(solautoPosition, priceType, targetLiqUtilizationRateBps, tokenBalanceChange);
|
103
|
+
if (targetRate === undefined) {
|
104
|
+
return undefined;
|
105
|
+
}
|
103
106
|
const rebalanceDirection = getRebalanceDirection(solautoPosition, targetRate);
|
104
107
|
const position = getAdjustedPositionValues(solautoPosition, priceType, tokenBalanceChange);
|
105
108
|
const fees = {
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"transactionUtils.d.ts","sourceRoot":"","sources":["../../../src/services/transactions/transactionUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAA8B,MAAM,iBAAiB,CAAC;AAKxE,OAAO,EAIL,kBAAkB,EAClB,GAAG,EAGJ,MAAM,0BAA0B,CAAC;AAiBlC,OAAO,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AA2BjE,OAAO,EAAE,qBAAqB,EAAyB,MAAM,aAAa,CAAC;AAwL3E,wBAAsB,qBAAqB,CACzC,MAAM,EAAE,aAAa,EACrB,EAAE,EAAE,kBAAkB,EACtB,sBAAsB,EAAE,MAAM,EAAE,GAC/B,OAAO,CAAC,kBAAkB,CAAC,CAyF7B;AA8LD,wBAAsB,oBAAoB,CACxC,MAAM,EAAE,aAAa,EACrB,EAAE,EAAE,kBAAkB,GACrB,OAAO,CAAC,CAAC,kBAAkB,EAAE,kBAAkB,CAAC,CAAC,CA0BnD;AAED,wBAAsB,gCAAgC,CACpD,eAAe,EAAE,oBAAoB,EACrC,YAAY,EAAE,SAAS,EACvB,eAAe,EAAE,SAAS,GACzB,OAAO,CAAC,qBAAqB,GAAG,SAAS,CAAC,CAuC5C;AAED,wBAAgB,YAAY,CAC1B,GAAG,EAAE,GAAG,EACR,GAAG,EAAE,kBAAkB,EAAE,EACzB,KAAK,EAAE,KAAK,EACZ,oBAAoB,CAAC,EAAE,OAAO;;;;
|
1
|
+
{"version":3,"file":"transactionUtils.d.ts","sourceRoot":"","sources":["../../../src/services/transactions/transactionUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAA8B,MAAM,iBAAiB,CAAC;AAKxE,OAAO,EAIL,kBAAkB,EAClB,GAAG,EAGJ,MAAM,0BAA0B,CAAC;AAiBlC,OAAO,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AA2BjE,OAAO,EAAE,qBAAqB,EAAyB,MAAM,aAAa,CAAC;AAwL3E,wBAAsB,qBAAqB,CACzC,MAAM,EAAE,aAAa,EACrB,EAAE,EAAE,kBAAkB,EACtB,sBAAsB,EAAE,MAAM,EAAE,GAC/B,OAAO,CAAC,kBAAkB,CAAC,CAyF7B;AA8LD,wBAAsB,oBAAoB,CACxC,MAAM,EAAE,aAAa,EACrB,EAAE,EAAE,kBAAkB,GACrB,OAAO,CAAC,CAAC,kBAAkB,EAAE,kBAAkB,CAAC,CAAC,CA0BnD;AAED,wBAAsB,gCAAgC,CACpD,eAAe,EAAE,oBAAoB,EACrC,YAAY,EAAE,SAAS,EACvB,eAAe,EAAE,SAAS,GACzB,OAAO,CAAC,qBAAqB,GAAG,SAAS,CAAC,CAuC5C;AAED,wBAAgB,YAAY,CAC1B,GAAG,EAAE,GAAG,EACR,GAAG,EAAE,kBAAkB,EAAE,EACzB,KAAK,EAAE,KAAK,EACZ,oBAAoB,CAAC,EAAE,OAAO;;;;EA8G/B"}
|
@@ -339,14 +339,6 @@ async function convertReferralFeesToDestination(referralManager, tokenAccount, d
|
|
339
339
|
return { tx, lookupTableAddresses };
|
340
340
|
}
|
341
341
|
function getErrorInfo(umi, txs, error, simulationSuccessful) {
|
342
|
-
if (error instanceof generated_1.InvalidRebalanceConditionError) {
|
343
|
-
return {
|
344
|
-
canBeIgnored: true,
|
345
|
-
errorName: generated_1.InvalidRebalanceConditionError.name,
|
346
|
-
errorInfo: new generated_1.InvalidRebalanceConditionError((0, generated_1.createSolautoProgram)())
|
347
|
-
.message,
|
348
|
-
};
|
349
|
-
}
|
350
342
|
let canBeIgnored = false;
|
351
343
|
let errorName = undefined;
|
352
344
|
let errorInfo = undefined;
|
@@ -80,13 +80,13 @@ export declare abstract class SolautoPositionEx {
|
|
80
80
|
updateSupply(newSupplyUsd: number, supplyPrice?: number): void;
|
81
81
|
updateDebt(newDebtUsd: number, debtPrice?: number): void;
|
82
82
|
updateNetWorth(supplyPrice?: number): void;
|
83
|
-
updateLiqUtilizationRate(priceType?: PriceType): void;
|
83
|
+
updateLiqUtilizationRate(supplyUsd?: number, debtUsd?: number, priceType?: PriceType): void;
|
84
84
|
updateWithLatestPrices(data?: {
|
85
85
|
priceType?: PriceType;
|
86
86
|
supplyPrice?: number;
|
87
87
|
debtPrice?: number;
|
88
88
|
}): Promise<void>;
|
89
|
-
simulateRebalance(unixTime: number, supplyPrice: number, debtPrice: number, targetLiqUtilizationRateBps?: number):
|
89
|
+
simulateRebalance(unixTime: number, supplyPrice: number, debtPrice: number, targetLiqUtilizationRateBps?: number): undefined;
|
90
90
|
refetchPositionData(): Promise<void>;
|
91
91
|
}
|
92
92
|
export {};
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"solautoPositionEx.d.ts","sourceRoot":"","sources":["../../src/solautoPosition/solautoPositionEx.ts"],"names":[],"mappings":"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
|
1
|
+
{"version":3,"file":"solautoPositionEx.d.ts","sourceRoot":"","sources":["../../src/solautoPosition/solautoPositionEx.ts"],"names":[],"mappings":"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"}
|
@@ -201,8 +201,8 @@ class SolautoPositionEx {
|
|
201
201
|
(0, utils_1.toRoundedUsdValue)(netWorthUsd);
|
202
202
|
this._data.state.netWorth.baseUnit = (0, utils_1.toBaseUnit)(netWorthUsd / (supplyPrice ?? (0, utils_1.safeGetPrice)(this.supplyMint) ?? 0), this.supplyMintInfo.decimals);
|
203
203
|
}
|
204
|
-
updateLiqUtilizationRate(priceType) {
|
205
|
-
this._data.state.liqUtilizationRateBps = (0, utils_1.getLiqUtilzationRateBps)(this.supplyUsd(priceType), this.debtUsd(priceType), this.state.liqThresholdBps);
|
204
|
+
updateLiqUtilizationRate(supplyUsd, debtUsd, priceType) {
|
205
|
+
this._data.state.liqUtilizationRateBps = (0, utils_1.getLiqUtilzationRateBps)(supplyUsd ?? this.supplyUsd(priceType), debtUsd ?? this.debtUsd(priceType), this.state.liqThresholdBps);
|
206
206
|
}
|
207
207
|
async updateWithLatestPrices(data) {
|
208
208
|
if (!data) {
|
@@ -216,15 +216,18 @@ class SolautoPositionEx {
|
|
216
216
|
this.updateSupply(supplyUsd, data.supplyPrice);
|
217
217
|
this.updateDebt(debtUsd, data.debtPrice);
|
218
218
|
this.updateNetWorth(data.supplyPrice);
|
219
|
-
this.updateLiqUtilizationRate();
|
219
|
+
this.updateLiqUtilizationRate(this.totalSupply * data.supplyPrice, this.totalDebt * data.debtPrice);
|
220
220
|
}
|
221
221
|
simulateRebalance(unixTime, supplyPrice, debtPrice, targetLiqUtilizationRateBps) {
|
222
222
|
this._data.state.lastRefreshed = BigInt(unixTime);
|
223
223
|
const rebalance = (0, rebalance_1.getRebalanceValues)(this, generated_1.PriceType.Realtime, targetLiqUtilizationRateBps, rebalance_1.SolautoFeesBps.create(true, targetLiqUtilizationRateBps, this.netWorthUsd));
|
224
|
+
if (!rebalance) {
|
225
|
+
return undefined;
|
226
|
+
}
|
224
227
|
this.updateSupply(rebalance.endResult.supplyUsd, supplyPrice);
|
225
228
|
this.updateDebt(rebalance.endResult.debtUsd, debtPrice);
|
226
229
|
this.updateNetWorth(supplyPrice);
|
227
|
-
this.updateLiqUtilizationRate();
|
230
|
+
this.updateLiqUtilizationRate(rebalance.endResult.supplyUsd, rebalance.endResult.debtUsd);
|
228
231
|
}
|
229
232
|
async refetchPositionData() {
|
230
233
|
this._data = await (0, generated_1.fetchSolautoPosition)(this.umi, (0, umi_web3js_adapters_1.fromWeb3JsPublicKey)(this.publicKey));
|
package/local/txSandbox.ts
CHANGED
@@ -3,29 +3,28 @@ import { createSignerFromKeypair } from "@metaplex-foundation/umi";
|
|
3
3
|
import { fromWeb3JsKeypair } from "@metaplex-foundation/umi-web3js-adapters";
|
4
4
|
import {
|
5
5
|
consoleLog,
|
6
|
-
fetchTokenPrices,
|
7
6
|
getClient,
|
8
7
|
getSolanaRpcConnection,
|
9
8
|
LendingPlatform,
|
10
9
|
LOCAL_IRONFORGE_API_URL,
|
11
|
-
PriceType,
|
12
10
|
PriorityFeeSetting,
|
11
|
+
ProgramEnv,
|
13
12
|
rebalance,
|
14
|
-
safeGetPrice,
|
15
13
|
SOLAUTO_PROD_PROGRAM,
|
16
14
|
SOLAUTO_TEST_PROGRAM,
|
17
15
|
TransactionsManager,
|
18
16
|
} from "../src";
|
19
17
|
import { getSecretKey } from "./shared";
|
20
|
-
import { NATIVE_MINT } from "@solana/spl-token";
|
21
18
|
|
22
19
|
const payForTransaction = false;
|
23
20
|
const testProgram = true;
|
21
|
+
const lpEnv: ProgramEnv = "Prod";
|
24
22
|
|
25
23
|
export async function main() {
|
26
|
-
|
24
|
+
let [, umi] = getSolanaRpcConnection(
|
27
25
|
LOCAL_IRONFORGE_API_URL,
|
28
|
-
testProgram ? SOLAUTO_TEST_PROGRAM : SOLAUTO_PROD_PROGRAM
|
26
|
+
testProgram ? SOLAUTO_TEST_PROGRAM : SOLAUTO_PROD_PROGRAM,
|
27
|
+
lpEnv
|
29
28
|
);
|
30
29
|
|
31
30
|
const signer = createSignerFromKeypair(
|
@@ -33,36 +32,33 @@ export async function main() {
|
|
33
32
|
fromWeb3JsKeypair(Keypair.fromSecretKey(getSecretKey("solauto-manager")))
|
34
33
|
);
|
35
34
|
|
36
|
-
|
35
|
+
const client = getClient(LendingPlatform.Marginfi, {
|
36
|
+
signer,
|
37
|
+
showLogs: true,
|
38
|
+
rpcUrl: LOCAL_IRONFORGE_API_URL,
|
39
|
+
programId: testProgram ? SOLAUTO_TEST_PROGRAM : SOLAUTO_PROD_PROGRAM,
|
40
|
+
lpEnv,
|
41
|
+
});
|
37
42
|
|
38
|
-
|
43
|
+
await client.initialize({
|
44
|
+
positionId: 1,
|
45
|
+
authority: new PublicKey("5UqsR2PGzbP8pGPbXEeXx86Gjz2N2UFBAuFZUSVydAEe"),
|
46
|
+
});
|
39
47
|
|
40
|
-
|
41
|
-
// signer,
|
42
|
-
// showLogs: true,
|
43
|
-
// rpcUrl: LOCAL_IRONFORGE_API_URL,
|
44
|
-
// programId: testProgram ? SOLAUTO_TEST_PROGRAM : SOLAUTO_PROD_PROGRAM,
|
45
|
-
// });
|
48
|
+
const transactionItems = [rebalance(client)];
|
46
49
|
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
// payForTransaction ? "normal" : "only-simulate",
|
58
|
-
// PriorityFeeSetting.Min,
|
59
|
-
// true,
|
60
|
-
// undefined,
|
61
|
-
// { totalRetries: 5 }
|
62
|
-
// );
|
63
|
-
// const statuses = await txManager.clientSend(transactionItems);
|
50
|
+
const txManager = new TransactionsManager(
|
51
|
+
client,
|
52
|
+
undefined,
|
53
|
+
payForTransaction ? "normal" : "only-simulate",
|
54
|
+
PriorityFeeSetting.Min,
|
55
|
+
true,
|
56
|
+
undefined,
|
57
|
+
{ totalRetries: 5 }
|
58
|
+
);
|
59
|
+
const statuses = await txManager.clientSend(transactionItems);
|
64
60
|
|
65
|
-
|
61
|
+
consoleLog(statuses);
|
66
62
|
}
|
67
63
|
|
68
64
|
main();
|
package/package.json
CHANGED
@@ -37,7 +37,7 @@ export class RebalanceTxBuilder {
|
|
37
37
|
private rebalanceType!: SolautoRebalanceType;
|
38
38
|
private swapManager!: RebalanceSwapManager;
|
39
39
|
private flRequirements?: FlashLoanRequirements;
|
40
|
-
private priceType
|
40
|
+
private priceType: PriceType = PriceType.Realtime;
|
41
41
|
|
42
42
|
constructor(
|
43
43
|
private client: SolautoClient,
|
@@ -210,30 +210,44 @@ export class RebalanceTxBuilder {
|
|
210
210
|
);
|
211
211
|
}
|
212
212
|
|
213
|
-
private
|
214
|
-
|
215
|
-
|
213
|
+
private getInitialRebalanceValues() {
|
214
|
+
let rebalanceValues = this.getRebalanceValues();
|
215
|
+
if (!rebalanceValues) {
|
216
|
+
return undefined;
|
217
|
+
}
|
216
218
|
|
217
219
|
const postRebalanceEmaUtilRateBps = getLiqUtilzationRateBps(
|
218
220
|
this.realtimeUsdToEmaUsd(
|
219
|
-
|
221
|
+
rebalanceValues.endResult.supplyUsd,
|
220
222
|
this.client.pos.supplyMint
|
221
223
|
),
|
222
224
|
this.realtimeUsdToEmaUsd(
|
223
|
-
|
225
|
+
rebalanceValues.endResult.debtUsd,
|
224
226
|
this.client.pos.debtMint
|
225
227
|
),
|
226
228
|
this.client.pos.state.liqThresholdBps
|
227
229
|
);
|
228
230
|
if (postRebalanceEmaUtilRateBps > this.client.pos.maxBoostToBps) {
|
229
231
|
this.priceType = PriceType.Ema;
|
230
|
-
|
232
|
+
rebalanceValues = this.getRebalanceValues();
|
233
|
+
if (!rebalanceValues) {
|
234
|
+
return undefined;
|
235
|
+
}
|
231
236
|
}
|
232
237
|
|
233
|
-
|
238
|
+
return rebalanceValues;
|
239
|
+
}
|
240
|
+
|
241
|
+
private async setRebalanceDetails(attemptNum: number): Promise<boolean> {
|
242
|
+
const rebalanceValues = this.getInitialRebalanceValues();
|
243
|
+
if (!rebalanceValues) {
|
244
|
+
return false;
|
245
|
+
}
|
246
|
+
this.values = rebalanceValues;
|
234
247
|
|
248
|
+
this.flRequirements = await this.flashLoanRequirements(attemptNum);
|
235
249
|
if (this.flRequirements?.flFeeBps) {
|
236
|
-
this.values = this.getRebalanceValues(this.flRequirements.flFeeBps)
|
250
|
+
this.values = this.getRebalanceValues(this.flRequirements.flFeeBps)!;
|
237
251
|
}
|
238
252
|
|
239
253
|
this.swapManager = new RebalanceSwapManager(
|
@@ -245,6 +259,7 @@ export class RebalanceTxBuilder {
|
|
245
259
|
await this.swapManager.setSwapParams(attemptNum);
|
246
260
|
|
247
261
|
this.setRebalanceType();
|
262
|
+
return true;
|
248
263
|
}
|
249
264
|
|
250
265
|
private async refreshBeforeRebalance() {
|
@@ -348,7 +363,11 @@ export class RebalanceTxBuilder {
|
|
348
363
|
return undefined;
|
349
364
|
}
|
350
365
|
|
351
|
-
await this.setRebalanceDetails(attemptNum);
|
366
|
+
const proceed = await this.setRebalanceDetails(attemptNum);
|
367
|
+
if (!proceed) {
|
368
|
+
return undefined;
|
369
|
+
}
|
370
|
+
|
352
371
|
return await this.assembleTransaction();
|
353
372
|
}
|
354
373
|
}
|
@@ -123,7 +123,7 @@ function getTargetLiqUtilizationRateBps(
|
|
123
123
|
priceType: PriceType,
|
124
124
|
targetLiqUtilizationRateBps: number | undefined,
|
125
125
|
tokenBalanceChange: TokenBalanceChange | undefined
|
126
|
-
): number {
|
126
|
+
): number | undefined {
|
127
127
|
if (targetLiqUtilizationRateBps !== undefined) {
|
128
128
|
return targetLiqUtilizationRateBps;
|
129
129
|
}
|
@@ -144,7 +144,7 @@ function getTargetLiqUtilizationRateBps(
|
|
144
144
|
// return currentRate;
|
145
145
|
// }
|
146
146
|
|
147
|
-
|
147
|
+
return undefined;
|
148
148
|
}
|
149
149
|
|
150
150
|
function getAdjustedPositionValues(
|
@@ -198,7 +198,7 @@ export function getRebalanceValues(
|
|
198
198
|
targetLiqUtilizationRateBps?: number,
|
199
199
|
solautoFeeBps?: SolautoFeesBps,
|
200
200
|
flFeeBps?: number
|
201
|
-
): RebalanceValues {
|
201
|
+
): RebalanceValues | undefined {
|
202
202
|
const tokenBalanceChange = getTokenBalanceChange();
|
203
203
|
|
204
204
|
const targetRate = getTargetLiqUtilizationRateBps(
|
@@ -207,6 +207,9 @@ export function getRebalanceValues(
|
|
207
207
|
targetLiqUtilizationRateBps,
|
208
208
|
tokenBalanceChange
|
209
209
|
);
|
210
|
+
if (targetRate === undefined) {
|
211
|
+
return undefined;
|
212
|
+
}
|
210
213
|
|
211
214
|
const rebalanceDirection = getRebalanceDirection(solautoPosition, targetRate);
|
212
215
|
|
@@ -604,15 +604,6 @@ export function getErrorInfo(
|
|
604
604
|
error: Error,
|
605
605
|
simulationSuccessful?: boolean
|
606
606
|
) {
|
607
|
-
if (error instanceof InvalidRebalanceConditionError) {
|
608
|
-
return {
|
609
|
-
canBeIgnored: true,
|
610
|
-
errorName: InvalidRebalanceConditionError.name,
|
611
|
-
errorInfo: new InvalidRebalanceConditionError(createSolautoProgram())
|
612
|
-
.message,
|
613
|
-
};
|
614
|
-
}
|
615
|
-
|
616
607
|
let canBeIgnored = false;
|
617
608
|
let errorName: string | undefined = undefined;
|
618
609
|
let errorInfo: string | undefined = undefined;
|
@@ -71,7 +71,7 @@ interface PositionExArgs {
|
|
71
71
|
export abstract class SolautoPositionEx {
|
72
72
|
public umi!: Umi;
|
73
73
|
protected contextUpdates?: ContextUpdates;
|
74
|
-
|
74
|
+
|
75
75
|
public publicKey!: PublicKey;
|
76
76
|
public lendingPlatform!: LendingPlatform;
|
77
77
|
protected _data!: SolautoPositionExData;
|
@@ -368,10 +368,14 @@ export abstract class SolautoPositionEx {
|
|
368
368
|
);
|
369
369
|
}
|
370
370
|
|
371
|
-
updateLiqUtilizationRate(
|
371
|
+
updateLiqUtilizationRate(
|
372
|
+
supplyUsd?: number,
|
373
|
+
debtUsd?: number,
|
374
|
+
priceType?: PriceType
|
375
|
+
) {
|
372
376
|
this._data.state.liqUtilizationRateBps = getLiqUtilzationRateBps(
|
373
|
-
this.supplyUsd(priceType),
|
374
|
-
this.debtUsd(priceType),
|
377
|
+
supplyUsd ?? this.supplyUsd(priceType),
|
378
|
+
debtUsd ?? this.debtUsd(priceType),
|
375
379
|
this.state.liqThresholdBps
|
376
380
|
);
|
377
381
|
}
|
@@ -398,7 +402,10 @@ export abstract class SolautoPositionEx {
|
|
398
402
|
this.updateSupply(supplyUsd, data.supplyPrice);
|
399
403
|
this.updateDebt(debtUsd, data.debtPrice);
|
400
404
|
this.updateNetWorth(data.supplyPrice);
|
401
|
-
this.updateLiqUtilizationRate(
|
405
|
+
this.updateLiqUtilizationRate(
|
406
|
+
this.totalSupply * data.supplyPrice,
|
407
|
+
this.totalDebt * data.debtPrice
|
408
|
+
);
|
402
409
|
}
|
403
410
|
|
404
411
|
simulateRebalance(
|
@@ -414,10 +421,14 @@ export abstract class SolautoPositionEx {
|
|
414
421
|
targetLiqUtilizationRateBps,
|
415
422
|
SolautoFeesBps.create(true, targetLiqUtilizationRateBps, this.netWorthUsd)
|
416
423
|
);
|
424
|
+
if (!rebalance) {
|
425
|
+
return undefined;
|
426
|
+
}
|
427
|
+
|
417
428
|
this.updateSupply(rebalance.endResult.supplyUsd, supplyPrice);
|
418
429
|
this.updateDebt(rebalance.endResult.debtUsd, debtPrice);
|
419
430
|
this.updateNetWorth(supplyPrice);
|
420
|
-
this.updateLiqUtilizationRate();
|
431
|
+
this.updateLiqUtilizationRate(rebalance.endResult.supplyUsd, rebalance.endResult.debtUsd);
|
421
432
|
}
|
422
433
|
|
423
434
|
async refetchPositionData() {
|