@haven-fi/solauto-sdk 1.0.673 → 1.0.675
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 -0
- package/dist/services/rebalance/rebalanceTxBuilder.d.ts.map +1 -1
- package/dist/services/rebalance/rebalanceTxBuilder.js +23 -5
- package/dist/services/solauto/referralStateManager.d.ts +1 -1
- package/dist/services/solauto/referralStateManager.d.ts.map +1 -1
- package/dist/services/solauto/referralStateManager.js +1 -1
- package/dist/solautoPosition/marginfiSolautoPositionEx.d.ts +1 -0
- package/dist/solautoPosition/marginfiSolautoPositionEx.d.ts.map +1 -1
- package/dist/solautoPosition/marginfiSolautoPositionEx.js +1 -0
- package/dist/solautoPosition/solautoPositionEx.d.ts +1 -0
- package/dist/solautoPosition/solautoPositionEx.d.ts.map +1 -1
- package/dist/solautoPosition/solautoPositionEx.js +1 -2
- package/local/txSandbox.ts +2 -2
- package/package.json +1 -1
- package/src/services/rebalance/rebalanceTxBuilder.ts +57 -9
- package/src/services/solauto/referralStateManager.ts +1 -1
- package/src/solautoPosition/marginfiSolautoPositionEx.ts +1 -0
- package/src/solautoPosition/solautoPositionEx.ts +2 -2
@@ -8,10 +8,12 @@ export declare class RebalanceTxBuilder {
|
|
8
8
|
private swapManager;
|
9
9
|
private flRequirements?;
|
10
10
|
private priceType;
|
11
|
+
private flFeeBps?;
|
11
12
|
constructor(client: SolautoClient, targetLiqUtilizationRateBps?: number | undefined);
|
12
13
|
private shouldProceedWithRebalance;
|
13
14
|
private getRebalanceValues;
|
14
15
|
private getFlLiquiditySource;
|
16
|
+
private intermediaryLiqUtilizationRateBps;
|
15
17
|
private flashLoanRequirements;
|
16
18
|
private getFlashLoanDetails;
|
17
19
|
private setRebalanceType;
|
@@ -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;
|
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;AAgCrB,qBAAa,kBAAkB;IAS3B,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,2BAA2B,CAAC;IATtC,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;IAClD,OAAO,CAAC,QAAQ,CAAC,CAAS;gBAGhB,MAAM,EAAE,aAAa,EACrB,2BAA2B,CAAC,EAAE,MAAM,YAAA;IAG9C,OAAO,CAAC,0BAA0B;IAclC,OAAO,CAAC,kBAAkB;IAc1B,OAAO,CAAC,oBAAoB;IAyC5B,OAAO,CAAC,iCAAiC;YAsC3B,qBAAqB;IA0CnC,OAAO,CAAC,mBAAmB;IAwB3B,OAAO,CAAC,gBAAgB;IA+BxB,OAAO,CAAC,yBAAyB;YAqBnB,mBAAmB;YAwBnB,sBAAsB;YAyBtB,mBAAmB;IAmEpB,gBAAgB,CAC3B,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,qBAAqB,GAAG,SAAS,CAAC;CAe9C"}
|
@@ -23,8 +23,8 @@ class RebalanceTxBuilder {
|
|
23
23
|
(this.targetLiqUtilizationRateBps !== undefined ||
|
24
24
|
this.client.pos.eligibleForRebalance()));
|
25
25
|
}
|
26
|
-
getRebalanceValues(
|
27
|
-
return (0, rebalanceValues_1.getRebalanceValues)(this.client.pos, this.priceType, this.targetLiqUtilizationRateBps, solautoFees_1.SolautoFeesBps.create(this.client.isReferred
|
26
|
+
getRebalanceValues() {
|
27
|
+
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);
|
28
28
|
}
|
29
29
|
getFlLiquiditySource(supplyLiquidityAvailable, debtLiquidityAvailable) {
|
30
30
|
const debtAdjustmentUsd = Math.abs(this.values.debtAdjustmentUsd);
|
@@ -45,9 +45,27 @@ class RebalanceTxBuilder {
|
|
45
45
|
return !insufficientSupplyLiquidity ? generated_1.TokenType.Supply : undefined;
|
46
46
|
}
|
47
47
|
}
|
48
|
+
intermediaryLiqUtilizationRateBps() {
|
49
|
+
if (this.client.pos.maxLtvPriceType !== generated_1.PriceType.Ema ||
|
50
|
+
this.priceType === generated_1.PriceType.Ema ||
|
51
|
+
this.values.rebalanceDirection === generated_1.RebalanceDirection.Repay) {
|
52
|
+
return this.values.intermediaryLiqUtilizationRateBps;
|
53
|
+
}
|
54
|
+
const fees = new solautoFees_1.SolautoFeesBps(this.client.isReferred, this.targetLiqUtilizationRateBps, this.client.pos.netWorthUsd(generated_1.PriceType.Realtime));
|
55
|
+
const { intermediaryLiqUtilizationRateBps } = (0, rebalanceValues_1.applyDebtAdjustmentUsd)(this.values.debtAdjustmentUsd, {
|
56
|
+
supplyUsd: (0, utils_1.realtimeUsdToEmaUsd)(this.client.pos.supplyUsd(generated_1.PriceType.Realtime), this.client.pos.supplyMint),
|
57
|
+
debtUsd: (0, utils_1.realtimeUsdToEmaUsd)(this.client.pos.debtUsd(generated_1.PriceType.Realtime), this.client.pos.debtMint),
|
58
|
+
}, (0, utils_1.fromBps)(this.client.pos.state.liqThresholdBps), {
|
59
|
+
solauto: fees.getSolautoFeesBps(this.values.rebalanceDirection).total,
|
60
|
+
lpBorrow: this.client.pos.state.debt.borrowFeeBps,
|
61
|
+
flashLoan: this.flRequirements?.flFeeBps ?? 0,
|
62
|
+
});
|
63
|
+
return intermediaryLiqUtilizationRateBps;
|
64
|
+
}
|
48
65
|
async flashLoanRequirements(attemptNum) {
|
49
|
-
const
|
50
|
-
|
66
|
+
const intermediaryLiqUtilizationRateBps = this.intermediaryLiqUtilizationRateBps();
|
67
|
+
const maxLtvRateBps = (0, utils_1.getMaxLiqUtilizationRateBps)(this.client.pos.state.maxLtvBps, this.client.pos.state.liqThresholdBps, 0.005);
|
68
|
+
if (intermediaryLiqUtilizationRateBps < maxLtvRateBps) {
|
51
69
|
return undefined;
|
52
70
|
}
|
53
71
|
const stdFlLiquiditySource = this.getFlLiquiditySource(this.client.flProvider.liquidityAvailable(generated_1.TokenType.Supply), this.client.flProvider.liquidityAvailable(generated_1.TokenType.Debt));
|
@@ -139,7 +157,7 @@ class RebalanceTxBuilder {
|
|
139
157
|
this.values = rebalanceValues;
|
140
158
|
this.flRequirements = await this.flashLoanRequirements(attemptNum);
|
141
159
|
if (this.flRequirements?.flFeeBps) {
|
142
|
-
this.values = this.getRebalanceValues(
|
160
|
+
this.values = this.getRebalanceValues();
|
143
161
|
}
|
144
162
|
this.swapManager = new rebalanceSwapManager_1.RebalanceSwapManager(this.client, this.values, this.flRequirements, this.targetLiqUtilizationRateBps);
|
145
163
|
await this.swapManager.setSwapParams(attemptNum);
|
@@ -18,7 +18,7 @@ export declare class ReferralStateManager extends TxHandler {
|
|
18
18
|
defaultLookupTables(): string[];
|
19
19
|
refetchReferralState(): Promise<void>;
|
20
20
|
setReferredBy(referredBy?: PublicKey): void;
|
21
|
-
isReferred(): boolean;
|
21
|
+
get isReferred(): boolean;
|
22
22
|
updateReferralStatesIx(destFeesMint?: PublicKey, lookupTable?: PublicKey): TransactionBuilder;
|
23
23
|
claimReferralFeesIx(): TransactionBuilder;
|
24
24
|
resetLiveTxUpdates(success?: boolean): Promise<void>;
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"referralStateManager.d.ts","sourceRoot":"","sources":["../../../src/services/solauto/referralStateManager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE5C,OAAO,EAAa,kBAAkB,EAAE,GAAG,EAAE,MAAM,0BAA0B,CAAC;AAE9E,OAAO,EAEL,aAAa,EAGd,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAGxC,MAAM,WAAW,wBAAwB;IACvC,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,aAAa,CAAC,EAAE,SAAS,CAAC;IAC1B,mBAAmB,CAAC,EAAE,SAAS,CAAC;CACjC;AAED,qBAAa,oBAAqB,SAAQ,SAAS;IAC1C,GAAG,EAAG,GAAG,CAAC;IAEV,aAAa,EAAG,SAAS,CAAC;IAC1B,iBAAiB,EAAG,aAAa,GAAG,IAAI,CAAC;IACzC,SAAS,EAAG,SAAS,CAAC;IAEtB,UAAU,CAAC,EAAE,SAAS,CAAC;IACvB,eAAe,CAAC,EAAE,SAAS,CAAC;IAE7B,UAAU,CAAC,IAAI,EAAE,wBAAwB;IAoB/C,mBAAmB,IAAI,MAAM,EAAE;IASzB,oBAAoB;IAQ1B,aAAa,CAAC,UAAU,CAAC,EAAE,SAAS;IAsBpC,UAAU,IAAI,OAAO;
|
1
|
+
{"version":3,"file":"referralStateManager.d.ts","sourceRoot":"","sources":["../../../src/services/solauto/referralStateManager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE5C,OAAO,EAAa,kBAAkB,EAAE,GAAG,EAAE,MAAM,0BAA0B,CAAC;AAE9E,OAAO,EAEL,aAAa,EAGd,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAGxC,MAAM,WAAW,wBAAwB;IACvC,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,aAAa,CAAC,EAAE,SAAS,CAAC;IAC1B,mBAAmB,CAAC,EAAE,SAAS,CAAC;CACjC;AAED,qBAAa,oBAAqB,SAAQ,SAAS;IAC1C,GAAG,EAAG,GAAG,CAAC;IAEV,aAAa,EAAG,SAAS,CAAC;IAC1B,iBAAiB,EAAG,aAAa,GAAG,IAAI,CAAC;IACzC,SAAS,EAAG,SAAS,CAAC;IAEtB,UAAU,CAAC,EAAE,SAAS,CAAC;IACvB,eAAe,CAAC,EAAE,SAAS,CAAC;IAE7B,UAAU,CAAC,IAAI,EAAE,wBAAwB;IAoB/C,mBAAmB,IAAI,MAAM,EAAE;IASzB,oBAAoB;IAQ1B,aAAa,CAAC,UAAU,CAAC,EAAE,SAAS;IAsBpC,IAAI,UAAU,IAAI,OAAO,CAExB;IAED,sBAAsB,CACpB,YAAY,CAAC,EAAE,SAAS,EACxB,WAAW,CAAC,EAAE,SAAS,GACtB,kBAAkB;IAerB,mBAAmB,IAAI,kBAAkB;IA0BnC,kBAAkB,CAAC,OAAO,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;CAC3D"}
|
@@ -48,7 +48,7 @@ class ReferralStateManager extends txHandler_1.TxHandler {
|
|
48
48
|
? (0, umi_web3js_adapters_1.toWeb3JsPublicKey)(this.referralStateData.referredByState)
|
49
49
|
: undefined;
|
50
50
|
}
|
51
|
-
isReferred() {
|
51
|
+
get isReferred() {
|
52
52
|
return Boolean(this.referredByState);
|
53
53
|
}
|
54
54
|
updateReferralStatesIx(destFeesMint, lookupTable) {
|
@@ -4,6 +4,7 @@ import { SolautoPositionEx } from "./solautoPositionEx";
|
|
4
4
|
import { LendingPlatform, PriceType } from "../generated";
|
5
5
|
export declare class MarginfiSolautoPositionEx extends SolautoPositionEx {
|
6
6
|
lendingPlatform: LendingPlatform;
|
7
|
+
maxLtvPriceType: PriceType;
|
7
8
|
private supplyBank;
|
8
9
|
private debtBank;
|
9
10
|
getBanks(): Promise<Bank[]>;
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"marginfiSolautoPositionEx.d.ts","sourceRoot":"","sources":["../../src/solautoPosition/marginfiSolautoPositionEx.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,IAAI,EAAoB,MAAM,iBAAiB,CAAC;AAezD,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAE1D,qBAAa,yBAA0B,SAAQ,iBAAiB;IAC9D,eAAe,kBAA4B;
|
1
|
+
{"version":3,"file":"marginfiSolautoPositionEx.d.ts","sourceRoot":"","sources":["../../src/solautoPosition/marginfiSolautoPositionEx.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,IAAI,EAAoB,MAAM,iBAAiB,CAAC;AAezD,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAE1D,qBAAa,yBAA0B,SAAQ,iBAAiB;IAC9D,eAAe,kBAA4B;IAC3C,eAAe,YAAiB;IAEhC,OAAO,CAAC,UAAU,CAAqB;IACvC,OAAO,CAAC,QAAQ,CAAqB;IAE/B,QAAQ,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;IAgB3B,YAAY,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;IASpC,wBAAwB,IAAI,OAAO,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAa3D,OAAO,CAAC,6BAA6B;IAwBrC,gCAAgC,CAAC,KAAK,EAAE,IAAI,EAAE;IAK9C,4BAA4B,CAAC,KAAK,EAAE,IAAI,EAAE;IAQ1C,IAAI,wBAAwB,IAAI,MAAM,CAKrC;IAEK,oBAAoB,CAAC,SAAS,CAAC,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;CAuBjE"}
|
@@ -11,6 +11,7 @@ class MarginfiSolautoPositionEx extends solautoPositionEx_1.SolautoPositionEx {
|
|
11
11
|
constructor() {
|
12
12
|
super(...arguments);
|
13
13
|
this.lendingPlatform = generated_1.LendingPlatform.Marginfi;
|
14
|
+
this.maxLtvPriceType = generated_1.PriceType.Ema;
|
14
15
|
this.supplyBank = null;
|
15
16
|
this.debtBank = null;
|
16
17
|
}
|
@@ -42,6 +42,7 @@ export declare abstract class SolautoPositionEx {
|
|
42
42
|
private _supplyPrice?;
|
43
43
|
private _debtPrice?;
|
44
44
|
rebalance: PositionRebalanceHelper;
|
45
|
+
maxLtvPriceType: PriceType;
|
45
46
|
constructor(args: PositionExArgs);
|
46
47
|
get exists(): boolean;
|
47
48
|
get selfManaged(): boolean;
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"solautoPositionEx.d.ts","sourceRoot":"","sources":["../../src/solautoPosition/solautoPositionEx.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,GAAG,EAAE,MAAM,0BAA0B,CAAC;AAK/C,OAAO,EAEL,eAAe,EACf,aAAa,EACb,SAAS,EACT,eAAe,EACf,yBAAyB,EAC1B,MAAM,cAAc,CAAC;AACtB,OAAO,EAOL,cAAc,EAkBf,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAMvD,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEzC,MAAM,WAAW,kBAAkB;IACjC,eAAe,EAAE,eAAe,CAAC;IACjC,UAAU,CAAC,EAAE,SAAS,CAAC;IACvB,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,aAAa,CAAC,EAAE,SAAS,CAAC;IAC1B,aAAa,CAAC,EAAE,SAAS,CAAC;IAC1B,KAAK,CAAC,EAAE,UAAU,CAAC;CACpB;AAED,UAAU,qBAAsB,SAAQ,OAAO,CAAC,eAAe,CAAC;IAC9D,KAAK,EAAE,aAAa,CAAC;CACtB;AAED,MAAM,WAAW,cAAc;IAC7B,GAAG,EAAE,GAAG,CAAC;IACT,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,qBAAqB,CAAC;IAC5B,UAAU,CAAC,EAAE,kBAAkB,CAAC;IAChC,cAAc,CAAC,EAAE,cAAc,CAAC;CACjC;AAED,8BAAsB,iBAAiB;IAC9B,GAAG,EAAG,GAAG,CAAC;IACjB,SAAS,CAAC,cAAc,CAAC,EAAE,cAAc,CAAC;IAEnC,SAAS,EAAG,SAAS,CAAC;IACtB,eAAe,EAAG,eAAe,CAAC;IAClC,UAAU,EAAG,MAAM,CAAC;IACpB,SAAS,EAAG,SAAS,CAAC;IAC7B,SAAS,CAAC,cAAc,CAAC,EAAE,SAAS,CAAC;IAC9B,aAAa,CAAC,EAAE,SAAS,CAAa;IAC7C,SAAS,CAAC,KAAK,EAAG,UAAU,CAAC;IAC7B,OAAO,CAAC,WAAW,CAAC,CAAY;IAChC,OAAO,CAAC,SAAS,CAAC,CAAY;IAC9B,SAAS,CAAC,KAAK,EAAG,qBAAqB,CAAC;IAExC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAiB;IAE5C,OAAO,CAAC,YAAY,CAAC,CAAS;IAC9B,OAAO,CAAC,UAAU,CAAC,CAAS;IAErB,SAAS,EAAG,uBAAuB,CAAC;
|
1
|
+
{"version":3,"file":"solautoPositionEx.d.ts","sourceRoot":"","sources":["../../src/solautoPosition/solautoPositionEx.ts"],"names":[],"mappings":"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"}
|
@@ -216,8 +216,7 @@ class PositionRebalanceHelper {
|
|
216
216
|
return true;
|
217
217
|
}
|
218
218
|
validRealtimePricesBoost(debtAdjustmentUsd) {
|
219
|
-
if (this.pos.
|
220
|
-
// TODO: LP
|
219
|
+
if (this.pos.maxLtvPriceType !== generated_1.PriceType.Ema) {
|
221
220
|
return true;
|
222
221
|
}
|
223
222
|
const postRebalanceLiqUtilRate = (0, utils_1.getLiqUtilzationRateBps)((0, utils_1.realtimeUsdToEmaUsd)(this.pos.supplyUsd() + debtAdjustmentUsd, this.pos.supplyMint), (0, utils_1.realtimeUsdToEmaUsd)(this.pos.debtUsd() + debtAdjustmentUsd, this.pos.debtMint), this.pos.state.liqThresholdBps);
|
package/local/txSandbox.ts
CHANGED
@@ -34,7 +34,7 @@ let [, umi] = getSolanaRpcConnection(
|
|
34
34
|
|
35
35
|
const signer = createSignerFromKeypair(
|
36
36
|
umi,
|
37
|
-
fromWeb3JsKeypair(Keypair.fromSecretKey(getSecretKey()))
|
37
|
+
fromWeb3JsKeypair(Keypair.fromSecretKey(getSecretKey("solauto-manager")))
|
38
38
|
);
|
39
39
|
|
40
40
|
export async function main() {
|
@@ -47,7 +47,7 @@ export async function main() {
|
|
47
47
|
});
|
48
48
|
|
49
49
|
await client.initialize({
|
50
|
-
positionId:
|
50
|
+
positionId: 1,
|
51
51
|
authority: new PublicKey("5UqsR2PGzbP8pGPbXEeXx86Gjz2N2UFBAuFZUSVydAEe"),
|
52
52
|
// lpUserAccount: new PublicKey(
|
53
53
|
// "GEokw9jqbh6d1xUNA3qaeYFFetbSR5Y1nt7C3chwwgSz"
|
package/package.json
CHANGED
@@ -10,7 +10,7 @@ import {
|
|
10
10
|
import {
|
11
11
|
consoleLog,
|
12
12
|
fromBaseUnit,
|
13
|
-
|
13
|
+
fromBps,
|
14
14
|
getMaxLiqUtilizationRateBps,
|
15
15
|
getTokenAccount,
|
16
16
|
hasFirstRebalance,
|
@@ -20,6 +20,7 @@ import {
|
|
20
20
|
tokenInfo,
|
21
21
|
} from "../../utils";
|
22
22
|
import {
|
23
|
+
LendingPlatform,
|
23
24
|
PositionTokenState,
|
24
25
|
PriceType,
|
25
26
|
RebalanceDirection,
|
@@ -29,7 +30,11 @@ import {
|
|
29
30
|
TokenBalanceChangeType,
|
30
31
|
TokenType,
|
31
32
|
} from "../../generated";
|
32
|
-
import {
|
33
|
+
import {
|
34
|
+
applyDebtAdjustmentUsd,
|
35
|
+
getRebalanceValues,
|
36
|
+
RebalanceValues,
|
37
|
+
} from "./rebalanceValues";
|
33
38
|
import { SolautoFeesBps } from "./solautoFees";
|
34
39
|
import { RebalanceSwapManager } from "./rebalanceSwapManager";
|
35
40
|
|
@@ -39,6 +44,7 @@ export class RebalanceTxBuilder {
|
|
39
44
|
private swapManager!: RebalanceSwapManager;
|
40
45
|
private flRequirements?: FlashLoanRequirements;
|
41
46
|
private priceType: PriceType = PriceType.Realtime;
|
47
|
+
private flFeeBps?: number;
|
42
48
|
|
43
49
|
constructor(
|
44
50
|
private client: SolautoClient,
|
@@ -47,7 +53,9 @@ export class RebalanceTxBuilder {
|
|
47
53
|
|
48
54
|
private shouldProceedWithRebalance() {
|
49
55
|
if (this.client.pos.selfManaged && !this.targetLiqUtilizationRateBps) {
|
50
|
-
throw new Error(
|
56
|
+
throw new Error(
|
57
|
+
"A target rate must be provided for self managed position rebalances"
|
58
|
+
);
|
51
59
|
}
|
52
60
|
|
53
61
|
return (
|
@@ -57,17 +65,17 @@ export class RebalanceTxBuilder {
|
|
57
65
|
);
|
58
66
|
}
|
59
67
|
|
60
|
-
private getRebalanceValues(
|
68
|
+
private getRebalanceValues() {
|
61
69
|
return getRebalanceValues(
|
62
70
|
this.client.pos,
|
63
71
|
this.priceType,
|
64
72
|
this.targetLiqUtilizationRateBps,
|
65
73
|
SolautoFeesBps.create(
|
66
|
-
this.client.isReferred
|
74
|
+
this.client.isReferred,
|
67
75
|
this.targetLiqUtilizationRateBps,
|
68
76
|
this.client.pos.netWorthUsd(this.priceType)
|
69
77
|
),
|
70
|
-
|
78
|
+
this.flRequirements?.flFeeBps ?? 0
|
71
79
|
);
|
72
80
|
}
|
73
81
|
|
@@ -112,15 +120,55 @@ export class RebalanceTxBuilder {
|
|
112
120
|
}
|
113
121
|
}
|
114
122
|
|
123
|
+
private intermediaryLiqUtilizationRateBps() {
|
124
|
+
if (
|
125
|
+
this.client.pos.maxLtvPriceType !== PriceType.Ema ||
|
126
|
+
this.priceType === PriceType.Ema ||
|
127
|
+
this.values.rebalanceDirection === RebalanceDirection.Repay
|
128
|
+
) {
|
129
|
+
return this.values.intermediaryLiqUtilizationRateBps;
|
130
|
+
}
|
131
|
+
|
132
|
+
const fees = new SolautoFeesBps(
|
133
|
+
this.client.isReferred,
|
134
|
+
this.targetLiqUtilizationRateBps,
|
135
|
+
this.client.pos.netWorthUsd(PriceType.Realtime)
|
136
|
+
);
|
137
|
+
|
138
|
+
const { intermediaryLiqUtilizationRateBps } = applyDebtAdjustmentUsd(
|
139
|
+
this.values.debtAdjustmentUsd,
|
140
|
+
{
|
141
|
+
supplyUsd: realtimeUsdToEmaUsd(
|
142
|
+
this.client.pos.supplyUsd(PriceType.Realtime),
|
143
|
+
this.client.pos.supplyMint
|
144
|
+
),
|
145
|
+
debtUsd: realtimeUsdToEmaUsd(
|
146
|
+
this.client.pos.debtUsd(PriceType.Realtime),
|
147
|
+
this.client.pos.debtMint
|
148
|
+
),
|
149
|
+
},
|
150
|
+
fromBps(this.client.pos.state.liqThresholdBps),
|
151
|
+
{
|
152
|
+
solauto: fees.getSolautoFeesBps(this.values.rebalanceDirection).total,
|
153
|
+
lpBorrow: this.client.pos.state.debt.borrowFeeBps,
|
154
|
+
flashLoan: this.flRequirements?.flFeeBps ?? 0,
|
155
|
+
}
|
156
|
+
);
|
157
|
+
|
158
|
+
return intermediaryLiqUtilizationRateBps;
|
159
|
+
}
|
160
|
+
|
115
161
|
private async flashLoanRequirements(
|
116
162
|
attemptNum: number
|
117
163
|
): Promise<FlashLoanRequirements | undefined> {
|
164
|
+
const intermediaryLiqUtilizationRateBps =
|
165
|
+
this.intermediaryLiqUtilizationRateBps();
|
118
166
|
const maxLtvRateBps = getMaxLiqUtilizationRateBps(
|
119
167
|
this.client.pos.state.maxLtvBps,
|
120
168
|
this.client.pos.state.liqThresholdBps,
|
121
|
-
0.
|
169
|
+
0.005
|
122
170
|
);
|
123
|
-
if (
|
171
|
+
if (intermediaryLiqUtilizationRateBps < maxLtvRateBps) {
|
124
172
|
return undefined;
|
125
173
|
}
|
126
174
|
|
@@ -237,7 +285,7 @@ export class RebalanceTxBuilder {
|
|
237
285
|
|
238
286
|
this.flRequirements = await this.flashLoanRequirements(attemptNum);
|
239
287
|
if (this.flRequirements?.flFeeBps) {
|
240
|
-
this.values = this.getRebalanceValues(
|
288
|
+
this.values = this.getRebalanceValues()!;
|
241
289
|
}
|
242
290
|
|
243
291
|
this.swapManager = new RebalanceSwapManager(
|
@@ -19,6 +19,7 @@ import { LendingPlatform, PriceType } from "../generated";
|
|
19
19
|
|
20
20
|
export class MarginfiSolautoPositionEx extends SolautoPositionEx {
|
21
21
|
lendingPlatform = LendingPlatform.Marginfi;
|
22
|
+
maxLtvPriceType = PriceType.Ema;
|
22
23
|
|
23
24
|
private supplyBank: Bank | null = null;
|
24
25
|
private debtBank: Bank | null = null;
|
@@ -91,6 +91,7 @@ export abstract class SolautoPositionEx {
|
|
91
91
|
private _debtPrice?: number;
|
92
92
|
|
93
93
|
public rebalance!: PositionRebalanceHelper;
|
94
|
+
public maxLtvPriceType!: PriceType;
|
94
95
|
|
95
96
|
constructor(args: PositionExArgs) {
|
96
97
|
this.umi = args.umi;
|
@@ -436,8 +437,7 @@ class PositionRebalanceHelper {
|
|
436
437
|
}
|
437
438
|
|
438
439
|
validRealtimePricesBoost(debtAdjustmentUsd: number) {
|
439
|
-
if (this.pos.
|
440
|
-
// TODO: LP
|
440
|
+
if (this.pos.maxLtvPriceType !== PriceType.Ema) {
|
441
441
|
return true;
|
442
442
|
}
|
443
443
|
|