@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.
@@ -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 = 10;
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, 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;
@@ -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 availableForWithdrawal = parseFloat(
98603
- usdcBalanceOnExtended.availableForWithdrawal
98604
+ const availableForTrade = parseFloat(
98605
+ usdcBalanceOnExtended.availableForTrade
98604
98606
  );
98605
- if (!Number.isFinite(availableForWithdrawal) || availableForWithdrawal < 0) {
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(usdcBalanceOnExtended?.availableForTrade ?? 0).multipliedBy(1 - LIMIT_BALANCE);
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
- const debtAmountToBeRepaid = calculateDeltaDebtAmount(
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
- const amountToInvestAfterRepayingDebt = amountToInvest.minus(debtAmountToBeRepaid);
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
  );
@@ -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 = 10;
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, 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;
@@ -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 availableForWithdrawal = parseFloat(
34565
- usdcBalanceOnExtended.availableForWithdrawal
34566
+ const availableForTrade = parseFloat(
34567
+ usdcBalanceOnExtended.availableForTrade
34566
34568
  );
34567
- if (!Number.isFinite(availableForWithdrawal) || availableForWithdrawal < 0) {
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(usdcBalanceOnExtended?.availableForTrade ?? 0).multipliedBy(1 - LIMIT_BALANCE);
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
- const debtAmountToBeRepaid = calculateDeltaDebtAmount(
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
- const amountToInvestAfterRepayingDebt = amountToInvest.minus(debtAmountToBeRepaid);
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, 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
@@ -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 = 10;
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, 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;
@@ -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 availableForWithdrawal = parseFloat(
34724
- usdcBalanceOnExtended.availableForWithdrawal
34725
+ const availableForTrade = parseFloat(
34726
+ usdcBalanceOnExtended.availableForTrade
34725
34727
  );
34726
- if (!Number.isFinite(availableForWithdrawal) || availableForWithdrawal < 0) {
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(usdcBalanceOnExtended?.availableForTrade ?? 0).multipliedBy(1 - LIMIT_BALANCE);
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
- const debtAmountToBeRepaid = calculateDeltaDebtAmount(
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
- const amountToInvestAfterRepayingDebt = amountToInvest.minus(debtAmountToBeRepaid);
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 = 10;
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, 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;
@@ -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 availableForWithdrawal = parseFloat(
34576
- usdcBalanceOnExtended.availableForWithdrawal
34577
+ const availableForTrade = parseFloat(
34578
+ usdcBalanceOnExtended.availableForTrade
34577
34579
  );
34578
- if (!Number.isFinite(availableForWithdrawal) || availableForWithdrawal < 0) {
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(usdcBalanceOnExtended?.availableForTrade ?? 0).multipliedBy(1 - LIMIT_BALANCE);
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
- const debtAmountToBeRepaid = calculateDeltaDebtAmount(
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
- const amountToInvestAfterRepayingDebt = amountToInvest.minus(debtAmountToBeRepaid);
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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@strkfarm/sdk",
3
- "version": "2.0.0-dev.25",
3
+ "version": "2.0.0-dev.27",
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",
@@ -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=10;
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
- .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;
@@ -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 availableForWithdrawal = parseFloat(
368
- usdcBalanceOnExtended.availableForWithdrawal
367
+ const availableForTrade= parseFloat(
368
+ usdcBalanceOnExtended.availableForTrade
369
369
  );
370
370
  if (
371
- !Number.isFinite(availableForWithdrawal) ||
372
- availableForWithdrawal < 0
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
- /** The LIMIT_BALANCE is the bffer amount to keep in the investing Cycle */
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(usdcBalanceOnExtended?.availableForTrade ?? 0)
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
- const debtAmountToBeRepaid = calculateDeltaDebtAmount(
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.minus(debtAmountToBeRepaid);
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 (!isPriceDifferenceBetweenAvnuAndExtended) {
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
  );