@haven-fi/solauto-sdk 1.0.596 → 1.0.598
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/rebalanceValues.d.ts +2 -2
- package/dist/services/rebalance/rebalanceValues.d.ts.map +1 -1
- package/dist/services/rebalance/rebalanceValues.js +12 -11
- package/dist/solautoPosition/solautoPositionEx.js +1 -2
- package/dist/solautoPosition/utils.d.ts.map +1 -1
- package/dist/solautoPosition/utils.js +2 -3
- package/dist/utils/numberUtils.d.ts +0 -1
- package/dist/utils/numberUtils.d.ts.map +1 -1
- package/dist/utils/numberUtils.js +0 -9
- package/package.json +1 -1
- package/src/services/rebalance/rebalanceValues.ts +20 -18
- package/src/solautoPosition/solautoPositionEx.ts +2 -2
- package/src/solautoPosition/utils.ts +3 -3
- package/src/utils/numberUtils.ts +0 -18
@@ -19,8 +19,8 @@ interface ApplyDebtAdjustmentResult {
|
|
19
19
|
newPos: PositionValues;
|
20
20
|
intermediaryLiqUtilizationRateBps: number;
|
21
21
|
}
|
22
|
-
export declare function applyDebtAdjustmentUsd(debtAdjustmentUsd: number, pos: PositionValues,
|
23
|
-
export declare function getDebtAdjustment(
|
22
|
+
export declare function applyDebtAdjustmentUsd(debtAdjustmentUsd: number, pos: PositionValues, liqThreshold: number, fees?: RebalanceFeesBps): ApplyDebtAdjustmentResult;
|
23
|
+
export declare function getDebtAdjustment(liqThresholdBps: number, pos: PositionValues, targetLiqUtilizationRateBps: number, fees?: RebalanceFeesBps): DebtAdjustment;
|
24
24
|
export interface RebalanceValues extends DebtAdjustment {
|
25
25
|
rebalanceDirection: RebalanceDirection;
|
26
26
|
tokenBalanceChange?: TokenBalanceChange;
|
@@ -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,
|
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,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;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"}
|
@@ -5,15 +5,15 @@ exports.getDebtAdjustment = getDebtAdjustment;
|
|
5
5
|
exports.getRebalanceValues = getRebalanceValues;
|
6
6
|
const generated_1 = require("../../generated");
|
7
7
|
const utils_1 = require("../../utils");
|
8
|
-
function applyDebtAdjustmentUsd(debtAdjustmentUsd, pos,
|
8
|
+
function applyDebtAdjustmentUsd(debtAdjustmentUsd, pos, liqThreshold, fees) {
|
9
9
|
const newPos = { ...pos };
|
10
10
|
const isBoost = debtAdjustmentUsd > 0;
|
11
|
-
const daMinusSolautoFees = debtAdjustmentUsd - debtAdjustmentUsd * (0, utils_1.fromBps)(fees
|
12
|
-
const daWithFlashLoan = debtAdjustmentUsd * (1.0 + (0, utils_1.fromBps)(fees
|
11
|
+
const daMinusSolautoFees = debtAdjustmentUsd - debtAdjustmentUsd * (0, utils_1.fromBps)(fees?.solauto ?? 0);
|
12
|
+
const daWithFlashLoan = debtAdjustmentUsd * (1.0 + (0, utils_1.fromBps)(fees?.flashLoan ?? 0));
|
13
13
|
let intermediaryLiqUtilizationRateBps = 0;
|
14
14
|
if (isBoost) {
|
15
15
|
newPos.debtUsd +=
|
16
|
-
daWithFlashLoan * (0, utils_1.fromBps)(fees
|
16
|
+
daWithFlashLoan * (0, utils_1.fromBps)(fees?.lpBorrow ?? 0) + daWithFlashLoan;
|
17
17
|
intermediaryLiqUtilizationRateBps = (0, utils_1.getLiqUtilzationRateBps)(newPos.supplyUsd, newPos.debtUsd, (0, utils_1.toBps)(liqThreshold));
|
18
18
|
newPos.supplyUsd += daMinusSolautoFees;
|
19
19
|
}
|
@@ -24,13 +24,14 @@ function applyDebtAdjustmentUsd(debtAdjustmentUsd, pos, fees, liqThreshold) {
|
|
24
24
|
}
|
25
25
|
return { newPos, intermediaryLiqUtilizationRateBps };
|
26
26
|
}
|
27
|
-
function getDebtAdjustment(
|
28
|
-
const isBoost = (0, utils_1.getLiqUtilzationRateBps)(pos.supplyUsd, pos.debtUsd,
|
27
|
+
function getDebtAdjustment(liqThresholdBps, pos, targetLiqUtilizationRateBps, fees) {
|
28
|
+
const isBoost = (0, utils_1.getLiqUtilzationRateBps)(pos.supplyUsd, pos.debtUsd, liqThresholdBps) <
|
29
29
|
targetLiqUtilizationRateBps;
|
30
|
+
const liqThreshold = (0, utils_1.fromBps)(liqThresholdBps);
|
30
31
|
const targetUtilizationRate = (0, utils_1.fromBps)(targetLiqUtilizationRateBps);
|
31
|
-
const actualizedFee = 1.0 - (0, utils_1.fromBps)(fees
|
32
|
-
const flFee = (0, utils_1.fromBps)(fees
|
33
|
-
const lpBorrowFee = (0, utils_1.fromBps)(fees
|
32
|
+
const actualizedFee = 1.0 - (0, utils_1.fromBps)(fees?.solauto ?? 0);
|
33
|
+
const flFee = (0, utils_1.fromBps)(fees?.flashLoan ?? 0);
|
34
|
+
const lpBorrowFee = (0, utils_1.fromBps)(fees?.lpBorrow ?? 0);
|
34
35
|
const debtAdjustmentUsd = isBoost
|
35
36
|
? (targetUtilizationRate * liqThreshold * pos.supplyUsd - pos.debtUsd) /
|
36
37
|
(1.0 +
|
@@ -39,7 +40,7 @@ function getDebtAdjustment(liqThreshold, pos, fees, targetLiqUtilizationRateBps)
|
|
39
40
|
targetUtilizationRate * actualizedFee * liqThreshold)
|
40
41
|
: (targetUtilizationRate * liqThreshold * pos.supplyUsd - pos.debtUsd) /
|
41
42
|
(actualizedFee - targetUtilizationRate * liqThreshold * (1.0 + flFee));
|
42
|
-
const newPos = applyDebtAdjustmentUsd(debtAdjustmentUsd, pos,
|
43
|
+
const newPos = applyDebtAdjustmentUsd(debtAdjustmentUsd, pos, liqThreshold, fees);
|
43
44
|
return {
|
44
45
|
debtAdjustmentUsd,
|
45
46
|
endResult: newPos.newPos,
|
@@ -107,7 +108,7 @@ function getRebalanceValues(solautoPosition, targetLiqUtilizationRateBps, solaut
|
|
107
108
|
lpBorrow: solautoPosition.state().debt.borrowFeeBps,
|
108
109
|
flashLoan: flFeeBps ?? 0,
|
109
110
|
};
|
110
|
-
const debtAdjustment = getDebtAdjustment(
|
111
|
+
const debtAdjustment = getDebtAdjustment(solautoPosition.state().liqThresholdBps, position, targetRate, fees);
|
111
112
|
const repayingCloseToMaxLtv = rebalanceDirection === generated_1.RebalanceDirection.Repay &&
|
112
113
|
targetRate >=
|
113
114
|
(0, utils_1.maxRepayToBps)(solautoPosition.state().maxLtvBps, solautoPosition.state().liqThresholdBps);
|
@@ -100,8 +100,7 @@ class SolautoPositionEx {
|
|
100
100
|
const limitsUpToDate = this.debtLiquidityUsdAvailable() !== 0 ||
|
101
101
|
this.supplyLiquidityUsdDepositable() !== 0;
|
102
102
|
if (limitsUpToDate) {
|
103
|
-
const { debtAdjustmentUsd } = (0, rebalance_1.getDebtAdjustment)(this.state().liqThresholdBps, { supplyUsd: this.supplyUsd(), debtUsd: this.debtUsd() }, { solauto: 50, lpBorrow: 50, flashLoan: 50 }
|
104
|
-
this.boostToBps());
|
103
|
+
const { debtAdjustmentUsd } = (0, rebalance_1.getDebtAdjustment)(this.state().liqThresholdBps, { supplyUsd: this.supplyUsd(), debtUsd: this.debtUsd() }, this.boostToBps(), { solauto: 50, lpBorrow: 50, flashLoan: 50 });
|
105
104
|
const sufficientLiquidity = this.debtLiquidityUsdAvailable() * 0.95 > debtAdjustmentUsd &&
|
106
105
|
this.supplyLiquidityUsdDepositable() * 0.95 > debtAdjustmentUsd;
|
107
106
|
if (!sufficientLiquidity) {
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/solautoPosition/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,0BAA0B,CAAC;AAC/C,OAAO,EAEL,aAAa,EAGb,yBAAyB,EACzB,gCAAgC,EACjC,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAM5E,OAAO,EACL,cAAc,
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/solautoPosition/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,0BAA0B,CAAC;AAC/C,OAAO,EAEL,aAAa,EAGb,yBAAyB,EACzB,gCAAgC,EACjC,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAM5E,OAAO,EACL,cAAc,EAQf,MAAM,UAAU,CAAC;AAElB,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,gCAAgC,GACzC,yBAAyB,CAQ3B;AAED,wBAAsB,iBAAiB,CACrC,GAAG,EAAE,GAAG,EACR,UAAU,EAAE,SAAS,EAAE,GACtB,OAAO,CAAC,iBAAiB,EAAE,CAAC,CA4B9B;AAED,wBAAsB,qBAAqB,CACzC,GAAG,EAAE,GAAG,EACR,SAAS,EAAE,SAAS,EACpB,UAAU,CAAC,EAAE,kBAAkB,EAC/B,cAAc,CAAC,EAAE,cAAc,GAC9B,OAAO,CAAC,iBAAiB,CAAC,CAgC5B;AAED,UAAU,UAAU;IAClB,IAAI,EAAE,SAAS,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,UAAU,EAClB,IAAI,EAAE,UAAU,EAChB,SAAS,EAAE,MAAM,EACjB,eAAe,EAAE,MAAM,GACtB,aAAa,CAgEf"}
|
@@ -9,7 +9,6 @@ const web3_js_1 = require("@solana/web3.js");
|
|
9
9
|
const umi_web3js_adapters_1 = require("@metaplex-foundation/umi-web3js-adapters");
|
10
10
|
const marginfiSolautoPositionEx_1 = require("./marginfiSolautoPositionEx");
|
11
11
|
const utils_1 = require("../utils");
|
12
|
-
const constants_1 = require("../constants");
|
13
12
|
function createSolautoSettings(settings) {
|
14
13
|
return {
|
15
14
|
boostGap: settings.boostGap,
|
@@ -59,8 +58,8 @@ async function getOrCreatePositionEx(umi, publicKey, customArgs, contextUpdates)
|
|
59
58
|
}
|
60
59
|
}
|
61
60
|
function createFakePositionState(supply, debt, maxLtvBps, liqThresholdBps) {
|
62
|
-
const supplyDecimals =
|
63
|
-
const debtDecimals =
|
61
|
+
const supplyDecimals = (0, utils_1.tokenInfo)(supply.mint).decimals;
|
62
|
+
const debtDecimals = (0, utils_1.tokenInfo)(debt.mint).decimals;
|
64
63
|
const supplyUsd = (supply.amountUsed ?? 0) * (supply.price ?? 0);
|
65
64
|
const debtUsd = (debt.amountUsed ?? 0) * (debt.price ?? 0);
|
66
65
|
return {
|
@@ -16,7 +16,6 @@ export declare function fromBps(value: number): number;
|
|
16
16
|
export declare function toBps(value: number): number;
|
17
17
|
export declare function bytesToI80F48(bytes: number[]): number;
|
18
18
|
export declare function uint8ArrayToBigInt(uint8Array: Uint8Array): bigint;
|
19
|
-
export declare function getDebtAdjustmentUsd(liqThresholdBps: number, supplyUsd: number, debtUsd: number, targetLiqUtilizationRateBps: number, adjustmentFeeBps?: number): number;
|
20
19
|
export declare function getMaxLiqUtilizationRateBps(maxLtvBps: number, liqThresholdBps: number, offsetFromMaxLtv: number): number;
|
21
20
|
export declare function maxRepayFromBps(maxLtvBps: number, liqThresholdBps: number): number;
|
22
21
|
export declare function maxRepayToBps(maxLtvBps: number, liqThresholdBps: number): number;
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"numberUtils.d.ts","sourceRoot":"","sources":["../../src/utils/numberUtils.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAE7C,wBAAgB,eAAe,CAAC,KAAK,CAAC,EAAE,aAAa,UAEpD;AAED,wBAAgB,aAAa,CAAC,KAAK,CAAC,EAAE,aAAa,UAIlD;AAED,wBAAgB,WAAW,CAAC,KAAK,CAAC,EAAE,aAAa,UAIhD;AAED,wBAAgB,YAAY,CAAC,KAAK,CAAC,EAAE,aAAa,UAKjD;AAED,wBAAgB,eAAe,CAAC,KAAK,CAAC,EAAE,aAAa,UAKpD;AAED,wBAAgB,aAAa,CAAC,KAAK,CAAC,EAAE,aAAa,UAKlD;AAED,wBAAgB,yBAAyB,CAAC,KAAK,CAAC,EAAE,aAAa,UAI9D;AAED,wBAAgB,6BAA6B,CAAC,KAAK,CAAC,EAAE,aAAa,UAIlE;AAED,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,UAEjD;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,UAE/C;AAED,wBAAgB,uBAAuB,CACrC,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,EACf,eAAe,EAAE,MAAM,GACtB,MAAM,CAMR;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAKlE;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAKpE;AAED,wBAAgB,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAE7C;AAED,wBAAgB,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAE3C;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM,CAqBrD;AAED,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,UAAU,GAAG,MAAM,CAejE;AAED,wBAAgB,
|
1
|
+
{"version":3,"file":"numberUtils.d.ts","sourceRoot":"","sources":["../../src/utils/numberUtils.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAE7C,wBAAgB,eAAe,CAAC,KAAK,CAAC,EAAE,aAAa,UAEpD;AAED,wBAAgB,aAAa,CAAC,KAAK,CAAC,EAAE,aAAa,UAIlD;AAED,wBAAgB,WAAW,CAAC,KAAK,CAAC,EAAE,aAAa,UAIhD;AAED,wBAAgB,YAAY,CAAC,KAAK,CAAC,EAAE,aAAa,UAKjD;AAED,wBAAgB,eAAe,CAAC,KAAK,CAAC,EAAE,aAAa,UAKpD;AAED,wBAAgB,aAAa,CAAC,KAAK,CAAC,EAAE,aAAa,UAKlD;AAED,wBAAgB,yBAAyB,CAAC,KAAK,CAAC,EAAE,aAAa,UAI9D;AAED,wBAAgB,6BAA6B,CAAC,KAAK,CAAC,EAAE,aAAa,UAIlE;AAED,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,UAEjD;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,UAE/C;AAED,wBAAgB,uBAAuB,CACrC,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,EACf,eAAe,EAAE,MAAM,GACtB,MAAM,CAMR;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAKlE;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAKpE;AAED,wBAAgB,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAE7C;AAED,wBAAgB,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAE3C;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM,CAqBrD;AAED,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,UAAU,GAAG,MAAM,CAejE;AAED,wBAAgB,2BAA2B,CACzC,SAAS,EAAE,MAAM,EACjB,eAAe,EAAE,MAAM,EACvB,gBAAgB,EAAE,MAAM,GACvB,MAAM,CAKR;AAED,wBAAgB,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,UAKzE;AAED,wBAAgB,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,UAKvE;AAED,wBAAgB,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,UAKvE"}
|
@@ -17,7 +17,6 @@ exports.fromBps = fromBps;
|
|
17
17
|
exports.toBps = toBps;
|
18
18
|
exports.bytesToI80F48 = bytesToI80F48;
|
19
19
|
exports.uint8ArrayToBigInt = uint8ArrayToBigInt;
|
20
|
-
exports.getDebtAdjustmentUsd = getDebtAdjustmentUsd;
|
21
20
|
exports.getMaxLiqUtilizationRateBps = getMaxLiqUtilizationRateBps;
|
22
21
|
exports.maxRepayFromBps = maxRepayFromBps;
|
23
22
|
exports.maxRepayToBps = maxRepayToBps;
|
@@ -103,14 +102,6 @@ function uint8ArrayToBigInt(uint8Array) {
|
|
103
102
|
const high = dataView.getUint32(4, true);
|
104
103
|
return (BigInt(high) << 32n) | BigInt(low);
|
105
104
|
}
|
106
|
-
function getDebtAdjustmentUsd(liqThresholdBps, supplyUsd, debtUsd, targetLiqUtilizationRateBps, adjustmentFeeBps) {
|
107
|
-
const adjustmentFee = adjustmentFeeBps && adjustmentFeeBps > 0 ? fromBps(adjustmentFeeBps) : 0;
|
108
|
-
const liqThreshold = fromBps(liqThresholdBps);
|
109
|
-
const targetLiqUtilizationRate = fromBps(targetLiqUtilizationRateBps);
|
110
|
-
const debtAdjustmentUsd = (targetLiqUtilizationRate * supplyUsd * liqThreshold - debtUsd) /
|
111
|
-
(1 - targetLiqUtilizationRate * (1 - adjustmentFee) * liqThreshold);
|
112
|
-
return debtAdjustmentUsd;
|
113
|
-
}
|
114
105
|
function getMaxLiqUtilizationRateBps(maxLtvBps, liqThresholdBps, offsetFromMaxLtv) {
|
115
106
|
return (toBps((fromBps(maxLtvBps) - offsetFromMaxLtv) / fromBps(liqThresholdBps)) -
|
116
107
|
1); // -1 to account for any rounding issues
|
package/package.json
CHANGED
@@ -37,20 +37,21 @@ interface ApplyDebtAdjustmentResult {
|
|
37
37
|
export function applyDebtAdjustmentUsd(
|
38
38
|
debtAdjustmentUsd: number,
|
39
39
|
pos: PositionValues,
|
40
|
-
|
41
|
-
|
40
|
+
liqThreshold: number,
|
41
|
+
fees?: RebalanceFeesBps
|
42
42
|
): ApplyDebtAdjustmentResult {
|
43
43
|
const newPos = { ...pos };
|
44
44
|
const isBoost = debtAdjustmentUsd > 0;
|
45
45
|
|
46
46
|
const daMinusSolautoFees =
|
47
|
-
debtAdjustmentUsd - debtAdjustmentUsd * fromBps(fees
|
48
|
-
const daWithFlashLoan =
|
47
|
+
debtAdjustmentUsd - debtAdjustmentUsd * fromBps(fees?.solauto ?? 0);
|
48
|
+
const daWithFlashLoan =
|
49
|
+
debtAdjustmentUsd * (1.0 + fromBps(fees?.flashLoan ?? 0));
|
49
50
|
|
50
51
|
let intermediaryLiqUtilizationRateBps = 0;
|
51
52
|
if (isBoost) {
|
52
53
|
newPos.debtUsd +=
|
53
|
-
daWithFlashLoan * fromBps(fees
|
54
|
+
daWithFlashLoan * fromBps(fees?.lpBorrow ?? 0) + daWithFlashLoan;
|
54
55
|
intermediaryLiqUtilizationRateBps = getLiqUtilzationRateBps(
|
55
56
|
newPos.supplyUsd,
|
56
57
|
newPos.debtUsd,
|
@@ -71,19 +72,20 @@ export function applyDebtAdjustmentUsd(
|
|
71
72
|
}
|
72
73
|
|
73
74
|
export function getDebtAdjustment(
|
74
|
-
|
75
|
+
liqThresholdBps: number,
|
75
76
|
pos: PositionValues,
|
76
|
-
|
77
|
-
|
77
|
+
targetLiqUtilizationRateBps: number,
|
78
|
+
fees?: RebalanceFeesBps
|
78
79
|
): DebtAdjustment {
|
79
80
|
const isBoost =
|
80
|
-
getLiqUtilzationRateBps(pos.supplyUsd, pos.debtUsd,
|
81
|
+
getLiqUtilzationRateBps(pos.supplyUsd, pos.debtUsd, liqThresholdBps) <
|
81
82
|
targetLiqUtilizationRateBps;
|
83
|
+
const liqThreshold = fromBps(liqThresholdBps);
|
82
84
|
|
83
85
|
const targetUtilizationRate = fromBps(targetLiqUtilizationRateBps);
|
84
|
-
const actualizedFee = 1.0 - fromBps(fees
|
85
|
-
const flFee = fromBps(fees
|
86
|
-
const lpBorrowFee = fromBps(fees
|
86
|
+
const actualizedFee = 1.0 - fromBps(fees?.solauto ?? 0);
|
87
|
+
const flFee = fromBps(fees?.flashLoan ?? 0);
|
88
|
+
const lpBorrowFee = fromBps(fees?.lpBorrow ?? 0);
|
87
89
|
|
88
90
|
const debtAdjustmentUsd = isBoost
|
89
91
|
? (targetUtilizationRate * liqThreshold * pos.supplyUsd - pos.debtUsd) /
|
@@ -97,8 +99,8 @@ export function getDebtAdjustment(
|
|
97
99
|
const newPos = applyDebtAdjustmentUsd(
|
98
100
|
debtAdjustmentUsd,
|
99
101
|
pos,
|
100
|
-
|
101
|
-
|
102
|
+
liqThreshold,
|
103
|
+
fees
|
102
104
|
);
|
103
105
|
|
104
106
|
return {
|
@@ -185,7 +187,7 @@ export function getRebalanceValues(
|
|
185
187
|
solautoPosition: SolautoPositionEx,
|
186
188
|
targetLiqUtilizationRateBps?: number,
|
187
189
|
solautoFeeBps?: SolautoFeesBps,
|
188
|
-
flFeeBps?: number
|
190
|
+
flFeeBps?: number
|
189
191
|
): RebalanceValues {
|
190
192
|
const tokenBalanceChange = getTokenBalanceChange();
|
191
193
|
|
@@ -211,10 +213,10 @@ export function getRebalanceValues(
|
|
211
213
|
};
|
212
214
|
|
213
215
|
const debtAdjustment = getDebtAdjustment(
|
214
|
-
|
216
|
+
solautoPosition.state().liqThresholdBps,
|
215
217
|
position,
|
216
|
-
|
217
|
-
|
218
|
+
targetRate,
|
219
|
+
fees
|
218
220
|
);
|
219
221
|
|
220
222
|
const repayingCloseToMaxLtv =
|
@@ -212,8 +212,8 @@ export abstract class SolautoPositionEx {
|
|
212
212
|
const { debtAdjustmentUsd } = getDebtAdjustment(
|
213
213
|
this.state().liqThresholdBps,
|
214
214
|
{ supplyUsd: this.supplyUsd(), debtUsd: this.debtUsd() },
|
215
|
-
|
216
|
-
|
215
|
+
this.boostToBps(),
|
216
|
+
{ solauto: 50, lpBorrow: 50, flashLoan: 50 }, // TODO: get true data here instead of magic numbers
|
217
217
|
);
|
218
218
|
|
219
219
|
const sufficientLiquidity =
|
@@ -21,9 +21,9 @@ import {
|
|
21
21
|
getLiqUtilzationRateBps,
|
22
22
|
retryWithExponentialBackoff,
|
23
23
|
toBaseUnit,
|
24
|
+
tokenInfo,
|
24
25
|
toRoundedUsdValue,
|
25
26
|
} from "../utils";
|
26
|
-
import { TOKEN_INFO } from "../constants";
|
27
27
|
|
28
28
|
export function createSolautoSettings(
|
29
29
|
settings: SolautoSettingsParametersInpArgs
|
@@ -122,8 +122,8 @@ export function createFakePositionState(
|
|
122
122
|
maxLtvBps: number,
|
123
123
|
liqThresholdBps: number
|
124
124
|
): PositionState {
|
125
|
-
const supplyDecimals =
|
126
|
-
const debtDecimals =
|
125
|
+
const supplyDecimals = tokenInfo(supply.mint).decimals;
|
126
|
+
const debtDecimals = tokenInfo(debt.mint).decimals;
|
127
127
|
|
128
128
|
const supplyUsd = (supply.amountUsed ?? 0) * (supply.price ?? 0);
|
129
129
|
const debtUsd = (debt.amountUsed ?? 0) * (debt.price ?? 0);
|
package/src/utils/numberUtils.ts
CHANGED
@@ -132,24 +132,6 @@ export function uint8ArrayToBigInt(uint8Array: Uint8Array): bigint {
|
|
132
132
|
return (BigInt(high) << 32n) | BigInt(low);
|
133
133
|
}
|
134
134
|
|
135
|
-
export function getDebtAdjustmentUsd(
|
136
|
-
liqThresholdBps: number,
|
137
|
-
supplyUsd: number,
|
138
|
-
debtUsd: number,
|
139
|
-
targetLiqUtilizationRateBps: number,
|
140
|
-
adjustmentFeeBps?: number
|
141
|
-
) {
|
142
|
-
const adjustmentFee =
|
143
|
-
adjustmentFeeBps && adjustmentFeeBps > 0 ? fromBps(adjustmentFeeBps) : 0;
|
144
|
-
const liqThreshold = fromBps(liqThresholdBps);
|
145
|
-
const targetLiqUtilizationRate = fromBps(targetLiqUtilizationRateBps);
|
146
|
-
|
147
|
-
const debtAdjustmentUsd =
|
148
|
-
(targetLiqUtilizationRate * supplyUsd * liqThreshold - debtUsd) /
|
149
|
-
(1 - targetLiqUtilizationRate * (1 - adjustmentFee) * liqThreshold);
|
150
|
-
return debtAdjustmentUsd;
|
151
|
-
}
|
152
|
-
|
153
135
|
export function getMaxLiqUtilizationRateBps(
|
154
136
|
maxLtvBps: number,
|
155
137
|
liqThresholdBps: number,
|