@strkfarm/sdk 2.0.0-dev.21 → 2.0.0-dev.23

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.js CHANGED
@@ -124,6 +124,7 @@ __export(index_exports, {
124
124
  calculateBTCPriceDelta: () => calculateBTCPriceDelta,
125
125
  calculateDebtAmount: () => calculateDebtAmount,
126
126
  calculateDebtReductionAmountForWithdrawal: () => calculateDebtReductionAmountForWithdrawal,
127
+ calculateDeltaDebtAmount: () => calculateDeltaDebtAmount,
127
128
  calculateExposureDelta: () => calculateExposureDelta,
128
129
  calculateExtendedLevergae: () => calculateExtendedLevergae,
129
130
  calculateVesUPositionSizeGivenExtended: () => calculateVesUPositionSizeGivenExtended,
@@ -28368,14 +28369,14 @@ var calculateExposureDelta = (exposure_extended, exposure_vesu) => {
28368
28369
  var calculateBTCPriceDelta = (btcPrice, lastBtcPrice) => {
28369
28370
  return (btcPrice - lastBtcPrice) / lastBtcPrice * 100;
28370
28371
  };
28371
- var calculateVesUPositionSizeGivenExtended = (extendedPositonValue, extendedHoldingAmount, collateralAmount, collateralPrice) => {
28372
+ var calculateVesUPositionSizeGivenExtended = (extendedPositonValue, extendedHoldingAmount, collateralAmount, collateralPrice, vesuDebtAmountToBeRepaid) => {
28372
28373
  const extendedLeverage = calculateExtendedLevergae();
28373
28374
  const vesuLeverage = calculateVesuLeverage();
28374
28375
  const extendedAmount = extendedHoldingAmount;
28375
28376
  const extendedAmountInBTC = extendedAmount.dividedBy(collateralPrice);
28376
28377
  const numerator1 = extendedAmount.multipliedBy(extendedLeverage).plus(extendedPositonValue);
28377
28378
  const numerator2 = collateralAmount.multipliedBy(collateralPrice).multipliedBy(-1);
28378
- const vesuAmountInUsd = numerator1.plus(numerator2).dividedBy(vesuLeverage);
28379
+ const vesuAmountInUsd = numerator1.plus(numerator2).dividedBy(vesuLeverage).plus(vesuDebtAmountToBeRepaid);
28379
28380
  const vesuAmountInBTC = vesuAmountInUsd.dividedBy(collateralPrice).toFixed(WBTC_TOKEN_DECIMALS);
28380
28381
  return {
28381
28382
  vesuAmountInUsd: vesuAmountInUsd.toFixed(2),
@@ -28383,6 +28384,17 @@ var calculateVesUPositionSizeGivenExtended = (extendedPositonValue, extendedHold
28383
28384
  extendedAmountInBTC
28384
28385
  };
28385
28386
  };
28387
+ var calculateDeltaDebtAmount = (maxLtv = MAX_LTV_BTC_USDC, existingVesuCollateral, existingVesuDebt, collateralPrice, debtPrice, targetHf = TARGET_HF) => {
28388
+ try {
28389
+ const term1 = existingVesuCollateral.multipliedBy(collateralPrice).multipliedBy(maxLtv).dividedBy(targetHf);
28390
+ const term2 = existingVesuDebt.multipliedBy(debtPrice).multipliedBy(targetHf).multipliedBy(-1);
28391
+ const debtAmountToBeRepaid = term1.plus(term2).dividedBy(targetHf);
28392
+ return debtAmountToBeRepaid;
28393
+ } catch (err) {
28394
+ logger.error(`error calculating delta position: ${err}`);
28395
+ return null;
28396
+ }
28397
+ };
28386
28398
 
28387
28399
  // src/utils/health-factor-math.ts
28388
28400
  var HealthFactorMath = class {
@@ -30805,6 +30817,8 @@ var AvnuAdapter = class _AvnuAdapter extends BaseAdapter {
30805
30817
  quote,
30806
30818
  vaultAllocator.address
30807
30819
  );
30820
+ const dataObject = quote;
30821
+ logger.info(`${_AvnuAdapter.name}::getQuotesAvnu finalAmountOfWbtcOut : ${dataObject.avnuFees} ${parseInt(dataObject.buyAmount.toString(), 16)} ${parseInt(dataObject.sellAmount.toString(), 16)} ${parseInt(dataObject.sellAmount.toString(), 16)}`);
30808
30822
  const swapCallData = getCalldata[0];
30809
30823
  const amount = import_starknet23.uint256.bnToUint256(quote.sellAmountInUsd * 10 ** 7);
30810
30824
  return [
@@ -34551,11 +34565,17 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
34551
34565
  WALLET_ADDRESS,
34552
34566
  usdceToken.decimals
34553
34567
  );
34554
- logger.info(`${_VesuExtendedMultiplierStrategy.name}::moveAssetsToVaultAllocator walletBalance: ${walletBalance}`);
34568
+ logger.info(
34569
+ `${_VesuExtendedMultiplierStrategy.name}::moveAssetsToVaultAllocator walletBalance: ${walletBalance}`
34570
+ );
34555
34571
  const amountToBeTransferred = amount.minimum(walletBalance);
34556
- logger.info(`${_VesuExtendedMultiplierStrategy.name}::moveAssetsToVaultAllocator amountToBeTransferred: ${amountToBeTransferred.toNumber()}`);
34572
+ logger.info(
34573
+ `${_VesuExtendedMultiplierStrategy.name}::moveAssetsToVaultAllocator amountToBeTransferred: ${amountToBeTransferred.toNumber()}`
34574
+ );
34557
34575
  if (amountToBeTransferred.lessThan(0)) {
34558
- logger.error(`${_VesuExtendedMultiplierStrategy.name}::moveAssetsToVaultAllocator amountToBeTransferred is less than 0: ${amountToBeTransferred.toNumber()}`);
34576
+ logger.error(
34577
+ `${_VesuExtendedMultiplierStrategy.name}::moveAssetsToVaultAllocator amountToBeTransferred is less than 0: ${amountToBeTransferred.toNumber()}`
34578
+ );
34559
34579
  return {
34560
34580
  calls: [],
34561
34581
  status: false
@@ -34593,10 +34613,14 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
34593
34613
  }
34594
34614
  async shouldInvest() {
34595
34615
  try {
34596
- logger.info(`${_VesuExtendedMultiplierStrategy.name}::shouldInvest starting`);
34616
+ logger.info(
34617
+ `${_VesuExtendedMultiplierStrategy.name}::shouldInvest starting`
34618
+ );
34597
34619
  const vesuAdapter = await this.getVesuAdapter();
34598
34620
  const extendedAdapter = await this.getExtendedAdapter();
34599
- logger.info(`${_VesuExtendedMultiplierStrategy.name}::shouldInvest adapters fetched: vesuAdapter=${!!vesuAdapter}, extendedAdapter=${!!extendedAdapter}, extendedAdapter.client=${!!extendedAdapter?.client}`);
34621
+ logger.info(
34622
+ `${_VesuExtendedMultiplierStrategy.name}::shouldInvest adapters fetched: vesuAdapter=${!!vesuAdapter}, extendedAdapter=${!!extendedAdapter}, extendedAdapter.client=${!!extendedAdapter?.client}`
34623
+ );
34600
34624
  if (!vesuAdapter) {
34601
34625
  logger.error(
34602
34626
  `Vesu adapter not configured in metadata. This is a configuration issue, not a temporary failure.`
@@ -34608,7 +34632,8 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
34608
34632
  extendedLeverage: 0,
34609
34633
  collateralPrice: 0,
34610
34634
  debtPrice: 0,
34611
- vesuLeverage: 0
34635
+ vesuLeverage: 0,
34636
+ debtAmountToBeRepaid: new Web3Number(0, 0)
34612
34637
  };
34613
34638
  }
34614
34639
  if (!extendedAdapter) {
@@ -34622,7 +34647,8 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
34622
34647
  extendedLeverage: 0,
34623
34648
  collateralPrice: 0,
34624
34649
  debtPrice: 0,
34625
- vesuLeverage: 0
34650
+ vesuLeverage: 0,
34651
+ debtAmountToBeRepaid: new Web3Number(0, 0)
34626
34652
  };
34627
34653
  }
34628
34654
  if (!extendedAdapter.client) {
@@ -34636,10 +34662,13 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
34636
34662
  extendedLeverage: 0,
34637
34663
  collateralPrice: 0,
34638
34664
  debtPrice: 0,
34639
- vesuLeverage: 0
34665
+ vesuLeverage: 0,
34666
+ debtAmountToBeRepaid: new Web3Number(0, 0)
34640
34667
  };
34641
34668
  }
34642
- logger.info(`${_VesuExtendedMultiplierStrategy.name}::shouldInvest calling getUnusedBalance`);
34669
+ logger.info(
34670
+ `${_VesuExtendedMultiplierStrategy.name}::shouldInvest calling getUnusedBalance`
34671
+ );
34643
34672
  const balance = await this.getUnusedBalance();
34644
34673
  if (!Number.isFinite(balance.usdValue) || balance.usdValue < 0) {
34645
34674
  logger.error(
@@ -34652,13 +34681,18 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
34652
34681
  extendedLeverage: 0,
34653
34682
  collateralPrice: 0,
34654
34683
  debtPrice: 0,
34655
- vesuLeverage: 0
34684
+ vesuLeverage: 0,
34685
+ debtAmountToBeRepaid: new Web3Number(0, 0)
34656
34686
  };
34657
34687
  }
34658
- logger.info(`${_VesuExtendedMultiplierStrategy.name}::shouldInvest balance: ${balance.usdValue}`);
34688
+ logger.info(
34689
+ `${_VesuExtendedMultiplierStrategy.name}::shouldInvest balance: ${balance.usdValue}`
34690
+ );
34659
34691
  const usdcBalanceOnExtended = await extendedAdapter.getExtendedDepositAmount();
34660
34692
  if (usdcBalanceOnExtended) {
34661
- const availableForWithdrawal = parseFloat(usdcBalanceOnExtended.availableForWithdrawal);
34693
+ const availableForWithdrawal = parseFloat(
34694
+ usdcBalanceOnExtended.availableForWithdrawal
34695
+ );
34662
34696
  if (!Number.isFinite(availableForWithdrawal) || availableForWithdrawal < 0) {
34663
34697
  logger.error(
34664
34698
  `Invalid usdcBalanceOnExtended.availableForWithdrawal: ${usdcBalanceOnExtended.availableForWithdrawal}. Expected a finite, non-negative number.`
@@ -34670,11 +34704,15 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
34670
34704
  extendedLeverage: 0,
34671
34705
  collateralPrice: 0,
34672
34706
  debtPrice: 0,
34673
- vesuLeverage: 0
34707
+ vesuLeverage: 0,
34708
+ debtAmountToBeRepaid: new Web3Number(0, 0)
34674
34709
  };
34675
34710
  }
34676
34711
  }
34677
- const amountToInvest = new Web3Number(balance.usdValue, USDC_TOKEN_DECIMALS).plus(usdcBalanceOnExtended?.availableForWithdrawal ?? 0).multipliedBy(1 - LIMIT_BALANCE);
34712
+ const amountToInvest = new Web3Number(
34713
+ balance.usdValue,
34714
+ USDC_TOKEN_DECIMALS
34715
+ ).plus(usdcBalanceOnExtended?.availableForTrade ?? 0).multipliedBy(1 - LIMIT_BALANCE);
34678
34716
  const amountToInvestNumber = amountToInvest.toNumber();
34679
34717
  if (!Number.isFinite(amountToInvestNumber)) {
34680
34718
  logger.error(
@@ -34687,10 +34725,13 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
34687
34725
  extendedLeverage: 0,
34688
34726
  collateralPrice: 0,
34689
34727
  debtPrice: 0,
34690
- vesuLeverage: 0
34728
+ vesuLeverage: 0,
34729
+ debtAmountToBeRepaid: new Web3Number(0, 0)
34691
34730
  };
34692
34731
  }
34693
- logger.info(`${_VesuExtendedMultiplierStrategy.name}::shouldInvest amountToInvest: ${amountToInvestNumber}`);
34732
+ logger.info(
34733
+ `${_VesuExtendedMultiplierStrategy.name}::shouldInvest amountToInvest: ${amountToInvestNumber}`
34734
+ );
34694
34735
  if (amountToInvest.lessThan(LIMIT_BALANCE_VALUE)) {
34695
34736
  return {
34696
34737
  shouldInvest: false,
@@ -34699,7 +34740,8 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
34699
34740
  extendedLeverage: 0,
34700
34741
  collateralPrice: 0,
34701
34742
  debtPrice: 0,
34702
- vesuLeverage: 0
34743
+ vesuLeverage: 0,
34744
+ debtAmountToBeRepaid: new Web3Number(0, 0)
34703
34745
  };
34704
34746
  }
34705
34747
  const extendedPositon = await extendedAdapter.getAllOpenPositions();
@@ -34712,14 +34754,12 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
34712
34754
  extendedLeverage: 0,
34713
34755
  collateralPrice: 0,
34714
34756
  debtPrice: 0,
34715
- vesuLeverage: 0
34757
+ vesuLeverage: 0,
34758
+ debtAmountToBeRepaid: new Web3Number(0, 0)
34716
34759
  };
34717
34760
  }
34718
- const { collateralTokenAmount } = await vesuAdapter.vesuAdapter.getAssetPrices();
34719
- const {
34720
- collateralPrice,
34721
- debtPrice
34722
- } = await this.getAssetPrices();
34761
+ const { collateralTokenAmount, debtTokenAmount } = await vesuAdapter.vesuAdapter.getAssetPrices();
34762
+ const { collateralPrice, debtPrice } = await this.getAssetPrices();
34723
34763
  if (!Number.isFinite(collateralPrice.price) || collateralPrice.price <= 0) {
34724
34764
  logger.error(
34725
34765
  `Invalid collateralPrice: ${collateralPrice.price}. Expected a finite, positive number.`
@@ -34731,7 +34771,8 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
34731
34771
  extendedLeverage: 0,
34732
34772
  collateralPrice: 0,
34733
34773
  debtPrice: 0,
34734
- vesuLeverage: 0
34774
+ vesuLeverage: 0,
34775
+ debtAmountToBeRepaid: new Web3Number(0, 0)
34735
34776
  };
34736
34777
  }
34737
34778
  if (!Number.isFinite(debtPrice.price) || debtPrice.price <= 0) {
@@ -34745,11 +34786,34 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
34745
34786
  extendedLeverage: 0,
34746
34787
  collateralPrice: 0,
34747
34788
  debtPrice: 0,
34748
- vesuLeverage: 0
34789
+ vesuLeverage: 0,
34790
+ debtAmountToBeRepaid: new Web3Number(0, 0)
34749
34791
  };
34750
34792
  }
34793
+ const debtAmountToBeRepaid = calculateDeltaDebtAmount(
34794
+ MAX_LTV_BTC_USDC,
34795
+ collateralTokenAmount,
34796
+ debtTokenAmount,
34797
+ collateralPrice.price,
34798
+ debtPrice.price,
34799
+ this.metadata.additionalInfo.targetHealthFactor
34800
+ );
34801
+ if (!debtAmountToBeRepaid) {
34802
+ logger.error("error calculating debt amount to be repaid");
34803
+ return {
34804
+ shouldInvest: false,
34805
+ vesuAmount: new Web3Number(0, 0),
34806
+ extendedAmount: new Web3Number(0, 0),
34807
+ extendedLeverage: 0,
34808
+ collateralPrice: 0,
34809
+ debtPrice: 0,
34810
+ vesuLeverage: 0,
34811
+ debtAmountToBeRepaid: new Web3Number(0, 0)
34812
+ };
34813
+ }
34814
+ const amountToInvestAfterRepayingDebt = amountToInvest.minus(debtAmountToBeRepaid);
34751
34815
  const { vesu_amount, extended_amount, extended_leverage, vesu_leverage } = await calculateAmountDistribution(
34752
- amountToInvest.toNumber(),
34816
+ amountToInvestAfterRepayingDebt.toNumber(),
34753
34817
  extendedAdapter.client,
34754
34818
  extendedAdapter.config.extendedMarketName,
34755
34819
  collateralPrice.price,
@@ -34768,10 +34832,13 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
34768
34832
  extendedLeverage: 0,
34769
34833
  collateralPrice: 0,
34770
34834
  debtPrice: 0,
34771
- vesuLeverage: 0
34835
+ vesuLeverage: 0,
34836
+ debtAmountToBeRepaid: new Web3Number(0, 0)
34772
34837
  };
34773
34838
  }
34774
- logger.info(`${_VesuExtendedMultiplierStrategy.name}::shouldInvest vesu_amount: ${vesu_amount.toNumber()}, extended_amount: ${extended_amount.toNumber()}`);
34839
+ logger.info(
34840
+ `${_VesuExtendedMultiplierStrategy.name}::shouldInvest vesu_amount: ${vesu_amount.toNumber()}, extended_amount: ${extended_amount.toNumber()}`
34841
+ );
34775
34842
  return {
34776
34843
  shouldInvest: true,
34777
34844
  vesuAmount: vesu_amount,
@@ -34779,7 +34846,8 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
34779
34846
  extendedLeverage: extended_leverage,
34780
34847
  vesuLeverage: vesu_leverage,
34781
34848
  collateralPrice: collateralPrice.price,
34782
- debtPrice: debtPrice.price
34849
+ debtPrice: debtPrice.price,
34850
+ debtAmountToBeRepaid
34783
34851
  };
34784
34852
  } catch (err) {
34785
34853
  logger.error(`error deciding invest: ${err}`);
@@ -34790,7 +34858,8 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
34790
34858
  extendedLeverage: 0,
34791
34859
  collateralPrice: 0,
34792
34860
  debtPrice: 0,
34793
- vesuLeverage: 0
34861
+ vesuLeverage: 0,
34862
+ debtAmountToBeRepaid: new Web3Number(0, 0)
34794
34863
  };
34795
34864
  }
34796
34865
  }
@@ -34810,37 +34879,52 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
34810
34879
  return [];
34811
34880
  }
34812
34881
  const usdcAmountInWallet = (await this.getUnusedBalance()).amount;
34813
- const usdcAmountOnExtendedAvailableForWithdrawal = parseFloat(
34814
- extendedHoldings.availableForWithdrawal
34882
+ const usdcAmountOnExtendedAvailableForTrade = parseFloat(
34883
+ extendedHoldings.availableForTrade
34884
+ );
34885
+ logger.info(
34886
+ `${_VesuExtendedMultiplierStrategy.name}::shouldMoveAssets calculating movements - Extended current: ${usdcAmountOnExtendedAvailableForTrade}, Wallet: ${usdcAmountInWallet.toNumber()}, Target Extended: ${extendedAmount.toNumber()}, Target Vesu: ${vesuAmount.toNumber()}`
34815
34887
  );
34816
- logger.info(`${_VesuExtendedMultiplierStrategy.name}::shouldMoveAssets calculating movements - Extended current: ${usdcAmountOnExtendedAvailableForWithdrawal}, Wallet: ${usdcAmountInWallet.toNumber()}, Target Extended: ${extendedAmount.toNumber()}, Target Vesu: ${vesuAmount.toNumber()}`);
34817
34888
  let totalExtendedWithdrawal = new Web3Number(0, USDC_TOKEN_DECIMALS);
34818
34889
  let totalExtendedDeposit = new Web3Number(0, USDC_TOKEN_DECIMALS);
34819
34890
  if (extendedAmount.isNegative() && extendedAmount.abs().greaterThan(extendedAdapter.minimumExtendedMovementAmount)) {
34820
- totalExtendedWithdrawal = totalExtendedWithdrawal.plus(extendedAmount.abs());
34891
+ totalExtendedWithdrawal = totalExtendedWithdrawal.plus(
34892
+ extendedAmount.abs()
34893
+ );
34821
34894
  }
34822
34895
  const extendedTargetAmount = extendedAmount.abs();
34823
- let projectedExtendedBalance = usdcAmountOnExtendedAvailableForWithdrawal;
34896
+ let projectedExtendedBalance = usdcAmountOnExtendedAvailableForTrade;
34824
34897
  if (extendedAmount.isNegative()) {
34825
34898
  projectedExtendedBalance = projectedExtendedBalance - extendedAmount.abs().toNumber();
34826
34899
  }
34827
- const extendedAmountDifference = extendedTargetAmount.minus(projectedExtendedBalance);
34900
+ const extendedAmountDifference = extendedTargetAmount.minus(
34901
+ projectedExtendedBalance
34902
+ );
34828
34903
  const extendedAmountDifferenceAbs = extendedAmountDifference.abs();
34829
34904
  if (extendedAmountDifference.lessThan(0)) {
34830
- totalExtendedWithdrawal = totalExtendedWithdrawal.plus(extendedAmountDifferenceAbs);
34905
+ totalExtendedWithdrawal = totalExtendedWithdrawal.plus(
34906
+ extendedAmountDifferenceAbs
34907
+ );
34831
34908
  } else if (extendedAmountDifference.greaterThan(0)) {
34832
- totalExtendedDeposit = totalExtendedDeposit.plus(extendedAmountDifference);
34909
+ totalExtendedDeposit = totalExtendedDeposit.plus(
34910
+ extendedAmountDifference
34911
+ );
34833
34912
  }
34834
34913
  const vesuTargetAmount = vesuAmount.abs();
34835
34914
  const projectedWalletBalance = usdcAmountInWallet.plus(totalExtendedWithdrawal).minus(totalExtendedDeposit);
34836
34915
  let vesuAmountDifference = vesuTargetAmount.minus(projectedWalletBalance);
34837
34916
  const vesuAmountDifferenceAbs = vesuAmountDifference.abs();
34838
- logger.info(`${_VesuExtendedMultiplierStrategy.name}::shouldMoveAssets calculated movements - Extended withdrawal: ${totalExtendedWithdrawal.toNumber()}, Extended deposit: ${totalExtendedDeposit.toNumber()}, Extended diff: ${extendedAmountDifference.toNumber()}, Projected wallet: ${projectedWalletBalance.toNumber()}, Vesu diff: ${vesuAmountDifference.toNumber()}`);
34839
- let calls = [];
34917
+ logger.info(
34918
+ `${_VesuExtendedMultiplierStrategy.name}::shouldMoveAssets calculated movements - Extended withdrawal: ${totalExtendedWithdrawal.toNumber()}, Extended deposit: ${totalExtendedDeposit.toNumber()}, Extended diff: ${extendedAmountDifference.toNumber()}, Projected wallet: ${projectedWalletBalance.toNumber()}, Vesu diff: ${vesuAmountDifference.toNumber()}`
34919
+ );
34840
34920
  let transactionResults = [];
34841
34921
  if (extendedAmount.isNegative() && extendedAmount.abs().greaterThan(extendedAdapter.minimumExtendedMovementAmount)) {
34842
34922
  try {
34843
- const { calls: extendedCalls, status: extendedStatus, transactionMetadata: extendedTransactionMetadata } = await this.moveAssets(
34923
+ const {
34924
+ calls: extendedCalls,
34925
+ status: extendedStatus,
34926
+ transactionMetadata: extendedTransactionMetadata
34927
+ } = await this.moveAssets(
34844
34928
  {
34845
34929
  to: Protocols.VAULT.name,
34846
34930
  from: Protocols.EXTENDED.name,
@@ -34860,16 +34944,44 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
34860
34944
  }
34861
34945
  });
34862
34946
  } else {
34863
- return [this.createTransactionResult([], false, { from: Protocols.EXTENDED.name, to: Protocols.VAULT.name, amount: extendedAmount.abs() }, "NONE", "INVESTMENT" /* INVESTMENT */)];
34947
+ return [
34948
+ this.createTransactionResult(
34949
+ [],
34950
+ false,
34951
+ {
34952
+ from: Protocols.EXTENDED.name,
34953
+ to: Protocols.VAULT.name,
34954
+ amount: extendedAmount.abs()
34955
+ },
34956
+ "NONE",
34957
+ "INVESTMENT" /* INVESTMENT */
34958
+ )
34959
+ ];
34864
34960
  }
34865
34961
  } catch (err) {
34866
34962
  logger.error(`Failed moving assets to vault: ${err}`);
34867
- return [this.createTransactionResult([], false, { from: Protocols.EXTENDED.name, to: Protocols.VAULT.name, amount: extendedAmount.abs() }, "NONE", "INVESTMENT" /* INVESTMENT */)];
34963
+ return [
34964
+ this.createTransactionResult(
34965
+ [],
34966
+ false,
34967
+ {
34968
+ from: Protocols.EXTENDED.name,
34969
+ to: Protocols.VAULT.name,
34970
+ amount: extendedAmount.abs()
34971
+ },
34972
+ "NONE",
34973
+ "INVESTMENT" /* INVESTMENT */
34974
+ )
34975
+ ];
34868
34976
  }
34869
34977
  }
34870
34978
  if (vesuAmount.isNegative() && vesuAmount.abs().greaterThan(vesuAdapter.minimumVesuMovementAmount)) {
34871
34979
  try {
34872
- const { calls: vesuCalls, status: vesuStatus, transactionMetadata: vesuTransactionMetadata } = await this.moveAssets(
34980
+ const {
34981
+ calls: vesuCalls,
34982
+ status: vesuStatus,
34983
+ transactionMetadata: vesuTransactionMetadata
34984
+ } = await this.moveAssets(
34873
34985
  {
34874
34986
  to: Protocols.EXTENDED.name,
34875
34987
  from: Protocols.VESU.name,
@@ -34880,7 +34992,19 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
34880
34992
  vesuAdapter
34881
34993
  );
34882
34994
  if (!vesuStatus) {
34883
- return [this.createTransactionResult([], false, { from: Protocols.VESU.name, to: Protocols.EXTENDED.name, amount: vesuAmount.abs() }, "NONE", "INVESTMENT" /* INVESTMENT */)];
34995
+ return [
34996
+ this.createTransactionResult(
34997
+ [],
34998
+ false,
34999
+ {
35000
+ from: Protocols.VESU.name,
35001
+ to: Protocols.EXTENDED.name,
35002
+ amount: vesuAmount.abs()
35003
+ },
35004
+ "NONE",
35005
+ "INVESTMENT" /* INVESTMENT */
35006
+ )
35007
+ ];
34884
35008
  }
34885
35009
  transactionResults.push({
34886
35010
  status: vesuStatus,
@@ -34891,14 +35015,34 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
34891
35015
  }
34892
35016
  });
34893
35017
  } catch (err) {
34894
- logger.error(`Failed moving assets to extended via vault allocator: ${err}`);
34895
- return [this.createTransactionResult([], false, { from: Protocols.VESU.name, to: Protocols.EXTENDED.name, amount: vesuAmount.abs() }, "NONE", "INVESTMENT" /* INVESTMENT */)];
35018
+ logger.error(
35019
+ `Failed moving assets to extended via vault allocator: ${err}`
35020
+ );
35021
+ return [
35022
+ this.createTransactionResult(
35023
+ [],
35024
+ false,
35025
+ {
35026
+ from: Protocols.VESU.name,
35027
+ to: Protocols.EXTENDED.name,
35028
+ amount: vesuAmount.abs()
35029
+ },
35030
+ "NONE",
35031
+ "INVESTMENT" /* INVESTMENT */
35032
+ )
35033
+ ];
34896
35034
  }
34897
35035
  }
34898
- if (extendedAmountDifferenceAbs.greaterThan(extendedAdapter.minimumExtendedMovementAmount)) {
35036
+ if (extendedAmountDifferenceAbs.greaterThan(
35037
+ extendedAdapter.minimumExtendedMovementAmount
35038
+ )) {
34899
35039
  if (extendedAmountDifference.greaterThan(0)) {
34900
35040
  try {
34901
- const { calls: extendedCalls, status: extendedStatus, transactionMetadata: extendedTransactionMetadata } = await this.moveAssets(
35041
+ const {
35042
+ calls: extendedCalls,
35043
+ status: extendedStatus,
35044
+ transactionMetadata: extendedTransactionMetadata
35045
+ } = await this.moveAssets(
34902
35046
  {
34903
35047
  to: Protocols.EXTENDED.name,
34904
35048
  from: Protocols.VAULT.name,
@@ -34915,16 +35059,46 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
34915
35059
  transactionMetadata: extendedTransactionMetadata
34916
35060
  });
34917
35061
  } else {
34918
- logger.error(`Failed to move assets to extended - operation returned false status`);
34919
- return [this.createTransactionResult([], false, { from: Protocols.VAULT.name, to: Protocols.EXTENDED.name, amount: extendedAmountDifference }, "NONE", "INVESTMENT" /* INVESTMENT */)];
35062
+ logger.error(
35063
+ `Failed to move assets to extended - operation returned false status`
35064
+ );
35065
+ return [
35066
+ this.createTransactionResult(
35067
+ [],
35068
+ false,
35069
+ {
35070
+ from: Protocols.VAULT.name,
35071
+ to: Protocols.EXTENDED.name,
35072
+ amount: extendedAmountDifference
35073
+ },
35074
+ "NONE",
35075
+ "INVESTMENT" /* INVESTMENT */
35076
+ )
35077
+ ];
34920
35078
  }
34921
35079
  } catch (err) {
34922
35080
  logger.error(`Failed moving assets to extended: ${err}`);
34923
- return [this.createTransactionResult([], false, { from: Protocols.VAULT.name, to: Protocols.EXTENDED.name, amount: extendedAmountDifference }, "NONE", "INVESTMENT" /* INVESTMENT */)];
35081
+ return [
35082
+ this.createTransactionResult(
35083
+ [],
35084
+ false,
35085
+ {
35086
+ from: Protocols.VAULT.name,
35087
+ to: Protocols.EXTENDED.name,
35088
+ amount: extendedAmountDifference
35089
+ },
35090
+ "NONE",
35091
+ "INVESTMENT" /* INVESTMENT */
35092
+ )
35093
+ ];
34924
35094
  }
34925
35095
  } else if (extendedAmountDifference.lessThan(0)) {
34926
35096
  try {
34927
- const { calls: extendedCalls, status: extendedStatus, transactionMetadata: extendedTransactionMetadata } = await this.moveAssets(
35097
+ const {
35098
+ calls: extendedCalls,
35099
+ status: extendedStatus,
35100
+ transactionMetadata: extendedTransactionMetadata
35101
+ } = await this.moveAssets(
34928
35102
  {
34929
35103
  to: Protocols.VAULT.name,
34930
35104
  from: Protocols.EXTENDED.name,
@@ -34944,23 +35118,55 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
34944
35118
  }
34945
35119
  });
34946
35120
  } else {
34947
- logger.error(`Failed to withdraw from extended - operation returned false status`);
34948
- return [this.createTransactionResult([], false, { from: Protocols.EXTENDED.name, to: Protocols.VAULT.name, amount: extendedAmountDifferenceAbs }, "NONE", "INVESTMENT" /* INVESTMENT */)];
35121
+ logger.error(
35122
+ `Failed to withdraw from extended - operation returned false status`
35123
+ );
35124
+ return [
35125
+ this.createTransactionResult(
35126
+ [],
35127
+ false,
35128
+ {
35129
+ from: Protocols.EXTENDED.name,
35130
+ to: Protocols.VAULT.name,
35131
+ amount: extendedAmountDifferenceAbs
35132
+ },
35133
+ "NONE",
35134
+ "INVESTMENT" /* INVESTMENT */
35135
+ )
35136
+ ];
34949
35137
  }
34950
35138
  } catch (err) {
34951
35139
  logger.error(`Failed moving assets from extended to vault: ${err}`);
34952
- return [this.createTransactionResult([], false, { from: Protocols.EXTENDED.name, to: Protocols.VAULT.name, amount: extendedAmountDifferenceAbs }, "NONE", "INVESTMENT" /* INVESTMENT */)];
35140
+ return [
35141
+ this.createTransactionResult(
35142
+ [],
35143
+ false,
35144
+ {
35145
+ from: Protocols.EXTENDED.name,
35146
+ to: Protocols.VAULT.name,
35147
+ amount: extendedAmountDifferenceAbs
35148
+ },
35149
+ "NONE",
35150
+ "INVESTMENT" /* INVESTMENT */
35151
+ )
35152
+ ];
34953
35153
  }
34954
35154
  }
34955
35155
  }
34956
- if (vesuAmountDifferenceAbs.greaterThan(vesuAdapter.minimumVesuMovementAmount)) {
35156
+ if (vesuAmountDifferenceAbs.greaterThan(
35157
+ vesuAdapter.minimumVesuMovementAmount
35158
+ )) {
34957
35159
  if (vesuAmountDifference.lessThanOrEqualTo(0)) {
34958
35160
  logger.warn(
34959
35161
  `Vesu amount difference is negative or zero: ${vesuAmountDifference.toNumber()}. Skipping operation.`
34960
35162
  );
34961
35163
  } else {
34962
35164
  try {
34963
- const { calls: vesuCalls, status: vesuStatus, transactionMetadata: vesuTransactionMetadata } = await this.moveAssets(
35165
+ const {
35166
+ calls: vesuCalls,
35167
+ status: vesuStatus,
35168
+ transactionMetadata: vesuTransactionMetadata
35169
+ } = await this.moveAssets(
34964
35170
  {
34965
35171
  to: Protocols.VAULT.name,
34966
35172
  from: Protocols.EXTENDED.name,
@@ -34971,8 +35177,22 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
34971
35177
  vesuAdapter
34972
35178
  );
34973
35179
  if (!vesuStatus) {
34974
- logger.error(`Failed to move assets to vesu - operation returned false status`);
34975
- return [this.createTransactionResult([], false, { from: Protocols.EXTENDED.name, to: Protocols.VAULT.name, amount: vesuAmountDifference }, "NONE", "INVESTMENT" /* INVESTMENT */)];
35180
+ logger.error(
35181
+ `Failed to move assets to vesu - operation returned false status`
35182
+ );
35183
+ return [
35184
+ this.createTransactionResult(
35185
+ [],
35186
+ false,
35187
+ {
35188
+ from: Protocols.EXTENDED.name,
35189
+ to: Protocols.VAULT.name,
35190
+ amount: vesuAmountDifference
35191
+ },
35192
+ "NONE",
35193
+ "INVESTMENT" /* INVESTMENT */
35194
+ )
35195
+ ];
34976
35196
  }
34977
35197
  transactionResults.push({
34978
35198
  status: vesuStatus,
@@ -34984,14 +35204,38 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
34984
35204
  });
34985
35205
  } catch (err) {
34986
35206
  logger.error(`Failed moving assets to vault: ${err}`);
34987
- return [this.createTransactionResult([], false, { from: Protocols.EXTENDED.name, to: Protocols.VAULT.name, amount: vesuAmountDifference }, "NONE", "INVESTMENT" /* INVESTMENT */)];
35207
+ return [
35208
+ this.createTransactionResult(
35209
+ [],
35210
+ false,
35211
+ {
35212
+ from: Protocols.EXTENDED.name,
35213
+ to: Protocols.VAULT.name,
35214
+ amount: vesuAmountDifference
35215
+ },
35216
+ "NONE",
35217
+ "INVESTMENT" /* INVESTMENT */
35218
+ )
35219
+ ];
34988
35220
  }
34989
35221
  }
34990
35222
  }
34991
35223
  return transactionResults;
34992
35224
  } catch (err) {
34993
35225
  logger.error(`Failed moving assets to vesu: ${err}`);
34994
- return [this.createTransactionResult([], false, { from: Protocols.EXTENDED.name, to: Protocols.VAULT.name, amount: new Web3Number(0, USDC_TOKEN_DECIMALS) }, "NONE", "INVESTMENT" /* INVESTMENT */)];
35226
+ return [
35227
+ this.createTransactionResult(
35228
+ [],
35229
+ false,
35230
+ {
35231
+ from: Protocols.EXTENDED.name,
35232
+ to: Protocols.VAULT.name,
35233
+ amount: new Web3Number(0, USDC_TOKEN_DECIMALS)
35234
+ },
35235
+ "NONE",
35236
+ "INVESTMENT" /* INVESTMENT */
35237
+ )
35238
+ ];
34995
35239
  }
34996
35240
  }
34997
35241
  /**
@@ -35012,43 +35256,56 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
35012
35256
  }
35013
35257
  };
35014
35258
  }
35015
- return { calls: [], status: false, transactionMetadata: { protocolFrom: "", protocolTo: "", transactionType: "DEPOSIT", usdAmount: "0", status: "FAILED", cycleType } };
35259
+ return {
35260
+ calls: [],
35261
+ status: false,
35262
+ transactionMetadata: {
35263
+ protocolFrom: "",
35264
+ protocolTo: "",
35265
+ transactionType: "DEPOSIT",
35266
+ usdAmount: "0",
35267
+ status: "FAILED",
35268
+ cycleType
35269
+ }
35270
+ };
35016
35271
  }
35272
+ /**
35273
+ * This method is used to move assets between protocols
35274
+ * @param params - The parameters for the move assets operation
35275
+ * @param extendedAdapter - The extended adapter
35276
+ * @param vesuAdapter - The vesu adapter
35277
+ * @returns The transaction result
35278
+ * If Extended amount is greater than amount of withdrawal from extended, then we need to open a long position
35279
+ * so that the amount of withdrawal from extended is fullfilled
35280
+ */
35017
35281
  async moveAssets(params, extendedAdapter, vesuAdapter) {
35018
35282
  try {
35019
35283
  if (params.amount.lessThanOrEqualTo(0)) {
35020
35284
  logger.error(
35021
35285
  `Invalid amount for moveAssets: ${params.amount.toNumber()}. Amount must be positive.`
35022
35286
  );
35023
- return this.createTransactionResult([], false, params, "NONE", params.cycleType);
35024
- }
35025
- const amountAbs = params.amount.abs();
35026
- if (params.from === Protocols.EXTENDED.name || params.to === Protocols.EXTENDED.name) {
35027
- if (amountAbs.lessThanOrEqualTo(extendedAdapter.minimumExtendedMovementAmount)) {
35028
- logger.warn(
35029
- `Amount ${amountAbs.toNumber()} is below minimum Extended movement amount ${extendedAdapter.minimumExtendedMovementAmount}. Skipping operation.`
35030
- );
35031
- return this.createTransactionResult([], false, params, "NONE", params.cycleType);
35032
- }
35033
- }
35034
- if (params.from === Protocols.VESU.name || params.to === Protocols.VESU.name) {
35035
- if (amountAbs.lessThanOrEqualTo(vesuAdapter.minimumVesuMovementAmount)) {
35036
- logger.warn(
35037
- `Amount ${amountAbs.toNumber()} is below minimum Vesu movement amount ${vesuAdapter.minimumVesuMovementAmount}. Skipping operation.`
35038
- );
35039
- return this.createTransactionResult([], false, params, "NONE", params.cycleType);
35040
- }
35287
+ return this.createTransactionResult(
35288
+ [],
35289
+ false,
35290
+ params,
35291
+ "NONE",
35292
+ params.cycleType
35293
+ );
35041
35294
  }
35042
35295
  const avnuAdapter = await this.getAvnuAdapter();
35043
35296
  if (!avnuAdapter) {
35044
35297
  logger.error(`avnu adapter not found: ${avnuAdapter}`);
35045
- return this.createTransactionResult([], false, params, "NONE", params.cycleType);
35298
+ return this.createTransactionResult(
35299
+ [],
35300
+ false,
35301
+ params,
35302
+ "NONE",
35303
+ params.cycleType
35304
+ );
35046
35305
  }
35047
35306
  logger.info(`moveAssets params, ${JSON.stringify(params)}`);
35048
35307
  const collateralToken = vesuAdapter.config.supportedPositions[0].asset;
35049
- const {
35050
- collateralPrice
35051
- } = await this.getAssetPrices();
35308
+ const { collateralPrice } = await this.getAssetPrices();
35052
35309
  if (params.to === Protocols.EXTENDED.name && params.from === Protocols.VAULT.name) {
35053
35310
  const proofsInfo = extendedAdapter.getProofs(
35054
35311
  true,
@@ -35061,23 +35318,53 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
35061
35318
  await proofsInfo.callConstructor({ amount: params.amount })
35062
35319
  );
35063
35320
  calls.push(call);
35064
- return this.createTransactionResult(calls, true, params, "DEPOSIT", params.cycleType);
35321
+ return this.createTransactionResult(
35322
+ calls,
35323
+ true,
35324
+ params,
35325
+ "DEPOSIT",
35326
+ params.cycleType
35327
+ );
35065
35328
  } else if (params.to === Protocols.VAULT.name && params.from === Protocols.EXTENDED.name) {
35066
35329
  const extendedLeverage = calculateExtendedLevergae();
35067
35330
  const extendedHoldings = await extendedAdapter.getExtendedDepositAmount();
35068
35331
  if (!extendedHoldings) {
35069
35332
  logger.error(`error getting extended holdings: ${extendedHoldings}`);
35070
- return this.createTransactionResult([], false, params, "NONE", params.cycleType);
35333
+ return this.createTransactionResult(
35334
+ [],
35335
+ false,
35336
+ params,
35337
+ "NONE",
35338
+ params.cycleType
35339
+ );
35071
35340
  }
35072
35341
  const extendedHoldingAmount = new Web3Number(
35073
35342
  extendedHoldings.availableForWithdrawal,
35074
35343
  USDC_TOKEN_DECIMALS
35075
35344
  );
35076
- logger.info(`${_VesuExtendedMultiplierStrategy.name}::moveAssets extendedHoldingAmount: ${extendedHoldingAmount.toNumber()}`);
35345
+ logger.info(
35346
+ `${_VesuExtendedMultiplierStrategy.name}::moveAssets extendedHoldingAmount: ${extendedHoldingAmount.toNumber()}`
35347
+ );
35077
35348
  if (params.amount.abs().greaterThan(extendedHoldingAmount)) {
35078
- const leftAmountAfterWithdrawalAmountInAccount = params.amount.abs().minus(extendedHoldingAmount);
35079
- logger.info(`${_VesuExtendedMultiplierStrategy.name}::moveAssets leftAmountAfterWithdrawalAmountInAccount: ${leftAmountAfterWithdrawalAmountInAccount.toNumber()}`);
35080
- const btcAmount = leftAmountAfterWithdrawalAmountInAccount.dividedBy(collateralPrice.price);
35349
+ const leftAmountAfterWithdrawalAmountInAccount = new Web3Number(
35350
+ Math.ceil(
35351
+ params.amount.abs().minus(extendedHoldingAmount).toNumber()
35352
+ ),
35353
+ USDC_TOKEN_DECIMALS
35354
+ );
35355
+ logger.info(
35356
+ `${_VesuExtendedMultiplierStrategy.name}::moveAssets leftAmountAfterWithdrawalAmountInAccount: ${leftAmountAfterWithdrawalAmountInAccount.toNumber()}`
35357
+ );
35358
+ let priceOfBTC;
35359
+ const { ask, bid, status } = await extendedAdapter.fetchOrderBookBTCUSDC();
35360
+ const price = ask.plus(bid).dividedBy(2);
35361
+ if (status) {
35362
+ priceOfBTC = price;
35363
+ } else {
35364
+ logger.error(`error fetching order book btc usdc: ${status}`);
35365
+ priceOfBTC = collateralPrice.price;
35366
+ }
35367
+ const btcAmount = leftAmountAfterWithdrawalAmountInAccount.dividedBy(priceOfBTC);
35081
35368
  const openLongPosition = btcAmount.multipliedBy(3).greaterThan(MINIMUM_EXTENDED_POSITION_SIZE) ? await extendedAdapter.createOrder(
35082
35369
  extendedLeverage.toString(),
35083
35370
  btcAmount.toNumber(),
@@ -35092,38 +35379,95 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
35092
35379
  logger.error(`error opening long position: ${openLongPosition}`);
35093
35380
  }
35094
35381
  const updatedHoldings = await extendedAdapter.getExtendedDepositAmount();
35095
- if (!updatedHoldings || new Web3Number(updatedHoldings.availableForWithdrawal, USDC_TOKEN_DECIMALS).lessThan(params.amount.abs())) {
35096
- logger.error(`Insufficient balance after opening position. Available: ${updatedHoldings?.availableForWithdrawal}, Needed: ${params.amount.abs()}`);
35097
- return this.createTransactionResult([], false, params, "NONE", params.cycleType);
35382
+ if (!updatedHoldings || new Web3Number(
35383
+ updatedHoldings.availableForWithdrawal,
35384
+ USDC_TOKEN_DECIMALS
35385
+ ).lessThan(params.amount.abs())) {
35386
+ logger.error(
35387
+ `Insufficient balance after opening position. Available: ${updatedHoldings?.availableForWithdrawal}, Needed: ${params.amount.abs()}`
35388
+ );
35389
+ return this.createTransactionResult(
35390
+ [],
35391
+ false,
35392
+ params,
35393
+ "NONE",
35394
+ params.cycleType
35395
+ );
35098
35396
  }
35099
35397
  }
35100
35398
  const {
35101
35399
  status: withdrawalFromExtendedStatus,
35102
35400
  receivedTxnHash: withdrawalFromExtendedTxnHash
35103
35401
  } = await extendedAdapter.withdrawFromExtended(params.amount);
35104
- logger.info(`withdrawalFromExtendedStatus: ${withdrawalFromExtendedStatus}, withdrawalFromExtendedTxnHash: ${withdrawalFromExtendedTxnHash}`);
35402
+ logger.info(
35403
+ `withdrawalFromExtendedStatus: ${withdrawalFromExtendedStatus}, withdrawalFromExtendedTxnHash: ${withdrawalFromExtendedTxnHash}`
35404
+ );
35105
35405
  if (withdrawalFromExtendedStatus && withdrawalFromExtendedTxnHash) {
35106
35406
  const extendedHoldings2 = await extendedAdapter.getExtendedDepositAmount();
35107
- logger.info(`extendedHoldings after withdrawal ${extendedHoldings2?.availableForWithdrawal}`);
35407
+ logger.info(
35408
+ `extendedHoldings after withdrawal ${extendedHoldings2?.availableForWithdrawal}`
35409
+ );
35108
35410
  await new Promise((resolve) => setTimeout(resolve, 5e3));
35109
- const { calls, status } = await this.moveAssetsToVaultAllocator(params.amount, extendedAdapter);
35411
+ const { calls, status } = await this.moveAssetsToVaultAllocator(
35412
+ params.amount,
35413
+ extendedAdapter
35414
+ );
35110
35415
  if (calls.length > 0 && status) {
35111
- return this.createTransactionResult(calls, true, params, "WITHDRAWAL", params.cycleType);
35416
+ return this.createTransactionResult(
35417
+ calls,
35418
+ true,
35419
+ params,
35420
+ "WITHDRAWAL",
35421
+ params.cycleType
35422
+ );
35112
35423
  } else {
35113
- return this.createTransactionResult([], true, params, "WITHDRAWAL", params.cycleType);
35424
+ return this.createTransactionResult(
35425
+ [],
35426
+ true,
35427
+ params,
35428
+ "WITHDRAWAL",
35429
+ params.cycleType
35430
+ );
35114
35431
  }
35115
35432
  } else if (withdrawalFromExtendedStatus && !withdrawalFromExtendedTxnHash) {
35116
- logger.error("withdrawal from extended successful, but funds didn't get transferred to the wallet");
35117
- return this.createTransactionResult([], true, params, "WITHDRAWAL", params.cycleType);
35433
+ logger.error(
35434
+ "withdrawal from extended successful, but funds didn't get transferred to the wallet"
35435
+ );
35436
+ return this.createTransactionResult(
35437
+ [],
35438
+ true,
35439
+ params,
35440
+ "WITHDRAWAL",
35441
+ params.cycleType
35442
+ );
35118
35443
  } else {
35119
35444
  logger.error("withdrawal from extended failed");
35120
- return this.createTransactionResult([], false, params, "NONE", params.cycleType);
35445
+ return this.createTransactionResult(
35446
+ [],
35447
+ false,
35448
+ params,
35449
+ "NONE",
35450
+ params.cycleType
35451
+ );
35121
35452
  }
35122
35453
  } else if (params.to === Protocols.VAULT.name && params.from === Protocols.VESU.name) {
35123
- const isPriceDifferenceBetweenAvnuAndExtended = await this.checkPriceDifferenceBetweenAvnuAndExtended(extendedAdapter, vesuAdapter, avnuAdapter, "close" /* CLOSE */);
35454
+ const isPriceDifferenceBetweenAvnuAndExtended = await this.checkPriceDifferenceBetweenAvnuAndExtended(
35455
+ extendedAdapter,
35456
+ vesuAdapter,
35457
+ avnuAdapter,
35458
+ "close" /* CLOSE */
35459
+ );
35124
35460
  if (!isPriceDifferenceBetweenAvnuAndExtended) {
35125
- logger.warn(`price difference between avnu and extended doesn't fit the range for close position, ${avnuAdapter.config.maximumExtendedPriceDifferenceForSwapClosing}`);
35126
- return this.createTransactionResult([], false, params, "NONE", params.cycleType);
35461
+ logger.warn(
35462
+ `price difference between avnu and extended doesn't fit the range for close position, ${avnuAdapter.config.maximumExtendedPriceDifferenceForSwapClosing}`
35463
+ );
35464
+ return this.createTransactionResult(
35465
+ [],
35466
+ false,
35467
+ params,
35468
+ "NONE",
35469
+ params.cycleType
35470
+ );
35127
35471
  }
35128
35472
  const vesuAmountInBTC = new Web3Number(
35129
35473
  params.amount.dividedBy(collateralPrice.price).toFixed(WBTC_TOKEN_DECIMALS),
@@ -35137,19 +35481,41 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
35137
35481
  await proofsInfo.callConstructor({ amount: vesuAmountInBTC })
35138
35482
  );
35139
35483
  calls.push(call);
35140
- const swapProofsInfo = avnuAdapter.getProofs(false, this.getMerkleTree());
35484
+ const swapProofsInfo = avnuAdapter.getProofs(
35485
+ false,
35486
+ this.getMerkleTree()
35487
+ );
35141
35488
  const swapProofGroups = swapProofsInfo.proofs;
35142
35489
  const swapCall = this.getManageCall(
35143
35490
  swapProofGroups,
35144
35491
  await swapProofsInfo.callConstructor({ amount: vesuAmountInBTC })
35145
35492
  );
35146
35493
  calls.push(swapCall);
35147
- return this.createTransactionResult(calls, true, params, "WITHDRAWAL", params.cycleType);
35494
+ return this.createTransactionResult(
35495
+ calls,
35496
+ true,
35497
+ params,
35498
+ "WITHDRAWAL",
35499
+ params.cycleType
35500
+ );
35148
35501
  } else if (params.to === Protocols.EXTENDED.name && params.from === Protocols.VESU.name) {
35149
- const isPriceDifferenceBetweenAvnuAndExtended = await this.checkPriceDifferenceBetweenAvnuAndExtended(extendedAdapter, vesuAdapter, avnuAdapter, "close" /* CLOSE */);
35502
+ const isPriceDifferenceBetweenAvnuAndExtended = await this.checkPriceDifferenceBetweenAvnuAndExtended(
35503
+ extendedAdapter,
35504
+ vesuAdapter,
35505
+ avnuAdapter,
35506
+ "close" /* CLOSE */
35507
+ );
35150
35508
  if (!isPriceDifferenceBetweenAvnuAndExtended) {
35151
- logger.warn(`price difference between avnu and extended doesn't fit the range for close position, ${avnuAdapter.config.maximumExtendedPriceDifferenceForSwapClosing}`);
35152
- return this.createTransactionResult([], false, params, "NONE", params.cycleType);
35509
+ logger.warn(
35510
+ `price difference between avnu and extended doesn't fit the range for close position, ${avnuAdapter.config.maximumExtendedPriceDifferenceForSwapClosing}`
35511
+ );
35512
+ return this.createTransactionResult(
35513
+ [],
35514
+ false,
35515
+ params,
35516
+ "NONE",
35517
+ params.cycleType
35518
+ );
35153
35519
  }
35154
35520
  const vesuAmountInBTC = new Web3Number(
35155
35521
  params.amount.dividedBy(collateralPrice.price).toNumber(),
@@ -35163,7 +35529,10 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
35163
35529
  await proofsInfo.callConstructor({ amount: vesuAmountInBTC })
35164
35530
  );
35165
35531
  calls.push(call);
35166
- const swapProofsInfo = avnuAdapter.getProofs(false, this.getMerkleTree());
35532
+ const swapProofsInfo = avnuAdapter.getProofs(
35533
+ false,
35534
+ this.getMerkleTree()
35535
+ );
35167
35536
  const swapProofGroups = swapProofsInfo.proofs;
35168
35537
  const swapCall = this.getManageCall(
35169
35538
  swapProofGroups,
@@ -35180,21 +35549,61 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
35180
35549
  await proofsInfoDeposit.callConstructor({ amount: params.amount })
35181
35550
  );
35182
35551
  calls.push(callDeposit);
35183
- return this.createTransactionResult(calls, true, params, "DEPOSIT", params.cycleType);
35552
+ return this.createTransactionResult(
35553
+ calls,
35554
+ true,
35555
+ params,
35556
+ "DEPOSIT",
35557
+ params.cycleType
35558
+ );
35184
35559
  }
35185
- logger.error(`Unsupported assets movement: ${params.from} to ${params.to}`);
35186
- return this.createTransactionResult([], false, params, "NONE", params.cycleType);
35560
+ logger.error(
35561
+ `Unsupported assets movement: ${params.from} to ${params.to}`
35562
+ );
35563
+ return this.createTransactionResult(
35564
+ [],
35565
+ false,
35566
+ params,
35567
+ "NONE",
35568
+ params.cycleType
35569
+ );
35187
35570
  } catch (err) {
35188
35571
  logger.error(`error moving assets: ${err}`);
35189
- return this.createTransactionResult([], false, params, "NONE", params.cycleType);
35572
+ return this.createTransactionResult(
35573
+ [],
35574
+ false,
35575
+ params,
35576
+ "NONE",
35577
+ params.cycleType
35578
+ );
35190
35579
  }
35191
35580
  }
35192
35581
  async handleDeposit() {
35193
35582
  try {
35194
- return this.createTransactionResult([], false, { from: Protocols.VAULT.name, to: Protocols.VAULT.name, amount: new Web3Number(0, 0) }, "NONE", "INVESTMENT" /* INVESTMENT */);
35583
+ return this.createTransactionResult(
35584
+ [],
35585
+ false,
35586
+ {
35587
+ from: Protocols.VAULT.name,
35588
+ to: Protocols.VAULT.name,
35589
+ amount: new Web3Number(0, 0)
35590
+ },
35591
+ "NONE",
35592
+ "INVESTMENT" /* INVESTMENT */
35593
+ );
35195
35594
  } catch (err) {
35196
35595
  logger.error(`error handling deposit: ${err}`);
35197
- return this.createTransactionResult([], false, { from: Protocols.VAULT.name, to: Protocols.VAULT.name, amount: new Web3Number(0, 0) }, "NONE", "INVESTMENT" /* INVESTMENT */);
35596
+ return this.createTransactionResult(
35597
+ [],
35598
+ false,
35599
+ {
35600
+ from: Protocols.VAULT.name,
35601
+ to: Protocols.VAULT.name,
35602
+ amount: new Web3Number(0, 0)
35603
+ },
35604
+ "NONE",
35605
+ "INVESTMENT" /* INVESTMENT */
35606
+ );
35198
35607
  }
35199
35608
  }
35200
35609
  /**
@@ -35206,32 +35615,42 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
35206
35615
  * @returns true if the price difference is within the acceptable range, false otherwise
35207
35616
  */
35208
35617
  async checkPriceDifferenceBetweenAvnuAndExtended(extendedAdapter, vesuAdapter, avnuAdapter, positionType) {
35209
- const {
35210
- ask,
35211
- bid
35212
- } = await extendedAdapter.fetchOrderBookBTCUSDC();
35618
+ const { ask, bid } = await extendedAdapter.fetchOrderBookBTCUSDC();
35213
35619
  const price = ask.plus(bid).dividedBy(2);
35214
35620
  const btcToken = vesuAdapter.config.supportedPositions[0].asset;
35215
- const btcPriceAvnu = await avnuAdapter.getPriceOfToken(btcToken.address.toString());
35621
+ const btcPriceAvnu = await avnuAdapter.getPriceOfToken(
35622
+ btcToken.address.toString()
35623
+ );
35216
35624
  if (!btcPriceAvnu) {
35217
35625
  logger.error(`error getting btc price avnu: ${btcPriceAvnu}`);
35218
35626
  return false;
35219
35627
  }
35220
35628
  logger.info(`price: ${price}`);
35221
35629
  logger.info(`btcPriceAvnu: ${btcPriceAvnu}`);
35222
- const priceDifference = new Web3Number(price.minus(btcPriceAvnu).toFixed(2), 0);
35630
+ const priceDifference = new Web3Number(
35631
+ price.minus(btcPriceAvnu).toFixed(2),
35632
+ 0
35633
+ );
35223
35634
  logger.info(`priceDifference: ${priceDifference}`);
35224
35635
  if (priceDifference.isNegative()) {
35225
35636
  return false;
35226
35637
  }
35227
35638
  if (positionType === "open" /* OPEN */) {
35228
- logger.info(`price difference between avnu and extended for open position: ${priceDifference.toNumber()}, minimumExtendedPriceDifferenceForSwapOpen: ${avnuAdapter.config.minimumExtendedPriceDifferenceForSwapOpen}`);
35229
- const result = priceDifference.greaterThanOrEqualTo(avnuAdapter.config.minimumExtendedPriceDifferenceForSwapOpen);
35639
+ logger.info(
35640
+ `price difference between avnu and extended for open position: ${priceDifference.toNumber()}, minimumExtendedPriceDifferenceForSwapOpen: ${avnuAdapter.config.minimumExtendedPriceDifferenceForSwapOpen}`
35641
+ );
35642
+ const result = priceDifference.greaterThanOrEqualTo(
35643
+ avnuAdapter.config.minimumExtendedPriceDifferenceForSwapOpen
35644
+ );
35230
35645
  logger.info(`result: ${result}`);
35231
35646
  return result;
35232
35647
  } else {
35233
- logger.info(`price difference between avnu and extended for close position: ${priceDifference.toNumber()}, maximumExtendedPriceDifferenceForSwapClosing: ${avnuAdapter.config.maximumExtendedPriceDifferenceForSwapClosing}`);
35234
- const result = priceDifference.lessThanOrEqualTo(avnuAdapter.config.maximumExtendedPriceDifferenceForSwapClosing);
35648
+ logger.info(
35649
+ `price difference between avnu and extended for close position: ${priceDifference.toNumber()}, maximumExtendedPriceDifferenceForSwapClosing: ${avnuAdapter.config.maximumExtendedPriceDifferenceForSwapClosing}`
35650
+ );
35651
+ const result = priceDifference.lessThanOrEqualTo(
35652
+ avnuAdapter.config.maximumExtendedPriceDifferenceForSwapClosing
35653
+ );
35235
35654
  logger.info(`result: ${result}`);
35236
35655
  return result;
35237
35656
  }
@@ -35253,7 +35672,19 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
35253
35672
  amount: usdcBalanceVaultAllocator.amount
35254
35673
  });
35255
35674
  calls.push(withdrawCall2);
35256
- return [this.createTransactionResult(calls, true, { from: Protocols.VAULT.name, to: Protocols.NONE.name, amount }, "WITHDRAWAL", "WITHDRAWAL" /* WITHDRAWAL */)];
35675
+ return [
35676
+ this.createTransactionResult(
35677
+ calls,
35678
+ true,
35679
+ {
35680
+ from: Protocols.VAULT.name,
35681
+ to: Protocols.NONE.name,
35682
+ amount
35683
+ },
35684
+ "WITHDRAWAL",
35685
+ "WITHDRAWAL" /* WITHDRAWAL */
35686
+ )
35687
+ ];
35257
35688
  }
35258
35689
  const vesuAdapter = await this.getVesuAdapter();
35259
35690
  const extendedAdapter = await this.getExtendedAdapter();
@@ -35262,18 +35693,40 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
35262
35693
  logger.error(
35263
35694
  `vesu or extended adapter not found: vesuAdapter=${vesuAdapter}, extendedAdapter=${extendedAdapter}`
35264
35695
  );
35265
- return [this.createTransactionResult(calls, status, { from: Protocols.VAULT.name, to: Protocols.NONE.name, amount }, "NONE", "WITHDRAWAL" /* WITHDRAWAL */)];
35696
+ return [
35697
+ this.createTransactionResult(
35698
+ calls,
35699
+ status,
35700
+ {
35701
+ from: Protocols.VAULT.name,
35702
+ to: Protocols.NONE.name,
35703
+ amount
35704
+ },
35705
+ "NONE",
35706
+ "WITHDRAWAL" /* WITHDRAWAL */
35707
+ )
35708
+ ];
35266
35709
  }
35267
35710
  let transactionResults = [];
35268
35711
  const { collateralTokenAmount } = await vesuAdapter.vesuAdapter.getAssetPrices();
35269
- const {
35270
- collateralPrice
35271
- } = await this.getAssetPrices();
35712
+ const { collateralPrice } = await this.getAssetPrices();
35272
35713
  const extendedPositon = await extendedAdapter.getAllOpenPositions();
35273
35714
  if (!extendedPositon) {
35274
35715
  status = false;
35275
35716
  logger.error("error getting extended position", extendedPositon);
35276
- return [this.createTransactionResult(calls, status, { from: Protocols.VAULT.name, to: Protocols.NONE.name, amount }, "NONE", "WITHDRAWAL" /* WITHDRAWAL */)];
35717
+ return [
35718
+ this.createTransactionResult(
35719
+ calls,
35720
+ status,
35721
+ {
35722
+ from: Protocols.VAULT.name,
35723
+ to: Protocols.NONE.name,
35724
+ amount
35725
+ },
35726
+ "NONE",
35727
+ "WITHDRAWAL" /* WITHDRAWAL */
35728
+ )
35729
+ ];
35277
35730
  }
35278
35731
  const amountDistributionForWithdrawal = await calculateAmountDistributionForWithdrawal(
35279
35732
  usdcBalanceDifference,
@@ -35286,11 +35739,27 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
35286
35739
  logger.error(
35287
35740
  `error calculating amount distribution for withdrawal: ${amountDistributionForWithdrawal}`
35288
35741
  );
35289
- return [this.createTransactionResult(calls, status, { from: Protocols.VAULT.name, to: Protocols.NONE.name, amount }, "NONE", "WITHDRAWAL" /* WITHDRAWAL */)];
35742
+ return [
35743
+ this.createTransactionResult(
35744
+ calls,
35745
+ status,
35746
+ {
35747
+ from: Protocols.VAULT.name,
35748
+ to: Protocols.NONE.name,
35749
+ amount
35750
+ },
35751
+ "NONE",
35752
+ "WITHDRAWAL" /* WITHDRAWAL */
35753
+ )
35754
+ ];
35290
35755
  }
35291
35756
  const { vesu_amount, extended_amount } = amountDistributionForWithdrawal;
35292
35757
  if (status && vesu_amount.greaterThan(0)) {
35293
- const { calls: vesuCalls, status: vesuStatus, transactionMetadata: vesuTransactionMetadata } = await this.moveAssets(
35758
+ const {
35759
+ calls: vesuCalls,
35760
+ status: vesuStatus,
35761
+ transactionMetadata: vesuTransactionMetadata
35762
+ } = await this.moveAssets(
35294
35763
  {
35295
35764
  amount: vesu_amount,
35296
35765
  from: Protocols.VESU.name,
@@ -35308,7 +35777,11 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
35308
35777
  });
35309
35778
  }
35310
35779
  if (status && extended_amount.greaterThan(0)) {
35311
- const { calls: extendedCalls, status: extendedStatus, transactionMetadata: extendedTransactionMetadata } = await this.moveAssets(
35780
+ const {
35781
+ calls: extendedCalls,
35782
+ status: extendedStatus,
35783
+ transactionMetadata: extendedTransactionMetadata
35784
+ } = await this.moveAssets(
35312
35785
  {
35313
35786
  amount: extended_amount,
35314
35787
  from: Protocols.EXTENDED.name,
@@ -35326,8 +35799,22 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
35326
35799
  transactionMetadata: extendedTransactionMetadata
35327
35800
  });
35328
35801
  } else {
35329
- logger.error("error moving assets to vault: extendedStatus: ${extendedStatus}");
35330
- return [this.createTransactionResult([], status, { from: Protocols.VAULT.name, to: Protocols.NONE.name, amount }, "NONE", "WITHDRAWAL" /* WITHDRAWAL */)];
35802
+ logger.error(
35803
+ "error moving assets to vault: extendedStatus: ${extendedStatus}"
35804
+ );
35805
+ return [
35806
+ this.createTransactionResult(
35807
+ [],
35808
+ status,
35809
+ {
35810
+ from: Protocols.VAULT.name,
35811
+ to: Protocols.NONE.name,
35812
+ amount
35813
+ },
35814
+ "NONE",
35815
+ "WITHDRAWAL" /* WITHDRAWAL */
35816
+ )
35817
+ ];
35331
35818
  }
35332
35819
  }
35333
35820
  const withdrawCall = await this.getBringLiquidityCall({
@@ -35349,7 +35836,19 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
35349
35836
  return transactionResults;
35350
35837
  } catch (err) {
35351
35838
  logger.error(`error handling withdrawal: ${err}`);
35352
- return [this.createTransactionResult([], false, { from: Protocols.VAULT.name, to: Protocols.NONE.name, amount }, "NONE", "WITHDRAWAL" /* WITHDRAWAL */)];
35839
+ return [
35840
+ this.createTransactionResult(
35841
+ [],
35842
+ false,
35843
+ {
35844
+ from: Protocols.VAULT.name,
35845
+ to: Protocols.NONE.name,
35846
+ amount
35847
+ },
35848
+ "NONE",
35849
+ "WITHDRAWAL" /* WITHDRAWAL */
35850
+ )
35851
+ ];
35353
35852
  }
35354
35853
  }
35355
35854
  async getAUM() {
@@ -35401,8 +35900,12 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
35401
35900
  const txnsToBeExecuted = txnData.filter((txn) => {
35402
35901
  return txn.transactionMetadata.transactionType !== "NONE" && txn.transactionMetadata.protocolFrom !== "" && txn.transactionMetadata.protocolTo !== "";
35403
35902
  });
35404
- const callsToBeExecutedFinal = txnsToBeExecuted.flatMap((txn) => txn.calls);
35405
- const txnMetadata = txnsToBeExecuted.map((txn) => txn.transactionMetadata);
35903
+ const callsToBeExecutedFinal = txnsToBeExecuted.flatMap(
35904
+ (txn) => txn.calls
35905
+ );
35906
+ const txnMetadata = txnsToBeExecuted.map(
35907
+ (txn) => txn.transactionMetadata
35908
+ );
35406
35909
  return { callsToBeExecutedFinal, txnMetadata };
35407
35910
  } catch (err) {
35408
35911
  logger.error(`error processing transaction data from SDK: ${err}`);
@@ -35432,23 +35935,42 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
35432
35935
  if (!vesuAdapter || !extendedAdapter) {
35433
35936
  return new Web3Number(0, 0);
35434
35937
  }
35435
- const extendedFundingRate = new Web3Number((await extendedAdapter.getNetAPY()).toFixed(4), 0);
35938
+ const extendedFundingRate = new Web3Number(
35939
+ (await extendedAdapter.getNetAPY()).toFixed(4),
35940
+ 0
35941
+ );
35436
35942
  const extendedPositions = await extendedAdapter.getAllOpenPositions();
35437
35943
  if (!extendedPositions || extendedPositions.length === 0) {
35438
35944
  logger.info(`no extended positions found`);
35439
35945
  return new Web3Number(0, 0);
35440
35946
  }
35441
- const extendePositionSizeUSD = new Web3Number(extendedPositions[0].value || 0, 0);
35947
+ const extendePositionSizeUSD = new Web3Number(
35948
+ extendedPositions[0].value || 0,
35949
+ 0
35950
+ );
35442
35951
  const vesuPositions = await vesuAdapter.getPositions();
35443
35952
  const vesuSupplyApy = vesuPositions[0].apy.apy;
35444
- const vesuCollateralSizeUSD = new Web3Number(vesuPositions[0].usdValue.toFixed(USDC_TOKEN_DECIMALS), USDC_TOKEN_DECIMALS);
35445
- const vesuDebtSizeUSD = new Web3Number(vesuPositions[1].usdValue.toFixed(USDC_TOKEN_DECIMALS), USDC_TOKEN_DECIMALS);
35953
+ const vesuCollateralSizeUSD = new Web3Number(
35954
+ vesuPositions[0].usdValue.toFixed(USDC_TOKEN_DECIMALS),
35955
+ USDC_TOKEN_DECIMALS
35956
+ );
35957
+ const vesuDebtSizeUSD = new Web3Number(
35958
+ vesuPositions[1].usdValue.toFixed(USDC_TOKEN_DECIMALS),
35959
+ USDC_TOKEN_DECIMALS
35960
+ );
35446
35961
  const num1 = extendePositionSizeUSD.multipliedBy(extendedFundingRate);
35447
35962
  const num22 = vesuCollateralSizeUSD.multipliedBy(vesuSupplyApy);
35448
35963
  const num32 = vesuDebtSizeUSD.abs();
35449
35964
  const maxBorrowApy = num1.plus(num22).minus(0.1).dividedBy(num32);
35450
- const vesuMaxBorrowableAmount = await vesuAdapter.vesuAdapter.getMaxBorrowableByInterestRate(this.config, vesuAdapter.config.debt, maxBorrowApy.toNumber());
35451
- return new Web3Number(vesuMaxBorrowableAmount.toFixed(USDC_TOKEN_DECIMALS), USDC_TOKEN_DECIMALS);
35965
+ const vesuMaxBorrowableAmount = await vesuAdapter.vesuAdapter.getMaxBorrowableByInterestRate(
35966
+ this.config,
35967
+ vesuAdapter.config.debt,
35968
+ maxBorrowApy.toNumber()
35969
+ );
35970
+ return new Web3Number(
35971
+ vesuMaxBorrowableAmount.toFixed(USDC_TOKEN_DECIMALS),
35972
+ USDC_TOKEN_DECIMALS
35973
+ );
35452
35974
  }
35453
35975
  async getVesuHealthFactors() {
35454
35976
  const vesuAdapter = await this.getVesuAdapter();
@@ -35457,18 +35979,33 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
35457
35979
  return [0, 0];
35458
35980
  }
35459
35981
  const vesuPositions = await vesuAdapter.getPositions();
35460
- const vesuCollateralSizeUSD = new Web3Number(vesuPositions[0].usdValue.toFixed(USDC_TOKEN_DECIMALS), 0);
35461
- const vesuDebtSizeUSD = new Web3Number(vesuPositions[1].usdValue.toFixed(USDC_TOKEN_DECIMALS), 0);
35982
+ const vesuCollateralSizeUSD = new Web3Number(
35983
+ vesuPositions[0].usdValue.toFixed(USDC_TOKEN_DECIMALS),
35984
+ 0
35985
+ );
35986
+ const vesuDebtSizeUSD = new Web3Number(
35987
+ vesuPositions[1].usdValue.toFixed(USDC_TOKEN_DECIMALS),
35988
+ 0
35989
+ );
35462
35990
  const actualLtv = vesuDebtSizeUSD.dividedBy(vesuCollateralSizeUSD).abs();
35463
35991
  logger.info(`actualLtv: ${actualLtv.toNumber()}`);
35464
- const maxLtv = new Web3Number(await vesuAdapter.vesuAdapter.getLTVConfig(this.config), 4);
35465
- const healthFactor = new Web3Number(maxLtv.dividedBy(actualLtv).toFixed(4), 4);
35992
+ const maxLtv = new Web3Number(
35993
+ await vesuAdapter.vesuAdapter.getLTVConfig(this.config),
35994
+ 4
35995
+ );
35996
+ const healthFactor = new Web3Number(
35997
+ maxLtv.dividedBy(actualLtv).toFixed(4),
35998
+ 4
35999
+ );
35466
36000
  logger.info(`healthFactor: ${healthFactor.toNumber()}`);
35467
36001
  const extendedBalance = await extendedAdapter.getExtendedDepositAmount();
35468
36002
  if (!extendedBalance) {
35469
36003
  return [0, 0];
35470
36004
  }
35471
- const extendedLeverage = new Web3Number((Number(extendedBalance.marginRatio) * 100).toFixed(4), 4);
36005
+ const extendedLeverage = new Web3Number(
36006
+ (Number(extendedBalance.marginRatio) * 100).toFixed(4),
36007
+ 4
36008
+ );
35472
36009
  logger.info(`extendedLeverage: ${extendedLeverage.toNumber()}`);
35473
36010
  return [healthFactor.toNumber(), extendedLeverage.toNumber()];
35474
36011
  }
@@ -35489,12 +36026,16 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
35489
36026
  splits: []
35490
36027
  };
35491
36028
  }
35492
- let vesuPositions = allPositions.filter((item) => item.protocol === Protocols.VESU);
36029
+ let vesuPositions = allPositions.filter(
36030
+ (item) => item.protocol === Protocols.VESU
36031
+ );
35493
36032
  vesuPositions.map((item) => {
35494
36033
  item.apy.apy = item.apy.apy * 0.1;
35495
36034
  });
35496
36035
  const extendedPositions = await extendedAdapter.getAllOpenPositions();
35497
- const usdcToken = Global.getDefaultTokens().find((token) => token.symbol === "USDC");
36036
+ const usdcToken = Global.getDefaultTokens().find(
36037
+ (token) => token.symbol === "USDC"
36038
+ );
35498
36039
  if (!extendedPositions || !usdcToken) {
35499
36040
  return {
35500
36041
  net: 0,
@@ -35507,7 +36048,10 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
35507
36048
  const totalHoldingsUSDValue = allPositions.reduce((acc, curr) => acc + curr.usdValue, 0) + Number(extendedEquity);
35508
36049
  console.log(totalHoldingsUSDValue);
35509
36050
  const extendedPositionSizeMultipliedByApy = Number(extendedPosition.value) * extendedApy;
35510
- let weightedAPYs = allPositions.reduce((acc, curr) => acc + curr.apy.apy * curr.usdValue, 0) + extendedPositionSizeMultipliedByApy;
36051
+ let weightedAPYs = allPositions.reduce(
36052
+ (acc, curr) => acc + curr.apy.apy * curr.usdValue,
36053
+ 0
36054
+ ) + extendedPositionSizeMultipliedByApy;
35511
36055
  console.log(weightedAPYs);
35512
36056
  const netAPY = weightedAPYs / totalHoldingsUSDValue;
35513
36057
  console.log(netAPY);
@@ -35521,13 +36065,22 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
35521
36065
  });
35522
36066
  return {
35523
36067
  net: netAPY,
35524
- splits: allPositions.map((p) => ({ apy: p.apy.apy, id: p.remarks ?? "" }))
36068
+ splits: allPositions.map((p) => ({
36069
+ apy: p.apy.apy,
36070
+ id: p.remarks ?? ""
36071
+ }))
35525
36072
  };
35526
36073
  }
35527
36074
  async getWalletHoldings() {
35528
- const usdceToken = Global.getDefaultTokens().find((token) => token.symbol === "USDCe");
35529
- const wbtcToken = Global.getDefaultTokens().find((token) => token.symbol === "WBTC");
35530
- const usdcToken = Global.getDefaultTokens().find((token) => token.symbol === "USDC");
36075
+ const usdceToken = Global.getDefaultTokens().find(
36076
+ (token) => token.symbol === "USDCe"
36077
+ );
36078
+ const wbtcToken = Global.getDefaultTokens().find(
36079
+ (token) => token.symbol === "WBTC"
36080
+ );
36081
+ const usdcToken = Global.getDefaultTokens().find(
36082
+ (token) => token.symbol === "USDC"
36083
+ );
35531
36084
  if (!usdceToken || !wbtcToken || !usdcToken) {
35532
36085
  return [];
35533
36086
  }
@@ -35601,9 +36154,7 @@ function getLooperSettings2(lstSymbol, underlyingSymbol, vaultSettings, pool1, e
35601
36154
  });
35602
36155
  const extendedAdapter = new ExtendedAdapter({
35603
36156
  ...baseAdapterConfig,
35604
- supportedPositions: [
35605
- { asset: usdcToken, isDebt: true }
35606
- ],
36157
+ supportedPositions: [{ asset: usdcToken, isDebt: true }],
35607
36158
  vaultIdExtended,
35608
36159
  extendedContract: EXTENDED_CONTRACT,
35609
36160
  extendedBackendWriteUrl,
@@ -35660,11 +36211,11 @@ function getLooperSettings2(lstSymbol, underlyingSymbol, vaultSettings, pool1, e
35660
36211
  asset: wbtcToken.address
35661
36212
  });
35662
36213
  vaultSettings.leafAdapters.push(() => vesuMultiplyAdapter.getDepositLeaf());
36214
+ vaultSettings.leafAdapters.push(() => vesuMultiplyAdapter.getWithdrawLeaf());
36215
+ vaultSettings.leafAdapters.push(() => extendedAdapter.getDepositLeaf());
35663
36216
  vaultSettings.leafAdapters.push(
35664
- () => vesuMultiplyAdapter.getWithdrawLeaf()
36217
+ () => extendedAdapter.getSwapFromLegacyLeaf()
35665
36218
  );
35666
- vaultSettings.leafAdapters.push(() => extendedAdapter.getDepositLeaf());
35667
- vaultSettings.leafAdapters.push(() => extendedAdapter.getSwapFromLegacyLeaf());
35668
36219
  vaultSettings.leafAdapters.push(() => avnuAdapter.getDepositLeaf());
35669
36220
  vaultSettings.leafAdapters.push(() => avnuAdapter.getWithdrawLeaf());
35670
36221
  vaultSettings.leafAdapters.push(
@@ -35709,29 +36260,70 @@ function VaultDescription2(lstSymbol, underlyingSymbol) {
35709
36260
  " to create leverage. Depositors receive vault shares that represent a proportional claim on the underlying assets and accrued yield."
35710
36261
  ] }),
35711
36262
  /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("p", { style: { fontSize: "14px", lineHeight: "1.5", marginBottom: "16px" }, children: [
35712
- "This vault uses Vesu for lending and borrowing. The oracle used by this pool is a ",
35713
- highlightTextWithLinks("conversion rate oracle", [{ highlight: "conversion rate oracle", link: "https://docs.pragma.build/starknet/development#conversion-rate" }]),
36263
+ "This vault uses Vesu for lending and borrowing. The oracle used by this pool is a",
36264
+ " ",
36265
+ highlightTextWithLinks("conversion rate oracle", [
36266
+ {
36267
+ highlight: "conversion rate oracle",
36268
+ link: "https://docs.pragma.build/starknet/development#conversion-rate"
36269
+ }
36270
+ ]),
35714
36271
  " ",
35715
36272
  "which is resilient to liquidity issues and price volatility, hence reducing the risk of liquidation. However, overtime, if left un-monitored, debt can increase enough to trigger a liquidation. But no worries, our continuous monitoring systems look for situations with reduced health factor and balance collateral/debt to bring it back to safe levels. With Troves, you can have a peaceful sleep."
35716
36273
  ] }),
35717
- /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("div", { style: { backgroundColor: "#222", padding: "10px", borderRadius: "8px", marginBottom: "20px", border: "1px solid #444" }, children: /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("p", { style: { fontSize: "13px", color: "#ccc" }, children: [
35718
- /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("strong", { children: "Withdrawals:" }),
35719
- " Requests can take up to ",
35720
- /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("strong", { children: "1-2 hours" }),
35721
- " to process as the vault unwinds and settles routing."
35722
- ] }) }),
35723
- /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("div", { style: { backgroundColor: "#222", padding: "10px", borderRadius: "8px", marginBottom: "20px", border: "1px solid #444" }, children: /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("p", { style: { fontSize: "13px", color: "#ccc" }, children: [
35724
- /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("strong", { children: "Debt limits:" }),
35725
- " Pools on Vesu have debt caps that are gradually increased over time. Until caps are raised, deposited Tokens remain in the vault, generating a shared net return for all depositors. There is no additional fee taken by Troves on Yield token's APY, its only on added gain."
35726
- ] }) })
36274
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
36275
+ "div",
36276
+ {
36277
+ style: {
36278
+ backgroundColor: "#222",
36279
+ padding: "10px",
36280
+ borderRadius: "8px",
36281
+ marginBottom: "20px",
36282
+ border: "1px solid #444"
36283
+ },
36284
+ children: /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("p", { style: { fontSize: "13px", color: "#ccc" }, children: [
36285
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("strong", { children: "Withdrawals:" }),
36286
+ " Requests can take up to",
36287
+ " ",
36288
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("strong", { children: "1-2 hours" }),
36289
+ " to process as the vault unwinds and settles routing."
36290
+ ] })
36291
+ }
36292
+ ),
36293
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
36294
+ "div",
36295
+ {
36296
+ style: {
36297
+ backgroundColor: "#222",
36298
+ padding: "10px",
36299
+ borderRadius: "8px",
36300
+ marginBottom: "20px",
36301
+ border: "1px solid #444"
36302
+ },
36303
+ children: /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("p", { style: { fontSize: "13px", color: "#ccc" }, children: [
36304
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("strong", { children: "Debt limits:" }),
36305
+ " Pools on Vesu have debt caps that are gradually increased over time. Until caps are raised, deposited Tokens remain in the vault, generating a shared net return for all depositors. There is no additional fee taken by Troves on Yield token's APY, its only on added gain."
36306
+ ] })
36307
+ }
36308
+ )
35727
36309
  ] });
35728
36310
  }
35729
36311
  var re7UsdcPrimeDevansh = {
35730
- vaultAddress: ContractAddr.from("0x058905be22d6a81792df79425dc9641cf3e1b77f36748631b7d7e5d713a32b55"),
35731
- manager: ContractAddr.from("0x02648d703783feb2d967cf0520314cb5aa800d69a9426f3e3b317395af44de16"),
35732
- vaultAllocator: ContractAddr.from("0x07d533c838eab6a4d854dd3aea96a55993fccd35821921970d00bde946b63b6f"),
35733
- redeemRequestNFT: ContractAddr.from("0x01ef91f08fb99729c00f82fc6e0ece37917bcc43952596c19996259dc8adbbba"),
35734
- aumOracle: ContractAddr.from("0x030b6acfec162f5d6e72b8a4d2798aedce78fb39de78a8f549f7cd277ae8bc8d"),
36312
+ vaultAddress: ContractAddr.from(
36313
+ "0x058905be22d6a81792df79425dc9641cf3e1b77f36748631b7d7e5d713a32b55"
36314
+ ),
36315
+ manager: ContractAddr.from(
36316
+ "0x02648d703783feb2d967cf0520314cb5aa800d69a9426f3e3b317395af44de16"
36317
+ ),
36318
+ vaultAllocator: ContractAddr.from(
36319
+ "0x07d533c838eab6a4d854dd3aea96a55993fccd35821921970d00bde946b63b6f"
36320
+ ),
36321
+ redeemRequestNFT: ContractAddr.from(
36322
+ "0x01ef91f08fb99729c00f82fc6e0ece37917bcc43952596c19996259dc8adbbba"
36323
+ ),
36324
+ aumOracle: ContractAddr.from(
36325
+ "0x030b6acfec162f5d6e72b8a4d2798aedce78fb39de78a8f549f7cd277ae8bc8d"
36326
+ ),
35735
36327
  leafAdapters: [],
35736
36328
  adapters: [],
35737
36329
  targetHealthFactor: 1.4,
@@ -35743,13 +36335,29 @@ var re7UsdcPrimeDevansh = {
35743
36335
  "0.001",
35744
36336
  Global.getDefaultTokens().find((token) => token.symbol === "WBTC").decimals
35745
36337
  ),
35746
- borrowable_assets: [Global.getDefaultTokens().find((token) => token.symbol === "WBTC")],
36338
+ borrowable_assets: [
36339
+ Global.getDefaultTokens().find((token) => token.symbol === "WBTC")
36340
+ ],
35747
36341
  minimumWBTCDifferenceForAvnuSwap: MINIMUM_WBTC_DIFFERENCE_FOR_AVNU_SWAP,
35748
36342
  walletAddress: WALLET_ADDRESS
35749
36343
  };
35750
36344
  var VesuExtendedTestStrategies = (extendedBackendReadUrl, extendedBackendWriteUrl, vaultIdExtended, minimumExtendedMovementAmount, minimumVesuMovementAmount, minimumExtendedRetriesDelayForOrderStatus, minimumExtendedPriceDifferenceForSwapOpen, maximumExtendedPriceDifferenceForSwapClosing) => {
35751
36345
  return [
35752
- getStrategySettingsVesuExtended("WBTC", "USDC", re7UsdcPrimeDevansh, false, false, extendedBackendReadUrl, extendedBackendWriteUrl, vaultIdExtended, minimumExtendedMovementAmount, minimumVesuMovementAmount, minimumExtendedRetriesDelayForOrderStatus, minimumExtendedPriceDifferenceForSwapOpen, maximumExtendedPriceDifferenceForSwapClosing)
36346
+ getStrategySettingsVesuExtended(
36347
+ "WBTC",
36348
+ "USDC",
36349
+ re7UsdcPrimeDevansh,
36350
+ false,
36351
+ false,
36352
+ extendedBackendReadUrl,
36353
+ extendedBackendWriteUrl,
36354
+ vaultIdExtended,
36355
+ minimumExtendedMovementAmount,
36356
+ minimumVesuMovementAmount,
36357
+ minimumExtendedRetriesDelayForOrderStatus,
36358
+ minimumExtendedPriceDifferenceForSwapOpen,
36359
+ maximumExtendedPriceDifferenceForSwapClosing
36360
+ )
35753
36361
  ];
35754
36362
  };
35755
36363
  function getStrategySettingsVesuExtended(lstSymbol, underlyingSymbol, addresses, isPreview = false, isLST, extendedBackendReadUrl, extendedBackendWriteUrl, vaultIdExtended, minimumExtendedMovementAmount, minimumVesuMovementAmount, minimumExtendedRetriesDelayForOrderStatus, minimumExtendedPriceDifferenceForSwapOpen, maximumExtendedPriceDifferenceForSwapClosing) {
@@ -35759,8 +36367,25 @@ function getStrategySettingsVesuExtended(lstSymbol, underlyingSymbol, addresses,
35759
36367
  address: addresses.vaultAddress,
35760
36368
  launchBlock: 0,
35761
36369
  type: "Other",
35762
- depositTokens: [Global.getDefaultTokens().find((token) => token.symbol === underlyingSymbol)],
35763
- additionalInfo: getLooperSettings2(lstSymbol, underlyingSymbol, addresses, VesuPools.Re7USDCPrime, extendedBackendReadUrl, extendedBackendWriteUrl, vaultIdExtended, minimumExtendedMovementAmount, minimumVesuMovementAmount, minimumExtendedRetriesDelayForOrderStatus, minimumExtendedPriceDifferenceForSwapOpen, maximumExtendedPriceDifferenceForSwapClosing),
36370
+ depositTokens: [
36371
+ Global.getDefaultTokens().find(
36372
+ (token) => token.symbol === underlyingSymbol
36373
+ )
36374
+ ],
36375
+ additionalInfo: getLooperSettings2(
36376
+ lstSymbol,
36377
+ underlyingSymbol,
36378
+ addresses,
36379
+ VesuPools.Re7USDCPrime,
36380
+ extendedBackendReadUrl,
36381
+ extendedBackendWriteUrl,
36382
+ vaultIdExtended,
36383
+ minimumExtendedMovementAmount,
36384
+ minimumVesuMovementAmount,
36385
+ minimumExtendedRetriesDelayForOrderStatus,
36386
+ minimumExtendedPriceDifferenceForSwapOpen,
36387
+ maximumExtendedPriceDifferenceForSwapClosing
36388
+ ),
35764
36389
  risk: {
35765
36390
  riskFactor: _riskFactor3,
35766
36391
  netRisk: _riskFactor3.reduce((acc, curr) => acc + curr.value * curr.weight, 0) / _riskFactor3.reduce((acc, curr) => acc + curr.weight, 0),
@@ -40085,6 +40710,7 @@ var deployer_default = Deployer;
40085
40710
  calculateBTCPriceDelta,
40086
40711
  calculateDebtAmount,
40087
40712
  calculateDebtReductionAmountForWithdrawal,
40713
+ calculateDeltaDebtAmount,
40088
40714
  calculateExposureDelta,
40089
40715
  calculateExtendedLevergae,
40090
40716
  calculateVesUPositionSizeGivenExtended,