@haven-fi/solauto-sdk 1.0.591 → 1.0.593
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.js +1 -1
- 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 +5 -3
- package/dist/services/rebalance/solautoFees.d.ts +1 -0
- package/dist/services/rebalance/solautoFees.d.ts.map +1 -1
- package/dist/services/rebalance/solautoFees.js +3 -0
- package/package.json +1 -1
- package/src/services/rebalance/rebalanceTxBuilder.ts +2 -2
- package/src/services/rebalance/rebalanceValues.ts +7 -5
- package/src/services/rebalance/solautoFees.ts +13 -1
- package/tests/unit/rebalanceCalculations.ts +4 -13
@@ -20,7 +20,7 @@ class RebalanceTxBuilder {
|
|
20
20
|
this.client.pos.eligibleForRebalance()));
|
21
21
|
}
|
22
22
|
getRebalanceValues(flFee) {
|
23
|
-
return (0, rebalanceValues_1.getRebalanceValues)(this.client.pos,
|
23
|
+
return (0, rebalanceValues_1.getRebalanceValues)(this.client.pos, this.targetLiqUtilizationRateBps, solautoFees_1.SolautoFeesBps.create(this.client.isReferred(), this.targetLiqUtilizationRateBps, this.client.pos.netWorthUsd()), flFee ?? 0);
|
24
24
|
}
|
25
25
|
getFlLiquiditySource(supplyLiquidityAvailable, debtLiquidityAvailable) {
|
26
26
|
const debtAdjustmentUsd = Math.abs(this.values.debtAdjustmentUsd);
|
@@ -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, solautoFeeBps
|
29
|
+
export declare function getRebalanceValues(solautoPosition: SolautoPositionEx, targetLiqUtilizationRateBps?: number, solautoFeeBps?: SolautoFeesBps, flFeeBps?: number): RebalanceValues;
|
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,EACL,kBAAkB,EAClB,kBAAkB,EAEnB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAO1D,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,IAAI,EAAE,gBAAgB,EACtB,YAAY,EAAE,MAAM,GACnB,yBAAyB,CA6B3B;AAED,wBAAgB,iBAAiB,CAC/B,YAAY,EAAE,MAAM,EACpB,GAAG,EAAE,cAAc,EACnB,IAAI,EAAE,gBAAgB,EACtB,2BAA2B,EAAE,MAAM,GAClC,cAAc,CA+BhB;AAqED,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,
|
1
|
+
{"version":3,"file":"rebalanceValues.d.ts","sourceRoot":"","sources":["../../../src/services/rebalance/rebalanceValues.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,kBAAkB,EAClB,kBAAkB,EAEnB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAO1D,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,IAAI,EAAE,gBAAgB,EACtB,YAAY,EAAE,MAAM,GACnB,yBAAyB,CA6B3B;AAED,wBAAgB,iBAAiB,CAC/B,YAAY,EAAE,MAAM,EACpB,GAAG,EAAE,cAAc,EACnB,IAAI,EAAE,gBAAgB,EACtB,2BAA2B,EAAE,MAAM,GAClC,cAAc,CA+BhB;AAqED,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,2BAA2B,CAAC,EAAE,MAAM,EACpC,aAAa,CAAC,EAAE,cAAc,EAC9B,QAAQ,CAAC,EAAE,MAAM,GAChB,eAAe,CA6CjB"}
|
@@ -95,15 +95,17 @@ function getRebalanceDirection(solautoPosition, targetLtvBps) {
|
|
95
95
|
? generated_1.RebalanceDirection.Boost
|
96
96
|
: generated_1.RebalanceDirection.Repay;
|
97
97
|
}
|
98
|
-
function getRebalanceValues(solautoPosition, solautoFeeBps, flFeeBps
|
98
|
+
function getRebalanceValues(solautoPosition, targetLiqUtilizationRateBps, solautoFeeBps, flFeeBps) {
|
99
99
|
const tokenBalanceChange = getTokenBalanceChange();
|
100
100
|
const targetRate = getTargetLiqUtilizationRateBps(solautoPosition, targetLiqUtilizationRateBps, tokenBalanceChange);
|
101
101
|
const rebalanceDirection = getRebalanceDirection(solautoPosition, targetRate);
|
102
102
|
const position = getAdjustedPositionValues(solautoPosition, tokenBalanceChange);
|
103
103
|
const fees = {
|
104
|
-
solauto: solautoFeeBps
|
104
|
+
solauto: solautoFeeBps
|
105
|
+
? solautoFeeBps.getSolautoFeesBps(rebalanceDirection).total
|
106
|
+
: 0,
|
105
107
|
lpBorrow: solautoPosition.state().debt.borrowFeeBps,
|
106
|
-
flashLoan: flFeeBps,
|
108
|
+
flashLoan: flFeeBps ?? 0,
|
107
109
|
};
|
108
110
|
const debtAdjustment = getDebtAdjustment((0, utils_1.fromBps)(solautoPosition.state().liqThresholdBps), position, fees, targetRate);
|
109
111
|
const repayingCloseToMaxLtv = rebalanceDirection === generated_1.RebalanceDirection.Repay &&
|
@@ -4,6 +4,7 @@ export declare class SolautoFeesBps {
|
|
4
4
|
private targetLiqUtilizationRateBps;
|
5
5
|
private positionNetWorthUsd;
|
6
6
|
constructor(isReferred: boolean, targetLiqUtilizationRateBps: number | undefined, positionNetWorthUsd: number);
|
7
|
+
static create(isReferred: boolean, targetLiqUtilizationRateBps: number | undefined, netWorthUsd: number): SolautoFeesBps;
|
7
8
|
getSolautoFeesBps(rebalanceDirection: RebalanceDirection): {
|
8
9
|
solauto: number;
|
9
10
|
referrer: number;
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"solautoFees.d.ts","sourceRoot":"","sources":["../../../src/services/rebalance/solautoFees.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAErD,qBAAa,cAAc;IAEvB,OAAO,CAAC,UAAU;IAClB,OAAO,CAAC,2BAA2B;IACnC,OAAO,CAAC,mBAAmB;gBAFnB,UAAU,EAAE,OAAO,EACnB,2BAA2B,EAAE,MAAM,GAAG,SAAS,EAC/C,mBAAmB,EAAE,MAAM;
|
1
|
+
{"version":3,"file":"solautoFees.d.ts","sourceRoot":"","sources":["../../../src/services/rebalance/solautoFees.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAErD,qBAAa,cAAc;IAEvB,OAAO,CAAC,UAAU;IAClB,OAAO,CAAC,2BAA2B;IACnC,OAAO,CAAC,mBAAmB;gBAFnB,UAAU,EAAE,OAAO,EACnB,2BAA2B,EAAE,MAAM,GAAG,SAAS,EAC/C,mBAAmB,EAAE,MAAM;IAGrC,MAAM,CAAC,MAAM,CACX,UAAU,EAAE,OAAO,EACnB,2BAA2B,EAAE,MAAM,GAAG,SAAS,EAC/C,WAAW,EAAE,MAAM;IASrB,iBAAiB,CAAC,kBAAkB,EAAE,kBAAkB;;;;;CAkDzD"}
|
@@ -9,6 +9,9 @@ class SolautoFeesBps {
|
|
9
9
|
this.targetLiqUtilizationRateBps = targetLiqUtilizationRateBps;
|
10
10
|
this.positionNetWorthUsd = positionNetWorthUsd;
|
11
11
|
}
|
12
|
+
static create(isReferred, targetLiqUtilizationRateBps, netWorthUsd) {
|
13
|
+
return new SolautoFeesBps(isReferred, targetLiqUtilizationRateBps, netWorthUsd);
|
14
|
+
}
|
12
15
|
getSolautoFeesBps(rebalanceDirection) {
|
13
16
|
const minSize = 10000; // Minimum position size
|
14
17
|
const maxSize = 250000; // Maximum position size
|
package/package.json
CHANGED
@@ -52,13 +52,13 @@ export class RebalanceTxBuilder {
|
|
52
52
|
private getRebalanceValues(flFee?: number) {
|
53
53
|
return getRebalanceValues(
|
54
54
|
this.client.pos,
|
55
|
-
|
55
|
+
this.targetLiqUtilizationRateBps,
|
56
|
+
SolautoFeesBps.create(
|
56
57
|
this.client.isReferred(),
|
57
58
|
this.targetLiqUtilizationRateBps,
|
58
59
|
this.client.pos.netWorthUsd()
|
59
60
|
),
|
60
61
|
flFee ?? 0,
|
61
|
-
this.targetLiqUtilizationRateBps
|
62
62
|
);
|
63
63
|
}
|
64
64
|
|
@@ -183,9 +183,9 @@ export interface RebalanceValues extends DebtAdjustment {
|
|
183
183
|
|
184
184
|
export function getRebalanceValues(
|
185
185
|
solautoPosition: SolautoPositionEx,
|
186
|
-
|
187
|
-
|
188
|
-
|
186
|
+
targetLiqUtilizationRateBps?: number,
|
187
|
+
solautoFeeBps?: SolautoFeesBps,
|
188
|
+
flFeeBps?: number,
|
189
189
|
): RebalanceValues {
|
190
190
|
const tokenBalanceChange = getTokenBalanceChange();
|
191
191
|
|
@@ -203,9 +203,11 @@ export function getRebalanceValues(
|
|
203
203
|
);
|
204
204
|
|
205
205
|
const fees: RebalanceFeesBps = {
|
206
|
-
solauto: solautoFeeBps
|
206
|
+
solauto: solautoFeeBps
|
207
|
+
? solautoFeeBps.getSolautoFeesBps(rebalanceDirection).total
|
208
|
+
: 0,
|
207
209
|
lpBorrow: solautoPosition.state().debt.borrowFeeBps,
|
208
|
-
flashLoan: flFeeBps,
|
210
|
+
flashLoan: flFeeBps ?? 0,
|
209
211
|
};
|
210
212
|
|
211
213
|
const debtAdjustment = getDebtAdjustment(
|
@@ -8,7 +8,19 @@ export class SolautoFeesBps {
|
|
8
8
|
private positionNetWorthUsd: number
|
9
9
|
) {}
|
10
10
|
|
11
|
-
|
11
|
+
static create(
|
12
|
+
isReferred: boolean,
|
13
|
+
targetLiqUtilizationRateBps: number | undefined,
|
14
|
+
netWorthUsd: number
|
15
|
+
) {
|
16
|
+
return new SolautoFeesBps(
|
17
|
+
isReferred,
|
18
|
+
targetLiqUtilizationRateBps,
|
19
|
+
netWorthUsd
|
20
|
+
);
|
21
|
+
}
|
22
|
+
|
23
|
+
getSolautoFeesBps(rebalanceDirection: RebalanceDirection) {
|
12
24
|
const minSize = 10_000; // Minimum position size
|
13
25
|
const maxSize = 250_000; // Maximum position size
|
14
26
|
const maxFeeBps = 50; // Fee in basis points for minSize (0.5%)
|
@@ -11,12 +11,7 @@ import {
|
|
11
11
|
import { fromBps, getLiqUtilzationRateBps } from "../../src/utils/numberUtils";
|
12
12
|
import { getClient } from "../../src/utils/solautoUtils";
|
13
13
|
import { USDC } from "../../src/constants/tokenConstants";
|
14
|
-
import {
|
15
|
-
buildHeliusApiUrl,
|
16
|
-
fetchTokenPrices,
|
17
|
-
getSolanaRpcConnection,
|
18
|
-
safeGetPrice,
|
19
|
-
} from "../../src/utils";
|
14
|
+
import { buildIronforgeApiUrl, fetchTokenPrices, safeGetPrice } from "../../src/utils";
|
20
15
|
import {
|
21
16
|
createFakePositionState,
|
22
17
|
getRebalanceValues,
|
@@ -24,12 +19,8 @@ import {
|
|
24
19
|
SolautoClient,
|
25
20
|
} from "../../src";
|
26
21
|
import { SolautoFeesBps } from "../../src/services/rebalance/solautoFees";
|
27
|
-
import { buildIronforgeApiUrl } from "../../dist";
|
28
22
|
|
29
23
|
const signer = setupTest(undefined, true);
|
30
|
-
const [conn, _] = getSolanaRpcConnection(
|
31
|
-
buildHeliusApiUrl(process.env.HELIUS_API_URL!)
|
32
|
-
);
|
33
24
|
|
34
25
|
function assertAccurateRebalance(
|
35
26
|
client: SolautoClient,
|
@@ -38,13 +29,13 @@ function assertAccurateRebalance(
|
|
38
29
|
) {
|
39
30
|
const { endResult } = getRebalanceValues(
|
40
31
|
client.pos,
|
41
|
-
|
32
|
+
targetLiqUtilizationRateBps,
|
33
|
+
SolautoFeesBps.create(
|
42
34
|
false,
|
43
35
|
targetLiqUtilizationRateBps,
|
44
36
|
client.pos.netWorthUsd()
|
45
37
|
),
|
46
|
-
50
|
47
|
-
targetLiqUtilizationRateBps
|
38
|
+
50
|
48
39
|
);
|
49
40
|
|
50
41
|
const newLiqUtilizationRateBps = getLiqUtilzationRateBps(
|