@strkfarm/sdk 2.0.0-dev.24 → 2.0.0-dev.26

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.
@@ -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, vesuDebtAmountToBeRepaid) => {
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).plus(vesuDebtAmountToBeRepaid);
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).dividedBy(targetHf);
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
- return debtAmountToBeRepaid;
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;
@@ -92648,21 +92651,16 @@ spurious results.`);
92648
92651
  };
92649
92652
  var calculatePositionToCloseToWithdrawAmount = async (extendedBalance, extendedPositions, amountToWithdraw) => {
92650
92653
  try {
92654
+ const extendedLeverage = calculateExtendedLevergae();
92651
92655
  const extendedPosition = extendedPositions.value;
92652
- const unrealisedPnl = new Web3Number(
92653
- extendedBalance.unrealisedPnl,
92654
- USDC_TOKEN_DECIMALS
92655
- );
92656
- const availableForWithdrawal = new Web3Number(
92657
- extendedBalance.availableForWithdrawal,
92658
- USDC_TOKEN_DECIMALS
92659
- );
92660
- const netAmount = amountToWithdraw.minus(availableForWithdrawal);
92656
+ const marginRequired = new Web3Number(extendedBalance.initialMargin, USDC_TOKEN_DECIMALS);
92657
+ const unrealisedPnl = new Web3Number(extendedBalance.unrealisedPnl, USDC_TOKEN_DECIMALS);
92658
+ const availableForWithdrawal = new Web3Number(extendedBalance.availableForWithdrawal, USDC_TOKEN_DECIMALS);
92661
92659
  const upnlPercent = unrealisedPnl.dividedBy(extendedPosition);
92662
- console.log(`upnlPercent: ${upnlPercent}`);
92663
- const denm = upnlPercent.multipliedBy(3).plus(1);
92664
- const amountToClose = netAmount.multipliedBy(3).dividedBy(denm);
92665
- return new Web3Number(Math.ceil(amountToClose.toNumber()), USDC_TOKEN_DECIMALS);
92660
+ const walletBalance = new Web3Number(extendedBalance.balance, USDC_TOKEN_DECIMALS);
92661
+ const term1 = marginRequired.minus(walletBalance).minus(availableForWithdrawal).plus(amountToWithdraw).multipliedBy(extendedLeverage);
92662
+ const denominator = upnlPercent.multipliedBy(extendedLeverage).plus(1);
92663
+ return new Web3Number(Math.ceil(term1.dividedBy(denominator).dividedBy(extendedLeverage).toNumber()), USDC_TOKEN_DECIMALS);
92666
92664
  } catch (err2) {
92667
92665
  logger2.error(
92668
92666
  `error calculating position to close to withdraw amount: ${err2}`
@@ -98724,7 +98722,10 @@ spurious results.`);
98724
98722
  debtAmountToBeRepaid: new Web3Number(0, 0)
98725
98723
  };
98726
98724
  }
98727
- const amountToInvestAfterRepayingDebt = amountToInvest.minus(debtAmountToBeRepaid);
98725
+ logger2.info(
98726
+ `${_VesuExtendedMultiplierStrategy.name}::shouldInvest debtAmountToBeRepaid: ${debtAmountToBeRepaid.toNumber()}`
98727
+ );
98728
+ const amountToInvestAfterRepayingDebt = amountToInvest.plus(debtAmountToBeRepaid);
98728
98729
  const { vesu_amount, extended_amount, extended_leverage, vesu_leverage } = await calculateAmountDistribution(
98729
98730
  amountToInvestAfterRepayingDebt.toNumber(),
98730
98731
  extendedAdapter.client,
@@ -99260,7 +99261,9 @@ spurious results.`);
99260
99261
  );
99261
99262
  const extendedPositions = await extendedAdapter.getAllOpenPositions();
99262
99263
  if (!extendedPositions) {
99263
- logger2.error(`error getting extended positions: ${extendedPositions} while moving assets from extended to vault`);
99264
+ logger2.error(
99265
+ `error getting extended positions: ${extendedPositions} while moving assets from extended to vault`
99266
+ );
99264
99267
  return this.createTransactionResult(
99265
99268
  [],
99266
99269
  false,
@@ -99276,8 +99279,14 @@ spurious results.`);
99276
99279
  ),
99277
99280
  USDC_TOKEN_DECIMALS
99278
99281
  );
99279
- const positionAmountToClose = await calculatePositionToCloseToWithdrawAmount(extendedHoldings, extendedPositions[0], params.amount);
99280
- logger2.info(`positionAmountToClose: ${positionAmountToClose.toNumber()}`);
99282
+ const positionAmountToClose = await calculatePositionToCloseToWithdrawAmount(
99283
+ extendedHoldings,
99284
+ extendedPositions[0],
99285
+ params.amount
99286
+ );
99287
+ logger2.info(
99288
+ `positionAmountToClose: ${positionAmountToClose} this is without leverage`
99289
+ );
99281
99290
  logger2.info(
99282
99291
  `${_VesuExtendedMultiplierStrategy.name}::moveAssets leftAmountAfterWithdrawalAmountInAccount: ${leftAmountAfterWithdrawalAmountInAccount.toNumber()}`
99283
99292
  );
@@ -99383,7 +99392,7 @@ spurious results.`);
99383
99392
  avnuAdapter,
99384
99393
  "close" /* CLOSE */
99385
99394
  );
99386
- if (!isPriceDifferenceBetweenAvnuAndExtended) {
99395
+ if (!isPriceDifferenceBetweenAvnuAndExtended && params.cycleType === "WITHDRAWAL" /* WITHDRAWAL */) {
99387
99396
  logger2.warn(
99388
99397
  `price difference between avnu and extended doesn't fit the range for close position, ${avnuAdapter.config.maximumExtendedPriceDifferenceForSwapClosing}`
99389
99398
  );
@@ -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, vesuDebtAmountToBeRepaid) => {
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).plus(vesuDebtAmountToBeRepaid);
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).dividedBy(targetHf);
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
- return debtAmountToBeRepaid;
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;
@@ -28603,21 +28606,16 @@ var calculateDeltaDebtAmount = (maxLtv = MAX_LTV_BTC_USDC, existingVesuCollatera
28603
28606
  };
28604
28607
  var calculatePositionToCloseToWithdrawAmount = async (extendedBalance, extendedPositions, amountToWithdraw) => {
28605
28608
  try {
28609
+ const extendedLeverage = calculateExtendedLevergae();
28606
28610
  const extendedPosition = extendedPositions.value;
28607
- const unrealisedPnl = new Web3Number(
28608
- extendedBalance.unrealisedPnl,
28609
- USDC_TOKEN_DECIMALS
28610
- );
28611
- const availableForWithdrawal = new Web3Number(
28612
- extendedBalance.availableForWithdrawal,
28613
- USDC_TOKEN_DECIMALS
28614
- );
28615
- const netAmount = amountToWithdraw.minus(availableForWithdrawal);
28611
+ const marginRequired = new Web3Number(extendedBalance.initialMargin, USDC_TOKEN_DECIMALS);
28612
+ const unrealisedPnl = new Web3Number(extendedBalance.unrealisedPnl, USDC_TOKEN_DECIMALS);
28613
+ const availableForWithdrawal = new Web3Number(extendedBalance.availableForWithdrawal, USDC_TOKEN_DECIMALS);
28616
28614
  const upnlPercent = unrealisedPnl.dividedBy(extendedPosition);
28617
- console.log(`upnlPercent: ${upnlPercent}`);
28618
- const denm = upnlPercent.multipliedBy(3).plus(1);
28619
- const amountToClose = netAmount.multipliedBy(3).dividedBy(denm);
28620
- return new Web3Number(Math.ceil(amountToClose.toNumber()), USDC_TOKEN_DECIMALS);
28615
+ const walletBalance = new Web3Number(extendedBalance.balance, USDC_TOKEN_DECIMALS);
28616
+ const term1 = marginRequired.minus(walletBalance).minus(availableForWithdrawal).plus(amountToWithdraw).multipliedBy(extendedLeverage);
28617
+ const denominator = upnlPercent.multipliedBy(extendedLeverage).plus(1);
28618
+ return new Web3Number(Math.ceil(term1.dividedBy(denominator).dividedBy(extendedLeverage).toNumber()), USDC_TOKEN_DECIMALS);
28621
28619
  } catch (err) {
28622
28620
  logger.error(
28623
28621
  `error calculating position to close to withdraw amount: ${err}`
@@ -34686,7 +34684,10 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
34686
34684
  debtAmountToBeRepaid: new Web3Number(0, 0)
34687
34685
  };
34688
34686
  }
34689
- const amountToInvestAfterRepayingDebt = amountToInvest.minus(debtAmountToBeRepaid);
34687
+ logger.info(
34688
+ `${_VesuExtendedMultiplierStrategy.name}::shouldInvest debtAmountToBeRepaid: ${debtAmountToBeRepaid.toNumber()}`
34689
+ );
34690
+ const amountToInvestAfterRepayingDebt = amountToInvest.plus(debtAmountToBeRepaid);
34690
34691
  const { vesu_amount, extended_amount, extended_leverage, vesu_leverage } = await calculateAmountDistribution(
34691
34692
  amountToInvestAfterRepayingDebt.toNumber(),
34692
34693
  extendedAdapter.client,
@@ -35222,7 +35223,9 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
35222
35223
  );
35223
35224
  const extendedPositions = await extendedAdapter.getAllOpenPositions();
35224
35225
  if (!extendedPositions) {
35225
- logger.error(`error getting extended positions: ${extendedPositions} while moving assets from extended to vault`);
35226
+ logger.error(
35227
+ `error getting extended positions: ${extendedPositions} while moving assets from extended to vault`
35228
+ );
35226
35229
  return this.createTransactionResult(
35227
35230
  [],
35228
35231
  false,
@@ -35238,8 +35241,14 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
35238
35241
  ),
35239
35242
  USDC_TOKEN_DECIMALS
35240
35243
  );
35241
- const positionAmountToClose = await calculatePositionToCloseToWithdrawAmount(extendedHoldings, extendedPositions[0], params.amount);
35242
- logger.info(`positionAmountToClose: ${positionAmountToClose.toNumber()}`);
35244
+ const positionAmountToClose = await calculatePositionToCloseToWithdrawAmount(
35245
+ extendedHoldings,
35246
+ extendedPositions[0],
35247
+ params.amount
35248
+ );
35249
+ logger.info(
35250
+ `positionAmountToClose: ${positionAmountToClose} this is without leverage`
35251
+ );
35243
35252
  logger.info(
35244
35253
  `${_VesuExtendedMultiplierStrategy.name}::moveAssets leftAmountAfterWithdrawalAmountInAccount: ${leftAmountAfterWithdrawalAmountInAccount.toNumber()}`
35245
35254
  );
@@ -35345,7 +35354,7 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
35345
35354
  avnuAdapter,
35346
35355
  "close" /* CLOSE */
35347
35356
  );
35348
- if (!isPriceDifferenceBetweenAvnuAndExtended) {
35357
+ if (!isPriceDifferenceBetweenAvnuAndExtended && params.cycleType === "WITHDRAWAL" /* WITHDRAWAL */) {
35349
35358
  logger.warn(
35350
35359
  `price difference between avnu and extended doesn't fit the range for close position, ${avnuAdapter.config.maximumExtendedPriceDifferenceForSwapClosing}`
35351
35360
  );
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, vesuDebtAmountToBeRepaid: Web3Number) => {
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
@@ -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, vesuDebtAmountToBeRepaid) => {
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).plus(vesuDebtAmountToBeRepaid);
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).dividedBy(targetHf);
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
- return debtAmountToBeRepaid;
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;
@@ -28407,21 +28410,16 @@ var calculateDeltaDebtAmount = (maxLtv = MAX_LTV_BTC_USDC, existingVesuCollatera
28407
28410
  };
28408
28411
  var calculatePositionToCloseToWithdrawAmount = async (extendedBalance, extendedPositions, amountToWithdraw) => {
28409
28412
  try {
28413
+ const extendedLeverage = calculateExtendedLevergae();
28410
28414
  const extendedPosition = extendedPositions.value;
28411
- const unrealisedPnl = new Web3Number(
28412
- extendedBalance.unrealisedPnl,
28413
- USDC_TOKEN_DECIMALS
28414
- );
28415
- const availableForWithdrawal = new Web3Number(
28416
- extendedBalance.availableForWithdrawal,
28417
- USDC_TOKEN_DECIMALS
28418
- );
28419
- const netAmount = amountToWithdraw.minus(availableForWithdrawal);
28415
+ const marginRequired = new Web3Number(extendedBalance.initialMargin, USDC_TOKEN_DECIMALS);
28416
+ const unrealisedPnl = new Web3Number(extendedBalance.unrealisedPnl, USDC_TOKEN_DECIMALS);
28417
+ const availableForWithdrawal = new Web3Number(extendedBalance.availableForWithdrawal, USDC_TOKEN_DECIMALS);
28420
28418
  const upnlPercent = unrealisedPnl.dividedBy(extendedPosition);
28421
- console.log(`upnlPercent: ${upnlPercent}`);
28422
- const denm = upnlPercent.multipliedBy(3).plus(1);
28423
- const amountToClose = netAmount.multipliedBy(3).dividedBy(denm);
28424
- return new Web3Number(Math.ceil(amountToClose.toNumber()), USDC_TOKEN_DECIMALS);
28419
+ const walletBalance = new Web3Number(extendedBalance.balance, USDC_TOKEN_DECIMALS);
28420
+ const term1 = marginRequired.minus(walletBalance).minus(availableForWithdrawal).plus(amountToWithdraw).multipliedBy(extendedLeverage);
28421
+ const denominator = upnlPercent.multipliedBy(extendedLeverage).plus(1);
28422
+ return new Web3Number(Math.ceil(term1.dividedBy(denominator).dividedBy(extendedLeverage).toNumber()), USDC_TOKEN_DECIMALS);
28425
28423
  } catch (err) {
28426
28424
  logger.error(
28427
28425
  `error calculating position to close to withdraw amount: ${err}`
@@ -34845,7 +34843,10 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
34845
34843
  debtAmountToBeRepaid: new Web3Number(0, 0)
34846
34844
  };
34847
34845
  }
34848
- const amountToInvestAfterRepayingDebt = amountToInvest.minus(debtAmountToBeRepaid);
34846
+ logger.info(
34847
+ `${_VesuExtendedMultiplierStrategy.name}::shouldInvest debtAmountToBeRepaid: ${debtAmountToBeRepaid.toNumber()}`
34848
+ );
34849
+ const amountToInvestAfterRepayingDebt = amountToInvest.plus(debtAmountToBeRepaid);
34849
34850
  const { vesu_amount, extended_amount, extended_leverage, vesu_leverage } = await calculateAmountDistribution(
34850
34851
  amountToInvestAfterRepayingDebt.toNumber(),
34851
34852
  extendedAdapter.client,
@@ -35381,7 +35382,9 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
35381
35382
  );
35382
35383
  const extendedPositions = await extendedAdapter.getAllOpenPositions();
35383
35384
  if (!extendedPositions) {
35384
- logger.error(`error getting extended positions: ${extendedPositions} while moving assets from extended to vault`);
35385
+ logger.error(
35386
+ `error getting extended positions: ${extendedPositions} while moving assets from extended to vault`
35387
+ );
35385
35388
  return this.createTransactionResult(
35386
35389
  [],
35387
35390
  false,
@@ -35397,8 +35400,14 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
35397
35400
  ),
35398
35401
  USDC_TOKEN_DECIMALS
35399
35402
  );
35400
- const positionAmountToClose = await calculatePositionToCloseToWithdrawAmount(extendedHoldings, extendedPositions[0], params.amount);
35401
- logger.info(`positionAmountToClose: ${positionAmountToClose.toNumber()}`);
35403
+ const positionAmountToClose = await calculatePositionToCloseToWithdrawAmount(
35404
+ extendedHoldings,
35405
+ extendedPositions[0],
35406
+ params.amount
35407
+ );
35408
+ logger.info(
35409
+ `positionAmountToClose: ${positionAmountToClose} this is without leverage`
35410
+ );
35402
35411
  logger.info(
35403
35412
  `${_VesuExtendedMultiplierStrategy.name}::moveAssets leftAmountAfterWithdrawalAmountInAccount: ${leftAmountAfterWithdrawalAmountInAccount.toNumber()}`
35404
35413
  );
@@ -35504,7 +35513,7 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
35504
35513
  avnuAdapter,
35505
35514
  "close" /* CLOSE */
35506
35515
  );
35507
- if (!isPriceDifferenceBetweenAvnuAndExtended) {
35516
+ if (!isPriceDifferenceBetweenAvnuAndExtended && params.cycleType === "WITHDRAWAL" /* WITHDRAWAL */) {
35508
35517
  logger.warn(
35509
35518
  `price difference between avnu and extended doesn't fit the range for close position, ${avnuAdapter.config.maximumExtendedPriceDifferenceForSwapClosing}`
35510
35519
  );
package/dist/index.mjs CHANGED
@@ -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, vesuDebtAmountToBeRepaid) => {
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).plus(vesuDebtAmountToBeRepaid);
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).dividedBy(targetHf);
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
- return debtAmountToBeRepaid;
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;
@@ -28259,21 +28262,16 @@ var calculateDeltaDebtAmount = (maxLtv = MAX_LTV_BTC_USDC, existingVesuCollatera
28259
28262
  };
28260
28263
  var calculatePositionToCloseToWithdrawAmount = async (extendedBalance, extendedPositions, amountToWithdraw) => {
28261
28264
  try {
28265
+ const extendedLeverage = calculateExtendedLevergae();
28262
28266
  const extendedPosition = extendedPositions.value;
28263
- const unrealisedPnl = new Web3Number(
28264
- extendedBalance.unrealisedPnl,
28265
- USDC_TOKEN_DECIMALS
28266
- );
28267
- const availableForWithdrawal = new Web3Number(
28268
- extendedBalance.availableForWithdrawal,
28269
- USDC_TOKEN_DECIMALS
28270
- );
28271
- const netAmount = amountToWithdraw.minus(availableForWithdrawal);
28267
+ const marginRequired = new Web3Number(extendedBalance.initialMargin, USDC_TOKEN_DECIMALS);
28268
+ const unrealisedPnl = new Web3Number(extendedBalance.unrealisedPnl, USDC_TOKEN_DECIMALS);
28269
+ const availableForWithdrawal = new Web3Number(extendedBalance.availableForWithdrawal, USDC_TOKEN_DECIMALS);
28272
28270
  const upnlPercent = unrealisedPnl.dividedBy(extendedPosition);
28273
- console.log(`upnlPercent: ${upnlPercent}`);
28274
- const denm = upnlPercent.multipliedBy(3).plus(1);
28275
- const amountToClose = netAmount.multipliedBy(3).dividedBy(denm);
28276
- return new Web3Number(Math.ceil(amountToClose.toNumber()), USDC_TOKEN_DECIMALS);
28271
+ const walletBalance = new Web3Number(extendedBalance.balance, USDC_TOKEN_DECIMALS);
28272
+ const term1 = marginRequired.minus(walletBalance).minus(availableForWithdrawal).plus(amountToWithdraw).multipliedBy(extendedLeverage);
28273
+ const denominator = upnlPercent.multipliedBy(extendedLeverage).plus(1);
28274
+ return new Web3Number(Math.ceil(term1.dividedBy(denominator).dividedBy(extendedLeverage).toNumber()), USDC_TOKEN_DECIMALS);
28277
28275
  } catch (err) {
28278
28276
  logger.error(
28279
28277
  `error calculating position to close to withdraw amount: ${err}`
@@ -34697,7 +34695,10 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
34697
34695
  debtAmountToBeRepaid: new Web3Number(0, 0)
34698
34696
  };
34699
34697
  }
34700
- const amountToInvestAfterRepayingDebt = amountToInvest.minus(debtAmountToBeRepaid);
34698
+ logger.info(
34699
+ `${_VesuExtendedMultiplierStrategy.name}::shouldInvest debtAmountToBeRepaid: ${debtAmountToBeRepaid.toNumber()}`
34700
+ );
34701
+ const amountToInvestAfterRepayingDebt = amountToInvest.plus(debtAmountToBeRepaid);
34701
34702
  const { vesu_amount, extended_amount, extended_leverage, vesu_leverage } = await calculateAmountDistribution(
34702
34703
  amountToInvestAfterRepayingDebt.toNumber(),
34703
34704
  extendedAdapter.client,
@@ -35233,7 +35234,9 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
35233
35234
  );
35234
35235
  const extendedPositions = await extendedAdapter.getAllOpenPositions();
35235
35236
  if (!extendedPositions) {
35236
- logger.error(`error getting extended positions: ${extendedPositions} while moving assets from extended to vault`);
35237
+ logger.error(
35238
+ `error getting extended positions: ${extendedPositions} while moving assets from extended to vault`
35239
+ );
35237
35240
  return this.createTransactionResult(
35238
35241
  [],
35239
35242
  false,
@@ -35249,8 +35252,14 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
35249
35252
  ),
35250
35253
  USDC_TOKEN_DECIMALS
35251
35254
  );
35252
- const positionAmountToClose = await calculatePositionToCloseToWithdrawAmount(extendedHoldings, extendedPositions[0], params.amount);
35253
- logger.info(`positionAmountToClose: ${positionAmountToClose.toNumber()}`);
35255
+ const positionAmountToClose = await calculatePositionToCloseToWithdrawAmount(
35256
+ extendedHoldings,
35257
+ extendedPositions[0],
35258
+ params.amount
35259
+ );
35260
+ logger.info(
35261
+ `positionAmountToClose: ${positionAmountToClose} this is without leverage`
35262
+ );
35254
35263
  logger.info(
35255
35264
  `${_VesuExtendedMultiplierStrategy.name}::moveAssets leftAmountAfterWithdrawalAmountInAccount: ${leftAmountAfterWithdrawalAmountInAccount.toNumber()}`
35256
35265
  );
@@ -35356,7 +35365,7 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
35356
35365
  avnuAdapter,
35357
35366
  "close" /* CLOSE */
35358
35367
  );
35359
- if (!isPriceDifferenceBetweenAvnuAndExtended) {
35368
+ if (!isPriceDifferenceBetweenAvnuAndExtended && params.cycleType === "WITHDRAWAL" /* WITHDRAWAL */) {
35360
35369
  logger.warn(
35361
35370
  `price difference between avnu and extended doesn't fit the range for close position, ${avnuAdapter.config.maximumExtendedPriceDifferenceForSwapClosing}`
35362
35371
  );
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@strkfarm/sdk",
3
- "version": "2.0.0-dev.24",
3
+ "version": "2.0.0-dev.26",
4
4
  "description": "STRKFarm TS SDK (Meant for our internal use, but feel free to use it)",
5
5
  "typings": "dist/index.d.ts",
6
6
  "types": "dist/index.d.ts",
@@ -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
- .dividedBy(targetHf);
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
- return debtAmountToBeRepaid;
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;
@@ -471,21 +472,19 @@ export const calculatePositionToCloseToWithdrawAmount = async (
471
472
  amountToWithdraw: Web3Number
472
473
  ) => {
473
474
  try {
475
+ const extendedLeverage = calculateExtendedLevergae();
474
476
  const extendedPosition = extendedPositions.value;
475
- const unrealisedPnl = new Web3Number(
476
- extendedBalance.unrealisedPnl,
477
- USDC_TOKEN_DECIMALS
478
- );
479
- const availableForWithdrawal = new Web3Number(
480
- extendedBalance.availableForWithdrawal,
481
- USDC_TOKEN_DECIMALS
482
- );
483
- const netAmount = amountToWithdraw.minus(availableForWithdrawal);
484
- const upnlPercent = unrealisedPnl.dividedBy(extendedPosition);
485
- console.log(`upnlPercent: ${upnlPercent}`);
486
- const denm = upnlPercent.multipliedBy(3).plus(1);
487
- const amountToClose = netAmount.multipliedBy(3).dividedBy(denm);
488
- return new Web3Number(Math.ceil(amountToClose.toNumber()), USDC_TOKEN_DECIMALS);
477
+ const marginRequired = new Web3Number(extendedBalance.initialMargin , USDC_TOKEN_DECIMALS);
478
+ const unrealisedPnl = new Web3Number(extendedBalance.unrealisedPnl, USDC_TOKEN_DECIMALS);
479
+ const availableForWithdrawal = new Web3Number(extendedBalance.availableForWithdrawal, USDC_TOKEN_DECIMALS);
480
+ const upnlPercent = unrealisedPnl.dividedBy(extendedPosition)
481
+ /**
482
+ * New Formula
483
+ */
484
+ const walletBalance = new Web3Number(extendedBalance.balance, USDC_TOKEN_DECIMALS);
485
+ const term1 = marginRequired.minus(walletBalance).minus(availableForWithdrawal).plus(amountToWithdraw).multipliedBy(extendedLeverage);
486
+ const denominator = upnlPercent.multipliedBy(extendedLeverage).plus(1);
487
+ return new Web3Number(Math.ceil(term1.dividedBy(denominator).dividedBy(extendedLeverage).toNumber()), USDC_TOKEN_DECIMALS);
489
488
  } catch (err) {
490
489
  logger.error(
491
490
  `error calculating position to close to withdraw amount: ${err}`
@@ -8,7 +8,12 @@ import {
8
8
  UNIVERSAL_MANAGE_IDS,
9
9
  UniversalStrategySettings,
10
10
  } from "../universal-strategy";
11
- import { calculateDebtAmount, calculateDeltaDebtAmount, calculateExtendedLevergae, calculatePositionToCloseToWithdrawAmount } from "./utils/helper";
11
+ import {
12
+ calculateDebtAmount,
13
+ calculateDeltaDebtAmount,
14
+ calculateExtendedLevergae,
15
+ calculatePositionToCloseToWithdrawAmount,
16
+ } from "./utils/helper";
12
17
  import { logger } from "@/utils";
13
18
  import { AUDIT_URL } from "../universal-lst-muliplier-strategy";
14
19
  import { getNoRiskTags } from "@/interfaces";
@@ -410,7 +415,7 @@ export class VesuExtendedMultiplierStrategy<
410
415
  logger.info(
411
416
  `${VesuExtendedMultiplierStrategy.name}::shouldInvest amountToInvest: ${amountToInvestNumber}`
412
417
  );
413
-
418
+
414
419
  if (amountToInvest.lessThan(LIMIT_BALANCE_VALUE)) {
415
420
  return {
416
421
  shouldInvest: false,
@@ -498,7 +503,17 @@ export class VesuExtendedMultiplierStrategy<
498
503
  debtAmountToBeRepaid: new Web3Number(0, 0),
499
504
  };
500
505
  }
501
- const amountToInvestAfterRepayingDebt = amountToInvest.minus(debtAmountToBeRepaid);
506
+ logger.info(
507
+ `${
508
+ VesuExtendedMultiplierStrategy.name
509
+ }::shouldInvest debtAmountToBeRepaid: ${debtAmountToBeRepaid.toNumber()}`
510
+ );
511
+ /**
512
+ * Since the debt amount is negative, we need to add it to the amount to invest
513
+ * to maintain the ltv
514
+ */
515
+ const amountToInvestAfterRepayingDebt =
516
+ amountToInvest.plus(debtAmountToBeRepaid);
502
517
  const { vesu_amount, extended_amount, extended_leverage, vesu_leverage } =
503
518
  await calculateAmountDistribution(
504
519
  amountToInvestAfterRepayingDebt.toNumber(),
@@ -1144,7 +1159,9 @@ export class VesuExtendedMultiplierStrategy<
1144
1159
  );
1145
1160
  const extendedPositions = await extendedAdapter.getAllOpenPositions();
1146
1161
  if (!extendedPositions) {
1147
- logger.error(`error getting extended positions: ${extendedPositions} while moving assets from extended to vault`);
1162
+ logger.error(
1163
+ `error getting extended positions: ${extendedPositions} while moving assets from extended to vault`
1164
+ );
1148
1165
  return this.createTransactionResult(
1149
1166
  [],
1150
1167
  false,
@@ -1160,8 +1177,15 @@ export class VesuExtendedMultiplierStrategy<
1160
1177
  ),
1161
1178
  USDC_TOKEN_DECIMALS
1162
1179
  );
1163
- const positionAmountToClose = await calculatePositionToCloseToWithdrawAmount(extendedHoldings, extendedPositions[0], params.amount);
1164
- logger.info(`positionAmountToClose: ${positionAmountToClose.toNumber()}`);
1180
+ const positionAmountToClose =
1181
+ await calculatePositionToCloseToWithdrawAmount(
1182
+ extendedHoldings,
1183
+ extendedPositions[0],
1184
+ params.amount
1185
+ );
1186
+ logger.info(
1187
+ `positionAmountToClose: ${positionAmountToClose} this is without leverage`
1188
+ );
1165
1189
  logger.info(
1166
1190
  `${
1167
1191
  VesuExtendedMultiplierStrategy.name
@@ -1177,8 +1201,7 @@ export class VesuExtendedMultiplierStrategy<
1177
1201
  logger.error(`error fetching order book btc usdc: ${status}`);
1178
1202
  priceOfBTC = collateralPrice.price;
1179
1203
  }
1180
- const btcAmount =
1181
- positionAmountToClose.dividedBy(priceOfBTC);
1204
+ const btcAmount = positionAmountToClose.dividedBy(priceOfBTC);
1182
1205
  /**
1183
1206
  * If amount for withdrawal is greater than the amount in extended available for withdrawal,
1184
1207
  * then we need to open a long position depending on the difference between the two
@@ -1303,7 +1326,10 @@ export class VesuExtendedMultiplierStrategy<
1303
1326
  avnuAdapter,
1304
1327
  PositionTypeAvnuExtended.CLOSE
1305
1328
  );
1306
- if (!isPriceDifferenceBetweenAvnuAndExtended) {
1329
+ if (
1330
+ !isPriceDifferenceBetweenAvnuAndExtended &&
1331
+ params.cycleType === CycleType.WITHDRAWAL
1332
+ ) {
1307
1333
  logger.warn(
1308
1334
  `price difference between avnu and extended doesn't fit the range for close position, ${avnuAdapter.config.maximumExtendedPriceDifferenceForSwapClosing}`
1309
1335
  );