@strkfarm/sdk 2.0.0-dev.1 → 2.0.0-dev.2

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.
@@ -4341,6 +4341,7 @@ var EkuboQuoter = class _EkuboQuoter {
4341
4341
  return quote.splits.map((split) => {
4342
4342
  const isNegativeAmount = BigInt(split.amount_specified) <= 0n;
4343
4343
  const token = isNegativeAmount ? toTokenInfo : fromTokenInfo;
4344
+ console.log("token for withdrawal", token, isNegativeAmount);
4344
4345
  return {
4345
4346
  route: split.route.map((_route) => ({
4346
4347
  pool_key: {
@@ -28346,6 +28347,7 @@ var vesu_multiple_abi_default = [
28346
28347
  var AVNU_API = "https://starknet.api.avnu.fi/swap/v2/quotes";
28347
28348
  var USDC_TOKEN_DECIMALS = 6;
28348
28349
  var USDC_TOKEN_ADDRESS = "0x053C91253BC9682c04929cA02ED00b3E423f6710D2ee7e0D5EBB06F3eCF368A8";
28350
+ var BUFFER_USDC_IN_WITHDRAWAL = 5;
28349
28351
  var WBTC_TOKEN_ADDRESS = "0x3fe2b97c1fd336e750087d68b9b867997fd64a2661ff3ca5a7c771641e8e7ac";
28350
28352
  var WBTC_TOKEN_DECIMALS = 8;
28351
28353
  var MAINTENANCE_MARGIN = 0.01;
@@ -28437,8 +28439,8 @@ var calculateAmountDistributionForWithdrawal = async (amountInUsdc, collateralPr
28437
28439
  logger.error("error getting extended positions");
28438
28440
  return null;
28439
28441
  }
28440
- const extendedBTCExposure = extendedPosition.length > 0 ? new Web3Number(extendedPosition[0].size, WBTC_TOKEN_DECIMALS) : new Web3Number(0, WBTC_TOKEN_DECIMALS);
28441
- const extendedExposureUSD = extendedBTCExposure.multipliedBy(collateralPrice);
28442
+ const extendedExposureUSD = extendedPosition.length > 0 ? new Web3Number(extendedPosition[0].value, USDC_TOKEN_DECIMALS) : new Web3Number(0, USDC_TOKEN_DECIMALS);
28443
+ console.log("THe collateral is", collateralPrice, collateralUnits);
28442
28444
  const vesuExposureUSD = collateralUnits.multipliedBy(collateralPrice);
28443
28445
  if (vesuExposureUSD.lessThan(0)) {
28444
28446
  return {
@@ -28456,9 +28458,14 @@ var calculateAmountDistributionForWithdrawal = async (amountInUsdc, collateralPr
28456
28458
  vesu_leverage
28457
28459
  };
28458
28460
  }
28461
+ console.log("the vesu exposure usd is", vesuExposureUSD.toNumber());
28462
+ console.log("the extended exposure usd is", extendedExposureUSD.toNumber());
28463
+ console.log("the amount in usdc is", amountInUsdc.toNumber());
28464
+ console.log("the extended leverage is", extended_leverage);
28465
+ console.log("the vesu leverage is", vesu_leverage);
28459
28466
  const numerator1 = amountInUsdc.multipliedBy(extended_leverage);
28460
- const numerator2 = vesuExposureUSD.multipliedBy(vesu_leverage);
28461
- const numerator3 = extendedExposureUSD.multipliedBy(extended_leverage).multipliedBy(-1);
28467
+ const numerator2 = vesuExposureUSD;
28468
+ const numerator3 = extendedExposureUSD.multipliedBy(-1);
28462
28469
  const finalNumerator = numerator1.plus(numerator2).plus(numerator3);
28463
28470
  const denominator = extended_leverage + vesu_leverage;
28464
28471
  const vesuAmountInUSDC = finalNumerator.dividedBy(denominator);
@@ -28468,6 +28475,7 @@ var calculateAmountDistributionForWithdrawal = async (amountInUsdc, collateralPr
28468
28475
  "the extended amount in usdc is",
28469
28476
  extendedAmountInUSDC.toNumber()
28470
28477
  );
28478
+ await new Promise((resolve) => setTimeout(resolve, 1e4));
28471
28479
  return {
28472
28480
  vesu_amount: vesuAmountInUSDC,
28473
28481
  extended_amount: extendedAmountInUSDC,
@@ -28908,7 +28916,7 @@ var VesuMultiplyAdapter = class _VesuMultiplyAdapter extends BaseAdapter {
28908
28916
  this.config.debt.address.toBigInt(),
28909
28917
  this.config.vaultAllocator.toBigInt()
28910
28918
  ],
28911
- sanitizer: SIMPLE_SANITIZER_V2,
28919
+ sanitizer: isV2 ? SIMPLE_SANITIZER_V2 : SIMPLE_SANITIZER,
28912
28920
  // vmw = vesu multiply withdraw
28913
28921
  id: `vmw_${this.config.poolId.shortString()}_${collateral.symbol}_${debt.symbol}`
28914
28922
  },
@@ -29057,7 +29065,7 @@ var VesuMultiplyAdapter = class _VesuMultiplyAdapter extends BaseAdapter {
29057
29065
  },
29058
29066
  // Vesu multiply call
29059
29067
  {
29060
- sanitizer: SIMPLE_SANITIZER_V2,
29068
+ sanitizer: isV2 ? SIMPLE_SANITIZER_V2 : SIMPLE_SANITIZER,
29061
29069
  call: {
29062
29070
  contractAddress: vesuMultiply,
29063
29071
  selector: hash5.getSelectorFromName("modify_lever"),
@@ -29145,19 +29153,13 @@ var VesuMultiplyAdapter = class _VesuMultiplyAdapter extends BaseAdapter {
29145
29153
  leverSwap = ekuboQuoter.getVesuMultiplyQuote(swapQuote, debtToken, collateralToken);
29146
29154
  const MAX_SLIPPAGE = 2e-3;
29147
29155
  if (debtAmount.greaterThan(0)) {
29148
- console.log("debtAmountInCollateralUnits", debtAmountInCollateralUnits.toNumber());
29149
- leverSwapLimitAmount = await ekuboQuoter.getSwapLimitAmount(debtToken, collateralToken, debtAmount, MAX_SLIPPAGE);
29150
- const anotherleverSwapLimitAmount = debtAmount.multipliedBy(1 + MAX_SLIPPAGE);
29151
- console.log("anotherleverSwapLimitAmount", anotherleverSwapLimitAmount, leverSwapLimitAmount);
29156
+ leverSwapLimitAmount = debtAmount.multipliedBy(1 + MAX_SLIPPAGE);
29152
29157
  } else if (debtAmount.lessThan(0)) {
29153
- leverSwapLimitAmount = await ekuboQuoter.getSwapLimitAmount(collateralToken, debtToken, debtAmountInCollateralUnits.multipliedBy(-1), MAX_SLIPPAGE);
29154
- const anotherleverSwapLimitAmount = debtAmount.abs().multipliedBy(1 - MAX_SLIPPAGE);
29155
- console.log("anotherleverSwapLimitAmount", anotherleverSwapLimitAmount, leverSwapLimitAmount);
29158
+ leverSwapLimitAmount = debtAmount.abs().multipliedBy(1 - MAX_SLIPPAGE);
29156
29159
  } else {
29157
29160
  leverSwapLimitAmount = Web3Number.fromWei(0, this.config.debt.decimals);
29158
29161
  }
29159
29162
  await new Promise((resolve) => setTimeout(resolve, 1e4));
29160
- console.log("leverSwapLimitAmount", leverSwapLimitAmount);
29161
29163
  } else {
29162
29164
  throw new Error(`VesuMultiplyAdapter: Price impact too high (${swapQuote.price_impact}), skipping swap`);
29163
29165
  }
@@ -29227,26 +29229,23 @@ var VesuMultiplyAdapter = class _VesuMultiplyAdapter extends BaseAdapter {
29227
29229
  debtPrice.price,
29228
29230
  debtToken.decimals
29229
29231
  );
29230
- console.log("debtAmountToRepay", debtAmountToRepay);
29231
29232
  if (!debtAmountToRepay) {
29232
29233
  throw new Error("error calculating debt amount to repay");
29233
29234
  }
29234
29235
  const ekuboQuoter = new EkuboQuoter(this.config.networkConfig, this.config.pricer);
29235
29236
  const debtInDebtUnits = new Web3Number(debtAmountToRepay, debtToken.decimals).dividedBy(debtPrice.price).multipliedBy(10 ** debtToken.decimals);
29236
- const debtInCollateralUnits = new Web3Number(debtAmountToRepay, debtToken.decimals).dividedBy(collateralPrice.price).multipliedBy(10 ** collateralToken.decimals);
29237
29237
  const swapQuote = await ekuboQuoter.getQuote(
29238
29238
  debtToken.address.address,
29239
29239
  collateralToken.address.address,
29240
29240
  debtInDebtUnits
29241
29241
  );
29242
29242
  const MAX_SLIPPAGE = 2e-3;
29243
- if (swapQuote.price_impact < 0.025) {
29244
- leverSwap = ekuboQuoter.getVesuMultiplyQuote(swapQuote, debtToken, collateralToken);
29243
+ if (swapQuote.price_impact < 25e-4) {
29244
+ leverSwap = ekuboQuoter.getVesuMultiplyQuote(swapQuote, collateralToken, debtToken);
29245
29245
  } else {
29246
29246
  logger.error(`VesuMultiplyAdapter: Price impact too high (${swapQuote.price_impact}), skipping swap`);
29247
29247
  }
29248
- const anotherLeverSwapLimitAmount = await ekuboQuoter.getSwapLimitAmount(collateralToken, debtToken, debtInDebtUnits, MAX_SLIPPAGE);
29249
- leverSwapLimitAmount = await ekuboQuoter.getSwapLimitAmount(debtToken, collateralToken, debtInCollateralUnits, MAX_SLIPPAGE);
29248
+ leverSwapLimitAmount = new Web3Number(debtAmountToRepay, debtToken.decimals).abs().multipliedBy(1 + MAX_SLIPPAGE);
29250
29249
  const multiplyParams = await this.getLeverParams(false, params, leverSwap, leverSwapLimitAmount);
29251
29250
  const call = multiplyContract.populate("modify_lever", {
29252
29251
  modify_lever_params: this.formatMultiplyParams(false, multiplyParams)
@@ -29482,6 +29481,41 @@ var ExtendedAdapter = class _ExtendedAdapter extends BaseAdapter {
29482
29481
  }
29483
29482
  ];
29484
29483
  }
29484
+ getSwapFromLegacyLeaf() {
29485
+ const leafConfigs = this._getSwapFromLegacyLeaf();
29486
+ const leaves = leafConfigs.map((config) => {
29487
+ const { target, method, packedArguments, sanitizer, id } = config;
29488
+ const leaf = this.constructSimpleLeafData({
29489
+ id,
29490
+ target,
29491
+ method,
29492
+ packedArguments
29493
+ }, sanitizer);
29494
+ return leaf;
29495
+ });
29496
+ return { leaves, callConstructor: this.getSwapFromLegacyCall.bind(this) };
29497
+ }
29498
+ _getSwapFromLegacyLeaf() {
29499
+ const usdceToken = Global.getDefaultTokens().find((token) => token.symbol === "USDCe");
29500
+ return [
29501
+ {
29502
+ target: usdceToken.address,
29503
+ method: "approve",
29504
+ packedArguments: [
29505
+ AVNU_EXCHANGE_FOR_LEGACY_USDC.toBigInt()
29506
+ ],
29507
+ id: `extendedswaplegacyapprove_${usdceToken.symbol}`,
29508
+ sanitizer: AVNU_LEGACY_SANITIZER
29509
+ },
29510
+ {
29511
+ target: AVNU_EXCHANGE_FOR_LEGACY_USDC,
29512
+ method: "swap_to_new",
29513
+ packedArguments: [],
29514
+ id: `extended_swap_to_new_${usdceToken.symbol}`,
29515
+ sanitizer: AVNU_LEGACY_SANITIZER
29516
+ }
29517
+ ];
29518
+ }
29485
29519
  _getWithdrawLeaf() {
29486
29520
  return [];
29487
29521
  }
@@ -29562,6 +29596,70 @@ var ExtendedAdapter = class _ExtendedAdapter extends BaseAdapter {
29562
29596
  return [];
29563
29597
  }
29564
29598
  }
29599
+ getProofsForFromLegacySwap(tree) {
29600
+ let proofGroups = [];
29601
+ const ids = this.getSwapFromLegacyLeaf().leaves.map((l) => l.readableId);
29602
+ for (const [i, v] of tree.entries()) {
29603
+ if (ids.includes(v.readableId)) {
29604
+ proofGroups.push(tree.getProof(i));
29605
+ }
29606
+ }
29607
+ if (proofGroups.length != ids.length) {
29608
+ throw new Error(`Not all proofs found for IDs: ${ids.join(", ")}`);
29609
+ }
29610
+ return {
29611
+ proofs: proofGroups,
29612
+ callConstructor: this.getSwapFromLegacyCall.bind(this)
29613
+ };
29614
+ }
29615
+ async getSwapFromLegacyCall(params) {
29616
+ try {
29617
+ const usdcToken = this.config.supportedPositions[0].asset;
29618
+ const usdceToken = Global.getDefaultTokens().find((token) => token.symbol === "USDCe");
29619
+ const amount = uint25613.bnToUint256(params.amount.multipliedBy(10).toWei());
29620
+ const quotes = await this.config.avnuAdapter.getQuotesAvnu(
29621
+ usdceToken.address.toString(),
29622
+ usdcToken.address.toString(),
29623
+ params.amount.toNumber(),
29624
+ this.config.avnuAdapter.config.vaultAllocator.address.toString(),
29625
+ usdcToken.decimals,
29626
+ false
29627
+ );
29628
+ if (!quotes) {
29629
+ logger.error("error getting quotes from avnu");
29630
+ return [];
29631
+ }
29632
+ const getCalldata = await this.config.avnuAdapter.getSwapCallData(quotes);
29633
+ const swapCallData = getCalldata[0];
29634
+ return [
29635
+ {
29636
+ sanitizer: AVNU_LEGACY_SANITIZER,
29637
+ call: {
29638
+ contractAddress: usdceToken.address,
29639
+ selector: hash6.getSelectorFromName("approve"),
29640
+ calldata: [
29641
+ AVNU_EXCHANGE_FOR_LEGACY_USDC.toBigInt(),
29642
+ toBigInt(amount.low.toString()),
29643
+ // amount low
29644
+ toBigInt(amount.high.toString())
29645
+ // amount high
29646
+ ]
29647
+ }
29648
+ },
29649
+ {
29650
+ sanitizer: AVNU_LEGACY_SANITIZER,
29651
+ call: {
29652
+ contractAddress: AVNU_EXCHANGE_FOR_LEGACY_USDC,
29653
+ selector: hash6.getSelectorFromName("swap_to_new"),
29654
+ calldata: swapCallData
29655
+ }
29656
+ }
29657
+ ];
29658
+ } catch (error) {
29659
+ logger.error(`Error creating Deposit Call: ${error}`);
29660
+ return [];
29661
+ }
29662
+ }
29565
29663
  //Swap wbtc to usdc
29566
29664
  async getWithdrawCall(params) {
29567
29665
  try {
@@ -29579,10 +29677,10 @@ var ExtendedAdapter = class _ExtendedAdapter extends BaseAdapter {
29579
29677
  if (!this.client) {
29580
29678
  throw new Error("Client not initialized");
29581
29679
  }
29582
- const withdrawalRequest = this.client.withdrawUSDC(amount.toString());
29583
- if ((await withdrawalRequest).status === "OK") {
29584
- console.log("Withdrawal request successful");
29585
- return true;
29680
+ const withdrawalRequest = await this.client.withdrawUSDC(amount.toFixed(2));
29681
+ if (withdrawalRequest.status === "OK") {
29682
+ const withdrawalStatus = await this.getDepositOrWithdrawalStatus(withdrawalRequest.data, "WITHDRAWAL" /* WITHDRAWAL */);
29683
+ return withdrawalStatus;
29586
29684
  }
29587
29685
  return false;
29588
29686
  } catch (error) {
@@ -29763,7 +29861,7 @@ var ExtendedAdapter = class _ExtendedAdapter extends BaseAdapter {
29763
29861
  logger.error(`createShortOrder failed on attempt ${attempt}: ${err.message}`);
29764
29862
  if (attempt < maxAttempts) {
29765
29863
  const backoff = 1200 * attempt;
29766
- console.log(`Retrying after ${backoff}ms...`);
29864
+ logger.info(`Retrying after ${backoff}ms...`);
29767
29865
  await new Promise((resolve) => setTimeout(resolve, backoff));
29768
29866
  return this.createOrder(
29769
29867
  leverage,
@@ -29794,7 +29892,7 @@ var ExtendedAdapter = class _ExtendedAdapter extends BaseAdapter {
29794
29892
  }
29795
29893
  return null;
29796
29894
  } catch (err) {
29797
- console.log("Error opening short extended position", err);
29895
+ logger.error(`Error opening short extended position, ${err}`);
29798
29896
  return null;
29799
29897
  }
29800
29898
  }
@@ -29804,17 +29902,16 @@ var ExtendedAdapter = class _ExtendedAdapter extends BaseAdapter {
29804
29902
  operationsType: [operationsType],
29805
29903
  operationsStatus: ["COMPLETED" /* COMPLETED */]
29806
29904
  });
29807
- console.log("transferHistory", transferHistory);
29808
29905
  if (operationsType === "DEPOSIT" /* DEPOSIT */) {
29809
29906
  const myTransferStatus = transferHistory.data.find((operation) => operation.transactionHash === orderId);
29810
29907
  if (!myTransferStatus) {
29811
- return false;
29908
+ return true;
29812
29909
  }
29813
29910
  return true;
29814
29911
  } else {
29815
- const myTransferStatus = transferHistory.data.find((operation) => operation.id === orderId);
29912
+ const myTransferStatus = transferHistory.data.find((operation) => operation.id.toString() === orderId.toString());
29816
29913
  if (!myTransferStatus) {
29817
- return false;
29914
+ return true;
29818
29915
  }
29819
29916
  return true;
29820
29917
  }
@@ -33403,7 +33500,7 @@ var AvnuAdapter = class _AvnuAdapter extends BaseAdapter {
33403
33500
  packedArguments: [
33404
33501
  fromToken.address.toBigInt(),
33405
33502
  //wbtc
33406
- fromToken.address.toBigInt(),
33503
+ toToken.address.toBigInt(),
33407
33504
  //usdc
33408
33505
  vaultAllocator.toBigInt()
33409
33506
  ],
@@ -33417,13 +33514,11 @@ var AvnuAdapter = class _AvnuAdapter extends BaseAdapter {
33417
33514
  }
33418
33515
  async getDepositCall(params) {
33419
33516
  try {
33420
- console.log("params.amount", params.amount);
33421
33517
  const fromToken = this.config.supportedPositions[0].asset;
33422
33518
  const toToken = this.config.supportedPositions[1].asset;
33423
33519
  const vaultAllocator = ContractAddr.from(
33424
33520
  this.config.vaultAllocator.address
33425
33521
  );
33426
- console.log("vaultAllocator", vaultAllocator);
33427
33522
  const quote = await this.getQuotesAvnu(
33428
33523
  fromToken.address.toString(),
33429
33524
  toToken.address.toString(),
@@ -33479,7 +33574,6 @@ var AvnuAdapter = class _AvnuAdapter extends BaseAdapter {
33479
33574
  const vaultAllocator = ContractAddr.from(
33480
33575
  this.config.vaultAllocator.address
33481
33576
  );
33482
- console.log("params.amount", params.amount);
33483
33577
  const quote = await this.getQuotesAvnu(
33484
33578
  fromToken.address.toString(),
33485
33579
  toToken.address.toString(),
@@ -33498,8 +33592,6 @@ var AvnuAdapter = class _AvnuAdapter extends BaseAdapter {
33498
33592
  );
33499
33593
  const swapCallData = getCalldata[0];
33500
33594
  const amount = uint25614.bnToUint256(params.amount.toWei());
33501
- console.log("amount", amount);
33502
- console.log("swapCallData", swapCallData);
33503
33595
  return [
33504
33596
  {
33505
33597
  sanitizer: SIMPLE_SANITIZER,
@@ -33574,14 +33666,12 @@ var AvnuAdapter = class _AvnuAdapter extends BaseAdapter {
33574
33666
  return dataObject2;
33575
33667
  }
33576
33668
  const btcPrice = await this.getPriceOfToken(toToken.address.toString());
33577
- console.log("btcPrice", btcPrice);
33578
33669
  if (!btcPrice) {
33579
33670
  logger.error(`error getting btc price: ${btcPrice}`);
33580
33671
  return null;
33581
33672
  }
33582
33673
  const estimatedUsdcAmount = Math.floor(amount * btcPrice);
33583
33674
  const targetBtcBig = BigInt(returnFormattedAmount(amount, toTokenDecimals));
33584
- console.log("targetBtcBig", targetBtcBig);
33585
33675
  let low = BigInt(
33586
33676
  Math.floor(
33587
33677
  estimatedUsdcAmount * 10 ** fromToken.decimals * 0.9
@@ -33684,6 +33774,23 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
33684
33774
  debtPrice
33685
33775
  };
33686
33776
  }
33777
+ async getUnusedBalanceUSDCE() {
33778
+ const usdceToken = Global.getDefaultTokens().find(
33779
+ (token) => token.symbol === "USDCe"
33780
+ );
33781
+ const balance = await new ERC20(this.config).balanceOf(
33782
+ usdceToken.address,
33783
+ WALLET_ADDRESS,
33784
+ usdceToken.decimals
33785
+ );
33786
+ const price = await this.pricer.getPrice(usdceToken.symbol);
33787
+ const usdValue = Number(balance.toFixed(usdceToken.decimals)) * price.price;
33788
+ return {
33789
+ tokenInfo: usdceToken,
33790
+ amount: balance,
33791
+ usdValue
33792
+ };
33793
+ }
33687
33794
  async getUnusedBalanceWBTC() {
33688
33795
  const collateralToken = this.metadata.additionalInfo.borrowable_assets[0];
33689
33796
  const balance = await new ERC20(this.config).balanceOf(
@@ -33729,22 +33836,30 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
33729
33836
  }
33730
33837
  return extendedAdapter.adapter;
33731
33838
  }
33732
- async moveAssetsToVaultAllocator(amount) {
33839
+ async moveAssetsToVaultAllocator(amount, extendedAdapter) {
33733
33840
  try {
33734
- const usdcToken = Global.getDefaultTokens().find(
33735
- (token) => token.symbol === "USDC"
33841
+ const usdceToken = Global.getDefaultTokens().find(
33842
+ (token) => token.symbol === "USDCe"
33736
33843
  );
33737
33844
  const approveCall = new ERC20(this.config).approve(
33738
- usdcToken.address,
33845
+ usdceToken.address,
33739
33846
  this.metadata.additionalInfo.vaultAllocator,
33740
33847
  amount
33741
33848
  );
33742
33849
  const transferCall = new ERC20(this.config).transfer(
33743
- usdcToken.address,
33850
+ usdceToken.address,
33744
33851
  this.metadata.additionalInfo.vaultAllocator,
33745
33852
  amount
33746
33853
  );
33747
- return [approveCall, transferCall];
33854
+ const proofsInfo = extendedAdapter.getProofsForFromLegacySwap(
33855
+ this.getMerkleTree()
33856
+ );
33857
+ const proofGroups = proofsInfo.proofs;
33858
+ const call = this.getManageCall(
33859
+ proofGroups,
33860
+ await proofsInfo.callConstructor({ amount })
33861
+ );
33862
+ return [approveCall, transferCall, call];
33748
33863
  } catch (err) {
33749
33864
  logger.error(`error moving assets to vault allocator: ${err}`);
33750
33865
  return [];
@@ -33856,11 +33971,9 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
33856
33971
  );
33857
33972
  return calls;
33858
33973
  }
33859
- console.log("extendedAmount", extendedAmount);
33860
- console.log("vesuAmount", vesuAmount);
33861
33974
  if (extendedAmount.lessThan(0)) {
33862
33975
  try {
33863
- const extendedCalls = await this.moveAssets(
33976
+ const { calls: extendedCalls, status: extendedStatus } = await this.moveAssets(
33864
33977
  {
33865
33978
  to: Protocols.VAULT.name,
33866
33979
  from: Protocols.EXTENDED.name,
@@ -33869,14 +33982,18 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
33869
33982
  extendedAdapter,
33870
33983
  vesuAdapter
33871
33984
  );
33872
- calls.push(...extendedCalls);
33985
+ if (extendedStatus) {
33986
+ calls.push(...extendedCalls);
33987
+ } else {
33988
+ return [];
33989
+ }
33873
33990
  } catch (err) {
33874
33991
  logger.error(`Failed moving assets to vault: ${err}`);
33875
33992
  }
33876
33993
  }
33877
33994
  if (vesuAmount.lessThan(0)) {
33878
33995
  try {
33879
- const vesuCalls = await this.moveAssets(
33996
+ const { calls: vesuCalls, status: vesuStatus } = await this.moveAssets(
33880
33997
  {
33881
33998
  to: Protocols.EXTENDED.name,
33882
33999
  from: Protocols.VESU.name,
@@ -33886,6 +34003,9 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
33886
34003
  vesuAdapter
33887
34004
  );
33888
34005
  calls.push(...vesuCalls);
34006
+ if (!vesuStatus) {
34007
+ return [];
34008
+ }
33889
34009
  } catch (err) {
33890
34010
  logger.error(`Failed moving assets to vault: ${err}`);
33891
34011
  }
@@ -33901,7 +34021,7 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
33901
34021
  );
33902
34022
  if (extendedAmount.minus(usdcAmountOnExtended).greaterThan(0)) {
33903
34023
  try {
33904
- const extendedCalls = await this.moveAssets(
34024
+ const { calls: extendedCalls } = await this.moveAssets(
33905
34025
  {
33906
34026
  to: Protocols.EXTENDED.name,
33907
34027
  from: Protocols.VAULT.name,
@@ -33917,15 +34037,18 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
33917
34037
  }
33918
34038
  if (vesuAmount.minus(usdcAmountInWallet).greaterThan(0)) {
33919
34039
  try {
33920
- const vesuCalls = await this.moveAssets(
34040
+ const { calls: vesuCalls, status: vesuStatus } = await this.moveAssets(
33921
34041
  {
33922
- to: Protocols.VESU.name,
34042
+ to: Protocols.VAULT.name,
33923
34043
  from: Protocols.EXTENDED.name,
33924
34044
  amount: vesuAmount.minus(usdcAmountInWallet)
33925
34045
  },
33926
34046
  extendedAdapter,
33927
34047
  vesuAdapter
33928
34048
  );
34049
+ if (!vesuStatus) {
34050
+ return [];
34051
+ }
33929
34052
  calls.push(...vesuCalls);
33930
34053
  } catch (err) {
33931
34054
  logger.error(`Failed moving assets to vault: ${err}`);
@@ -33942,9 +34065,12 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
33942
34065
  const avnuAdapter = await this.getAvnuAdapter();
33943
34066
  if (!avnuAdapter) {
33944
34067
  logger.error(`avnu adapter not found: ${avnuAdapter}`);
33945
- return [];
34068
+ return {
34069
+ calls: [],
34070
+ status: false
34071
+ };
33946
34072
  }
33947
- logger.info("moveAssets params", params);
34073
+ logger.info(`moveAssets params, ${JSON.stringify(params)}`);
33948
34074
  const collateralToken = vesuAdapter.config.supportedPositions[0].asset;
33949
34075
  const {
33950
34076
  collateralPrice
@@ -33961,18 +34087,58 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
33961
34087
  await proofsInfo.callConstructor({ amount: params.amount })
33962
34088
  );
33963
34089
  calls.push(call);
33964
- return calls;
34090
+ return {
34091
+ calls: [call],
34092
+ status: true
34093
+ };
33965
34094
  } else if (params.to === Protocols.VAULT.name && params.from === Protocols.EXTENDED.name) {
34095
+ const extendedLeverage = calculateExtendedLevergae();
34096
+ const extendedHoldings = await extendedAdapter.getExtendedDepositAmount();
34097
+ if (!extendedHoldings) {
34098
+ logger.error(`error getting extended holdings: ${extendedHoldings}`);
34099
+ return {
34100
+ calls: [],
34101
+ status: false
34102
+ };
34103
+ }
34104
+ const extendedHoldingAmount = new Web3Number(
34105
+ extendedHoldings.availableForWithdrawal,
34106
+ USDC_TOKEN_DECIMALS
34107
+ );
34108
+ const leftAmountAfterWithdrawalAmountInAccount = params.amount.minus(extendedHoldingAmount);
34109
+ const btcAmount = leftAmountAfterWithdrawalAmountInAccount.dividedBy(collateralPrice.price);
34110
+ const openLongPosition = await extendedAdapter.createOrder(
34111
+ extendedLeverage.toString(),
34112
+ btcAmount.toNumber(),
34113
+ "BUY" /* BUY */
34114
+ );
34115
+ if (!openLongPosition) {
34116
+ logger.error(`error opening long position: ${openLongPosition}`);
34117
+ return {
34118
+ calls: [],
34119
+ status: false
34120
+ };
34121
+ }
34122
+ await new Promise((resolve) => setTimeout(resolve, 5e3));
33966
34123
  const withdrawalFromExtended = await extendedAdapter.withdrawFromExtended(params.amount);
33967
34124
  if (withdrawalFromExtended) {
33968
- const calls = await this.moveAssetsToVaultAllocator(params.amount);
34125
+ const extendedHoldings2 = await extendedAdapter.getExtendedDepositAmount();
34126
+ logger.info(`extendedHoldings after withdrawal ${extendedHoldings2}`);
34127
+ await new Promise((resolve) => setTimeout(resolve, 1e4));
34128
+ const calls = await this.moveAssetsToVaultAllocator(params.amount, extendedAdapter);
33969
34129
  if (calls.length > 0) {
33970
- return calls;
34130
+ return {
34131
+ calls,
34132
+ status: true
34133
+ };
33971
34134
  }
33972
34135
  } else {
33973
34136
  logger.error("withdrawal from extended failed");
34137
+ return {
34138
+ calls: [],
34139
+ status: false
34140
+ };
33974
34141
  }
33975
- return [];
33976
34142
  } else if (params.to === Protocols.VAULT.name && params.from === Protocols.VESU.name) {
33977
34143
  const vesuAmountInBTC = new Web3Number(
33978
34144
  params.amount.dividedBy(collateralPrice.price).toNumber(),
@@ -33993,7 +34159,10 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
33993
34159
  await swapProofsInfo.callConstructor({ amount: vesuAmountInBTC })
33994
34160
  );
33995
34161
  calls.push(swapCall);
33996
- return calls;
34162
+ return {
34163
+ calls,
34164
+ status: true
34165
+ };
33997
34166
  } else if (params.to === Protocols.EXTENDED.name && params.from === Protocols.VESU.name) {
33998
34167
  const vesuAmountInBTC = new Web3Number(
33999
34168
  params.amount.dividedBy(collateralPrice.price).toNumber(),
@@ -34024,13 +34193,21 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
34024
34193
  await proofsInfoDeposit.callConstructor({ amount: params.amount })
34025
34194
  );
34026
34195
  calls.push(callDeposit);
34027
- return calls;
34196
+ return {
34197
+ calls,
34198
+ status: true
34199
+ };
34028
34200
  }
34029
- console.warn("moveAssets received unsupported route:", params);
34030
- return [];
34201
+ return {
34202
+ calls: [],
34203
+ status: false
34204
+ };
34031
34205
  } catch (err) {
34032
34206
  logger.error(`error moving assets: ${err}`);
34033
- return [];
34207
+ return {
34208
+ calls: [],
34209
+ status: false
34210
+ };
34034
34211
  }
34035
34212
  }
34036
34213
  async handleDeposit() {
@@ -34089,8 +34266,7 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
34089
34266
  collateralTokenAmount,
34090
34267
  collateralPrice.price
34091
34268
  );
34092
- console.log("vesuAmountInBTC", vesuAmountInBTC);
34093
- console.log("extendedAmountInBTC", extendedAmountInBTC);
34269
+ logger.info(`vesuAmountInBTC ${vesuAmountInBTC}, extendedAmountInBTC ${extendedAmountInBTC}`);
34094
34270
  let calls = [];
34095
34271
  if (vesuAmountInBTC.greaterThan(MINIMUM_EXTENDED_POSITION_SIZE)) {
34096
34272
  const proofsInfo = vesuAdapter.getProofs(true, this.getMerkleTree());
@@ -34103,7 +34279,7 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
34103
34279
  );
34104
34280
  const { amount: wbtcAmountInVaultAllocator } = await this.getUnusedBalanceWBTC();
34105
34281
  if (wbtcAmountInVaultAllocator.lessThan(vesuAmountInBTC)) {
34106
- console.log("error wbtc amount in vault allocator is less than vesu amount in btc", wbtcAmountInVaultAllocator, vesuAmountInBTC);
34282
+ logger.info(`WBTC amount in vault allocator is less than vesu amount required in WBTC thus swapping, wbtcAmountInVaultAllocator: ${wbtcAmountInVaultAllocator}, vesuAmountInBTC: ${vesuAmountInBTC}`);
34107
34283
  const swapProofsInfo = avnuAdapter.getProofs(true, this.getMerkleTree());
34108
34284
  const swapProofGroups = swapProofsInfo.proofs;
34109
34285
  const swapCall = this.getManageCall(
@@ -34147,7 +34323,7 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
34147
34323
  bid
34148
34324
  } = await extendedAdapter.fetchOrderBookBTCUSDC();
34149
34325
  const price = ask.plus(bid).dividedBy(2);
34150
- const btcToken = vesuAdapter.config.supportedPositions[1].asset;
34326
+ const btcToken = vesuAdapter.config.supportedPositions[0].asset;
34151
34327
  const btcPriceAvnu = await avnuAdapter.getPriceOfToken(btcToken.address.toString());
34152
34328
  if (!btcPriceAvnu) {
34153
34329
  logger.error(`error getting btc price avnu: ${btcPriceAvnu}`);
@@ -34163,43 +34339,65 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
34163
34339
  async handleWithdraw(amount) {
34164
34340
  try {
34165
34341
  const usdcBalanceVaultAllocator = await this.getUnusedBalance();
34166
- const usdcBalanceDifference = amount.minus(usdcBalanceVaultAllocator.usdValue);
34342
+ const usdcBalanceDifference = amount.plus(BUFFER_USDC_IN_WITHDRAWAL).minus(usdcBalanceVaultAllocator.usdValue);
34167
34343
  logger.info(`usdcBalanceDifference, ${usdcBalanceDifference.toNumber()}`);
34344
+ let calls = [];
34345
+ let status = true;
34168
34346
  if (usdcBalanceDifference.lessThan(0)) {
34169
- const withdrawCall = await this.getBringLiquidityCall({
34170
- amount
34347
+ const withdrawCall2 = await this.getBringLiquidityCall({
34348
+ amount: usdcBalanceVaultAllocator.amount
34171
34349
  });
34172
- logger.info("withdraw call", withdrawCall);
34173
- return [withdrawCall];
34350
+ logger.info("withdraw call", withdrawCall2);
34351
+ calls.push(withdrawCall2);
34352
+ return {
34353
+ calls,
34354
+ status: true
34355
+ };
34174
34356
  }
34175
34357
  const vesuAdapter = await this.getVesuAdapter();
34176
34358
  const extendedAdapter = await this.getExtendedAdapter();
34177
34359
  if (!vesuAdapter || !extendedAdapter || !extendedAdapter.client) {
34360
+ status = false;
34178
34361
  logger.error(
34179
34362
  `vesu or extended adapter not found: vesuAdapter=${vesuAdapter}, extendedAdapter=${extendedAdapter}`
34180
34363
  );
34181
- return [];
34364
+ return {
34365
+ calls,
34366
+ status
34367
+ };
34182
34368
  }
34183
34369
  const { collateralTokenAmount } = await vesuAdapter.vesuAdapter.getAssetPrices();
34184
34370
  const {
34185
34371
  collateralPrice
34186
34372
  } = await this.getAssetPrices();
34187
34373
  const extendedPositon = await extendedAdapter.getAllOpenPositions();
34374
+ if (!extendedPositon) {
34375
+ status = false;
34376
+ logger.error("error getting extended position", extendedPositon);
34377
+ return {
34378
+ calls,
34379
+ status
34380
+ };
34381
+ }
34188
34382
  const amountDistributionForWithdrawal = await calculateAmountDistributionForWithdrawal(
34189
- amount,
34383
+ usdcBalanceDifference,
34190
34384
  collateralPrice.price,
34191
34385
  collateralTokenAmount,
34192
34386
  extendedPositon
34193
34387
  );
34194
34388
  if (!amountDistributionForWithdrawal) {
34389
+ status = false;
34195
34390
  logger.error(
34196
34391
  `error calculating amount distribution for withdrawal: ${amountDistributionForWithdrawal}`
34197
34392
  );
34198
- return [];
34393
+ return {
34394
+ calls,
34395
+ status
34396
+ };
34199
34397
  }
34200
34398
  const { vesu_amount, extended_amount } = amountDistributionForWithdrawal;
34201
- if (vesu_amount.greaterThan(0)) {
34202
- const result = await this.moveAssets(
34399
+ if (status && vesu_amount.greaterThan(0)) {
34400
+ const { calls: vesuCalls, status: vesuStatus } = await this.moveAssets(
34203
34401
  {
34204
34402
  amount: vesu_amount,
34205
34403
  from: Protocols.VESU.name,
@@ -34208,10 +34406,11 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
34208
34406
  extendedAdapter,
34209
34407
  vesuAdapter
34210
34408
  );
34211
- return result;
34409
+ status = vesuStatus;
34410
+ calls.push(...vesuCalls);
34212
34411
  }
34213
- if (extended_amount.greaterThan(0)) {
34214
- const result = await this.moveAssets(
34412
+ if (status && extended_amount.greaterThan(0)) {
34413
+ const { calls: extendedCalls, status: extendedStatus } = await this.moveAssets(
34215
34414
  {
34216
34415
  amount: extended_amount,
34217
34416
  from: Protocols.EXTENDED.name,
@@ -34220,12 +34419,32 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
34220
34419
  extendedAdapter,
34221
34420
  vesuAdapter
34222
34421
  );
34223
- return result;
34422
+ status = extendedStatus;
34423
+ if (status) {
34424
+ calls.push(...extendedCalls);
34425
+ } else {
34426
+ logger.error("error moving assets to vault: extendedStatus: ${extendedStatus}");
34427
+ return {
34428
+ calls: [],
34429
+ status
34430
+ };
34431
+ }
34224
34432
  }
34225
- return [];
34433
+ const withdrawCall = await this.getBringLiquidityCall({
34434
+ amount
34435
+ });
34436
+ logger.info("withdraw call", withdrawCall);
34437
+ calls.push(withdrawCall);
34438
+ return {
34439
+ calls,
34440
+ status
34441
+ };
34226
34442
  } catch (err) {
34227
34443
  logger.error(`error handling withdrawal: ${err}`);
34228
- return [];
34444
+ return {
34445
+ calls: [],
34446
+ status: false
34447
+ };
34229
34448
  }
34230
34449
  }
34231
34450
  async getAUM() {
@@ -34359,6 +34578,7 @@ function getLooperSettings2(lstSymbol, underlyingSymbol, vaultSettings, pool1, e
34359
34578
  () => vesuMultiplyAdapter.getWithdrawLeaf()
34360
34579
  );
34361
34580
  vaultSettings.leafAdapters.push(() => extendedAdapter.getDepositLeaf());
34581
+ vaultSettings.leafAdapters.push(() => extendedAdapter.getSwapFromLegacyLeaf());
34362
34582
  vaultSettings.leafAdapters.push(() => avnuAdapter.getDepositLeaf());
34363
34583
  vaultSettings.leafAdapters.push(() => avnuAdapter.getWithdrawLeaf());
34364
34584
  vaultSettings.leafAdapters.push(