@strkfarm/sdk 2.0.0-dev.25 → 2.0.0-dev.27
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/index.browser.global.js +21 -13
- package/dist/index.browser.mjs +21 -13
- package/dist/index.d.ts +1 -1
- package/dist/index.js +21 -13
- package/dist/index.mjs +21 -13
- package/package.json +1 -1
- package/src/strategies/vesu-extended-strategy/utils/constants.ts +1 -1
- package/src/strategies/vesu-extended-strategy/utils/helper.ts +7 -7
- package/src/strategies/vesu-extended-strategy/vesu-extended-strategy.tsx +28 -9
|
@@ -92408,7 +92408,7 @@ spurious results.`);
|
|
|
92408
92408
|
var MAX_DELAY = Number(process.env.MAX_DELAY ?? 100);
|
|
92409
92409
|
var EXTEND_MARKET_NAME = "BTC-USD";
|
|
92410
92410
|
var LIMIT_BALANCE = Number(process.env.LIMIT_BALANCE ?? 0.05);
|
|
92411
|
-
var LIMIT_BALANCE_VALUE =
|
|
92411
|
+
var LIMIT_BALANCE_VALUE = 20;
|
|
92412
92412
|
var REBALANCER_INTERVAL = Number(process.env.REBALANCER_INTERVAL ?? 18e4);
|
|
92413
92413
|
var WITHDRAWAL_INTERVAL = Number(process.env.WITHDRAWAL_INTERVAL ?? 18e6);
|
|
92414
92414
|
var INVESTING_INTERVAL = Number(process.env.INVESTING_INTERVAL ?? 18e4);
|
|
@@ -92620,14 +92620,14 @@ spurious results.`);
|
|
|
92620
92620
|
var calculateBTCPriceDelta = (btcPrice, lastBtcPrice) => {
|
|
92621
92621
|
return (btcPrice - lastBtcPrice) / lastBtcPrice * 100;
|
|
92622
92622
|
};
|
|
92623
|
-
var calculateVesUPositionSizeGivenExtended = (extendedPositonValue, extendedHoldingAmount, collateralAmount, collateralPrice
|
|
92623
|
+
var calculateVesUPositionSizeGivenExtended = (extendedPositonValue, extendedHoldingAmount, collateralAmount, collateralPrice) => {
|
|
92624
92624
|
const extendedLeverage = calculateExtendedLevergae();
|
|
92625
92625
|
const vesuLeverage = calculateVesuLeverage();
|
|
92626
92626
|
const extendedAmount = extendedHoldingAmount;
|
|
92627
92627
|
const extendedAmountInBTC = extendedAmount.dividedBy(collateralPrice);
|
|
92628
92628
|
const numerator1 = extendedAmount.multipliedBy(extendedLeverage).plus(extendedPositonValue);
|
|
92629
92629
|
const numerator2 = collateralAmount.multipliedBy(collateralPrice).multipliedBy(-1);
|
|
92630
|
-
const vesuAmountInUsd = numerator1.plus(numerator2).dividedBy(vesuLeverage)
|
|
92630
|
+
const vesuAmountInUsd = numerator1.plus(numerator2).dividedBy(vesuLeverage);
|
|
92631
92631
|
const vesuAmountInBTC = vesuAmountInUsd.dividedBy(collateralPrice).toFixed(WBTC_TOKEN_DECIMALS);
|
|
92632
92632
|
return {
|
|
92633
92633
|
vesuAmountInUsd: vesuAmountInUsd.toFixed(2),
|
|
@@ -92637,10 +92637,13 @@ spurious results.`);
|
|
|
92637
92637
|
};
|
|
92638
92638
|
var calculateDeltaDebtAmount = (maxLtv = MAX_LTV_BTC_USDC, existingVesuCollateral, existingVesuDebt, collateralPrice, debtPrice, targetHf = TARGET_HF) => {
|
|
92639
92639
|
try {
|
|
92640
|
-
const term1 = existingVesuCollateral.multipliedBy(collateralPrice).multipliedBy(maxLtv)
|
|
92640
|
+
const term1 = existingVesuCollateral.multipliedBy(collateralPrice).multipliedBy(maxLtv);
|
|
92641
|
+
logger2.info(`term1: ${term1.toNumber()}`);
|
|
92641
92642
|
const term2 = existingVesuDebt.multipliedBy(debtPrice).multipliedBy(targetHf).multipliedBy(-1);
|
|
92643
|
+
logger2.info(`term2: ${term2.toNumber()}`);
|
|
92642
92644
|
const debtAmountToBeRepaid = term1.plus(term2).dividedBy(targetHf);
|
|
92643
|
-
|
|
92645
|
+
logger2.info(`debtAmountToBeRepaid: ${debtAmountToBeRepaid.toNumber()}`);
|
|
92646
|
+
return new Web3Number(debtAmountToBeRepaid.toFixed(USDC_TOKEN_DECIMALS), USDC_TOKEN_DECIMALS);
|
|
92644
92647
|
} catch (err2) {
|
|
92645
92648
|
logger2.error(`error calculating delta position: ${err2}`);
|
|
92646
92649
|
return null;
|
|
@@ -92654,7 +92657,6 @@ spurious results.`);
|
|
|
92654
92657
|
const unrealisedPnl = new Web3Number(extendedBalance.unrealisedPnl, USDC_TOKEN_DECIMALS);
|
|
92655
92658
|
const availableForWithdrawal = new Web3Number(extendedBalance.availableForWithdrawal, USDC_TOKEN_DECIMALS);
|
|
92656
92659
|
const upnlPercent = unrealisedPnl.dividedBy(extendedPosition);
|
|
92657
|
-
console.log(`upnlPercent: ${upnlPercent}`);
|
|
92658
92660
|
const walletBalance = new Web3Number(extendedBalance.balance, USDC_TOKEN_DECIMALS);
|
|
92659
92661
|
const term1 = marginRequired.minus(walletBalance).minus(availableForWithdrawal).plus(amountToWithdraw).multipliedBy(extendedLeverage);
|
|
92660
92662
|
const denominator = upnlPercent.multipliedBy(extendedLeverage).plus(1);
|
|
@@ -98599,10 +98601,10 @@ spurious results.`);
|
|
|
98599
98601
|
);
|
|
98600
98602
|
const usdcBalanceOnExtended = await extendedAdapter.getExtendedDepositAmount();
|
|
98601
98603
|
if (usdcBalanceOnExtended) {
|
|
98602
|
-
const
|
|
98603
|
-
usdcBalanceOnExtended.
|
|
98604
|
+
const availableForTrade = parseFloat(
|
|
98605
|
+
usdcBalanceOnExtended.availableForTrade
|
|
98604
98606
|
);
|
|
98605
|
-
if (!Number.isFinite(
|
|
98607
|
+
if (!Number.isFinite(availableForTrade) || availableForTrade < 0) {
|
|
98606
98608
|
logger2.error(
|
|
98607
98609
|
`Invalid usdcBalanceOnExtended.availableForWithdrawal: ${usdcBalanceOnExtended.availableForWithdrawal}. Expected a finite, non-negative number.`
|
|
98608
98610
|
);
|
|
@@ -98618,10 +98620,11 @@ spurious results.`);
|
|
|
98618
98620
|
};
|
|
98619
98621
|
}
|
|
98620
98622
|
}
|
|
98623
|
+
const amountUsedFromExtended = new Web3Number(usdcBalanceOnExtended?.availableForTrade ?? 0, USDC_TOKEN_DECIMALS);
|
|
98621
98624
|
const amountToInvest = new Web3Number(
|
|
98622
98625
|
balance.usdValue,
|
|
98623
98626
|
USDC_TOKEN_DECIMALS
|
|
98624
|
-
).plus(
|
|
98627
|
+
).plus(amountUsedFromExtended.multipliedBy(1 - LIMIT_BALANCE) ?? 0).multipliedBy(1 - LIMIT_BALANCE);
|
|
98625
98628
|
const amountToInvestNumber = amountToInvest.toNumber();
|
|
98626
98629
|
if (!Number.isFinite(amountToInvestNumber)) {
|
|
98627
98630
|
logger2.error(
|
|
@@ -98699,7 +98702,7 @@ spurious results.`);
|
|
|
98699
98702
|
debtAmountToBeRepaid: new Web3Number(0, 0)
|
|
98700
98703
|
};
|
|
98701
98704
|
}
|
|
98702
|
-
|
|
98705
|
+
let debtAmountToBeRepaid = calculateDeltaDebtAmount(
|
|
98703
98706
|
MAX_LTV_BTC_USDC,
|
|
98704
98707
|
collateralTokenAmount,
|
|
98705
98708
|
debtTokenAmount,
|
|
@@ -98720,7 +98723,12 @@ spurious results.`);
|
|
|
98720
98723
|
debtAmountToBeRepaid: new Web3Number(0, 0)
|
|
98721
98724
|
};
|
|
98722
98725
|
}
|
|
98723
|
-
|
|
98726
|
+
logger2.info(
|
|
98727
|
+
`${_VesuExtendedMultiplierStrategy.name}::shouldInvest debtAmountToBeRepaid: ${debtAmountToBeRepaid.toNumber()}`
|
|
98728
|
+
);
|
|
98729
|
+
const vesuLeverage = calculateVesuLeverage();
|
|
98730
|
+
debtAmountToBeRepaid = debtAmountToBeRepaid.toNumber() !== 0 ? debtAmountToBeRepaid.dividedBy(vesuLeverage - 1) : new Web3Number(0, 0);
|
|
98731
|
+
const amountToInvestAfterRepayingDebt = amountToInvest.plus(debtAmountToBeRepaid);
|
|
98724
98732
|
const { vesu_amount, extended_amount, extended_leverage, vesu_leverage } = await calculateAmountDistribution(
|
|
98725
98733
|
amountToInvestAfterRepayingDebt.toNumber(),
|
|
98726
98734
|
extendedAdapter.client,
|
|
@@ -99387,7 +99395,7 @@ spurious results.`);
|
|
|
99387
99395
|
avnuAdapter,
|
|
99388
99396
|
"close" /* CLOSE */
|
|
99389
99397
|
);
|
|
99390
|
-
if (!isPriceDifferenceBetweenAvnuAndExtended) {
|
|
99398
|
+
if (!isPriceDifferenceBetweenAvnuAndExtended && params.cycleType === "WITHDRAWAL" /* WITHDRAWAL */) {
|
|
99391
99399
|
logger2.warn(
|
|
99392
99400
|
`price difference between avnu and extended doesn't fit the range for close position, ${avnuAdapter.config.maximumExtendedPriceDifferenceForSwapClosing}`
|
|
99393
99401
|
);
|
package/dist/index.browser.mjs
CHANGED
|
@@ -28363,7 +28363,7 @@ var MAX_RETRIES = Number(process.env.MAX_RETRIES ?? 3);
|
|
|
28363
28363
|
var MAX_DELAY = Number(process.env.MAX_DELAY ?? 100);
|
|
28364
28364
|
var EXTEND_MARKET_NAME = "BTC-USD";
|
|
28365
28365
|
var LIMIT_BALANCE = Number(process.env.LIMIT_BALANCE ?? 0.05);
|
|
28366
|
-
var LIMIT_BALANCE_VALUE =
|
|
28366
|
+
var LIMIT_BALANCE_VALUE = 20;
|
|
28367
28367
|
var REBALANCER_INTERVAL = Number(process.env.REBALANCER_INTERVAL ?? 18e4);
|
|
28368
28368
|
var WITHDRAWAL_INTERVAL = Number(process.env.WITHDRAWAL_INTERVAL ?? 18e6);
|
|
28369
28369
|
var INVESTING_INTERVAL = Number(process.env.INVESTING_INTERVAL ?? 18e4);
|
|
@@ -28575,14 +28575,14 @@ var calculateExposureDelta = (exposure_extended, exposure_vesu) => {
|
|
|
28575
28575
|
var calculateBTCPriceDelta = (btcPrice, lastBtcPrice) => {
|
|
28576
28576
|
return (btcPrice - lastBtcPrice) / lastBtcPrice * 100;
|
|
28577
28577
|
};
|
|
28578
|
-
var calculateVesUPositionSizeGivenExtended = (extendedPositonValue, extendedHoldingAmount, collateralAmount, collateralPrice
|
|
28578
|
+
var calculateVesUPositionSizeGivenExtended = (extendedPositonValue, extendedHoldingAmount, collateralAmount, collateralPrice) => {
|
|
28579
28579
|
const extendedLeverage = calculateExtendedLevergae();
|
|
28580
28580
|
const vesuLeverage = calculateVesuLeverage();
|
|
28581
28581
|
const extendedAmount = extendedHoldingAmount;
|
|
28582
28582
|
const extendedAmountInBTC = extendedAmount.dividedBy(collateralPrice);
|
|
28583
28583
|
const numerator1 = extendedAmount.multipliedBy(extendedLeverage).plus(extendedPositonValue);
|
|
28584
28584
|
const numerator2 = collateralAmount.multipliedBy(collateralPrice).multipliedBy(-1);
|
|
28585
|
-
const vesuAmountInUsd = numerator1.plus(numerator2).dividedBy(vesuLeverage)
|
|
28585
|
+
const vesuAmountInUsd = numerator1.plus(numerator2).dividedBy(vesuLeverage);
|
|
28586
28586
|
const vesuAmountInBTC = vesuAmountInUsd.dividedBy(collateralPrice).toFixed(WBTC_TOKEN_DECIMALS);
|
|
28587
28587
|
return {
|
|
28588
28588
|
vesuAmountInUsd: vesuAmountInUsd.toFixed(2),
|
|
@@ -28592,10 +28592,13 @@ var calculateVesUPositionSizeGivenExtended = (extendedPositonValue, extendedHold
|
|
|
28592
28592
|
};
|
|
28593
28593
|
var calculateDeltaDebtAmount = (maxLtv = MAX_LTV_BTC_USDC, existingVesuCollateral, existingVesuDebt, collateralPrice, debtPrice, targetHf = TARGET_HF) => {
|
|
28594
28594
|
try {
|
|
28595
|
-
const term1 = existingVesuCollateral.multipliedBy(collateralPrice).multipliedBy(maxLtv)
|
|
28595
|
+
const term1 = existingVesuCollateral.multipliedBy(collateralPrice).multipliedBy(maxLtv);
|
|
28596
|
+
logger.info(`term1: ${term1.toNumber()}`);
|
|
28596
28597
|
const term2 = existingVesuDebt.multipliedBy(debtPrice).multipliedBy(targetHf).multipliedBy(-1);
|
|
28598
|
+
logger.info(`term2: ${term2.toNumber()}`);
|
|
28597
28599
|
const debtAmountToBeRepaid = term1.plus(term2).dividedBy(targetHf);
|
|
28598
|
-
|
|
28600
|
+
logger.info(`debtAmountToBeRepaid: ${debtAmountToBeRepaid.toNumber()}`);
|
|
28601
|
+
return new Web3Number(debtAmountToBeRepaid.toFixed(USDC_TOKEN_DECIMALS), USDC_TOKEN_DECIMALS);
|
|
28599
28602
|
} catch (err) {
|
|
28600
28603
|
logger.error(`error calculating delta position: ${err}`);
|
|
28601
28604
|
return null;
|
|
@@ -28609,7 +28612,6 @@ var calculatePositionToCloseToWithdrawAmount = async (extendedBalance, extendedP
|
|
|
28609
28612
|
const unrealisedPnl = new Web3Number(extendedBalance.unrealisedPnl, USDC_TOKEN_DECIMALS);
|
|
28610
28613
|
const availableForWithdrawal = new Web3Number(extendedBalance.availableForWithdrawal, USDC_TOKEN_DECIMALS);
|
|
28611
28614
|
const upnlPercent = unrealisedPnl.dividedBy(extendedPosition);
|
|
28612
|
-
console.log(`upnlPercent: ${upnlPercent}`);
|
|
28613
28615
|
const walletBalance = new Web3Number(extendedBalance.balance, USDC_TOKEN_DECIMALS);
|
|
28614
28616
|
const term1 = marginRequired.minus(walletBalance).minus(availableForWithdrawal).plus(amountToWithdraw).multipliedBy(extendedLeverage);
|
|
28615
28617
|
const denominator = upnlPercent.multipliedBy(extendedLeverage).plus(1);
|
|
@@ -34561,10 +34563,10 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
|
|
|
34561
34563
|
);
|
|
34562
34564
|
const usdcBalanceOnExtended = await extendedAdapter.getExtendedDepositAmount();
|
|
34563
34565
|
if (usdcBalanceOnExtended) {
|
|
34564
|
-
const
|
|
34565
|
-
usdcBalanceOnExtended.
|
|
34566
|
+
const availableForTrade = parseFloat(
|
|
34567
|
+
usdcBalanceOnExtended.availableForTrade
|
|
34566
34568
|
);
|
|
34567
|
-
if (!Number.isFinite(
|
|
34569
|
+
if (!Number.isFinite(availableForTrade) || availableForTrade < 0) {
|
|
34568
34570
|
logger.error(
|
|
34569
34571
|
`Invalid usdcBalanceOnExtended.availableForWithdrawal: ${usdcBalanceOnExtended.availableForWithdrawal}. Expected a finite, non-negative number.`
|
|
34570
34572
|
);
|
|
@@ -34580,10 +34582,11 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
|
|
|
34580
34582
|
};
|
|
34581
34583
|
}
|
|
34582
34584
|
}
|
|
34585
|
+
const amountUsedFromExtended = new Web3Number(usdcBalanceOnExtended?.availableForTrade ?? 0, USDC_TOKEN_DECIMALS);
|
|
34583
34586
|
const amountToInvest = new Web3Number(
|
|
34584
34587
|
balance.usdValue,
|
|
34585
34588
|
USDC_TOKEN_DECIMALS
|
|
34586
|
-
).plus(
|
|
34589
|
+
).plus(amountUsedFromExtended.multipliedBy(1 - LIMIT_BALANCE) ?? 0).multipliedBy(1 - LIMIT_BALANCE);
|
|
34587
34590
|
const amountToInvestNumber = amountToInvest.toNumber();
|
|
34588
34591
|
if (!Number.isFinite(amountToInvestNumber)) {
|
|
34589
34592
|
logger.error(
|
|
@@ -34661,7 +34664,7 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
|
|
|
34661
34664
|
debtAmountToBeRepaid: new Web3Number(0, 0)
|
|
34662
34665
|
};
|
|
34663
34666
|
}
|
|
34664
|
-
|
|
34667
|
+
let debtAmountToBeRepaid = calculateDeltaDebtAmount(
|
|
34665
34668
|
MAX_LTV_BTC_USDC,
|
|
34666
34669
|
collateralTokenAmount,
|
|
34667
34670
|
debtTokenAmount,
|
|
@@ -34682,7 +34685,12 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
|
|
|
34682
34685
|
debtAmountToBeRepaid: new Web3Number(0, 0)
|
|
34683
34686
|
};
|
|
34684
34687
|
}
|
|
34685
|
-
|
|
34688
|
+
logger.info(
|
|
34689
|
+
`${_VesuExtendedMultiplierStrategy.name}::shouldInvest debtAmountToBeRepaid: ${debtAmountToBeRepaid.toNumber()}`
|
|
34690
|
+
);
|
|
34691
|
+
const vesuLeverage = calculateVesuLeverage();
|
|
34692
|
+
debtAmountToBeRepaid = debtAmountToBeRepaid.toNumber() !== 0 ? debtAmountToBeRepaid.dividedBy(vesuLeverage - 1) : new Web3Number(0, 0);
|
|
34693
|
+
const amountToInvestAfterRepayingDebt = amountToInvest.plus(debtAmountToBeRepaid);
|
|
34686
34694
|
const { vesu_amount, extended_amount, extended_leverage, vesu_leverage } = await calculateAmountDistribution(
|
|
34687
34695
|
amountToInvestAfterRepayingDebt.toNumber(),
|
|
34688
34696
|
extendedAdapter.client,
|
|
@@ -35349,7 +35357,7 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
|
|
|
35349
35357
|
avnuAdapter,
|
|
35350
35358
|
"close" /* CLOSE */
|
|
35351
35359
|
);
|
|
35352
|
-
if (!isPriceDifferenceBetweenAvnuAndExtended) {
|
|
35360
|
+
if (!isPriceDifferenceBetweenAvnuAndExtended && params.cycleType === "WITHDRAWAL" /* WITHDRAWAL */) {
|
|
35353
35361
|
logger.warn(
|
|
35354
35362
|
`price difference between avnu and extended doesn't fit the range for close position, ${avnuAdapter.config.maximumExtendedPriceDifferenceForSwapClosing}`
|
|
35355
35363
|
);
|
package/dist/index.d.ts
CHANGED
|
@@ -2784,7 +2784,7 @@ declare const calculateExposureDelta: (exposure_extended: number, exposure_vesu:
|
|
|
2784
2784
|
* @returns {number} The delta percentage
|
|
2785
2785
|
*/
|
|
2786
2786
|
declare const calculateBTCPriceDelta: (btcPrice: number, lastBtcPrice: number) => number;
|
|
2787
|
-
declare const calculateVesUPositionSizeGivenExtended: (extendedPositonValue: number, extendedHoldingAmount: Web3Number, collateralAmount: Web3Number, collateralPrice: number
|
|
2787
|
+
declare const calculateVesUPositionSizeGivenExtended: (extendedPositonValue: number, extendedHoldingAmount: Web3Number, collateralAmount: Web3Number, collateralPrice: number) => {
|
|
2788
2788
|
vesuAmountInUsd: string;
|
|
2789
2789
|
vesuAmountInBTC: Web3Number;
|
|
2790
2790
|
extendedAmountInBTC: Web3Number;
|
package/dist/index.js
CHANGED
|
@@ -28167,7 +28167,7 @@ var MAX_RETRIES = Number(process.env.MAX_RETRIES ?? 3);
|
|
|
28167
28167
|
var MAX_DELAY = Number(process.env.MAX_DELAY ?? 100);
|
|
28168
28168
|
var EXTEND_MARKET_NAME = "BTC-USD";
|
|
28169
28169
|
var LIMIT_BALANCE = Number(process.env.LIMIT_BALANCE ?? 0.05);
|
|
28170
|
-
var LIMIT_BALANCE_VALUE =
|
|
28170
|
+
var LIMIT_BALANCE_VALUE = 20;
|
|
28171
28171
|
var REBALANCER_INTERVAL = Number(process.env.REBALANCER_INTERVAL ?? 18e4);
|
|
28172
28172
|
var WITHDRAWAL_INTERVAL = Number(process.env.WITHDRAWAL_INTERVAL ?? 18e6);
|
|
28173
28173
|
var INVESTING_INTERVAL = Number(process.env.INVESTING_INTERVAL ?? 18e4);
|
|
@@ -28379,14 +28379,14 @@ var calculateExposureDelta = (exposure_extended, exposure_vesu) => {
|
|
|
28379
28379
|
var calculateBTCPriceDelta = (btcPrice, lastBtcPrice) => {
|
|
28380
28380
|
return (btcPrice - lastBtcPrice) / lastBtcPrice * 100;
|
|
28381
28381
|
};
|
|
28382
|
-
var calculateVesUPositionSizeGivenExtended = (extendedPositonValue, extendedHoldingAmount, collateralAmount, collateralPrice
|
|
28382
|
+
var calculateVesUPositionSizeGivenExtended = (extendedPositonValue, extendedHoldingAmount, collateralAmount, collateralPrice) => {
|
|
28383
28383
|
const extendedLeverage = calculateExtendedLevergae();
|
|
28384
28384
|
const vesuLeverage = calculateVesuLeverage();
|
|
28385
28385
|
const extendedAmount = extendedHoldingAmount;
|
|
28386
28386
|
const extendedAmountInBTC = extendedAmount.dividedBy(collateralPrice);
|
|
28387
28387
|
const numerator1 = extendedAmount.multipliedBy(extendedLeverage).plus(extendedPositonValue);
|
|
28388
28388
|
const numerator2 = collateralAmount.multipliedBy(collateralPrice).multipliedBy(-1);
|
|
28389
|
-
const vesuAmountInUsd = numerator1.plus(numerator2).dividedBy(vesuLeverage)
|
|
28389
|
+
const vesuAmountInUsd = numerator1.plus(numerator2).dividedBy(vesuLeverage);
|
|
28390
28390
|
const vesuAmountInBTC = vesuAmountInUsd.dividedBy(collateralPrice).toFixed(WBTC_TOKEN_DECIMALS);
|
|
28391
28391
|
return {
|
|
28392
28392
|
vesuAmountInUsd: vesuAmountInUsd.toFixed(2),
|
|
@@ -28396,10 +28396,13 @@ var calculateVesUPositionSizeGivenExtended = (extendedPositonValue, extendedHold
|
|
|
28396
28396
|
};
|
|
28397
28397
|
var calculateDeltaDebtAmount = (maxLtv = MAX_LTV_BTC_USDC, existingVesuCollateral, existingVesuDebt, collateralPrice, debtPrice, targetHf = TARGET_HF) => {
|
|
28398
28398
|
try {
|
|
28399
|
-
const term1 = existingVesuCollateral.multipliedBy(collateralPrice).multipliedBy(maxLtv)
|
|
28399
|
+
const term1 = existingVesuCollateral.multipliedBy(collateralPrice).multipliedBy(maxLtv);
|
|
28400
|
+
logger.info(`term1: ${term1.toNumber()}`);
|
|
28400
28401
|
const term2 = existingVesuDebt.multipliedBy(debtPrice).multipliedBy(targetHf).multipliedBy(-1);
|
|
28402
|
+
logger.info(`term2: ${term2.toNumber()}`);
|
|
28401
28403
|
const debtAmountToBeRepaid = term1.plus(term2).dividedBy(targetHf);
|
|
28402
|
-
|
|
28404
|
+
logger.info(`debtAmountToBeRepaid: ${debtAmountToBeRepaid.toNumber()}`);
|
|
28405
|
+
return new Web3Number(debtAmountToBeRepaid.toFixed(USDC_TOKEN_DECIMALS), USDC_TOKEN_DECIMALS);
|
|
28403
28406
|
} catch (err) {
|
|
28404
28407
|
logger.error(`error calculating delta position: ${err}`);
|
|
28405
28408
|
return null;
|
|
@@ -28413,7 +28416,6 @@ var calculatePositionToCloseToWithdrawAmount = async (extendedBalance, extendedP
|
|
|
28413
28416
|
const unrealisedPnl = new Web3Number(extendedBalance.unrealisedPnl, USDC_TOKEN_DECIMALS);
|
|
28414
28417
|
const availableForWithdrawal = new Web3Number(extendedBalance.availableForWithdrawal, USDC_TOKEN_DECIMALS);
|
|
28415
28418
|
const upnlPercent = unrealisedPnl.dividedBy(extendedPosition);
|
|
28416
|
-
console.log(`upnlPercent: ${upnlPercent}`);
|
|
28417
28419
|
const walletBalance = new Web3Number(extendedBalance.balance, USDC_TOKEN_DECIMALS);
|
|
28418
28420
|
const term1 = marginRequired.minus(walletBalance).minus(availableForWithdrawal).plus(amountToWithdraw).multipliedBy(extendedLeverage);
|
|
28419
28421
|
const denominator = upnlPercent.multipliedBy(extendedLeverage).plus(1);
|
|
@@ -34720,10 +34722,10 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
|
|
|
34720
34722
|
);
|
|
34721
34723
|
const usdcBalanceOnExtended = await extendedAdapter.getExtendedDepositAmount();
|
|
34722
34724
|
if (usdcBalanceOnExtended) {
|
|
34723
|
-
const
|
|
34724
|
-
usdcBalanceOnExtended.
|
|
34725
|
+
const availableForTrade = parseFloat(
|
|
34726
|
+
usdcBalanceOnExtended.availableForTrade
|
|
34725
34727
|
);
|
|
34726
|
-
if (!Number.isFinite(
|
|
34728
|
+
if (!Number.isFinite(availableForTrade) || availableForTrade < 0) {
|
|
34727
34729
|
logger.error(
|
|
34728
34730
|
`Invalid usdcBalanceOnExtended.availableForWithdrawal: ${usdcBalanceOnExtended.availableForWithdrawal}. Expected a finite, non-negative number.`
|
|
34729
34731
|
);
|
|
@@ -34739,10 +34741,11 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
|
|
|
34739
34741
|
};
|
|
34740
34742
|
}
|
|
34741
34743
|
}
|
|
34744
|
+
const amountUsedFromExtended = new Web3Number(usdcBalanceOnExtended?.availableForTrade ?? 0, USDC_TOKEN_DECIMALS);
|
|
34742
34745
|
const amountToInvest = new Web3Number(
|
|
34743
34746
|
balance.usdValue,
|
|
34744
34747
|
USDC_TOKEN_DECIMALS
|
|
34745
|
-
).plus(
|
|
34748
|
+
).plus(amountUsedFromExtended.multipliedBy(1 - LIMIT_BALANCE) ?? 0).multipliedBy(1 - LIMIT_BALANCE);
|
|
34746
34749
|
const amountToInvestNumber = amountToInvest.toNumber();
|
|
34747
34750
|
if (!Number.isFinite(amountToInvestNumber)) {
|
|
34748
34751
|
logger.error(
|
|
@@ -34820,7 +34823,7 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
|
|
|
34820
34823
|
debtAmountToBeRepaid: new Web3Number(0, 0)
|
|
34821
34824
|
};
|
|
34822
34825
|
}
|
|
34823
|
-
|
|
34826
|
+
let debtAmountToBeRepaid = calculateDeltaDebtAmount(
|
|
34824
34827
|
MAX_LTV_BTC_USDC,
|
|
34825
34828
|
collateralTokenAmount,
|
|
34826
34829
|
debtTokenAmount,
|
|
@@ -34841,7 +34844,12 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
|
|
|
34841
34844
|
debtAmountToBeRepaid: new Web3Number(0, 0)
|
|
34842
34845
|
};
|
|
34843
34846
|
}
|
|
34844
|
-
|
|
34847
|
+
logger.info(
|
|
34848
|
+
`${_VesuExtendedMultiplierStrategy.name}::shouldInvest debtAmountToBeRepaid: ${debtAmountToBeRepaid.toNumber()}`
|
|
34849
|
+
);
|
|
34850
|
+
const vesuLeverage = calculateVesuLeverage();
|
|
34851
|
+
debtAmountToBeRepaid = debtAmountToBeRepaid.toNumber() !== 0 ? debtAmountToBeRepaid.dividedBy(vesuLeverage - 1) : new Web3Number(0, 0);
|
|
34852
|
+
const amountToInvestAfterRepayingDebt = amountToInvest.plus(debtAmountToBeRepaid);
|
|
34845
34853
|
const { vesu_amount, extended_amount, extended_leverage, vesu_leverage } = await calculateAmountDistribution(
|
|
34846
34854
|
amountToInvestAfterRepayingDebt.toNumber(),
|
|
34847
34855
|
extendedAdapter.client,
|
|
@@ -35508,7 +35516,7 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
|
|
|
35508
35516
|
avnuAdapter,
|
|
35509
35517
|
"close" /* CLOSE */
|
|
35510
35518
|
);
|
|
35511
|
-
if (!isPriceDifferenceBetweenAvnuAndExtended) {
|
|
35519
|
+
if (!isPriceDifferenceBetweenAvnuAndExtended && params.cycleType === "WITHDRAWAL" /* WITHDRAWAL */) {
|
|
35512
35520
|
logger.warn(
|
|
35513
35521
|
`price difference between avnu and extended doesn't fit the range for close position, ${avnuAdapter.config.maximumExtendedPriceDifferenceForSwapClosing}`
|
|
35514
35522
|
);
|
package/dist/index.mjs
CHANGED
|
@@ -28019,7 +28019,7 @@ var MAX_RETRIES = Number(process.env.MAX_RETRIES ?? 3);
|
|
|
28019
28019
|
var MAX_DELAY = Number(process.env.MAX_DELAY ?? 100);
|
|
28020
28020
|
var EXTEND_MARKET_NAME = "BTC-USD";
|
|
28021
28021
|
var LIMIT_BALANCE = Number(process.env.LIMIT_BALANCE ?? 0.05);
|
|
28022
|
-
var LIMIT_BALANCE_VALUE =
|
|
28022
|
+
var LIMIT_BALANCE_VALUE = 20;
|
|
28023
28023
|
var REBALANCER_INTERVAL = Number(process.env.REBALANCER_INTERVAL ?? 18e4);
|
|
28024
28024
|
var WITHDRAWAL_INTERVAL = Number(process.env.WITHDRAWAL_INTERVAL ?? 18e6);
|
|
28025
28025
|
var INVESTING_INTERVAL = Number(process.env.INVESTING_INTERVAL ?? 18e4);
|
|
@@ -28231,14 +28231,14 @@ var calculateExposureDelta = (exposure_extended, exposure_vesu) => {
|
|
|
28231
28231
|
var calculateBTCPriceDelta = (btcPrice, lastBtcPrice) => {
|
|
28232
28232
|
return (btcPrice - lastBtcPrice) / lastBtcPrice * 100;
|
|
28233
28233
|
};
|
|
28234
|
-
var calculateVesUPositionSizeGivenExtended = (extendedPositonValue, extendedHoldingAmount, collateralAmount, collateralPrice
|
|
28234
|
+
var calculateVesUPositionSizeGivenExtended = (extendedPositonValue, extendedHoldingAmount, collateralAmount, collateralPrice) => {
|
|
28235
28235
|
const extendedLeverage = calculateExtendedLevergae();
|
|
28236
28236
|
const vesuLeverage = calculateVesuLeverage();
|
|
28237
28237
|
const extendedAmount = extendedHoldingAmount;
|
|
28238
28238
|
const extendedAmountInBTC = extendedAmount.dividedBy(collateralPrice);
|
|
28239
28239
|
const numerator1 = extendedAmount.multipliedBy(extendedLeverage).plus(extendedPositonValue);
|
|
28240
28240
|
const numerator2 = collateralAmount.multipliedBy(collateralPrice).multipliedBy(-1);
|
|
28241
|
-
const vesuAmountInUsd = numerator1.plus(numerator2).dividedBy(vesuLeverage)
|
|
28241
|
+
const vesuAmountInUsd = numerator1.plus(numerator2).dividedBy(vesuLeverage);
|
|
28242
28242
|
const vesuAmountInBTC = vesuAmountInUsd.dividedBy(collateralPrice).toFixed(WBTC_TOKEN_DECIMALS);
|
|
28243
28243
|
return {
|
|
28244
28244
|
vesuAmountInUsd: vesuAmountInUsd.toFixed(2),
|
|
@@ -28248,10 +28248,13 @@ var calculateVesUPositionSizeGivenExtended = (extendedPositonValue, extendedHold
|
|
|
28248
28248
|
};
|
|
28249
28249
|
var calculateDeltaDebtAmount = (maxLtv = MAX_LTV_BTC_USDC, existingVesuCollateral, existingVesuDebt, collateralPrice, debtPrice, targetHf = TARGET_HF) => {
|
|
28250
28250
|
try {
|
|
28251
|
-
const term1 = existingVesuCollateral.multipliedBy(collateralPrice).multipliedBy(maxLtv)
|
|
28251
|
+
const term1 = existingVesuCollateral.multipliedBy(collateralPrice).multipliedBy(maxLtv);
|
|
28252
|
+
logger.info(`term1: ${term1.toNumber()}`);
|
|
28252
28253
|
const term2 = existingVesuDebt.multipliedBy(debtPrice).multipliedBy(targetHf).multipliedBy(-1);
|
|
28254
|
+
logger.info(`term2: ${term2.toNumber()}`);
|
|
28253
28255
|
const debtAmountToBeRepaid = term1.plus(term2).dividedBy(targetHf);
|
|
28254
|
-
|
|
28256
|
+
logger.info(`debtAmountToBeRepaid: ${debtAmountToBeRepaid.toNumber()}`);
|
|
28257
|
+
return new Web3Number(debtAmountToBeRepaid.toFixed(USDC_TOKEN_DECIMALS), USDC_TOKEN_DECIMALS);
|
|
28255
28258
|
} catch (err) {
|
|
28256
28259
|
logger.error(`error calculating delta position: ${err}`);
|
|
28257
28260
|
return null;
|
|
@@ -28265,7 +28268,6 @@ var calculatePositionToCloseToWithdrawAmount = async (extendedBalance, extendedP
|
|
|
28265
28268
|
const unrealisedPnl = new Web3Number(extendedBalance.unrealisedPnl, USDC_TOKEN_DECIMALS);
|
|
28266
28269
|
const availableForWithdrawal = new Web3Number(extendedBalance.availableForWithdrawal, USDC_TOKEN_DECIMALS);
|
|
28267
28270
|
const upnlPercent = unrealisedPnl.dividedBy(extendedPosition);
|
|
28268
|
-
console.log(`upnlPercent: ${upnlPercent}`);
|
|
28269
28271
|
const walletBalance = new Web3Number(extendedBalance.balance, USDC_TOKEN_DECIMALS);
|
|
28270
28272
|
const term1 = marginRequired.minus(walletBalance).minus(availableForWithdrawal).plus(amountToWithdraw).multipliedBy(extendedLeverage);
|
|
28271
28273
|
const denominator = upnlPercent.multipliedBy(extendedLeverage).plus(1);
|
|
@@ -34572,10 +34574,10 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
|
|
|
34572
34574
|
);
|
|
34573
34575
|
const usdcBalanceOnExtended = await extendedAdapter.getExtendedDepositAmount();
|
|
34574
34576
|
if (usdcBalanceOnExtended) {
|
|
34575
|
-
const
|
|
34576
|
-
usdcBalanceOnExtended.
|
|
34577
|
+
const availableForTrade = parseFloat(
|
|
34578
|
+
usdcBalanceOnExtended.availableForTrade
|
|
34577
34579
|
);
|
|
34578
|
-
if (!Number.isFinite(
|
|
34580
|
+
if (!Number.isFinite(availableForTrade) || availableForTrade < 0) {
|
|
34579
34581
|
logger.error(
|
|
34580
34582
|
`Invalid usdcBalanceOnExtended.availableForWithdrawal: ${usdcBalanceOnExtended.availableForWithdrawal}. Expected a finite, non-negative number.`
|
|
34581
34583
|
);
|
|
@@ -34591,10 +34593,11 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
|
|
|
34591
34593
|
};
|
|
34592
34594
|
}
|
|
34593
34595
|
}
|
|
34596
|
+
const amountUsedFromExtended = new Web3Number(usdcBalanceOnExtended?.availableForTrade ?? 0, USDC_TOKEN_DECIMALS);
|
|
34594
34597
|
const amountToInvest = new Web3Number(
|
|
34595
34598
|
balance.usdValue,
|
|
34596
34599
|
USDC_TOKEN_DECIMALS
|
|
34597
|
-
).plus(
|
|
34600
|
+
).plus(amountUsedFromExtended.multipliedBy(1 - LIMIT_BALANCE) ?? 0).multipliedBy(1 - LIMIT_BALANCE);
|
|
34598
34601
|
const amountToInvestNumber = amountToInvest.toNumber();
|
|
34599
34602
|
if (!Number.isFinite(amountToInvestNumber)) {
|
|
34600
34603
|
logger.error(
|
|
@@ -34672,7 +34675,7 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
|
|
|
34672
34675
|
debtAmountToBeRepaid: new Web3Number(0, 0)
|
|
34673
34676
|
};
|
|
34674
34677
|
}
|
|
34675
|
-
|
|
34678
|
+
let debtAmountToBeRepaid = calculateDeltaDebtAmount(
|
|
34676
34679
|
MAX_LTV_BTC_USDC,
|
|
34677
34680
|
collateralTokenAmount,
|
|
34678
34681
|
debtTokenAmount,
|
|
@@ -34693,7 +34696,12 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
|
|
|
34693
34696
|
debtAmountToBeRepaid: new Web3Number(0, 0)
|
|
34694
34697
|
};
|
|
34695
34698
|
}
|
|
34696
|
-
|
|
34699
|
+
logger.info(
|
|
34700
|
+
`${_VesuExtendedMultiplierStrategy.name}::shouldInvest debtAmountToBeRepaid: ${debtAmountToBeRepaid.toNumber()}`
|
|
34701
|
+
);
|
|
34702
|
+
const vesuLeverage = calculateVesuLeverage();
|
|
34703
|
+
debtAmountToBeRepaid = debtAmountToBeRepaid.toNumber() !== 0 ? debtAmountToBeRepaid.dividedBy(vesuLeverage - 1) : new Web3Number(0, 0);
|
|
34704
|
+
const amountToInvestAfterRepayingDebt = amountToInvest.plus(debtAmountToBeRepaid);
|
|
34697
34705
|
const { vesu_amount, extended_amount, extended_leverage, vesu_leverage } = await calculateAmountDistribution(
|
|
34698
34706
|
amountToInvestAfterRepayingDebt.toNumber(),
|
|
34699
34707
|
extendedAdapter.client,
|
|
@@ -35360,7 +35368,7 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
|
|
|
35360
35368
|
avnuAdapter,
|
|
35361
35369
|
"close" /* CLOSE */
|
|
35362
35370
|
);
|
|
35363
|
-
if (!isPriceDifferenceBetweenAvnuAndExtended) {
|
|
35371
|
+
if (!isPriceDifferenceBetweenAvnuAndExtended && params.cycleType === "WITHDRAWAL" /* WITHDRAWAL */) {
|
|
35364
35372
|
logger.warn(
|
|
35365
35373
|
`price difference between avnu and extended doesn't fit the range for close position, ${avnuAdapter.config.maximumExtendedPriceDifferenceForSwapClosing}`
|
|
35366
35374
|
);
|
package/package.json
CHANGED
|
@@ -19,7 +19,7 @@ export const MAX_RETRIES = Number(process.env.MAX_RETRIES ?? 3);
|
|
|
19
19
|
export const MAX_DELAY = Number(process.env.MAX_DELAY ?? 100);
|
|
20
20
|
export const EXTEND_MARKET_NAME = "BTC-USD";
|
|
21
21
|
export const LIMIT_BALANCE = Number(process.env.LIMIT_BALANCE ?? 0.05);
|
|
22
|
-
export const LIMIT_BALANCE_VALUE=
|
|
22
|
+
export const LIMIT_BALANCE_VALUE=20;
|
|
23
23
|
export const REBALANCER_INTERVAL = Number(process.env.REBALANCER_INTERVAL ?? 180000); //3 mins
|
|
24
24
|
export const WITHDRAWAL_INTERVAL = Number(process.env.WITHDRAWAL_INTERVAL ?? 18000000); //5 hours
|
|
25
25
|
export const INVESTING_INTERVAL = Number(process.env.INVESTING_INTERVAL ?? 180000); //3 mins
|
|
@@ -403,8 +403,7 @@ export const calculateVesUPositionSizeGivenExtended = (
|
|
|
403
403
|
extendedPositonValue: number,
|
|
404
404
|
extendedHoldingAmount: Web3Number,
|
|
405
405
|
collateralAmount: Web3Number,
|
|
406
|
-
collateralPrice: number
|
|
407
|
-
vesuDebtAmountToBeRepaid: Web3Number
|
|
406
|
+
collateralPrice: number
|
|
408
407
|
) => {
|
|
409
408
|
const extendedLeverage = calculateExtendedLevergae();
|
|
410
409
|
const vesuLeverage = calculateVesuLeverage();
|
|
@@ -419,7 +418,6 @@ export const calculateVesUPositionSizeGivenExtended = (
|
|
|
419
418
|
const vesuAmountInUsd = numerator1
|
|
420
419
|
.plus(numerator2)
|
|
421
420
|
.dividedBy(vesuLeverage)
|
|
422
|
-
.plus(vesuDebtAmountToBeRepaid);
|
|
423
421
|
const vesuAmountInBTC = vesuAmountInUsd
|
|
424
422
|
.dividedBy(collateralPrice)
|
|
425
423
|
.toFixed(WBTC_TOKEN_DECIMALS);
|
|
@@ -451,14 +449,17 @@ export const calculateDeltaDebtAmount = (
|
|
|
451
449
|
try {
|
|
452
450
|
const term1 = existingVesuCollateral
|
|
453
451
|
.multipliedBy(collateralPrice)
|
|
454
|
-
.multipliedBy(maxLtv)
|
|
455
|
-
|
|
452
|
+
.multipliedBy(maxLtv);
|
|
453
|
+
|
|
454
|
+
logger.info(`term1: ${term1.toNumber()}`);
|
|
456
455
|
const term2 = existingVesuDebt
|
|
457
456
|
.multipliedBy(debtPrice)
|
|
458
457
|
.multipliedBy(targetHf)
|
|
459
458
|
.multipliedBy(-1);
|
|
459
|
+
logger.info(`term2: ${term2.toNumber()}`);
|
|
460
460
|
const debtAmountToBeRepaid = term1.plus(term2).dividedBy(targetHf);
|
|
461
|
-
|
|
461
|
+
logger.info(`debtAmountToBeRepaid: ${debtAmountToBeRepaid.toNumber()}`);
|
|
462
|
+
return new Web3Number(debtAmountToBeRepaid.toFixed(USDC_TOKEN_DECIMALS), USDC_TOKEN_DECIMALS);
|
|
462
463
|
} catch (err) {
|
|
463
464
|
logger.error(`error calculating delta position: ${err}`);
|
|
464
465
|
return null;
|
|
@@ -477,7 +478,6 @@ export const calculatePositionToCloseToWithdrawAmount = async (
|
|
|
477
478
|
const unrealisedPnl = new Web3Number(extendedBalance.unrealisedPnl, USDC_TOKEN_DECIMALS);
|
|
478
479
|
const availableForWithdrawal = new Web3Number(extendedBalance.availableForWithdrawal, USDC_TOKEN_DECIMALS);
|
|
479
480
|
const upnlPercent = unrealisedPnl.dividedBy(extendedPosition)
|
|
480
|
-
console.log(`upnlPercent: ${upnlPercent}`);
|
|
481
481
|
/**
|
|
482
482
|
* New Formula
|
|
483
483
|
*/
|
|
@@ -364,12 +364,12 @@ export class VesuExtendedMultiplierStrategy<
|
|
|
364
364
|
await extendedAdapter.getExtendedDepositAmount();
|
|
365
365
|
|
|
366
366
|
if (usdcBalanceOnExtended) {
|
|
367
|
-
const
|
|
368
|
-
usdcBalanceOnExtended.
|
|
367
|
+
const availableForTrade= parseFloat(
|
|
368
|
+
usdcBalanceOnExtended.availableForTrade
|
|
369
369
|
);
|
|
370
370
|
if (
|
|
371
|
-
!Number.isFinite(
|
|
372
|
-
|
|
371
|
+
!Number.isFinite(availableForTrade) ||
|
|
372
|
+
availableForTrade < 0
|
|
373
373
|
) {
|
|
374
374
|
logger.error(
|
|
375
375
|
`Invalid usdcBalanceOnExtended.availableForWithdrawal: ${usdcBalanceOnExtended.availableForWithdrawal}. Expected a finite, non-negative number.`
|
|
@@ -386,13 +386,18 @@ export class VesuExtendedMultiplierStrategy<
|
|
|
386
386
|
};
|
|
387
387
|
}
|
|
388
388
|
}
|
|
389
|
+
|
|
390
|
+
const amountUsedFromExtended = new Web3Number(usdcBalanceOnExtended?.availableForTrade ?? 0, USDC_TOKEN_DECIMALS);
|
|
389
391
|
|
|
390
|
-
/**
|
|
392
|
+
/**
|
|
393
|
+
* The LIMIT_BALANCE is the bffer amount to keep in the investing Cycle
|
|
394
|
+
* 5% buffer amount is kept for extended amounts available to trade as they changes very suddenly
|
|
395
|
+
*/
|
|
391
396
|
const amountToInvest = new Web3Number(
|
|
392
397
|
balance.usdValue,
|
|
393
398
|
USDC_TOKEN_DECIMALS
|
|
394
399
|
)
|
|
395
|
-
.plus(
|
|
400
|
+
.plus(amountUsedFromExtended.multipliedBy(1 - LIMIT_BALANCE) ?? 0)
|
|
396
401
|
.multipliedBy(1 - LIMIT_BALANCE);
|
|
397
402
|
|
|
398
403
|
const amountToInvestNumber = amountToInvest.toNumber();
|
|
@@ -482,7 +487,7 @@ export class VesuExtendedMultiplierStrategy<
|
|
|
482
487
|
};
|
|
483
488
|
}
|
|
484
489
|
|
|
485
|
-
|
|
490
|
+
let debtAmountToBeRepaid = calculateDeltaDebtAmount(
|
|
486
491
|
MAX_LTV_BTC_USDC,
|
|
487
492
|
collateralTokenAmount,
|
|
488
493
|
debtTokenAmount,
|
|
@@ -503,8 +508,19 @@ export class VesuExtendedMultiplierStrategy<
|
|
|
503
508
|
debtAmountToBeRepaid: new Web3Number(0, 0),
|
|
504
509
|
};
|
|
505
510
|
}
|
|
511
|
+
logger.info(
|
|
512
|
+
`${
|
|
513
|
+
VesuExtendedMultiplierStrategy.name
|
|
514
|
+
}::shouldInvest debtAmountToBeRepaid: ${debtAmountToBeRepaid.toNumber()}`
|
|
515
|
+
);
|
|
516
|
+
/**
|
|
517
|
+
* Since the debt amount is negative, we need to add it to the amount to invest
|
|
518
|
+
* to maintain the ltv
|
|
519
|
+
*/
|
|
520
|
+
const vesuLeverage = calculateVesuLeverage();
|
|
521
|
+
debtAmountToBeRepaid = debtAmountToBeRepaid.toNumber() !== 0 ? debtAmountToBeRepaid.dividedBy(vesuLeverage-1) : new Web3Number(0, 0);
|
|
506
522
|
const amountToInvestAfterRepayingDebt =
|
|
507
|
-
amountToInvest.
|
|
523
|
+
amountToInvest.plus(debtAmountToBeRepaid);
|
|
508
524
|
const { vesu_amount, extended_amount, extended_leverage, vesu_leverage } =
|
|
509
525
|
await calculateAmountDistribution(
|
|
510
526
|
amountToInvestAfterRepayingDebt.toNumber(),
|
|
@@ -1317,7 +1333,10 @@ export class VesuExtendedMultiplierStrategy<
|
|
|
1317
1333
|
avnuAdapter,
|
|
1318
1334
|
PositionTypeAvnuExtended.CLOSE
|
|
1319
1335
|
);
|
|
1320
|
-
if (
|
|
1336
|
+
if (
|
|
1337
|
+
!isPriceDifferenceBetweenAvnuAndExtended &&
|
|
1338
|
+
params.cycleType === CycleType.WITHDRAWAL
|
|
1339
|
+
) {
|
|
1321
1340
|
logger.warn(
|
|
1322
1341
|
`price difference between avnu and extended doesn't fit the range for close position, ${avnuAdapter.config.maximumExtendedPriceDifferenceForSwapClosing}`
|
|
1323
1342
|
);
|