@haven-fi/solauto-sdk 1.0.595 → 1.0.597
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 +10 -10
- package/dist/solautoPosition/solautoPositionEx.js +2 -3
- 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 +14 -14
- package/src/solautoPosition/solautoPositionEx.ts +3 -3
- 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(liqThreshold: number, pos: PositionValues,
|
22
|
+
export declare function applyDebtAdjustmentUsd(debtAdjustmentUsd: number, pos: PositionValues, liqThreshold: number, fees?: RebalanceFeesBps): ApplyDebtAdjustmentResult;
|
23
|
+
export declare function getDebtAdjustment(liqThreshold: 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,CA6B3B;AAED,wBAAgB,iBAAiB,CAC/B,YAAY,EAAE,MAAM,EACpB,GAAG,EAAE,cAAc,EACnB,2BAA2B,EAAE,MAAM,EACnC,IAAI,CAAC,EAAE,gBAAgB,GACtB,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"}
|
@@ -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,13 @@ function applyDebtAdjustmentUsd(debtAdjustmentUsd, pos, fees, liqThreshold) {
|
|
24
24
|
}
|
25
25
|
return { newPos, intermediaryLiqUtilizationRateBps };
|
26
26
|
}
|
27
|
-
function getDebtAdjustment(liqThreshold, pos,
|
27
|
+
function getDebtAdjustment(liqThreshold, pos, targetLiqUtilizationRateBps, fees) {
|
28
28
|
const isBoost = (0, utils_1.getLiqUtilzationRateBps)(pos.supplyUsd, pos.debtUsd, (0, utils_1.toBps)(liqThreshold)) <
|
29
29
|
targetLiqUtilizationRateBps;
|
30
30
|
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
|
31
|
+
const actualizedFee = 1.0 - (0, utils_1.fromBps)(fees?.solauto ?? 0);
|
32
|
+
const flFee = (0, utils_1.fromBps)(fees?.flashLoan ?? 0);
|
33
|
+
const lpBorrowFee = (0, utils_1.fromBps)(fees?.lpBorrow ?? 0);
|
34
34
|
const debtAdjustmentUsd = isBoost
|
35
35
|
? (targetUtilizationRate * liqThreshold * pos.supplyUsd - pos.debtUsd) /
|
36
36
|
(1.0 +
|
@@ -39,7 +39,7 @@ function getDebtAdjustment(liqThreshold, pos, fees, targetLiqUtilizationRateBps)
|
|
39
39
|
targetUtilizationRate * actualizedFee * liqThreshold)
|
40
40
|
: (targetUtilizationRate * liqThreshold * pos.supplyUsd - pos.debtUsd) /
|
41
41
|
(actualizedFee - targetUtilizationRate * liqThreshold * (1.0 + flFee));
|
42
|
-
const newPos = applyDebtAdjustmentUsd(debtAdjustmentUsd, pos,
|
42
|
+
const newPos = applyDebtAdjustmentUsd(debtAdjustmentUsd, pos, liqThreshold, fees);
|
43
43
|
return {
|
44
44
|
debtAdjustmentUsd,
|
45
45
|
endResult: newPos.newPos,
|
@@ -107,7 +107,7 @@ function getRebalanceValues(solautoPosition, targetLiqUtilizationRateBps, solaut
|
|
107
107
|
lpBorrow: solautoPosition.state().debt.borrowFeeBps,
|
108
108
|
flashLoan: flFeeBps ?? 0,
|
109
109
|
};
|
110
|
-
const debtAdjustment = getDebtAdjustment((0, utils_1.fromBps)(solautoPosition.state().liqThresholdBps), position,
|
110
|
+
const debtAdjustment = getDebtAdjustment((0, utils_1.fromBps)(solautoPosition.state().liqThresholdBps), position, targetRate, fees);
|
111
111
|
const repayingCloseToMaxLtv = rebalanceDirection === generated_1.RebalanceDirection.Repay &&
|
112
112
|
targetRate >=
|
113
113
|
(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) {
|
@@ -165,7 +164,7 @@ class SolautoPositionEx {
|
|
165
164
|
(0, utils_1.toRoundedUsdValue)(newSupplyUsd);
|
166
165
|
this._data.state.supply.amountUsed.baseUnit = (0, utils_1.toBaseUnit)(newSupplyUsd / supplyPrice, this.supplyMintInfo().decimals);
|
167
166
|
this._data.state.netWorth.baseAmountUsdValue = (0, utils_1.toRoundedUsdValue)(newSupplyUsd - newDebtUsd);
|
168
|
-
this._data.state.netWorth.baseUnit = (0, utils_1.toBaseUnit)(newSupplyUsd - newDebtUsd / supplyPrice, this.supplyMintInfo().decimals);
|
167
|
+
this._data.state.netWorth.baseUnit = (0, utils_1.toBaseUnit)((newSupplyUsd - newDebtUsd) / supplyPrice, this.supplyMintInfo().decimals);
|
169
168
|
}
|
170
169
|
}
|
171
170
|
exports.SolautoPositionEx = SolautoPositionEx;
|
@@ -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,20 @@ 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 = debtAdjustmentUsd * (1.0 + fromBps(fees
|
47
|
+
debtAdjustmentUsd - debtAdjustmentUsd * fromBps(fees?.solauto ?? 0);
|
48
|
+
const daWithFlashLoan = debtAdjustmentUsd * (1.0 + fromBps(fees?.flashLoan ?? 0));
|
49
49
|
|
50
50
|
let intermediaryLiqUtilizationRateBps = 0;
|
51
51
|
if (isBoost) {
|
52
52
|
newPos.debtUsd +=
|
53
|
-
daWithFlashLoan * fromBps(fees
|
53
|
+
daWithFlashLoan * fromBps(fees?.lpBorrow ?? 0) + daWithFlashLoan;
|
54
54
|
intermediaryLiqUtilizationRateBps = getLiqUtilzationRateBps(
|
55
55
|
newPos.supplyUsd,
|
56
56
|
newPos.debtUsd,
|
@@ -73,17 +73,17 @@ export function applyDebtAdjustmentUsd(
|
|
73
73
|
export function getDebtAdjustment(
|
74
74
|
liqThreshold: number,
|
75
75
|
pos: PositionValues,
|
76
|
-
|
77
|
-
|
76
|
+
targetLiqUtilizationRateBps: number,
|
77
|
+
fees?: RebalanceFeesBps,
|
78
78
|
): DebtAdjustment {
|
79
79
|
const isBoost =
|
80
80
|
getLiqUtilzationRateBps(pos.supplyUsd, pos.debtUsd, toBps(liqThreshold)) <
|
81
81
|
targetLiqUtilizationRateBps;
|
82
82
|
|
83
83
|
const targetUtilizationRate = fromBps(targetLiqUtilizationRateBps);
|
84
|
-
const actualizedFee = 1.0 - fromBps(fees
|
85
|
-
const flFee = fromBps(fees
|
86
|
-
const lpBorrowFee = fromBps(fees
|
84
|
+
const actualizedFee = 1.0 - fromBps(fees?.solauto ?? 0);
|
85
|
+
const flFee = fromBps(fees?.flashLoan ?? 0);
|
86
|
+
const lpBorrowFee = fromBps(fees?.lpBorrow ?? 0);
|
87
87
|
|
88
88
|
const debtAdjustmentUsd = isBoost
|
89
89
|
? (targetUtilizationRate * liqThreshold * pos.supplyUsd - pos.debtUsd) /
|
@@ -97,8 +97,8 @@ export function getDebtAdjustment(
|
|
97
97
|
const newPos = applyDebtAdjustmentUsd(
|
98
98
|
debtAdjustmentUsd,
|
99
99
|
pos,
|
100
|
-
|
101
|
-
|
100
|
+
liqThreshold,
|
101
|
+
fees
|
102
102
|
);
|
103
103
|
|
104
104
|
return {
|
@@ -213,8 +213,8 @@ export function getRebalanceValues(
|
|
213
213
|
const debtAdjustment = getDebtAdjustment(
|
214
214
|
fromBps(solautoPosition.state().liqThresholdBps),
|
215
215
|
position,
|
216
|
-
|
217
|
-
|
216
|
+
targetRate,
|
217
|
+
fees
|
218
218
|
);
|
219
219
|
|
220
220
|
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 =
|
@@ -342,7 +342,7 @@ export abstract class SolautoPositionEx {
|
|
342
342
|
newSupplyUsd - newDebtUsd
|
343
343
|
);
|
344
344
|
this._data.state.netWorth.baseUnit = toBaseUnit(
|
345
|
-
newSupplyUsd - newDebtUsd / supplyPrice,
|
345
|
+
(newSupplyUsd - newDebtUsd) / supplyPrice,
|
346
346
|
this.supplyMintInfo().decimals
|
347
347
|
);
|
348
348
|
}
|
@@ -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,
|