@haven-fi/solauto-sdk 1.0.730 → 1.0.732
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.
@@ -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;AAgCrB,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;IAe1B,OAAO,CAAC,oBAAoB;
|
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;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;IAe1B,OAAO,CAAC,oBAAoB;IAyC5B,OAAO,CAAC,iCAAiC;YAgC3B,qBAAqB;IA4CnC,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"}
|
@@ -28,17 +28,18 @@ class RebalanceTxBuilder {
|
|
28
28
|
getRebalanceValues() {
|
29
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, this.bpsDistanceFromRebalance);
|
30
30
|
}
|
31
|
-
getFlLiquiditySource(supplyLiquidityAvailable, debtLiquidityAvailable) {
|
31
|
+
getFlLiquiditySource(attemptNum, supplyLiquidityAvailable, debtLiquidityAvailable) {
|
32
32
|
const debtAdjustmentUsd = Math.abs(this.values.debtAdjustmentUsd);
|
33
|
-
const
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
const
|
39
|
-
const insufficientDebtLiquidity = insufficientLiquidity(debtAdjustmentUsd, debtLiquidityAvailable, this.client.pos.debtMint);
|
33
|
+
const calcLiquidityAvailable = (liquidityAvailable, tokenMint) => (0, utils_1.fromBaseUnit)(liquidityAvailable, (0, utils_1.tokenInfo)(tokenMint).decimals) *
|
34
|
+
((0, utils_1.safeGetPrice)(tokenMint) ?? 0);
|
35
|
+
const supplyLiquidityUsdAvailable = calcLiquidityAvailable(supplyLiquidityAvailable, this.client.pos.supplyMint);
|
36
|
+
const insufficientSupplyLiquidity = debtAdjustmentUsd > supplyLiquidityUsdAvailable * 0.95;
|
37
|
+
const debtLiquidityUsdAvailable = calcLiquidityAvailable(debtLiquidityAvailable, this.client.pos.debtMint);
|
38
|
+
const insufficientDebtLiquidity = debtAdjustmentUsd > debtLiquidityUsdAvailable * 0.95;
|
40
39
|
let useDebtLiquidity = this.values.rebalanceDirection === generated_1.RebalanceDirection.Boost ||
|
41
|
-
insufficientSupplyLiquidity
|
40
|
+
insufficientSupplyLiquidity ||
|
41
|
+
(attemptNum >= 2 &&
|
42
|
+
debtLiquidityUsdAvailable > supplyLiquidityUsdAvailable * 5);
|
42
43
|
if (useDebtLiquidity) {
|
43
44
|
return !insufficientDebtLiquidity ? generated_1.TokenType.Debt : undefined;
|
44
45
|
}
|
@@ -63,16 +64,16 @@ class RebalanceTxBuilder {
|
|
63
64
|
});
|
64
65
|
return intermediaryLiqUtilizationRateBps;
|
65
66
|
}
|
66
|
-
async flashLoanRequirements() {
|
67
|
+
async flashLoanRequirements(attemptNum) {
|
67
68
|
const intermediaryLiqUtilizationRateBps = this.intermediaryLiqUtilizationRateBps();
|
68
69
|
const maxLtvRateBps = (0, utils_1.getMaxLiqUtilizationRateBps)(this.client.pos.state.maxLtvBps, this.client.pos.state.liqThresholdBps, 0.015);
|
69
70
|
if (intermediaryLiqUtilizationRateBps < maxLtvRateBps) {
|
70
71
|
return undefined;
|
71
72
|
}
|
72
|
-
const stdFlLiquiditySource = this.getFlLiquiditySource(this.client.flProvider.liquidityAvailable(generated_1.TokenType.Supply), this.client.flProvider.liquidityAvailable(generated_1.TokenType.Debt));
|
73
|
+
const stdFlLiquiditySource = this.getFlLiquiditySource(attemptNum, this.client.flProvider.liquidityAvailable(generated_1.TokenType.Supply), this.client.flProvider.liquidityAvailable(generated_1.TokenType.Debt));
|
73
74
|
if (stdFlLiquiditySource === undefined || this.optimizeSize) {
|
74
75
|
const { supplyBalance, debtBalance } = await this.client.signerBalances();
|
75
|
-
const signerFlLiquiditySource = this.getFlLiquiditySource(supplyBalance, debtBalance);
|
76
|
+
const signerFlLiquiditySource = this.getFlLiquiditySource(attemptNum, supplyBalance, debtBalance);
|
76
77
|
if (signerFlLiquiditySource) {
|
77
78
|
return {
|
78
79
|
liquiditySource: signerFlLiquiditySource,
|
@@ -156,7 +157,7 @@ class RebalanceTxBuilder {
|
|
156
157
|
return false;
|
157
158
|
}
|
158
159
|
this.values = rebalanceValues;
|
159
|
-
this.flRequirements = await this.flashLoanRequirements();
|
160
|
+
this.flRequirements = await this.flashLoanRequirements(attemptNum);
|
160
161
|
if (this.flRequirements?.flFeeBps) {
|
161
162
|
this.values = this.getRebalanceValues();
|
162
163
|
}
|
package/package.json
CHANGED
@@ -82,37 +82,38 @@ export class RebalanceTxBuilder {
|
|
82
82
|
}
|
83
83
|
|
84
84
|
private getFlLiquiditySource(
|
85
|
+
attemptNum: number,
|
85
86
|
supplyLiquidityAvailable: bigint,
|
86
87
|
debtLiquidityAvailable: bigint
|
87
88
|
): TokenType | undefined {
|
88
89
|
const debtAdjustmentUsd = Math.abs(this.values.debtAdjustmentUsd);
|
89
90
|
|
90
|
-
const
|
91
|
-
amountNeededUsd: number,
|
91
|
+
const calcLiquidityAvailable = (
|
92
92
|
liquidityAvailable: bigint,
|
93
93
|
tokenMint: PublicKey
|
94
|
-
) =>
|
95
|
-
|
96
|
-
|
97
|
-
(safeGetPrice(tokenMint) ?? 0);
|
98
|
-
return amountNeededUsd > liquidityUsd * 0.95;
|
99
|
-
};
|
94
|
+
) =>
|
95
|
+
fromBaseUnit(liquidityAvailable, tokenInfo(tokenMint).decimals) *
|
96
|
+
(safeGetPrice(tokenMint) ?? 0);
|
100
97
|
|
101
|
-
const
|
102
|
-
debtAdjustmentUsd,
|
98
|
+
const supplyLiquidityUsdAvailable = calcLiquidityAvailable(
|
103
99
|
supplyLiquidityAvailable,
|
104
100
|
this.client.pos.supplyMint
|
105
101
|
);
|
102
|
+
const insufficientSupplyLiquidity =
|
103
|
+
debtAdjustmentUsd > supplyLiquidityUsdAvailable * 0.95;
|
106
104
|
|
107
|
-
const
|
108
|
-
debtAdjustmentUsd,
|
105
|
+
const debtLiquidityUsdAvailable = calcLiquidityAvailable(
|
109
106
|
debtLiquidityAvailable,
|
110
107
|
this.client.pos.debtMint
|
111
108
|
);
|
109
|
+
const insufficientDebtLiquidity =
|
110
|
+
debtAdjustmentUsd > debtLiquidityUsdAvailable * 0.95;
|
112
111
|
|
113
112
|
let useDebtLiquidity =
|
114
113
|
this.values.rebalanceDirection === RebalanceDirection.Boost ||
|
115
|
-
insufficientSupplyLiquidity
|
114
|
+
insufficientSupplyLiquidity ||
|
115
|
+
(attemptNum >= 2 &&
|
116
|
+
debtLiquidityUsdAvailable > supplyLiquidityUsdAvailable * 5);
|
116
117
|
|
117
118
|
if (useDebtLiquidity) {
|
118
119
|
return !insufficientDebtLiquidity ? TokenType.Debt : undefined;
|
@@ -153,9 +154,9 @@ export class RebalanceTxBuilder {
|
|
153
154
|
return intermediaryLiqUtilizationRateBps;
|
154
155
|
}
|
155
156
|
|
156
|
-
private async flashLoanRequirements(
|
157
|
-
|
158
|
-
> {
|
157
|
+
private async flashLoanRequirements(
|
158
|
+
attemptNum: number
|
159
|
+
): Promise<FlashLoanRequirements | undefined> {
|
159
160
|
const intermediaryLiqUtilizationRateBps =
|
160
161
|
this.intermediaryLiqUtilizationRateBps();
|
161
162
|
const maxLtvRateBps = getMaxLiqUtilizationRateBps(
|
@@ -168,6 +169,7 @@ export class RebalanceTxBuilder {
|
|
168
169
|
}
|
169
170
|
|
170
171
|
const stdFlLiquiditySource = this.getFlLiquiditySource(
|
172
|
+
attemptNum,
|
171
173
|
this.client.flProvider.liquidityAvailable(TokenType.Supply),
|
172
174
|
this.client.flProvider.liquidityAvailable(TokenType.Debt)
|
173
175
|
);
|
@@ -175,6 +177,7 @@ export class RebalanceTxBuilder {
|
|
175
177
|
if (stdFlLiquiditySource === undefined || this.optimizeSize) {
|
176
178
|
const { supplyBalance, debtBalance } = await this.client.signerBalances();
|
177
179
|
const signerFlLiquiditySource = this.getFlLiquiditySource(
|
180
|
+
attemptNum,
|
178
181
|
supplyBalance,
|
179
182
|
debtBalance
|
180
183
|
);
|
@@ -278,7 +281,7 @@ export class RebalanceTxBuilder {
|
|
278
281
|
}
|
279
282
|
this.values = rebalanceValues;
|
280
283
|
|
281
|
-
this.flRequirements = await this.flashLoanRequirements();
|
284
|
+
this.flRequirements = await this.flashLoanRequirements(attemptNum);
|
282
285
|
if (this.flRequirements?.flFeeBps) {
|
283
286
|
this.values = this.getRebalanceValues()!;
|
284
287
|
}
|