@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.
@@ -28566,14 +28566,14 @@ var calculateExposureDelta = (exposure_extended, exposure_vesu) => {
28566
28566
  var calculateBTCPriceDelta = (btcPrice, lastBtcPrice) => {
28567
28567
  return (btcPrice - lastBtcPrice) / lastBtcPrice * 100;
28568
28568
  };
28569
- var calculateVesUPositionSizeGivenExtended = (extendedPositonValue, extendedHoldingAmount, collateralAmount, collateralPrice) => {
28569
+ var calculateVesUPositionSizeGivenExtended = (extendedPositonValue, extendedHoldingAmount, collateralAmount, collateralPrice, vesuDebtAmountToBeRepaid) => {
28570
28570
  const extendedLeverage = calculateExtendedLevergae();
28571
28571
  const vesuLeverage = calculateVesuLeverage();
28572
28572
  const extendedAmount = extendedHoldingAmount;
28573
28573
  const extendedAmountInBTC = extendedAmount.dividedBy(collateralPrice);
28574
28574
  const numerator1 = extendedAmount.multipliedBy(extendedLeverage).plus(extendedPositonValue);
28575
28575
  const numerator2 = collateralAmount.multipliedBy(collateralPrice).multipliedBy(-1);
28576
- const vesuAmountInUsd = numerator1.plus(numerator2).dividedBy(vesuLeverage);
28576
+ const vesuAmountInUsd = numerator1.plus(numerator2).dividedBy(vesuLeverage).plus(vesuDebtAmountToBeRepaid);
28577
28577
  const vesuAmountInBTC = vesuAmountInUsd.dividedBy(collateralPrice).toFixed(WBTC_TOKEN_DECIMALS);
28578
28578
  return {
28579
28579
  vesuAmountInUsd: vesuAmountInUsd.toFixed(2),
@@ -28581,6 +28581,17 @@ var calculateVesUPositionSizeGivenExtended = (extendedPositonValue, extendedHold
28581
28581
  extendedAmountInBTC
28582
28582
  };
28583
28583
  };
28584
+ var calculateDeltaDebtAmount = (maxLtv = MAX_LTV_BTC_USDC, existingVesuCollateral, existingVesuDebt, collateralPrice, debtPrice, targetHf = TARGET_HF) => {
28585
+ try {
28586
+ const term1 = existingVesuCollateral.multipliedBy(collateralPrice).multipliedBy(maxLtv).dividedBy(targetHf);
28587
+ const term2 = existingVesuDebt.multipliedBy(debtPrice).multipliedBy(targetHf).multipliedBy(-1);
28588
+ const debtAmountToBeRepaid = term1.plus(term2).dividedBy(targetHf);
28589
+ return debtAmountToBeRepaid;
28590
+ } catch (err) {
28591
+ logger.error(`error calculating delta position: ${err}`);
28592
+ return null;
28593
+ }
28594
+ };
28584
28595
 
28585
28596
  // src/utils/health-factor-math.ts
28586
28597
  var HealthFactorMath = class {
@@ -30648,6 +30659,8 @@ var AvnuAdapter = class _AvnuAdapter extends BaseAdapter {
30648
30659
  quote,
30649
30660
  vaultAllocator.address
30650
30661
  );
30662
+ const dataObject = quote;
30663
+ logger.info(`${_AvnuAdapter.name}::getQuotesAvnu finalAmountOfWbtcOut : ${dataObject.avnuFees} ${parseInt(dataObject.buyAmount.toString(), 16)} ${parseInt(dataObject.sellAmount.toString(), 16)} ${parseInt(dataObject.sellAmount.toString(), 16)}`);
30651
30664
  const swapCallData = getCalldata[0];
30652
30665
  const amount = uint25614.bnToUint256(quote.sellAmountInUsd * 10 ** 7);
30653
30666
  return [
@@ -34394,11 +34407,17 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
34394
34407
  WALLET_ADDRESS,
34395
34408
  usdceToken.decimals
34396
34409
  );
34397
- logger.info(`${_VesuExtendedMultiplierStrategy.name}::moveAssetsToVaultAllocator walletBalance: ${walletBalance}`);
34410
+ logger.info(
34411
+ `${_VesuExtendedMultiplierStrategy.name}::moveAssetsToVaultAllocator walletBalance: ${walletBalance}`
34412
+ );
34398
34413
  const amountToBeTransferred = amount.minimum(walletBalance);
34399
- logger.info(`${_VesuExtendedMultiplierStrategy.name}::moveAssetsToVaultAllocator amountToBeTransferred: ${amountToBeTransferred.toNumber()}`);
34414
+ logger.info(
34415
+ `${_VesuExtendedMultiplierStrategy.name}::moveAssetsToVaultAllocator amountToBeTransferred: ${amountToBeTransferred.toNumber()}`
34416
+ );
34400
34417
  if (amountToBeTransferred.lessThan(0)) {
34401
- logger.error(`${_VesuExtendedMultiplierStrategy.name}::moveAssetsToVaultAllocator amountToBeTransferred is less than 0: ${amountToBeTransferred.toNumber()}`);
34418
+ logger.error(
34419
+ `${_VesuExtendedMultiplierStrategy.name}::moveAssetsToVaultAllocator amountToBeTransferred is less than 0: ${amountToBeTransferred.toNumber()}`
34420
+ );
34402
34421
  return {
34403
34422
  calls: [],
34404
34423
  status: false
@@ -34436,10 +34455,14 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
34436
34455
  }
34437
34456
  async shouldInvest() {
34438
34457
  try {
34439
- logger.info(`${_VesuExtendedMultiplierStrategy.name}::shouldInvest starting`);
34458
+ logger.info(
34459
+ `${_VesuExtendedMultiplierStrategy.name}::shouldInvest starting`
34460
+ );
34440
34461
  const vesuAdapter = await this.getVesuAdapter();
34441
34462
  const extendedAdapter = await this.getExtendedAdapter();
34442
- logger.info(`${_VesuExtendedMultiplierStrategy.name}::shouldInvest adapters fetched: vesuAdapter=${!!vesuAdapter}, extendedAdapter=${!!extendedAdapter}, extendedAdapter.client=${!!extendedAdapter?.client}`);
34463
+ logger.info(
34464
+ `${_VesuExtendedMultiplierStrategy.name}::shouldInvest adapters fetched: vesuAdapter=${!!vesuAdapter}, extendedAdapter=${!!extendedAdapter}, extendedAdapter.client=${!!extendedAdapter?.client}`
34465
+ );
34443
34466
  if (!vesuAdapter) {
34444
34467
  logger.error(
34445
34468
  `Vesu adapter not configured in metadata. This is a configuration issue, not a temporary failure.`
@@ -34451,7 +34474,8 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
34451
34474
  extendedLeverage: 0,
34452
34475
  collateralPrice: 0,
34453
34476
  debtPrice: 0,
34454
- vesuLeverage: 0
34477
+ vesuLeverage: 0,
34478
+ debtAmountToBeRepaid: new Web3Number(0, 0)
34455
34479
  };
34456
34480
  }
34457
34481
  if (!extendedAdapter) {
@@ -34465,7 +34489,8 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
34465
34489
  extendedLeverage: 0,
34466
34490
  collateralPrice: 0,
34467
34491
  debtPrice: 0,
34468
- vesuLeverage: 0
34492
+ vesuLeverage: 0,
34493
+ debtAmountToBeRepaid: new Web3Number(0, 0)
34469
34494
  };
34470
34495
  }
34471
34496
  if (!extendedAdapter.client) {
@@ -34479,10 +34504,13 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
34479
34504
  extendedLeverage: 0,
34480
34505
  collateralPrice: 0,
34481
34506
  debtPrice: 0,
34482
- vesuLeverage: 0
34507
+ vesuLeverage: 0,
34508
+ debtAmountToBeRepaid: new Web3Number(0, 0)
34483
34509
  };
34484
34510
  }
34485
- logger.info(`${_VesuExtendedMultiplierStrategy.name}::shouldInvest calling getUnusedBalance`);
34511
+ logger.info(
34512
+ `${_VesuExtendedMultiplierStrategy.name}::shouldInvest calling getUnusedBalance`
34513
+ );
34486
34514
  const balance = await this.getUnusedBalance();
34487
34515
  if (!Number.isFinite(balance.usdValue) || balance.usdValue < 0) {
34488
34516
  logger.error(
@@ -34495,13 +34523,18 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
34495
34523
  extendedLeverage: 0,
34496
34524
  collateralPrice: 0,
34497
34525
  debtPrice: 0,
34498
- vesuLeverage: 0
34526
+ vesuLeverage: 0,
34527
+ debtAmountToBeRepaid: new Web3Number(0, 0)
34499
34528
  };
34500
34529
  }
34501
- logger.info(`${_VesuExtendedMultiplierStrategy.name}::shouldInvest balance: ${balance.usdValue}`);
34530
+ logger.info(
34531
+ `${_VesuExtendedMultiplierStrategy.name}::shouldInvest balance: ${balance.usdValue}`
34532
+ );
34502
34533
  const usdcBalanceOnExtended = await extendedAdapter.getExtendedDepositAmount();
34503
34534
  if (usdcBalanceOnExtended) {
34504
- const availableForWithdrawal = parseFloat(usdcBalanceOnExtended.availableForWithdrawal);
34535
+ const availableForWithdrawal = parseFloat(
34536
+ usdcBalanceOnExtended.availableForWithdrawal
34537
+ );
34505
34538
  if (!Number.isFinite(availableForWithdrawal) || availableForWithdrawal < 0) {
34506
34539
  logger.error(
34507
34540
  `Invalid usdcBalanceOnExtended.availableForWithdrawal: ${usdcBalanceOnExtended.availableForWithdrawal}. Expected a finite, non-negative number.`
@@ -34513,11 +34546,15 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
34513
34546
  extendedLeverage: 0,
34514
34547
  collateralPrice: 0,
34515
34548
  debtPrice: 0,
34516
- vesuLeverage: 0
34549
+ vesuLeverage: 0,
34550
+ debtAmountToBeRepaid: new Web3Number(0, 0)
34517
34551
  };
34518
34552
  }
34519
34553
  }
34520
- const amountToInvest = new Web3Number(balance.usdValue, USDC_TOKEN_DECIMALS).plus(usdcBalanceOnExtended?.availableForWithdrawal ?? 0).multipliedBy(1 - LIMIT_BALANCE);
34554
+ const amountToInvest = new Web3Number(
34555
+ balance.usdValue,
34556
+ USDC_TOKEN_DECIMALS
34557
+ ).plus(usdcBalanceOnExtended?.availableForTrade ?? 0).multipliedBy(1 - LIMIT_BALANCE);
34521
34558
  const amountToInvestNumber = amountToInvest.toNumber();
34522
34559
  if (!Number.isFinite(amountToInvestNumber)) {
34523
34560
  logger.error(
@@ -34530,10 +34567,13 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
34530
34567
  extendedLeverage: 0,
34531
34568
  collateralPrice: 0,
34532
34569
  debtPrice: 0,
34533
- vesuLeverage: 0
34570
+ vesuLeverage: 0,
34571
+ debtAmountToBeRepaid: new Web3Number(0, 0)
34534
34572
  };
34535
34573
  }
34536
- logger.info(`${_VesuExtendedMultiplierStrategy.name}::shouldInvest amountToInvest: ${amountToInvestNumber}`);
34574
+ logger.info(
34575
+ `${_VesuExtendedMultiplierStrategy.name}::shouldInvest amountToInvest: ${amountToInvestNumber}`
34576
+ );
34537
34577
  if (amountToInvest.lessThan(LIMIT_BALANCE_VALUE)) {
34538
34578
  return {
34539
34579
  shouldInvest: false,
@@ -34542,7 +34582,8 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
34542
34582
  extendedLeverage: 0,
34543
34583
  collateralPrice: 0,
34544
34584
  debtPrice: 0,
34545
- vesuLeverage: 0
34585
+ vesuLeverage: 0,
34586
+ debtAmountToBeRepaid: new Web3Number(0, 0)
34546
34587
  };
34547
34588
  }
34548
34589
  const extendedPositon = await extendedAdapter.getAllOpenPositions();
@@ -34555,14 +34596,12 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
34555
34596
  extendedLeverage: 0,
34556
34597
  collateralPrice: 0,
34557
34598
  debtPrice: 0,
34558
- vesuLeverage: 0
34599
+ vesuLeverage: 0,
34600
+ debtAmountToBeRepaid: new Web3Number(0, 0)
34559
34601
  };
34560
34602
  }
34561
- const { collateralTokenAmount } = await vesuAdapter.vesuAdapter.getAssetPrices();
34562
- const {
34563
- collateralPrice,
34564
- debtPrice
34565
- } = await this.getAssetPrices();
34603
+ const { collateralTokenAmount, debtTokenAmount } = await vesuAdapter.vesuAdapter.getAssetPrices();
34604
+ const { collateralPrice, debtPrice } = await this.getAssetPrices();
34566
34605
  if (!Number.isFinite(collateralPrice.price) || collateralPrice.price <= 0) {
34567
34606
  logger.error(
34568
34607
  `Invalid collateralPrice: ${collateralPrice.price}. Expected a finite, positive number.`
@@ -34574,7 +34613,8 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
34574
34613
  extendedLeverage: 0,
34575
34614
  collateralPrice: 0,
34576
34615
  debtPrice: 0,
34577
- vesuLeverage: 0
34616
+ vesuLeverage: 0,
34617
+ debtAmountToBeRepaid: new Web3Number(0, 0)
34578
34618
  };
34579
34619
  }
34580
34620
  if (!Number.isFinite(debtPrice.price) || debtPrice.price <= 0) {
@@ -34588,11 +34628,34 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
34588
34628
  extendedLeverage: 0,
34589
34629
  collateralPrice: 0,
34590
34630
  debtPrice: 0,
34591
- vesuLeverage: 0
34631
+ vesuLeverage: 0,
34632
+ debtAmountToBeRepaid: new Web3Number(0, 0)
34592
34633
  };
34593
34634
  }
34635
+ const debtAmountToBeRepaid = calculateDeltaDebtAmount(
34636
+ MAX_LTV_BTC_USDC,
34637
+ collateralTokenAmount,
34638
+ debtTokenAmount,
34639
+ collateralPrice.price,
34640
+ debtPrice.price,
34641
+ this.metadata.additionalInfo.targetHealthFactor
34642
+ );
34643
+ if (!debtAmountToBeRepaid) {
34644
+ logger.error("error calculating debt amount to be repaid");
34645
+ return {
34646
+ shouldInvest: false,
34647
+ vesuAmount: new Web3Number(0, 0),
34648
+ extendedAmount: new Web3Number(0, 0),
34649
+ extendedLeverage: 0,
34650
+ collateralPrice: 0,
34651
+ debtPrice: 0,
34652
+ vesuLeverage: 0,
34653
+ debtAmountToBeRepaid: new Web3Number(0, 0)
34654
+ };
34655
+ }
34656
+ const amountToInvestAfterRepayingDebt = amountToInvest.minus(debtAmountToBeRepaid);
34594
34657
  const { vesu_amount, extended_amount, extended_leverage, vesu_leverage } = await calculateAmountDistribution(
34595
- amountToInvest.toNumber(),
34658
+ amountToInvestAfterRepayingDebt.toNumber(),
34596
34659
  extendedAdapter.client,
34597
34660
  extendedAdapter.config.extendedMarketName,
34598
34661
  collateralPrice.price,
@@ -34611,10 +34674,13 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
34611
34674
  extendedLeverage: 0,
34612
34675
  collateralPrice: 0,
34613
34676
  debtPrice: 0,
34614
- vesuLeverage: 0
34677
+ vesuLeverage: 0,
34678
+ debtAmountToBeRepaid: new Web3Number(0, 0)
34615
34679
  };
34616
34680
  }
34617
- logger.info(`${_VesuExtendedMultiplierStrategy.name}::shouldInvest vesu_amount: ${vesu_amount.toNumber()}, extended_amount: ${extended_amount.toNumber()}`);
34681
+ logger.info(
34682
+ `${_VesuExtendedMultiplierStrategy.name}::shouldInvest vesu_amount: ${vesu_amount.toNumber()}, extended_amount: ${extended_amount.toNumber()}`
34683
+ );
34618
34684
  return {
34619
34685
  shouldInvest: true,
34620
34686
  vesuAmount: vesu_amount,
@@ -34622,7 +34688,8 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
34622
34688
  extendedLeverage: extended_leverage,
34623
34689
  vesuLeverage: vesu_leverage,
34624
34690
  collateralPrice: collateralPrice.price,
34625
- debtPrice: debtPrice.price
34691
+ debtPrice: debtPrice.price,
34692
+ debtAmountToBeRepaid
34626
34693
  };
34627
34694
  } catch (err) {
34628
34695
  logger.error(`error deciding invest: ${err}`);
@@ -34633,7 +34700,8 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
34633
34700
  extendedLeverage: 0,
34634
34701
  collateralPrice: 0,
34635
34702
  debtPrice: 0,
34636
- vesuLeverage: 0
34703
+ vesuLeverage: 0,
34704
+ debtAmountToBeRepaid: new Web3Number(0, 0)
34637
34705
  };
34638
34706
  }
34639
34707
  }
@@ -34653,37 +34721,52 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
34653
34721
  return [];
34654
34722
  }
34655
34723
  const usdcAmountInWallet = (await this.getUnusedBalance()).amount;
34656
- const usdcAmountOnExtendedAvailableForWithdrawal = parseFloat(
34657
- extendedHoldings.availableForWithdrawal
34724
+ const usdcAmountOnExtendedAvailableForTrade = parseFloat(
34725
+ extendedHoldings.availableForTrade
34726
+ );
34727
+ logger.info(
34728
+ `${_VesuExtendedMultiplierStrategy.name}::shouldMoveAssets calculating movements - Extended current: ${usdcAmountOnExtendedAvailableForTrade}, Wallet: ${usdcAmountInWallet.toNumber()}, Target Extended: ${extendedAmount.toNumber()}, Target Vesu: ${vesuAmount.toNumber()}`
34658
34729
  );
34659
- logger.info(`${_VesuExtendedMultiplierStrategy.name}::shouldMoveAssets calculating movements - Extended current: ${usdcAmountOnExtendedAvailableForWithdrawal}, Wallet: ${usdcAmountInWallet.toNumber()}, Target Extended: ${extendedAmount.toNumber()}, Target Vesu: ${vesuAmount.toNumber()}`);
34660
34730
  let totalExtendedWithdrawal = new Web3Number(0, USDC_TOKEN_DECIMALS);
34661
34731
  let totalExtendedDeposit = new Web3Number(0, USDC_TOKEN_DECIMALS);
34662
34732
  if (extendedAmount.isNegative() && extendedAmount.abs().greaterThan(extendedAdapter.minimumExtendedMovementAmount)) {
34663
- totalExtendedWithdrawal = totalExtendedWithdrawal.plus(extendedAmount.abs());
34733
+ totalExtendedWithdrawal = totalExtendedWithdrawal.plus(
34734
+ extendedAmount.abs()
34735
+ );
34664
34736
  }
34665
34737
  const extendedTargetAmount = extendedAmount.abs();
34666
- let projectedExtendedBalance = usdcAmountOnExtendedAvailableForWithdrawal;
34738
+ let projectedExtendedBalance = usdcAmountOnExtendedAvailableForTrade;
34667
34739
  if (extendedAmount.isNegative()) {
34668
34740
  projectedExtendedBalance = projectedExtendedBalance - extendedAmount.abs().toNumber();
34669
34741
  }
34670
- const extendedAmountDifference = extendedTargetAmount.minus(projectedExtendedBalance);
34742
+ const extendedAmountDifference = extendedTargetAmount.minus(
34743
+ projectedExtendedBalance
34744
+ );
34671
34745
  const extendedAmountDifferenceAbs = extendedAmountDifference.abs();
34672
34746
  if (extendedAmountDifference.lessThan(0)) {
34673
- totalExtendedWithdrawal = totalExtendedWithdrawal.plus(extendedAmountDifferenceAbs);
34747
+ totalExtendedWithdrawal = totalExtendedWithdrawal.plus(
34748
+ extendedAmountDifferenceAbs
34749
+ );
34674
34750
  } else if (extendedAmountDifference.greaterThan(0)) {
34675
- totalExtendedDeposit = totalExtendedDeposit.plus(extendedAmountDifference);
34751
+ totalExtendedDeposit = totalExtendedDeposit.plus(
34752
+ extendedAmountDifference
34753
+ );
34676
34754
  }
34677
34755
  const vesuTargetAmount = vesuAmount.abs();
34678
34756
  const projectedWalletBalance = usdcAmountInWallet.plus(totalExtendedWithdrawal).minus(totalExtendedDeposit);
34679
34757
  let vesuAmountDifference = vesuTargetAmount.minus(projectedWalletBalance);
34680
34758
  const vesuAmountDifferenceAbs = vesuAmountDifference.abs();
34681
- 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()}`);
34682
- let calls = [];
34759
+ logger.info(
34760
+ `${_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()}`
34761
+ );
34683
34762
  let transactionResults = [];
34684
34763
  if (extendedAmount.isNegative() && extendedAmount.abs().greaterThan(extendedAdapter.minimumExtendedMovementAmount)) {
34685
34764
  try {
34686
- const { calls: extendedCalls, status: extendedStatus, transactionMetadata: extendedTransactionMetadata } = await this.moveAssets(
34765
+ const {
34766
+ calls: extendedCalls,
34767
+ status: extendedStatus,
34768
+ transactionMetadata: extendedTransactionMetadata
34769
+ } = await this.moveAssets(
34687
34770
  {
34688
34771
  to: Protocols.VAULT.name,
34689
34772
  from: Protocols.EXTENDED.name,
@@ -34703,16 +34786,44 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
34703
34786
  }
34704
34787
  });
34705
34788
  } else {
34706
- return [this.createTransactionResult([], false, { from: Protocols.EXTENDED.name, to: Protocols.VAULT.name, amount: extendedAmount.abs() }, "NONE", "INVESTMENT" /* INVESTMENT */)];
34789
+ return [
34790
+ this.createTransactionResult(
34791
+ [],
34792
+ false,
34793
+ {
34794
+ from: Protocols.EXTENDED.name,
34795
+ to: Protocols.VAULT.name,
34796
+ amount: extendedAmount.abs()
34797
+ },
34798
+ "NONE",
34799
+ "INVESTMENT" /* INVESTMENT */
34800
+ )
34801
+ ];
34707
34802
  }
34708
34803
  } catch (err) {
34709
34804
  logger.error(`Failed moving assets to vault: ${err}`);
34710
- return [this.createTransactionResult([], false, { from: Protocols.EXTENDED.name, to: Protocols.VAULT.name, amount: extendedAmount.abs() }, "NONE", "INVESTMENT" /* INVESTMENT */)];
34805
+ return [
34806
+ this.createTransactionResult(
34807
+ [],
34808
+ false,
34809
+ {
34810
+ from: Protocols.EXTENDED.name,
34811
+ to: Protocols.VAULT.name,
34812
+ amount: extendedAmount.abs()
34813
+ },
34814
+ "NONE",
34815
+ "INVESTMENT" /* INVESTMENT */
34816
+ )
34817
+ ];
34711
34818
  }
34712
34819
  }
34713
34820
  if (vesuAmount.isNegative() && vesuAmount.abs().greaterThan(vesuAdapter.minimumVesuMovementAmount)) {
34714
34821
  try {
34715
- const { calls: vesuCalls, status: vesuStatus, transactionMetadata: vesuTransactionMetadata } = await this.moveAssets(
34822
+ const {
34823
+ calls: vesuCalls,
34824
+ status: vesuStatus,
34825
+ transactionMetadata: vesuTransactionMetadata
34826
+ } = await this.moveAssets(
34716
34827
  {
34717
34828
  to: Protocols.EXTENDED.name,
34718
34829
  from: Protocols.VESU.name,
@@ -34723,7 +34834,19 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
34723
34834
  vesuAdapter
34724
34835
  );
34725
34836
  if (!vesuStatus) {
34726
- return [this.createTransactionResult([], false, { from: Protocols.VESU.name, to: Protocols.EXTENDED.name, amount: vesuAmount.abs() }, "NONE", "INVESTMENT" /* INVESTMENT */)];
34837
+ return [
34838
+ this.createTransactionResult(
34839
+ [],
34840
+ false,
34841
+ {
34842
+ from: Protocols.VESU.name,
34843
+ to: Protocols.EXTENDED.name,
34844
+ amount: vesuAmount.abs()
34845
+ },
34846
+ "NONE",
34847
+ "INVESTMENT" /* INVESTMENT */
34848
+ )
34849
+ ];
34727
34850
  }
34728
34851
  transactionResults.push({
34729
34852
  status: vesuStatus,
@@ -34734,14 +34857,34 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
34734
34857
  }
34735
34858
  });
34736
34859
  } catch (err) {
34737
- logger.error(`Failed moving assets to extended via vault allocator: ${err}`);
34738
- return [this.createTransactionResult([], false, { from: Protocols.VESU.name, to: Protocols.EXTENDED.name, amount: vesuAmount.abs() }, "NONE", "INVESTMENT" /* INVESTMENT */)];
34860
+ logger.error(
34861
+ `Failed moving assets to extended via vault allocator: ${err}`
34862
+ );
34863
+ return [
34864
+ this.createTransactionResult(
34865
+ [],
34866
+ false,
34867
+ {
34868
+ from: Protocols.VESU.name,
34869
+ to: Protocols.EXTENDED.name,
34870
+ amount: vesuAmount.abs()
34871
+ },
34872
+ "NONE",
34873
+ "INVESTMENT" /* INVESTMENT */
34874
+ )
34875
+ ];
34739
34876
  }
34740
34877
  }
34741
- if (extendedAmountDifferenceAbs.greaterThan(extendedAdapter.minimumExtendedMovementAmount)) {
34878
+ if (extendedAmountDifferenceAbs.greaterThan(
34879
+ extendedAdapter.minimumExtendedMovementAmount
34880
+ )) {
34742
34881
  if (extendedAmountDifference.greaterThan(0)) {
34743
34882
  try {
34744
- const { calls: extendedCalls, status: extendedStatus, transactionMetadata: extendedTransactionMetadata } = await this.moveAssets(
34883
+ const {
34884
+ calls: extendedCalls,
34885
+ status: extendedStatus,
34886
+ transactionMetadata: extendedTransactionMetadata
34887
+ } = await this.moveAssets(
34745
34888
  {
34746
34889
  to: Protocols.EXTENDED.name,
34747
34890
  from: Protocols.VAULT.name,
@@ -34758,16 +34901,46 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
34758
34901
  transactionMetadata: extendedTransactionMetadata
34759
34902
  });
34760
34903
  } else {
34761
- logger.error(`Failed to move assets to extended - operation returned false status`);
34762
- return [this.createTransactionResult([], false, { from: Protocols.VAULT.name, to: Protocols.EXTENDED.name, amount: extendedAmountDifference }, "NONE", "INVESTMENT" /* INVESTMENT */)];
34904
+ logger.error(
34905
+ `Failed to move assets to extended - operation returned false status`
34906
+ );
34907
+ return [
34908
+ this.createTransactionResult(
34909
+ [],
34910
+ false,
34911
+ {
34912
+ from: Protocols.VAULT.name,
34913
+ to: Protocols.EXTENDED.name,
34914
+ amount: extendedAmountDifference
34915
+ },
34916
+ "NONE",
34917
+ "INVESTMENT" /* INVESTMENT */
34918
+ )
34919
+ ];
34763
34920
  }
34764
34921
  } catch (err) {
34765
34922
  logger.error(`Failed moving assets to extended: ${err}`);
34766
- return [this.createTransactionResult([], false, { from: Protocols.VAULT.name, to: Protocols.EXTENDED.name, amount: extendedAmountDifference }, "NONE", "INVESTMENT" /* INVESTMENT */)];
34923
+ return [
34924
+ this.createTransactionResult(
34925
+ [],
34926
+ false,
34927
+ {
34928
+ from: Protocols.VAULT.name,
34929
+ to: Protocols.EXTENDED.name,
34930
+ amount: extendedAmountDifference
34931
+ },
34932
+ "NONE",
34933
+ "INVESTMENT" /* INVESTMENT */
34934
+ )
34935
+ ];
34767
34936
  }
34768
34937
  } else if (extendedAmountDifference.lessThan(0)) {
34769
34938
  try {
34770
- const { calls: extendedCalls, status: extendedStatus, transactionMetadata: extendedTransactionMetadata } = await this.moveAssets(
34939
+ const {
34940
+ calls: extendedCalls,
34941
+ status: extendedStatus,
34942
+ transactionMetadata: extendedTransactionMetadata
34943
+ } = await this.moveAssets(
34771
34944
  {
34772
34945
  to: Protocols.VAULT.name,
34773
34946
  from: Protocols.EXTENDED.name,
@@ -34787,23 +34960,55 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
34787
34960
  }
34788
34961
  });
34789
34962
  } else {
34790
- logger.error(`Failed to withdraw from extended - operation returned false status`);
34791
- return [this.createTransactionResult([], false, { from: Protocols.EXTENDED.name, to: Protocols.VAULT.name, amount: extendedAmountDifferenceAbs }, "NONE", "INVESTMENT" /* INVESTMENT */)];
34963
+ logger.error(
34964
+ `Failed to withdraw from extended - operation returned false status`
34965
+ );
34966
+ return [
34967
+ this.createTransactionResult(
34968
+ [],
34969
+ false,
34970
+ {
34971
+ from: Protocols.EXTENDED.name,
34972
+ to: Protocols.VAULT.name,
34973
+ amount: extendedAmountDifferenceAbs
34974
+ },
34975
+ "NONE",
34976
+ "INVESTMENT" /* INVESTMENT */
34977
+ )
34978
+ ];
34792
34979
  }
34793
34980
  } catch (err) {
34794
34981
  logger.error(`Failed moving assets from extended to vault: ${err}`);
34795
- return [this.createTransactionResult([], false, { from: Protocols.EXTENDED.name, to: Protocols.VAULT.name, amount: extendedAmountDifferenceAbs }, "NONE", "INVESTMENT" /* INVESTMENT */)];
34982
+ return [
34983
+ this.createTransactionResult(
34984
+ [],
34985
+ false,
34986
+ {
34987
+ from: Protocols.EXTENDED.name,
34988
+ to: Protocols.VAULT.name,
34989
+ amount: extendedAmountDifferenceAbs
34990
+ },
34991
+ "NONE",
34992
+ "INVESTMENT" /* INVESTMENT */
34993
+ )
34994
+ ];
34796
34995
  }
34797
34996
  }
34798
34997
  }
34799
- if (vesuAmountDifferenceAbs.greaterThan(vesuAdapter.minimumVesuMovementAmount)) {
34998
+ if (vesuAmountDifferenceAbs.greaterThan(
34999
+ vesuAdapter.minimumVesuMovementAmount
35000
+ )) {
34800
35001
  if (vesuAmountDifference.lessThanOrEqualTo(0)) {
34801
35002
  logger.warn(
34802
35003
  `Vesu amount difference is negative or zero: ${vesuAmountDifference.toNumber()}. Skipping operation.`
34803
35004
  );
34804
35005
  } else {
34805
35006
  try {
34806
- const { calls: vesuCalls, status: vesuStatus, transactionMetadata: vesuTransactionMetadata } = await this.moveAssets(
35007
+ const {
35008
+ calls: vesuCalls,
35009
+ status: vesuStatus,
35010
+ transactionMetadata: vesuTransactionMetadata
35011
+ } = await this.moveAssets(
34807
35012
  {
34808
35013
  to: Protocols.VAULT.name,
34809
35014
  from: Protocols.EXTENDED.name,
@@ -34814,8 +35019,22 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
34814
35019
  vesuAdapter
34815
35020
  );
34816
35021
  if (!vesuStatus) {
34817
- logger.error(`Failed to move assets to vesu - operation returned false status`);
34818
- return [this.createTransactionResult([], false, { from: Protocols.EXTENDED.name, to: Protocols.VAULT.name, amount: vesuAmountDifference }, "NONE", "INVESTMENT" /* INVESTMENT */)];
35022
+ logger.error(
35023
+ `Failed to move assets to vesu - operation returned false status`
35024
+ );
35025
+ return [
35026
+ this.createTransactionResult(
35027
+ [],
35028
+ false,
35029
+ {
35030
+ from: Protocols.EXTENDED.name,
35031
+ to: Protocols.VAULT.name,
35032
+ amount: vesuAmountDifference
35033
+ },
35034
+ "NONE",
35035
+ "INVESTMENT" /* INVESTMENT */
35036
+ )
35037
+ ];
34819
35038
  }
34820
35039
  transactionResults.push({
34821
35040
  status: vesuStatus,
@@ -34827,14 +35046,38 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
34827
35046
  });
34828
35047
  } catch (err) {
34829
35048
  logger.error(`Failed moving assets to vault: ${err}`);
34830
- return [this.createTransactionResult([], false, { from: Protocols.EXTENDED.name, to: Protocols.VAULT.name, amount: vesuAmountDifference }, "NONE", "INVESTMENT" /* INVESTMENT */)];
35049
+ return [
35050
+ this.createTransactionResult(
35051
+ [],
35052
+ false,
35053
+ {
35054
+ from: Protocols.EXTENDED.name,
35055
+ to: Protocols.VAULT.name,
35056
+ amount: vesuAmountDifference
35057
+ },
35058
+ "NONE",
35059
+ "INVESTMENT" /* INVESTMENT */
35060
+ )
35061
+ ];
34831
35062
  }
34832
35063
  }
34833
35064
  }
34834
35065
  return transactionResults;
34835
35066
  } catch (err) {
34836
35067
  logger.error(`Failed moving assets to vesu: ${err}`);
34837
- return [this.createTransactionResult([], false, { from: Protocols.EXTENDED.name, to: Protocols.VAULT.name, amount: new Web3Number(0, USDC_TOKEN_DECIMALS) }, "NONE", "INVESTMENT" /* INVESTMENT */)];
35068
+ return [
35069
+ this.createTransactionResult(
35070
+ [],
35071
+ false,
35072
+ {
35073
+ from: Protocols.EXTENDED.name,
35074
+ to: Protocols.VAULT.name,
35075
+ amount: new Web3Number(0, USDC_TOKEN_DECIMALS)
35076
+ },
35077
+ "NONE",
35078
+ "INVESTMENT" /* INVESTMENT */
35079
+ )
35080
+ ];
34838
35081
  }
34839
35082
  }
34840
35083
  /**
@@ -34855,43 +35098,56 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
34855
35098
  }
34856
35099
  };
34857
35100
  }
34858
- return { calls: [], status: false, transactionMetadata: { protocolFrom: "", protocolTo: "", transactionType: "DEPOSIT", usdAmount: "0", status: "FAILED", cycleType } };
35101
+ return {
35102
+ calls: [],
35103
+ status: false,
35104
+ transactionMetadata: {
35105
+ protocolFrom: "",
35106
+ protocolTo: "",
35107
+ transactionType: "DEPOSIT",
35108
+ usdAmount: "0",
35109
+ status: "FAILED",
35110
+ cycleType
35111
+ }
35112
+ };
34859
35113
  }
35114
+ /**
35115
+ * This method is used to move assets between protocols
35116
+ * @param params - The parameters for the move assets operation
35117
+ * @param extendedAdapter - The extended adapter
35118
+ * @param vesuAdapter - The vesu adapter
35119
+ * @returns The transaction result
35120
+ * If Extended amount is greater than amount of withdrawal from extended, then we need to open a long position
35121
+ * so that the amount of withdrawal from extended is fullfilled
35122
+ */
34860
35123
  async moveAssets(params, extendedAdapter, vesuAdapter) {
34861
35124
  try {
34862
35125
  if (params.amount.lessThanOrEqualTo(0)) {
34863
35126
  logger.error(
34864
35127
  `Invalid amount for moveAssets: ${params.amount.toNumber()}. Amount must be positive.`
34865
35128
  );
34866
- return this.createTransactionResult([], false, params, "NONE", params.cycleType);
34867
- }
34868
- const amountAbs = params.amount.abs();
34869
- if (params.from === Protocols.EXTENDED.name || params.to === Protocols.EXTENDED.name) {
34870
- if (amountAbs.lessThanOrEqualTo(extendedAdapter.minimumExtendedMovementAmount)) {
34871
- logger.warn(
34872
- `Amount ${amountAbs.toNumber()} is below minimum Extended movement amount ${extendedAdapter.minimumExtendedMovementAmount}. Skipping operation.`
34873
- );
34874
- return this.createTransactionResult([], false, params, "NONE", params.cycleType);
34875
- }
34876
- }
34877
- if (params.from === Protocols.VESU.name || params.to === Protocols.VESU.name) {
34878
- if (amountAbs.lessThanOrEqualTo(vesuAdapter.minimumVesuMovementAmount)) {
34879
- logger.warn(
34880
- `Amount ${amountAbs.toNumber()} is below minimum Vesu movement amount ${vesuAdapter.minimumVesuMovementAmount}. Skipping operation.`
34881
- );
34882
- return this.createTransactionResult([], false, params, "NONE", params.cycleType);
34883
- }
35129
+ return this.createTransactionResult(
35130
+ [],
35131
+ false,
35132
+ params,
35133
+ "NONE",
35134
+ params.cycleType
35135
+ );
34884
35136
  }
34885
35137
  const avnuAdapter = await this.getAvnuAdapter();
34886
35138
  if (!avnuAdapter) {
34887
35139
  logger.error(`avnu adapter not found: ${avnuAdapter}`);
34888
- return this.createTransactionResult([], false, params, "NONE", params.cycleType);
35140
+ return this.createTransactionResult(
35141
+ [],
35142
+ false,
35143
+ params,
35144
+ "NONE",
35145
+ params.cycleType
35146
+ );
34889
35147
  }
34890
35148
  logger.info(`moveAssets params, ${JSON.stringify(params)}`);
34891
35149
  const collateralToken = vesuAdapter.config.supportedPositions[0].asset;
34892
- const {
34893
- collateralPrice
34894
- } = await this.getAssetPrices();
35150
+ const { collateralPrice } = await this.getAssetPrices();
34895
35151
  if (params.to === Protocols.EXTENDED.name && params.from === Protocols.VAULT.name) {
34896
35152
  const proofsInfo = extendedAdapter.getProofs(
34897
35153
  true,
@@ -34904,23 +35160,53 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
34904
35160
  await proofsInfo.callConstructor({ amount: params.amount })
34905
35161
  );
34906
35162
  calls.push(call);
34907
- return this.createTransactionResult(calls, true, params, "DEPOSIT", params.cycleType);
35163
+ return this.createTransactionResult(
35164
+ calls,
35165
+ true,
35166
+ params,
35167
+ "DEPOSIT",
35168
+ params.cycleType
35169
+ );
34908
35170
  } else if (params.to === Protocols.VAULT.name && params.from === Protocols.EXTENDED.name) {
34909
35171
  const extendedLeverage = calculateExtendedLevergae();
34910
35172
  const extendedHoldings = await extendedAdapter.getExtendedDepositAmount();
34911
35173
  if (!extendedHoldings) {
34912
35174
  logger.error(`error getting extended holdings: ${extendedHoldings}`);
34913
- return this.createTransactionResult([], false, params, "NONE", params.cycleType);
35175
+ return this.createTransactionResult(
35176
+ [],
35177
+ false,
35178
+ params,
35179
+ "NONE",
35180
+ params.cycleType
35181
+ );
34914
35182
  }
34915
35183
  const extendedHoldingAmount = new Web3Number(
34916
35184
  extendedHoldings.availableForWithdrawal,
34917
35185
  USDC_TOKEN_DECIMALS
34918
35186
  );
34919
- logger.info(`${_VesuExtendedMultiplierStrategy.name}::moveAssets extendedHoldingAmount: ${extendedHoldingAmount.toNumber()}`);
35187
+ logger.info(
35188
+ `${_VesuExtendedMultiplierStrategy.name}::moveAssets extendedHoldingAmount: ${extendedHoldingAmount.toNumber()}`
35189
+ );
34920
35190
  if (params.amount.abs().greaterThan(extendedHoldingAmount)) {
34921
- const leftAmountAfterWithdrawalAmountInAccount = params.amount.abs().minus(extendedHoldingAmount);
34922
- logger.info(`${_VesuExtendedMultiplierStrategy.name}::moveAssets leftAmountAfterWithdrawalAmountInAccount: ${leftAmountAfterWithdrawalAmountInAccount.toNumber()}`);
34923
- const btcAmount = leftAmountAfterWithdrawalAmountInAccount.dividedBy(collateralPrice.price);
35191
+ const leftAmountAfterWithdrawalAmountInAccount = new Web3Number(
35192
+ Math.ceil(
35193
+ params.amount.abs().minus(extendedHoldingAmount).toNumber()
35194
+ ),
35195
+ USDC_TOKEN_DECIMALS
35196
+ );
35197
+ logger.info(
35198
+ `${_VesuExtendedMultiplierStrategy.name}::moveAssets leftAmountAfterWithdrawalAmountInAccount: ${leftAmountAfterWithdrawalAmountInAccount.toNumber()}`
35199
+ );
35200
+ let priceOfBTC;
35201
+ const { ask, bid, status } = await extendedAdapter.fetchOrderBookBTCUSDC();
35202
+ const price = ask.plus(bid).dividedBy(2);
35203
+ if (status) {
35204
+ priceOfBTC = price;
35205
+ } else {
35206
+ logger.error(`error fetching order book btc usdc: ${status}`);
35207
+ priceOfBTC = collateralPrice.price;
35208
+ }
35209
+ const btcAmount = leftAmountAfterWithdrawalAmountInAccount.dividedBy(priceOfBTC);
34924
35210
  const openLongPosition = btcAmount.multipliedBy(3).greaterThan(MINIMUM_EXTENDED_POSITION_SIZE) ? await extendedAdapter.createOrder(
34925
35211
  extendedLeverage.toString(),
34926
35212
  btcAmount.toNumber(),
@@ -34935,38 +35221,95 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
34935
35221
  logger.error(`error opening long position: ${openLongPosition}`);
34936
35222
  }
34937
35223
  const updatedHoldings = await extendedAdapter.getExtendedDepositAmount();
34938
- if (!updatedHoldings || new Web3Number(updatedHoldings.availableForWithdrawal, USDC_TOKEN_DECIMALS).lessThan(params.amount.abs())) {
34939
- logger.error(`Insufficient balance after opening position. Available: ${updatedHoldings?.availableForWithdrawal}, Needed: ${params.amount.abs()}`);
34940
- return this.createTransactionResult([], false, params, "NONE", params.cycleType);
35224
+ if (!updatedHoldings || new Web3Number(
35225
+ updatedHoldings.availableForWithdrawal,
35226
+ USDC_TOKEN_DECIMALS
35227
+ ).lessThan(params.amount.abs())) {
35228
+ logger.error(
35229
+ `Insufficient balance after opening position. Available: ${updatedHoldings?.availableForWithdrawal}, Needed: ${params.amount.abs()}`
35230
+ );
35231
+ return this.createTransactionResult(
35232
+ [],
35233
+ false,
35234
+ params,
35235
+ "NONE",
35236
+ params.cycleType
35237
+ );
34941
35238
  }
34942
35239
  }
34943
35240
  const {
34944
35241
  status: withdrawalFromExtendedStatus,
34945
35242
  receivedTxnHash: withdrawalFromExtendedTxnHash
34946
35243
  } = await extendedAdapter.withdrawFromExtended(params.amount);
34947
- logger.info(`withdrawalFromExtendedStatus: ${withdrawalFromExtendedStatus}, withdrawalFromExtendedTxnHash: ${withdrawalFromExtendedTxnHash}`);
35244
+ logger.info(
35245
+ `withdrawalFromExtendedStatus: ${withdrawalFromExtendedStatus}, withdrawalFromExtendedTxnHash: ${withdrawalFromExtendedTxnHash}`
35246
+ );
34948
35247
  if (withdrawalFromExtendedStatus && withdrawalFromExtendedTxnHash) {
34949
35248
  const extendedHoldings2 = await extendedAdapter.getExtendedDepositAmount();
34950
- logger.info(`extendedHoldings after withdrawal ${extendedHoldings2?.availableForWithdrawal}`);
35249
+ logger.info(
35250
+ `extendedHoldings after withdrawal ${extendedHoldings2?.availableForWithdrawal}`
35251
+ );
34951
35252
  await new Promise((resolve) => setTimeout(resolve, 5e3));
34952
- const { calls, status } = await this.moveAssetsToVaultAllocator(params.amount, extendedAdapter);
35253
+ const { calls, status } = await this.moveAssetsToVaultAllocator(
35254
+ params.amount,
35255
+ extendedAdapter
35256
+ );
34953
35257
  if (calls.length > 0 && status) {
34954
- return this.createTransactionResult(calls, true, params, "WITHDRAWAL", params.cycleType);
35258
+ return this.createTransactionResult(
35259
+ calls,
35260
+ true,
35261
+ params,
35262
+ "WITHDRAWAL",
35263
+ params.cycleType
35264
+ );
34955
35265
  } else {
34956
- return this.createTransactionResult([], true, params, "WITHDRAWAL", params.cycleType);
35266
+ return this.createTransactionResult(
35267
+ [],
35268
+ true,
35269
+ params,
35270
+ "WITHDRAWAL",
35271
+ params.cycleType
35272
+ );
34957
35273
  }
34958
35274
  } else if (withdrawalFromExtendedStatus && !withdrawalFromExtendedTxnHash) {
34959
- logger.error("withdrawal from extended successful, but funds didn't get transferred to the wallet");
34960
- return this.createTransactionResult([], true, params, "WITHDRAWAL", params.cycleType);
35275
+ logger.error(
35276
+ "withdrawal from extended successful, but funds didn't get transferred to the wallet"
35277
+ );
35278
+ return this.createTransactionResult(
35279
+ [],
35280
+ true,
35281
+ params,
35282
+ "WITHDRAWAL",
35283
+ params.cycleType
35284
+ );
34961
35285
  } else {
34962
35286
  logger.error("withdrawal from extended failed");
34963
- return this.createTransactionResult([], false, params, "NONE", params.cycleType);
35287
+ return this.createTransactionResult(
35288
+ [],
35289
+ false,
35290
+ params,
35291
+ "NONE",
35292
+ params.cycleType
35293
+ );
34964
35294
  }
34965
35295
  } else if (params.to === Protocols.VAULT.name && params.from === Protocols.VESU.name) {
34966
- const isPriceDifferenceBetweenAvnuAndExtended = await this.checkPriceDifferenceBetweenAvnuAndExtended(extendedAdapter, vesuAdapter, avnuAdapter, "close" /* CLOSE */);
35296
+ const isPriceDifferenceBetweenAvnuAndExtended = await this.checkPriceDifferenceBetweenAvnuAndExtended(
35297
+ extendedAdapter,
35298
+ vesuAdapter,
35299
+ avnuAdapter,
35300
+ "close" /* CLOSE */
35301
+ );
34967
35302
  if (!isPriceDifferenceBetweenAvnuAndExtended) {
34968
- logger.warn(`price difference between avnu and extended doesn't fit the range for close position, ${avnuAdapter.config.maximumExtendedPriceDifferenceForSwapClosing}`);
34969
- return this.createTransactionResult([], false, params, "NONE", params.cycleType);
35303
+ logger.warn(
35304
+ `price difference between avnu and extended doesn't fit the range for close position, ${avnuAdapter.config.maximumExtendedPriceDifferenceForSwapClosing}`
35305
+ );
35306
+ return this.createTransactionResult(
35307
+ [],
35308
+ false,
35309
+ params,
35310
+ "NONE",
35311
+ params.cycleType
35312
+ );
34970
35313
  }
34971
35314
  const vesuAmountInBTC = new Web3Number(
34972
35315
  params.amount.dividedBy(collateralPrice.price).toFixed(WBTC_TOKEN_DECIMALS),
@@ -34980,19 +35323,41 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
34980
35323
  await proofsInfo.callConstructor({ amount: vesuAmountInBTC })
34981
35324
  );
34982
35325
  calls.push(call);
34983
- const swapProofsInfo = avnuAdapter.getProofs(false, this.getMerkleTree());
35326
+ const swapProofsInfo = avnuAdapter.getProofs(
35327
+ false,
35328
+ this.getMerkleTree()
35329
+ );
34984
35330
  const swapProofGroups = swapProofsInfo.proofs;
34985
35331
  const swapCall = this.getManageCall(
34986
35332
  swapProofGroups,
34987
35333
  await swapProofsInfo.callConstructor({ amount: vesuAmountInBTC })
34988
35334
  );
34989
35335
  calls.push(swapCall);
34990
- return this.createTransactionResult(calls, true, params, "WITHDRAWAL", params.cycleType);
35336
+ return this.createTransactionResult(
35337
+ calls,
35338
+ true,
35339
+ params,
35340
+ "WITHDRAWAL",
35341
+ params.cycleType
35342
+ );
34991
35343
  } else if (params.to === Protocols.EXTENDED.name && params.from === Protocols.VESU.name) {
34992
- const isPriceDifferenceBetweenAvnuAndExtended = await this.checkPriceDifferenceBetweenAvnuAndExtended(extendedAdapter, vesuAdapter, avnuAdapter, "close" /* CLOSE */);
35344
+ const isPriceDifferenceBetweenAvnuAndExtended = await this.checkPriceDifferenceBetweenAvnuAndExtended(
35345
+ extendedAdapter,
35346
+ vesuAdapter,
35347
+ avnuAdapter,
35348
+ "close" /* CLOSE */
35349
+ );
34993
35350
  if (!isPriceDifferenceBetweenAvnuAndExtended) {
34994
- logger.warn(`price difference between avnu and extended doesn't fit the range for close position, ${avnuAdapter.config.maximumExtendedPriceDifferenceForSwapClosing}`);
34995
- return this.createTransactionResult([], false, params, "NONE", params.cycleType);
35351
+ logger.warn(
35352
+ `price difference between avnu and extended doesn't fit the range for close position, ${avnuAdapter.config.maximumExtendedPriceDifferenceForSwapClosing}`
35353
+ );
35354
+ return this.createTransactionResult(
35355
+ [],
35356
+ false,
35357
+ params,
35358
+ "NONE",
35359
+ params.cycleType
35360
+ );
34996
35361
  }
34997
35362
  const vesuAmountInBTC = new Web3Number(
34998
35363
  params.amount.dividedBy(collateralPrice.price).toNumber(),
@@ -35006,7 +35371,10 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
35006
35371
  await proofsInfo.callConstructor({ amount: vesuAmountInBTC })
35007
35372
  );
35008
35373
  calls.push(call);
35009
- const swapProofsInfo = avnuAdapter.getProofs(false, this.getMerkleTree());
35374
+ const swapProofsInfo = avnuAdapter.getProofs(
35375
+ false,
35376
+ this.getMerkleTree()
35377
+ );
35010
35378
  const swapProofGroups = swapProofsInfo.proofs;
35011
35379
  const swapCall = this.getManageCall(
35012
35380
  swapProofGroups,
@@ -35023,21 +35391,61 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
35023
35391
  await proofsInfoDeposit.callConstructor({ amount: params.amount })
35024
35392
  );
35025
35393
  calls.push(callDeposit);
35026
- return this.createTransactionResult(calls, true, params, "DEPOSIT", params.cycleType);
35394
+ return this.createTransactionResult(
35395
+ calls,
35396
+ true,
35397
+ params,
35398
+ "DEPOSIT",
35399
+ params.cycleType
35400
+ );
35027
35401
  }
35028
- logger.error(`Unsupported assets movement: ${params.from} to ${params.to}`);
35029
- return this.createTransactionResult([], false, params, "NONE", params.cycleType);
35402
+ logger.error(
35403
+ `Unsupported assets movement: ${params.from} to ${params.to}`
35404
+ );
35405
+ return this.createTransactionResult(
35406
+ [],
35407
+ false,
35408
+ params,
35409
+ "NONE",
35410
+ params.cycleType
35411
+ );
35030
35412
  } catch (err) {
35031
35413
  logger.error(`error moving assets: ${err}`);
35032
- return this.createTransactionResult([], false, params, "NONE", params.cycleType);
35414
+ return this.createTransactionResult(
35415
+ [],
35416
+ false,
35417
+ params,
35418
+ "NONE",
35419
+ params.cycleType
35420
+ );
35033
35421
  }
35034
35422
  }
35035
35423
  async handleDeposit() {
35036
35424
  try {
35037
- return this.createTransactionResult([], false, { from: Protocols.VAULT.name, to: Protocols.VAULT.name, amount: new Web3Number(0, 0) }, "NONE", "INVESTMENT" /* INVESTMENT */);
35425
+ return this.createTransactionResult(
35426
+ [],
35427
+ false,
35428
+ {
35429
+ from: Protocols.VAULT.name,
35430
+ to: Protocols.VAULT.name,
35431
+ amount: new Web3Number(0, 0)
35432
+ },
35433
+ "NONE",
35434
+ "INVESTMENT" /* INVESTMENT */
35435
+ );
35038
35436
  } catch (err) {
35039
35437
  logger.error(`error handling deposit: ${err}`);
35040
- return this.createTransactionResult([], false, { from: Protocols.VAULT.name, to: Protocols.VAULT.name, amount: new Web3Number(0, 0) }, "NONE", "INVESTMENT" /* INVESTMENT */);
35438
+ return this.createTransactionResult(
35439
+ [],
35440
+ false,
35441
+ {
35442
+ from: Protocols.VAULT.name,
35443
+ to: Protocols.VAULT.name,
35444
+ amount: new Web3Number(0, 0)
35445
+ },
35446
+ "NONE",
35447
+ "INVESTMENT" /* INVESTMENT */
35448
+ );
35041
35449
  }
35042
35450
  }
35043
35451
  /**
@@ -35049,32 +35457,42 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
35049
35457
  * @returns true if the price difference is within the acceptable range, false otherwise
35050
35458
  */
35051
35459
  async checkPriceDifferenceBetweenAvnuAndExtended(extendedAdapter, vesuAdapter, avnuAdapter, positionType) {
35052
- const {
35053
- ask,
35054
- bid
35055
- } = await extendedAdapter.fetchOrderBookBTCUSDC();
35460
+ const { ask, bid } = await extendedAdapter.fetchOrderBookBTCUSDC();
35056
35461
  const price = ask.plus(bid).dividedBy(2);
35057
35462
  const btcToken = vesuAdapter.config.supportedPositions[0].asset;
35058
- const btcPriceAvnu = await avnuAdapter.getPriceOfToken(btcToken.address.toString());
35463
+ const btcPriceAvnu = await avnuAdapter.getPriceOfToken(
35464
+ btcToken.address.toString()
35465
+ );
35059
35466
  if (!btcPriceAvnu) {
35060
35467
  logger.error(`error getting btc price avnu: ${btcPriceAvnu}`);
35061
35468
  return false;
35062
35469
  }
35063
35470
  logger.info(`price: ${price}`);
35064
35471
  logger.info(`btcPriceAvnu: ${btcPriceAvnu}`);
35065
- const priceDifference = new Web3Number(price.minus(btcPriceAvnu).toFixed(2), 0);
35472
+ const priceDifference = new Web3Number(
35473
+ price.minus(btcPriceAvnu).toFixed(2),
35474
+ 0
35475
+ );
35066
35476
  logger.info(`priceDifference: ${priceDifference}`);
35067
35477
  if (priceDifference.isNegative()) {
35068
35478
  return false;
35069
35479
  }
35070
35480
  if (positionType === "open" /* OPEN */) {
35071
- logger.info(`price difference between avnu and extended for open position: ${priceDifference.toNumber()}, minimumExtendedPriceDifferenceForSwapOpen: ${avnuAdapter.config.minimumExtendedPriceDifferenceForSwapOpen}`);
35072
- const result = priceDifference.greaterThanOrEqualTo(avnuAdapter.config.minimumExtendedPriceDifferenceForSwapOpen);
35481
+ logger.info(
35482
+ `price difference between avnu and extended for open position: ${priceDifference.toNumber()}, minimumExtendedPriceDifferenceForSwapOpen: ${avnuAdapter.config.minimumExtendedPriceDifferenceForSwapOpen}`
35483
+ );
35484
+ const result = priceDifference.greaterThanOrEqualTo(
35485
+ avnuAdapter.config.minimumExtendedPriceDifferenceForSwapOpen
35486
+ );
35073
35487
  logger.info(`result: ${result}`);
35074
35488
  return result;
35075
35489
  } else {
35076
- logger.info(`price difference between avnu and extended for close position: ${priceDifference.toNumber()}, maximumExtendedPriceDifferenceForSwapClosing: ${avnuAdapter.config.maximumExtendedPriceDifferenceForSwapClosing}`);
35077
- const result = priceDifference.lessThanOrEqualTo(avnuAdapter.config.maximumExtendedPriceDifferenceForSwapClosing);
35490
+ logger.info(
35491
+ `price difference between avnu and extended for close position: ${priceDifference.toNumber()}, maximumExtendedPriceDifferenceForSwapClosing: ${avnuAdapter.config.maximumExtendedPriceDifferenceForSwapClosing}`
35492
+ );
35493
+ const result = priceDifference.lessThanOrEqualTo(
35494
+ avnuAdapter.config.maximumExtendedPriceDifferenceForSwapClosing
35495
+ );
35078
35496
  logger.info(`result: ${result}`);
35079
35497
  return result;
35080
35498
  }
@@ -35096,7 +35514,19 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
35096
35514
  amount: usdcBalanceVaultAllocator.amount
35097
35515
  });
35098
35516
  calls.push(withdrawCall2);
35099
- return [this.createTransactionResult(calls, true, { from: Protocols.VAULT.name, to: Protocols.NONE.name, amount }, "WITHDRAWAL", "WITHDRAWAL" /* WITHDRAWAL */)];
35517
+ return [
35518
+ this.createTransactionResult(
35519
+ calls,
35520
+ true,
35521
+ {
35522
+ from: Protocols.VAULT.name,
35523
+ to: Protocols.NONE.name,
35524
+ amount
35525
+ },
35526
+ "WITHDRAWAL",
35527
+ "WITHDRAWAL" /* WITHDRAWAL */
35528
+ )
35529
+ ];
35100
35530
  }
35101
35531
  const vesuAdapter = await this.getVesuAdapter();
35102
35532
  const extendedAdapter = await this.getExtendedAdapter();
@@ -35105,18 +35535,40 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
35105
35535
  logger.error(
35106
35536
  `vesu or extended adapter not found: vesuAdapter=${vesuAdapter}, extendedAdapter=${extendedAdapter}`
35107
35537
  );
35108
- return [this.createTransactionResult(calls, status, { from: Protocols.VAULT.name, to: Protocols.NONE.name, amount }, "NONE", "WITHDRAWAL" /* WITHDRAWAL */)];
35538
+ return [
35539
+ this.createTransactionResult(
35540
+ calls,
35541
+ status,
35542
+ {
35543
+ from: Protocols.VAULT.name,
35544
+ to: Protocols.NONE.name,
35545
+ amount
35546
+ },
35547
+ "NONE",
35548
+ "WITHDRAWAL" /* WITHDRAWAL */
35549
+ )
35550
+ ];
35109
35551
  }
35110
35552
  let transactionResults = [];
35111
35553
  const { collateralTokenAmount } = await vesuAdapter.vesuAdapter.getAssetPrices();
35112
- const {
35113
- collateralPrice
35114
- } = await this.getAssetPrices();
35554
+ const { collateralPrice } = await this.getAssetPrices();
35115
35555
  const extendedPositon = await extendedAdapter.getAllOpenPositions();
35116
35556
  if (!extendedPositon) {
35117
35557
  status = false;
35118
35558
  logger.error("error getting extended position", extendedPositon);
35119
- return [this.createTransactionResult(calls, status, { from: Protocols.VAULT.name, to: Protocols.NONE.name, amount }, "NONE", "WITHDRAWAL" /* WITHDRAWAL */)];
35559
+ return [
35560
+ this.createTransactionResult(
35561
+ calls,
35562
+ status,
35563
+ {
35564
+ from: Protocols.VAULT.name,
35565
+ to: Protocols.NONE.name,
35566
+ amount
35567
+ },
35568
+ "NONE",
35569
+ "WITHDRAWAL" /* WITHDRAWAL */
35570
+ )
35571
+ ];
35120
35572
  }
35121
35573
  const amountDistributionForWithdrawal = await calculateAmountDistributionForWithdrawal(
35122
35574
  usdcBalanceDifference,
@@ -35129,11 +35581,27 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
35129
35581
  logger.error(
35130
35582
  `error calculating amount distribution for withdrawal: ${amountDistributionForWithdrawal}`
35131
35583
  );
35132
- return [this.createTransactionResult(calls, status, { from: Protocols.VAULT.name, to: Protocols.NONE.name, amount }, "NONE", "WITHDRAWAL" /* WITHDRAWAL */)];
35584
+ return [
35585
+ this.createTransactionResult(
35586
+ calls,
35587
+ status,
35588
+ {
35589
+ from: Protocols.VAULT.name,
35590
+ to: Protocols.NONE.name,
35591
+ amount
35592
+ },
35593
+ "NONE",
35594
+ "WITHDRAWAL" /* WITHDRAWAL */
35595
+ )
35596
+ ];
35133
35597
  }
35134
35598
  const { vesu_amount, extended_amount } = amountDistributionForWithdrawal;
35135
35599
  if (status && vesu_amount.greaterThan(0)) {
35136
- const { calls: vesuCalls, status: vesuStatus, transactionMetadata: vesuTransactionMetadata } = await this.moveAssets(
35600
+ const {
35601
+ calls: vesuCalls,
35602
+ status: vesuStatus,
35603
+ transactionMetadata: vesuTransactionMetadata
35604
+ } = await this.moveAssets(
35137
35605
  {
35138
35606
  amount: vesu_amount,
35139
35607
  from: Protocols.VESU.name,
@@ -35151,7 +35619,11 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
35151
35619
  });
35152
35620
  }
35153
35621
  if (status && extended_amount.greaterThan(0)) {
35154
- const { calls: extendedCalls, status: extendedStatus, transactionMetadata: extendedTransactionMetadata } = await this.moveAssets(
35622
+ const {
35623
+ calls: extendedCalls,
35624
+ status: extendedStatus,
35625
+ transactionMetadata: extendedTransactionMetadata
35626
+ } = await this.moveAssets(
35155
35627
  {
35156
35628
  amount: extended_amount,
35157
35629
  from: Protocols.EXTENDED.name,
@@ -35169,8 +35641,22 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
35169
35641
  transactionMetadata: extendedTransactionMetadata
35170
35642
  });
35171
35643
  } else {
35172
- logger.error("error moving assets to vault: extendedStatus: ${extendedStatus}");
35173
- return [this.createTransactionResult([], status, { from: Protocols.VAULT.name, to: Protocols.NONE.name, amount }, "NONE", "WITHDRAWAL" /* WITHDRAWAL */)];
35644
+ logger.error(
35645
+ "error moving assets to vault: extendedStatus: ${extendedStatus}"
35646
+ );
35647
+ return [
35648
+ this.createTransactionResult(
35649
+ [],
35650
+ status,
35651
+ {
35652
+ from: Protocols.VAULT.name,
35653
+ to: Protocols.NONE.name,
35654
+ amount
35655
+ },
35656
+ "NONE",
35657
+ "WITHDRAWAL" /* WITHDRAWAL */
35658
+ )
35659
+ ];
35174
35660
  }
35175
35661
  }
35176
35662
  const withdrawCall = await this.getBringLiquidityCall({
@@ -35192,7 +35678,19 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
35192
35678
  return transactionResults;
35193
35679
  } catch (err) {
35194
35680
  logger.error(`error handling withdrawal: ${err}`);
35195
- return [this.createTransactionResult([], false, { from: Protocols.VAULT.name, to: Protocols.NONE.name, amount }, "NONE", "WITHDRAWAL" /* WITHDRAWAL */)];
35681
+ return [
35682
+ this.createTransactionResult(
35683
+ [],
35684
+ false,
35685
+ {
35686
+ from: Protocols.VAULT.name,
35687
+ to: Protocols.NONE.name,
35688
+ amount
35689
+ },
35690
+ "NONE",
35691
+ "WITHDRAWAL" /* WITHDRAWAL */
35692
+ )
35693
+ ];
35196
35694
  }
35197
35695
  }
35198
35696
  async getAUM() {
@@ -35244,8 +35742,12 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
35244
35742
  const txnsToBeExecuted = txnData.filter((txn) => {
35245
35743
  return txn.transactionMetadata.transactionType !== "NONE" && txn.transactionMetadata.protocolFrom !== "" && txn.transactionMetadata.protocolTo !== "";
35246
35744
  });
35247
- const callsToBeExecutedFinal = txnsToBeExecuted.flatMap((txn) => txn.calls);
35248
- const txnMetadata = txnsToBeExecuted.map((txn) => txn.transactionMetadata);
35745
+ const callsToBeExecutedFinal = txnsToBeExecuted.flatMap(
35746
+ (txn) => txn.calls
35747
+ );
35748
+ const txnMetadata = txnsToBeExecuted.map(
35749
+ (txn) => txn.transactionMetadata
35750
+ );
35249
35751
  return { callsToBeExecutedFinal, txnMetadata };
35250
35752
  } catch (err) {
35251
35753
  logger.error(`error processing transaction data from SDK: ${err}`);
@@ -35275,23 +35777,42 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
35275
35777
  if (!vesuAdapter || !extendedAdapter) {
35276
35778
  return new Web3Number(0, 0);
35277
35779
  }
35278
- const extendedFundingRate = new Web3Number((await extendedAdapter.getNetAPY()).toFixed(4), 0);
35780
+ const extendedFundingRate = new Web3Number(
35781
+ (await extendedAdapter.getNetAPY()).toFixed(4),
35782
+ 0
35783
+ );
35279
35784
  const extendedPositions = await extendedAdapter.getAllOpenPositions();
35280
35785
  if (!extendedPositions || extendedPositions.length === 0) {
35281
35786
  logger.info(`no extended positions found`);
35282
35787
  return new Web3Number(0, 0);
35283
35788
  }
35284
- const extendePositionSizeUSD = new Web3Number(extendedPositions[0].value || 0, 0);
35789
+ const extendePositionSizeUSD = new Web3Number(
35790
+ extendedPositions[0].value || 0,
35791
+ 0
35792
+ );
35285
35793
  const vesuPositions = await vesuAdapter.getPositions();
35286
35794
  const vesuSupplyApy = vesuPositions[0].apy.apy;
35287
- const vesuCollateralSizeUSD = new Web3Number(vesuPositions[0].usdValue.toFixed(USDC_TOKEN_DECIMALS), USDC_TOKEN_DECIMALS);
35288
- const vesuDebtSizeUSD = new Web3Number(vesuPositions[1].usdValue.toFixed(USDC_TOKEN_DECIMALS), USDC_TOKEN_DECIMALS);
35795
+ const vesuCollateralSizeUSD = new Web3Number(
35796
+ vesuPositions[0].usdValue.toFixed(USDC_TOKEN_DECIMALS),
35797
+ USDC_TOKEN_DECIMALS
35798
+ );
35799
+ const vesuDebtSizeUSD = new Web3Number(
35800
+ vesuPositions[1].usdValue.toFixed(USDC_TOKEN_DECIMALS),
35801
+ USDC_TOKEN_DECIMALS
35802
+ );
35289
35803
  const num1 = extendePositionSizeUSD.multipliedBy(extendedFundingRate);
35290
35804
  const num22 = vesuCollateralSizeUSD.multipliedBy(vesuSupplyApy);
35291
35805
  const num32 = vesuDebtSizeUSD.abs();
35292
35806
  const maxBorrowApy = num1.plus(num22).minus(0.1).dividedBy(num32);
35293
- const vesuMaxBorrowableAmount = await vesuAdapter.vesuAdapter.getMaxBorrowableByInterestRate(this.config, vesuAdapter.config.debt, maxBorrowApy.toNumber());
35294
- return new Web3Number(vesuMaxBorrowableAmount.toFixed(USDC_TOKEN_DECIMALS), USDC_TOKEN_DECIMALS);
35807
+ const vesuMaxBorrowableAmount = await vesuAdapter.vesuAdapter.getMaxBorrowableByInterestRate(
35808
+ this.config,
35809
+ vesuAdapter.config.debt,
35810
+ maxBorrowApy.toNumber()
35811
+ );
35812
+ return new Web3Number(
35813
+ vesuMaxBorrowableAmount.toFixed(USDC_TOKEN_DECIMALS),
35814
+ USDC_TOKEN_DECIMALS
35815
+ );
35295
35816
  }
35296
35817
  async getVesuHealthFactors() {
35297
35818
  const vesuAdapter = await this.getVesuAdapter();
@@ -35300,18 +35821,33 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
35300
35821
  return [0, 0];
35301
35822
  }
35302
35823
  const vesuPositions = await vesuAdapter.getPositions();
35303
- const vesuCollateralSizeUSD = new Web3Number(vesuPositions[0].usdValue.toFixed(USDC_TOKEN_DECIMALS), 0);
35304
- const vesuDebtSizeUSD = new Web3Number(vesuPositions[1].usdValue.toFixed(USDC_TOKEN_DECIMALS), 0);
35824
+ const vesuCollateralSizeUSD = new Web3Number(
35825
+ vesuPositions[0].usdValue.toFixed(USDC_TOKEN_DECIMALS),
35826
+ 0
35827
+ );
35828
+ const vesuDebtSizeUSD = new Web3Number(
35829
+ vesuPositions[1].usdValue.toFixed(USDC_TOKEN_DECIMALS),
35830
+ 0
35831
+ );
35305
35832
  const actualLtv = vesuDebtSizeUSD.dividedBy(vesuCollateralSizeUSD).abs();
35306
35833
  logger.info(`actualLtv: ${actualLtv.toNumber()}`);
35307
- const maxLtv = new Web3Number(await vesuAdapter.vesuAdapter.getLTVConfig(this.config), 4);
35308
- const healthFactor = new Web3Number(maxLtv.dividedBy(actualLtv).toFixed(4), 4);
35834
+ const maxLtv = new Web3Number(
35835
+ await vesuAdapter.vesuAdapter.getLTVConfig(this.config),
35836
+ 4
35837
+ );
35838
+ const healthFactor = new Web3Number(
35839
+ maxLtv.dividedBy(actualLtv).toFixed(4),
35840
+ 4
35841
+ );
35309
35842
  logger.info(`healthFactor: ${healthFactor.toNumber()}`);
35310
35843
  const extendedBalance = await extendedAdapter.getExtendedDepositAmount();
35311
35844
  if (!extendedBalance) {
35312
35845
  return [0, 0];
35313
35846
  }
35314
- const extendedLeverage = new Web3Number((Number(extendedBalance.marginRatio) * 100).toFixed(4), 4);
35847
+ const extendedLeverage = new Web3Number(
35848
+ (Number(extendedBalance.marginRatio) * 100).toFixed(4),
35849
+ 4
35850
+ );
35315
35851
  logger.info(`extendedLeverage: ${extendedLeverage.toNumber()}`);
35316
35852
  return [healthFactor.toNumber(), extendedLeverage.toNumber()];
35317
35853
  }
@@ -35332,12 +35868,16 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
35332
35868
  splits: []
35333
35869
  };
35334
35870
  }
35335
- let vesuPositions = allPositions.filter((item) => item.protocol === Protocols.VESU);
35871
+ let vesuPositions = allPositions.filter(
35872
+ (item) => item.protocol === Protocols.VESU
35873
+ );
35336
35874
  vesuPositions.map((item) => {
35337
35875
  item.apy.apy = item.apy.apy * 0.1;
35338
35876
  });
35339
35877
  const extendedPositions = await extendedAdapter.getAllOpenPositions();
35340
- const usdcToken = Global.getDefaultTokens().find((token) => token.symbol === "USDC");
35878
+ const usdcToken = Global.getDefaultTokens().find(
35879
+ (token) => token.symbol === "USDC"
35880
+ );
35341
35881
  if (!extendedPositions || !usdcToken) {
35342
35882
  return {
35343
35883
  net: 0,
@@ -35350,7 +35890,10 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
35350
35890
  const totalHoldingsUSDValue = allPositions.reduce((acc, curr) => acc + curr.usdValue, 0) + Number(extendedEquity);
35351
35891
  console.log(totalHoldingsUSDValue);
35352
35892
  const extendedPositionSizeMultipliedByApy = Number(extendedPosition.value) * extendedApy;
35353
- let weightedAPYs = allPositions.reduce((acc, curr) => acc + curr.apy.apy * curr.usdValue, 0) + extendedPositionSizeMultipliedByApy;
35893
+ let weightedAPYs = allPositions.reduce(
35894
+ (acc, curr) => acc + curr.apy.apy * curr.usdValue,
35895
+ 0
35896
+ ) + extendedPositionSizeMultipliedByApy;
35354
35897
  console.log(weightedAPYs);
35355
35898
  const netAPY = weightedAPYs / totalHoldingsUSDValue;
35356
35899
  console.log(netAPY);
@@ -35364,13 +35907,22 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
35364
35907
  });
35365
35908
  return {
35366
35909
  net: netAPY,
35367
- splits: allPositions.map((p) => ({ apy: p.apy.apy, id: p.remarks ?? "" }))
35910
+ splits: allPositions.map((p) => ({
35911
+ apy: p.apy.apy,
35912
+ id: p.remarks ?? ""
35913
+ }))
35368
35914
  };
35369
35915
  }
35370
35916
  async getWalletHoldings() {
35371
- const usdceToken = Global.getDefaultTokens().find((token) => token.symbol === "USDCe");
35372
- const wbtcToken = Global.getDefaultTokens().find((token) => token.symbol === "WBTC");
35373
- const usdcToken = Global.getDefaultTokens().find((token) => token.symbol === "USDC");
35917
+ const usdceToken = Global.getDefaultTokens().find(
35918
+ (token) => token.symbol === "USDCe"
35919
+ );
35920
+ const wbtcToken = Global.getDefaultTokens().find(
35921
+ (token) => token.symbol === "WBTC"
35922
+ );
35923
+ const usdcToken = Global.getDefaultTokens().find(
35924
+ (token) => token.symbol === "USDC"
35925
+ );
35374
35926
  if (!usdceToken || !wbtcToken || !usdcToken) {
35375
35927
  return [];
35376
35928
  }
@@ -35444,9 +35996,7 @@ function getLooperSettings2(lstSymbol, underlyingSymbol, vaultSettings, pool1, e
35444
35996
  });
35445
35997
  const extendedAdapter = new ExtendedAdapter({
35446
35998
  ...baseAdapterConfig,
35447
- supportedPositions: [
35448
- { asset: usdcToken, isDebt: true }
35449
- ],
35999
+ supportedPositions: [{ asset: usdcToken, isDebt: true }],
35450
36000
  vaultIdExtended,
35451
36001
  extendedContract: EXTENDED_CONTRACT,
35452
36002
  extendedBackendWriteUrl,
@@ -35503,11 +36053,11 @@ function getLooperSettings2(lstSymbol, underlyingSymbol, vaultSettings, pool1, e
35503
36053
  asset: wbtcToken.address
35504
36054
  });
35505
36055
  vaultSettings.leafAdapters.push(() => vesuMultiplyAdapter.getDepositLeaf());
36056
+ vaultSettings.leafAdapters.push(() => vesuMultiplyAdapter.getWithdrawLeaf());
36057
+ vaultSettings.leafAdapters.push(() => extendedAdapter.getDepositLeaf());
35506
36058
  vaultSettings.leafAdapters.push(
35507
- () => vesuMultiplyAdapter.getWithdrawLeaf()
36059
+ () => extendedAdapter.getSwapFromLegacyLeaf()
35508
36060
  );
35509
- vaultSettings.leafAdapters.push(() => extendedAdapter.getDepositLeaf());
35510
- vaultSettings.leafAdapters.push(() => extendedAdapter.getSwapFromLegacyLeaf());
35511
36061
  vaultSettings.leafAdapters.push(() => avnuAdapter.getDepositLeaf());
35512
36062
  vaultSettings.leafAdapters.push(() => avnuAdapter.getWithdrawLeaf());
35513
36063
  vaultSettings.leafAdapters.push(
@@ -35552,29 +36102,70 @@ function VaultDescription2(lstSymbol, underlyingSymbol) {
35552
36102
  " to create leverage. Depositors receive vault shares that represent a proportional claim on the underlying assets and accrued yield."
35553
36103
  ] }),
35554
36104
  /* @__PURE__ */ jsxs4("p", { style: { fontSize: "14px", lineHeight: "1.5", marginBottom: "16px" }, children: [
35555
- "This vault uses Vesu for lending and borrowing. The oracle used by this pool is a ",
35556
- highlightTextWithLinks("conversion rate oracle", [{ highlight: "conversion rate oracle", link: "https://docs.pragma.build/starknet/development#conversion-rate" }]),
36105
+ "This vault uses Vesu for lending and borrowing. The oracle used by this pool is a",
36106
+ " ",
36107
+ highlightTextWithLinks("conversion rate oracle", [
36108
+ {
36109
+ highlight: "conversion rate oracle",
36110
+ link: "https://docs.pragma.build/starknet/development#conversion-rate"
36111
+ }
36112
+ ]),
35557
36113
  " ",
35558
36114
  "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."
35559
36115
  ] }),
35560
- /* @__PURE__ */ jsx5("div", { style: { backgroundColor: "#222", padding: "10px", borderRadius: "8px", marginBottom: "20px", border: "1px solid #444" }, children: /* @__PURE__ */ jsxs4("p", { style: { fontSize: "13px", color: "#ccc" }, children: [
35561
- /* @__PURE__ */ jsx5("strong", { children: "Withdrawals:" }),
35562
- " Requests can take up to ",
35563
- /* @__PURE__ */ jsx5("strong", { children: "1-2 hours" }),
35564
- " to process as the vault unwinds and settles routing."
35565
- ] }) }),
35566
- /* @__PURE__ */ jsx5("div", { style: { backgroundColor: "#222", padding: "10px", borderRadius: "8px", marginBottom: "20px", border: "1px solid #444" }, children: /* @__PURE__ */ jsxs4("p", { style: { fontSize: "13px", color: "#ccc" }, children: [
35567
- /* @__PURE__ */ jsx5("strong", { children: "Debt limits:" }),
35568
- " 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."
35569
- ] }) })
36116
+ /* @__PURE__ */ jsx5(
36117
+ "div",
36118
+ {
36119
+ style: {
36120
+ backgroundColor: "#222",
36121
+ padding: "10px",
36122
+ borderRadius: "8px",
36123
+ marginBottom: "20px",
36124
+ border: "1px solid #444"
36125
+ },
36126
+ children: /* @__PURE__ */ jsxs4("p", { style: { fontSize: "13px", color: "#ccc" }, children: [
36127
+ /* @__PURE__ */ jsx5("strong", { children: "Withdrawals:" }),
36128
+ " Requests can take up to",
36129
+ " ",
36130
+ /* @__PURE__ */ jsx5("strong", { children: "1-2 hours" }),
36131
+ " to process as the vault unwinds and settles routing."
36132
+ ] })
36133
+ }
36134
+ ),
36135
+ /* @__PURE__ */ jsx5(
36136
+ "div",
36137
+ {
36138
+ style: {
36139
+ backgroundColor: "#222",
36140
+ padding: "10px",
36141
+ borderRadius: "8px",
36142
+ marginBottom: "20px",
36143
+ border: "1px solid #444"
36144
+ },
36145
+ children: /* @__PURE__ */ jsxs4("p", { style: { fontSize: "13px", color: "#ccc" }, children: [
36146
+ /* @__PURE__ */ jsx5("strong", { children: "Debt limits:" }),
36147
+ " 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."
36148
+ ] })
36149
+ }
36150
+ )
35570
36151
  ] });
35571
36152
  }
35572
36153
  var re7UsdcPrimeDevansh = {
35573
- vaultAddress: ContractAddr.from("0x058905be22d6a81792df79425dc9641cf3e1b77f36748631b7d7e5d713a32b55"),
35574
- manager: ContractAddr.from("0x02648d703783feb2d967cf0520314cb5aa800d69a9426f3e3b317395af44de16"),
35575
- vaultAllocator: ContractAddr.from("0x07d533c838eab6a4d854dd3aea96a55993fccd35821921970d00bde946b63b6f"),
35576
- redeemRequestNFT: ContractAddr.from("0x01ef91f08fb99729c00f82fc6e0ece37917bcc43952596c19996259dc8adbbba"),
35577
- aumOracle: ContractAddr.from("0x030b6acfec162f5d6e72b8a4d2798aedce78fb39de78a8f549f7cd277ae8bc8d"),
36154
+ vaultAddress: ContractAddr.from(
36155
+ "0x058905be22d6a81792df79425dc9641cf3e1b77f36748631b7d7e5d713a32b55"
36156
+ ),
36157
+ manager: ContractAddr.from(
36158
+ "0x02648d703783feb2d967cf0520314cb5aa800d69a9426f3e3b317395af44de16"
36159
+ ),
36160
+ vaultAllocator: ContractAddr.from(
36161
+ "0x07d533c838eab6a4d854dd3aea96a55993fccd35821921970d00bde946b63b6f"
36162
+ ),
36163
+ redeemRequestNFT: ContractAddr.from(
36164
+ "0x01ef91f08fb99729c00f82fc6e0ece37917bcc43952596c19996259dc8adbbba"
36165
+ ),
36166
+ aumOracle: ContractAddr.from(
36167
+ "0x030b6acfec162f5d6e72b8a4d2798aedce78fb39de78a8f549f7cd277ae8bc8d"
36168
+ ),
35578
36169
  leafAdapters: [],
35579
36170
  adapters: [],
35580
36171
  targetHealthFactor: 1.4,
@@ -35586,13 +36177,29 @@ var re7UsdcPrimeDevansh = {
35586
36177
  "0.001",
35587
36178
  Global.getDefaultTokens().find((token) => token.symbol === "WBTC").decimals
35588
36179
  ),
35589
- borrowable_assets: [Global.getDefaultTokens().find((token) => token.symbol === "WBTC")],
36180
+ borrowable_assets: [
36181
+ Global.getDefaultTokens().find((token) => token.symbol === "WBTC")
36182
+ ],
35590
36183
  minimumWBTCDifferenceForAvnuSwap: MINIMUM_WBTC_DIFFERENCE_FOR_AVNU_SWAP,
35591
36184
  walletAddress: WALLET_ADDRESS
35592
36185
  };
35593
36186
  var VesuExtendedTestStrategies = (extendedBackendReadUrl, extendedBackendWriteUrl, vaultIdExtended, minimumExtendedMovementAmount, minimumVesuMovementAmount, minimumExtendedRetriesDelayForOrderStatus, minimumExtendedPriceDifferenceForSwapOpen, maximumExtendedPriceDifferenceForSwapClosing) => {
35594
36187
  return [
35595
- getStrategySettingsVesuExtended("WBTC", "USDC", re7UsdcPrimeDevansh, false, false, extendedBackendReadUrl, extendedBackendWriteUrl, vaultIdExtended, minimumExtendedMovementAmount, minimumVesuMovementAmount, minimumExtendedRetriesDelayForOrderStatus, minimumExtendedPriceDifferenceForSwapOpen, maximumExtendedPriceDifferenceForSwapClosing)
36188
+ getStrategySettingsVesuExtended(
36189
+ "WBTC",
36190
+ "USDC",
36191
+ re7UsdcPrimeDevansh,
36192
+ false,
36193
+ false,
36194
+ extendedBackendReadUrl,
36195
+ extendedBackendWriteUrl,
36196
+ vaultIdExtended,
36197
+ minimumExtendedMovementAmount,
36198
+ minimumVesuMovementAmount,
36199
+ minimumExtendedRetriesDelayForOrderStatus,
36200
+ minimumExtendedPriceDifferenceForSwapOpen,
36201
+ maximumExtendedPriceDifferenceForSwapClosing
36202
+ )
35596
36203
  ];
35597
36204
  };
35598
36205
  function getStrategySettingsVesuExtended(lstSymbol, underlyingSymbol, addresses, isPreview = false, isLST, extendedBackendReadUrl, extendedBackendWriteUrl, vaultIdExtended, minimumExtendedMovementAmount, minimumVesuMovementAmount, minimumExtendedRetriesDelayForOrderStatus, minimumExtendedPriceDifferenceForSwapOpen, maximumExtendedPriceDifferenceForSwapClosing) {
@@ -35602,8 +36209,25 @@ function getStrategySettingsVesuExtended(lstSymbol, underlyingSymbol, addresses,
35602
36209
  address: addresses.vaultAddress,
35603
36210
  launchBlock: 0,
35604
36211
  type: "Other",
35605
- depositTokens: [Global.getDefaultTokens().find((token) => token.symbol === underlyingSymbol)],
35606
- additionalInfo: getLooperSettings2(lstSymbol, underlyingSymbol, addresses, VesuPools.Re7USDCPrime, extendedBackendReadUrl, extendedBackendWriteUrl, vaultIdExtended, minimumExtendedMovementAmount, minimumVesuMovementAmount, minimumExtendedRetriesDelayForOrderStatus, minimumExtendedPriceDifferenceForSwapOpen, maximumExtendedPriceDifferenceForSwapClosing),
36212
+ depositTokens: [
36213
+ Global.getDefaultTokens().find(
36214
+ (token) => token.symbol === underlyingSymbol
36215
+ )
36216
+ ],
36217
+ additionalInfo: getLooperSettings2(
36218
+ lstSymbol,
36219
+ underlyingSymbol,
36220
+ addresses,
36221
+ VesuPools.Re7USDCPrime,
36222
+ extendedBackendReadUrl,
36223
+ extendedBackendWriteUrl,
36224
+ vaultIdExtended,
36225
+ minimumExtendedMovementAmount,
36226
+ minimumVesuMovementAmount,
36227
+ minimumExtendedRetriesDelayForOrderStatus,
36228
+ minimumExtendedPriceDifferenceForSwapOpen,
36229
+ maximumExtendedPriceDifferenceForSwapClosing
36230
+ ),
35607
36231
  risk: {
35608
36232
  riskFactor: _riskFactor3,
35609
36233
  netRisk: _riskFactor3.reduce((acc, curr) => acc + curr.value * curr.weight, 0) / _riskFactor3.reduce((acc, curr) => acc + curr.weight, 0),
@@ -39361,6 +39985,7 @@ export {
39361
39985
  calculateBTCPriceDelta,
39362
39986
  calculateDebtAmount,
39363
39987
  calculateDebtReductionAmountForWithdrawal,
39988
+ calculateDeltaDebtAmount,
39364
39989
  calculateExposureDelta,
39365
39990
  calculateExtendedLevergae,
39366
39991
  calculateVesUPositionSizeGivenExtended,