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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -4474,20 +4474,13 @@ var EkuboQuoter = class _EkuboQuoter {
4474
4474
  async getDexPrice(baseToken, quoteToken, amount) {
4475
4475
  const lstTokenInfo = baseToken;
4476
4476
  const lstUnderlyingTokenInfo = quoteToken;
4477
- console.log("lstTokenInfo", lstTokenInfo);
4478
- console.log("lstUnderlyingTokenInfo", lstUnderlyingTokenInfo);
4479
- console.log("amount", amount);
4480
4477
  const quote = await this.getQuote(
4481
4478
  lstTokenInfo.address.address,
4482
4479
  lstUnderlyingTokenInfo.address.address,
4483
4480
  amount
4484
4481
  );
4485
- console.log("quote", quote);
4486
4482
  const outputAmount = Web3Number.fromWei(quote.total_calculated, lstUnderlyingTokenInfo.decimals);
4487
- console.log("outputAmount", outputAmount);
4488
- console.log("amount", amount);
4489
4483
  const price = outputAmount.toNumber() / amount.toNumber();
4490
- console.log("price", price);
4491
4484
  logger.verbose(`${_EkuboQuoter.name}:: LST Dex Price: ${price}`);
4492
4485
  return price;
4493
4486
  }
@@ -4506,16 +4499,12 @@ var EkuboQuoter = class _EkuboQuoter {
4506
4499
  // debt collateral
4507
4500
  async getSwapLimitAmount(fromToken, toToken, amount, max_slippage = 2e-3) {
4508
4501
  const isExactAmountIn = amount.greaterThanOrEqualTo(0);
4509
- console.log("isExactAmountIn", isExactAmountIn);
4510
4502
  logger.verbose(`${_EkuboQuoter.name}::getSwapLimitAmount isExactAmountIn: ${isExactAmountIn}, fromToken: ${fromToken.symbol}, toToken: ${toToken.symbol}, amount: ${amount}`);
4511
4503
  const isYieldToken = this.tokenMarketData.isAPYSupported(toToken);
4512
4504
  console.log("isYieldToken", isYieldToken);
4513
4505
  const baseToken = isExactAmountIn ? toToken : fromToken;
4514
4506
  const quoteToken = isExactAmountIn ? fromToken : toToken;
4515
- console.log("baseToken", baseToken);
4516
- console.log("quoteToken", quoteToken);
4517
4507
  const dexPrice = await this.getDexPrice(baseToken, quoteToken, amount);
4518
- console.log("dexPrice", dexPrice);
4519
4508
  const trueExchangeRate = isYieldToken ? await this.tokenMarketData.getTruePrice(baseToken) : dexPrice;
4520
4509
  console.log("trueExchangeRate", trueExchangeRate);
4521
4510
  if (isExactAmountIn) {
@@ -28163,6 +28152,7 @@ var vesu_multiple_abi_default = [
28163
28152
  var AVNU_API = "https://starknet.api.avnu.fi/swap/v2/quotes";
28164
28153
  var USDC_TOKEN_DECIMALS = 6;
28165
28154
  var USDC_TOKEN_ADDRESS = "0x053C91253BC9682c04929cA02ED00b3E423f6710D2ee7e0D5EBB06F3eCF368A8";
28155
+ var BUFFER_USDC_IN_WITHDRAWAL = 5;
28166
28156
  var WBTC_TOKEN_ADDRESS = "0x3fe2b97c1fd336e750087d68b9b867997fd64a2661ff3ca5a7c771641e8e7ac";
28167
28157
  var WBTC_TOKEN_DECIMALS = 8;
28168
28158
  var MAINTENANCE_MARGIN = 0.01;
@@ -28254,8 +28244,7 @@ var calculateAmountDistributionForWithdrawal = async (amountInUsdc, collateralPr
28254
28244
  logger.error("error getting extended positions");
28255
28245
  return null;
28256
28246
  }
28257
- const extendedBTCExposure = extendedPosition.length > 0 ? new Web3Number(extendedPosition[0].size, WBTC_TOKEN_DECIMALS) : new Web3Number(0, WBTC_TOKEN_DECIMALS);
28258
- const extendedExposureUSD = extendedBTCExposure.multipliedBy(collateralPrice);
28247
+ const extendedExposureUSD = extendedPosition.length > 0 ? new Web3Number(extendedPosition[0].value, USDC_TOKEN_DECIMALS) : new Web3Number(0, USDC_TOKEN_DECIMALS);
28259
28248
  const vesuExposureUSD = collateralUnits.multipliedBy(collateralPrice);
28260
28249
  if (vesuExposureUSD.lessThan(0)) {
28261
28250
  return {
@@ -28273,9 +28262,14 @@ var calculateAmountDistributionForWithdrawal = async (amountInUsdc, collateralPr
28273
28262
  vesu_leverage
28274
28263
  };
28275
28264
  }
28265
+ console.log("the vesu exposure usd is", vesuExposureUSD.toNumber());
28266
+ console.log("the extended exposure usd is", extendedExposureUSD.toNumber());
28267
+ console.log("the amount in usdc is", amountInUsdc.toNumber());
28268
+ console.log("the extended leverage is", extended_leverage);
28269
+ console.log("the vesu leverage is", vesu_leverage);
28276
28270
  const numerator1 = amountInUsdc.multipliedBy(extended_leverage);
28277
- const numerator2 = vesuExposureUSD.multipliedBy(vesu_leverage);
28278
- const numerator3 = extendedExposureUSD.multipliedBy(extended_leverage).multipliedBy(-1);
28271
+ const numerator2 = vesuExposureUSD;
28272
+ const numerator3 = extendedExposureUSD.multipliedBy(-1);
28279
28273
  const finalNumerator = numerator1.plus(numerator2).plus(numerator3);
28280
28274
  const denominator = extended_leverage + vesu_leverage;
28281
28275
  const vesuAmountInUSDC = finalNumerator.dividedBy(denominator);
@@ -28285,6 +28279,7 @@ var calculateAmountDistributionForWithdrawal = async (amountInUsdc, collateralPr
28285
28279
  "the extended amount in usdc is",
28286
28280
  extendedAmountInUSDC.toNumber()
28287
28281
  );
28282
+ await new Promise((resolve) => setTimeout(resolve, 1e4));
28288
28283
  return {
28289
28284
  vesu_amount: vesuAmountInUSDC,
28290
28285
  extended_amount: extendedAmountInUSDC,
@@ -28306,10 +28301,10 @@ var calculateExtendedLevergae = () => {
28306
28301
  const extended_leverage_max = 1 / (MAINTENANCE_MARGIN + MAX_PRICE_DROP_PERCENTAGE);
28307
28302
  return Math.floor(extended_leverage_max);
28308
28303
  };
28309
- var calculateDebtAmount = (collateralAmount, debtAmount, debtPrice, maxLtv = MAX_LTV_BTC_USDC, addedAmount, collateralPrice, isDeposit) => {
28304
+ var calculateDebtAmount = (collateralAmount, debtAmount, debtPrice, maxLtv = MAX_LIQUIDATION_RATIO, addedAmount, collateralPrice, isDeposit) => {
28310
28305
  try {
28311
- const marginAmount = addedAmount.multipliedBy(isDeposit ? 1 : -1);
28312
- const numerator1 = collateralAmount.plus(addedAmount).multipliedBy(collateralPrice).multipliedBy(maxLtv);
28306
+ const addedCollateral = addedAmount.multipliedBy(isDeposit ? 1 : -1);
28307
+ const numerator1 = collateralAmount.plus(addedCollateral).multipliedBy(collateralPrice).multipliedBy(maxLtv);
28313
28308
  const numerator2 = debtAmount.multipliedBy(debtPrice).multipliedBy(TARGET_HF);
28314
28309
  const denominator = TARGET_HF - maxLtv;
28315
28310
  const x_debt_usd = numerator1.minus(numerator2).dividedBy(denominator);
@@ -28344,7 +28339,6 @@ var calculateAmountDepositOnExtendedWhenIncurringLosses = async (client) => {
28344
28339
  const extendedHoldings = await client.getHoldings();
28345
28340
  const extended_leverage = calculateExtendedLevergae();
28346
28341
  const latestPosition = (await client.getPositions()).data.pop();
28347
- console.log("the latest position is", latestPosition, extendedHoldings);
28348
28342
  if (!extendedHoldings || !latestPosition) {
28349
28343
  logger.error(`error getting extended position: extendedHoldings=${extendedHoldings}, latestPosition=${latestPosition}`);
28350
28344
  return null;
@@ -28725,7 +28719,7 @@ var VesuMultiplyAdapter = class _VesuMultiplyAdapter extends BaseAdapter {
28725
28719
  this.config.debt.address.toBigInt(),
28726
28720
  this.config.vaultAllocator.toBigInt()
28727
28721
  ],
28728
- sanitizer: SIMPLE_SANITIZER_V2,
28722
+ sanitizer: isV2 ? SIMPLE_SANITIZER_V2 : SIMPLE_SANITIZER,
28729
28723
  // vmw = vesu multiply withdraw
28730
28724
  id: `vmw_${this.config.poolId.shortString()}_${collateral.symbol}_${debt.symbol}`
28731
28725
  },
@@ -28874,7 +28868,7 @@ var VesuMultiplyAdapter = class _VesuMultiplyAdapter extends BaseAdapter {
28874
28868
  },
28875
28869
  // Vesu multiply call
28876
28870
  {
28877
- sanitizer: SIMPLE_SANITIZER_V2,
28871
+ sanitizer: isV2 ? SIMPLE_SANITIZER_V2 : SIMPLE_SANITIZER,
28878
28872
  call: {
28879
28873
  contractAddress: vesuMultiply,
28880
28874
  selector: import_starknet21.hash.getSelectorFromName("modify_lever"),
@@ -28962,19 +28956,13 @@ var VesuMultiplyAdapter = class _VesuMultiplyAdapter extends BaseAdapter {
28962
28956
  leverSwap = ekuboQuoter.getVesuMultiplyQuote(swapQuote, debtToken, collateralToken);
28963
28957
  const MAX_SLIPPAGE = 2e-3;
28964
28958
  if (debtAmount.greaterThan(0)) {
28965
- console.log("debtAmountInCollateralUnits", debtAmountInCollateralUnits.toNumber());
28966
- leverSwapLimitAmount = await ekuboQuoter.getSwapLimitAmount(debtToken, collateralToken, debtAmount, MAX_SLIPPAGE);
28967
- const anotherleverSwapLimitAmount = debtAmount.multipliedBy(1 + MAX_SLIPPAGE);
28968
- console.log("anotherleverSwapLimitAmount", anotherleverSwapLimitAmount, leverSwapLimitAmount);
28959
+ leverSwapLimitAmount = debtAmount.multipliedBy(1 + MAX_SLIPPAGE);
28969
28960
  } else if (debtAmount.lessThan(0)) {
28970
- leverSwapLimitAmount = await ekuboQuoter.getSwapLimitAmount(collateralToken, debtToken, debtAmountInCollateralUnits.multipliedBy(-1), MAX_SLIPPAGE);
28971
- const anotherleverSwapLimitAmount = debtAmount.abs().multipliedBy(1 - MAX_SLIPPAGE);
28972
- console.log("anotherleverSwapLimitAmount", anotherleverSwapLimitAmount, leverSwapLimitAmount);
28961
+ leverSwapLimitAmount = debtAmount.abs().multipliedBy(1 - MAX_SLIPPAGE);
28973
28962
  } else {
28974
28963
  leverSwapLimitAmount = Web3Number.fromWei(0, this.config.debt.decimals);
28975
28964
  }
28976
28965
  await new Promise((resolve) => setTimeout(resolve, 1e4));
28977
- console.log("leverSwapLimitAmount", leverSwapLimitAmount);
28978
28966
  } else {
28979
28967
  throw new Error(`VesuMultiplyAdapter: Price impact too high (${swapQuote.price_impact}), skipping swap`);
28980
28968
  }
@@ -29044,26 +29032,23 @@ var VesuMultiplyAdapter = class _VesuMultiplyAdapter extends BaseAdapter {
29044
29032
  debtPrice.price,
29045
29033
  debtToken.decimals
29046
29034
  );
29047
- console.log("debtAmountToRepay", debtAmountToRepay);
29048
29035
  if (!debtAmountToRepay) {
29049
29036
  throw new Error("error calculating debt amount to repay");
29050
29037
  }
29051
29038
  const ekuboQuoter = new EkuboQuoter(this.config.networkConfig, this.config.pricer);
29052
29039
  const debtInDebtUnits = new Web3Number(debtAmountToRepay, debtToken.decimals).dividedBy(debtPrice.price).multipliedBy(10 ** debtToken.decimals);
29053
- const debtInCollateralUnits = new Web3Number(debtAmountToRepay, debtToken.decimals).dividedBy(collateralPrice.price).multipliedBy(10 ** collateralToken.decimals);
29054
29040
  const swapQuote = await ekuboQuoter.getQuote(
29055
29041
  debtToken.address.address,
29056
29042
  collateralToken.address.address,
29057
29043
  debtInDebtUnits
29058
29044
  );
29059
29045
  const MAX_SLIPPAGE = 2e-3;
29060
- if (swapQuote.price_impact < 0.025) {
29061
- leverSwap = ekuboQuoter.getVesuMultiplyQuote(swapQuote, debtToken, collateralToken);
29046
+ if (swapQuote.price_impact < 25e-4) {
29047
+ leverSwap = ekuboQuoter.getVesuMultiplyQuote(swapQuote, collateralToken, debtToken);
29062
29048
  } else {
29063
29049
  logger.error(`VesuMultiplyAdapter: Price impact too high (${swapQuote.price_impact}), skipping swap`);
29064
29050
  }
29065
- const anotherLeverSwapLimitAmount = await ekuboQuoter.getSwapLimitAmount(collateralToken, debtToken, debtInDebtUnits, MAX_SLIPPAGE);
29066
- leverSwapLimitAmount = await ekuboQuoter.getSwapLimitAmount(debtToken, collateralToken, debtInCollateralUnits, MAX_SLIPPAGE);
29051
+ leverSwapLimitAmount = new Web3Number(debtAmountToRepay, debtToken.decimals).abs().multipliedBy(1 + MAX_SLIPPAGE);
29067
29052
  const multiplyParams = await this.getLeverParams(false, params, leverSwap, leverSwapLimitAmount);
29068
29053
  const call = multiplyContract.populate("modify_lever", {
29069
29054
  modify_lever_params: this.formatMultiplyParams(false, multiplyParams)
@@ -29635,6 +29620,41 @@ var ExtendedAdapter = class _ExtendedAdapter extends BaseAdapter {
29635
29620
  }
29636
29621
  ];
29637
29622
  }
29623
+ getSwapFromLegacyLeaf() {
29624
+ const leafConfigs = this._getSwapFromLegacyLeaf();
29625
+ const leaves = leafConfigs.map((config) => {
29626
+ const { target, method, packedArguments, sanitizer, id } = config;
29627
+ const leaf = this.constructSimpleLeafData({
29628
+ id,
29629
+ target,
29630
+ method,
29631
+ packedArguments
29632
+ }, sanitizer);
29633
+ return leaf;
29634
+ });
29635
+ return { leaves, callConstructor: this.getSwapFromLegacyCall.bind(this) };
29636
+ }
29637
+ _getSwapFromLegacyLeaf() {
29638
+ const usdceToken = Global.getDefaultTokens().find((token) => token.symbol === "USDCe");
29639
+ return [
29640
+ {
29641
+ target: usdceToken.address,
29642
+ method: "approve",
29643
+ packedArguments: [
29644
+ AVNU_EXCHANGE_FOR_LEGACY_USDC.toBigInt()
29645
+ ],
29646
+ id: `extendedswaplegacyapprove_${usdceToken.symbol}`,
29647
+ sanitizer: AVNU_LEGACY_SANITIZER
29648
+ },
29649
+ {
29650
+ target: AVNU_EXCHANGE_FOR_LEGACY_USDC,
29651
+ method: "swap_to_new",
29652
+ packedArguments: [],
29653
+ id: `extended_swap_to_new_${usdceToken.symbol}`,
29654
+ sanitizer: AVNU_LEGACY_SANITIZER
29655
+ }
29656
+ ];
29657
+ }
29638
29658
  _getWithdrawLeaf() {
29639
29659
  return [];
29640
29660
  }
@@ -29715,6 +29735,70 @@ var ExtendedAdapter = class _ExtendedAdapter extends BaseAdapter {
29715
29735
  return [];
29716
29736
  }
29717
29737
  }
29738
+ getProofsForFromLegacySwap(tree) {
29739
+ let proofGroups = [];
29740
+ const ids = this.getSwapFromLegacyLeaf().leaves.map((l) => l.readableId);
29741
+ for (const [i, v] of tree.entries()) {
29742
+ if (ids.includes(v.readableId)) {
29743
+ proofGroups.push(tree.getProof(i));
29744
+ }
29745
+ }
29746
+ if (proofGroups.length != ids.length) {
29747
+ throw new Error(`Not all proofs found for IDs: ${ids.join(", ")}`);
29748
+ }
29749
+ return {
29750
+ proofs: proofGroups,
29751
+ callConstructor: this.getSwapFromLegacyCall.bind(this)
29752
+ };
29753
+ }
29754
+ async getSwapFromLegacyCall(params) {
29755
+ try {
29756
+ const usdcToken = this.config.supportedPositions[0].asset;
29757
+ const usdceToken = Global.getDefaultTokens().find((token) => token.symbol === "USDCe");
29758
+ const amount = import_starknet22.uint256.bnToUint256(params.amount.multipliedBy(10).toWei());
29759
+ const quotes = await this.config.avnuAdapter.getQuotesAvnu(
29760
+ usdceToken.address.toString(),
29761
+ usdcToken.address.toString(),
29762
+ params.amount.toNumber(),
29763
+ this.config.avnuAdapter.config.vaultAllocator.address.toString(),
29764
+ usdcToken.decimals,
29765
+ false
29766
+ );
29767
+ if (!quotes) {
29768
+ logger.error("error getting quotes from avnu");
29769
+ return [];
29770
+ }
29771
+ const getCalldata = await this.config.avnuAdapter.getSwapCallData(quotes);
29772
+ const swapCallData = getCalldata[0];
29773
+ return [
29774
+ {
29775
+ sanitizer: AVNU_LEGACY_SANITIZER,
29776
+ call: {
29777
+ contractAddress: usdceToken.address,
29778
+ selector: import_starknet22.hash.getSelectorFromName("approve"),
29779
+ calldata: [
29780
+ AVNU_EXCHANGE_FOR_LEGACY_USDC.toBigInt(),
29781
+ toBigInt(amount.low.toString()),
29782
+ // amount low
29783
+ toBigInt(amount.high.toString())
29784
+ // amount high
29785
+ ]
29786
+ }
29787
+ },
29788
+ {
29789
+ sanitizer: AVNU_LEGACY_SANITIZER,
29790
+ call: {
29791
+ contractAddress: AVNU_EXCHANGE_FOR_LEGACY_USDC,
29792
+ selector: import_starknet22.hash.getSelectorFromName("swap_to_new"),
29793
+ calldata: swapCallData
29794
+ }
29795
+ }
29796
+ ];
29797
+ } catch (error) {
29798
+ logger.error(`Error creating Deposit Call: ${error}`);
29799
+ return [];
29800
+ }
29801
+ }
29718
29802
  //Swap wbtc to usdc
29719
29803
  async getWithdrawCall(params) {
29720
29804
  try {
@@ -29732,10 +29816,10 @@ var ExtendedAdapter = class _ExtendedAdapter extends BaseAdapter {
29732
29816
  if (!this.client) {
29733
29817
  throw new Error("Client not initialized");
29734
29818
  }
29735
- const withdrawalRequest = this.client.withdrawUSDC(amount.toString());
29736
- if ((await withdrawalRequest).status === "OK") {
29737
- console.log("Withdrawal request successful");
29738
- return true;
29819
+ const withdrawalRequest = await this.client.withdrawUSDC(amount.toFixed(2));
29820
+ if (withdrawalRequest.status === "OK") {
29821
+ const withdrawalStatus = await this.getDepositOrWithdrawalStatus(withdrawalRequest.data, "WITHDRAWAL" /* WITHDRAWAL */);
29822
+ return withdrawalStatus;
29739
29823
  }
29740
29824
  return false;
29741
29825
  } catch (error) {
@@ -29916,7 +30000,7 @@ var ExtendedAdapter = class _ExtendedAdapter extends BaseAdapter {
29916
30000
  logger.error(`createShortOrder failed on attempt ${attempt}: ${err.message}`);
29917
30001
  if (attempt < maxAttempts) {
29918
30002
  const backoff = 1200 * attempt;
29919
- console.log(`Retrying after ${backoff}ms...`);
30003
+ logger.info(`Retrying after ${backoff}ms...`);
29920
30004
  await new Promise((resolve) => setTimeout(resolve, backoff));
29921
30005
  return this.createOrder(
29922
30006
  leverage,
@@ -29947,7 +30031,7 @@ var ExtendedAdapter = class _ExtendedAdapter extends BaseAdapter {
29947
30031
  }
29948
30032
  return null;
29949
30033
  } catch (err) {
29950
- console.log("Error opening short extended position", err);
30034
+ logger.error(`Error opening short extended position, ${err}`);
29951
30035
  return null;
29952
30036
  }
29953
30037
  }
@@ -29957,17 +30041,16 @@ var ExtendedAdapter = class _ExtendedAdapter extends BaseAdapter {
29957
30041
  operationsType: [operationsType],
29958
30042
  operationsStatus: ["COMPLETED" /* COMPLETED */]
29959
30043
  });
29960
- console.log("transferHistory", transferHistory);
29961
30044
  if (operationsType === "DEPOSIT" /* DEPOSIT */) {
29962
30045
  const myTransferStatus = transferHistory.data.find((operation) => operation.transactionHash === orderId);
29963
30046
  if (!myTransferStatus) {
29964
- return false;
30047
+ return true;
29965
30048
  }
29966
30049
  return true;
29967
30050
  } else {
29968
- const myTransferStatus = transferHistory.data.find((operation) => operation.id === orderId);
30051
+ const myTransferStatus = transferHistory.data.find((operation) => operation.id.toString() === orderId.toString());
29969
30052
  if (!myTransferStatus) {
29970
- return false;
30053
+ return true;
29971
30054
  }
29972
30055
  return true;
29973
30056
  }
@@ -33556,7 +33639,7 @@ var AvnuAdapter = class _AvnuAdapter extends BaseAdapter {
33556
33639
  packedArguments: [
33557
33640
  fromToken.address.toBigInt(),
33558
33641
  //wbtc
33559
- fromToken.address.toBigInt(),
33642
+ toToken.address.toBigInt(),
33560
33643
  //usdc
33561
33644
  vaultAllocator.toBigInt()
33562
33645
  ],
@@ -33570,13 +33653,11 @@ var AvnuAdapter = class _AvnuAdapter extends BaseAdapter {
33570
33653
  }
33571
33654
  async getDepositCall(params) {
33572
33655
  try {
33573
- console.log("params.amount", params.amount);
33574
33656
  const fromToken = this.config.supportedPositions[0].asset;
33575
33657
  const toToken = this.config.supportedPositions[1].asset;
33576
33658
  const vaultAllocator = ContractAddr.from(
33577
33659
  this.config.vaultAllocator.address
33578
33660
  );
33579
- console.log("vaultAllocator", vaultAllocator);
33580
33661
  const quote = await this.getQuotesAvnu(
33581
33662
  fromToken.address.toString(),
33582
33663
  toToken.address.toString(),
@@ -33632,7 +33713,6 @@ var AvnuAdapter = class _AvnuAdapter extends BaseAdapter {
33632
33713
  const vaultAllocator = ContractAddr.from(
33633
33714
  this.config.vaultAllocator.address
33634
33715
  );
33635
- console.log("params.amount", params.amount);
33636
33716
  const quote = await this.getQuotesAvnu(
33637
33717
  fromToken.address.toString(),
33638
33718
  toToken.address.toString(),
@@ -33651,8 +33731,6 @@ var AvnuAdapter = class _AvnuAdapter extends BaseAdapter {
33651
33731
  );
33652
33732
  const swapCallData = getCalldata[0];
33653
33733
  const amount = import_starknet24.uint256.bnToUint256(params.amount.toWei());
33654
- console.log("amount", amount);
33655
- console.log("swapCallData", swapCallData);
33656
33734
  return [
33657
33735
  {
33658
33736
  sanitizer: SIMPLE_SANITIZER,
@@ -33706,7 +33784,7 @@ var AvnuAdapter = class _AvnuAdapter extends BaseAdapter {
33706
33784
  }
33707
33785
  throw new Error("Failed to fetch quote after retries");
33708
33786
  }
33709
- async getQuotesAvnu(from_token_address, to_token_address, amount, takerAddress, toTokenDecimals, usdcToBtc, maxIterations = 5, tolerance = 1e4) {
33787
+ async getQuotesAvnu(from_token_address, to_token_address, amount, takerAddress, toTokenDecimals, usdcToBtc, maxIterations = 5, tolerance = 1e3) {
33710
33788
  try {
33711
33789
  const fromToken = this.config.supportedPositions[0].asset;
33712
33790
  const toToken = this.config.supportedPositions[1].asset;
@@ -33727,14 +33805,12 @@ var AvnuAdapter = class _AvnuAdapter extends BaseAdapter {
33727
33805
  return dataObject2;
33728
33806
  }
33729
33807
  const btcPrice = await this.getPriceOfToken(toToken.address.toString());
33730
- console.log("btcPrice", btcPrice);
33731
33808
  if (!btcPrice) {
33732
33809
  logger.error(`error getting btc price: ${btcPrice}`);
33733
33810
  return null;
33734
33811
  }
33735
33812
  const estimatedUsdcAmount = Math.floor(amount * btcPrice);
33736
33813
  const targetBtcBig = BigInt(returnFormattedAmount(amount, toTokenDecimals));
33737
- console.log("targetBtcBig", targetBtcBig);
33738
33814
  let low = BigInt(
33739
33815
  Math.floor(
33740
33816
  estimatedUsdcAmount * 10 ** fromToken.decimals * 0.9
@@ -33837,6 +33913,23 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
33837
33913
  debtPrice
33838
33914
  };
33839
33915
  }
33916
+ async getUnusedBalanceUSDCE() {
33917
+ const usdceToken = Global.getDefaultTokens().find(
33918
+ (token) => token.symbol === "USDCe"
33919
+ );
33920
+ const balance = await new ERC20(this.config).balanceOf(
33921
+ usdceToken.address,
33922
+ WALLET_ADDRESS,
33923
+ usdceToken.decimals
33924
+ );
33925
+ const price = await this.pricer.getPrice(usdceToken.symbol);
33926
+ const usdValue = Number(balance.toFixed(usdceToken.decimals)) * price.price;
33927
+ return {
33928
+ tokenInfo: usdceToken,
33929
+ amount: balance,
33930
+ usdValue
33931
+ };
33932
+ }
33840
33933
  async getUnusedBalanceWBTC() {
33841
33934
  const collateralToken = this.metadata.additionalInfo.borrowable_assets[0];
33842
33935
  const balance = await new ERC20(this.config).balanceOf(
@@ -33882,22 +33975,30 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
33882
33975
  }
33883
33976
  return extendedAdapter.adapter;
33884
33977
  }
33885
- async moveAssetsToVaultAllocator(amount) {
33978
+ async moveAssetsToVaultAllocator(amount, extendedAdapter) {
33886
33979
  try {
33887
- const usdcToken = Global.getDefaultTokens().find(
33888
- (token) => token.symbol === "USDC"
33980
+ const usdceToken = Global.getDefaultTokens().find(
33981
+ (token) => token.symbol === "USDCe"
33889
33982
  );
33890
33983
  const approveCall = new ERC20(this.config).approve(
33891
- usdcToken.address,
33984
+ usdceToken.address,
33892
33985
  this.metadata.additionalInfo.vaultAllocator,
33893
33986
  amount
33894
33987
  );
33895
33988
  const transferCall = new ERC20(this.config).transfer(
33896
- usdcToken.address,
33989
+ usdceToken.address,
33897
33990
  this.metadata.additionalInfo.vaultAllocator,
33898
33991
  amount
33899
33992
  );
33900
- return [approveCall, transferCall];
33993
+ const proofsInfo = extendedAdapter.getProofsForFromLegacySwap(
33994
+ this.getMerkleTree()
33995
+ );
33996
+ const proofGroups = proofsInfo.proofs;
33997
+ const call = this.getManageCall(
33998
+ proofGroups,
33999
+ await proofsInfo.callConstructor({ amount })
34000
+ );
34001
+ return [approveCall, transferCall, call];
33901
34002
  } catch (err) {
33902
34003
  logger.error(`error moving assets to vault allocator: ${err}`);
33903
34004
  return [];
@@ -34009,11 +34110,9 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
34009
34110
  );
34010
34111
  return calls;
34011
34112
  }
34012
- console.log("extendedAmount", extendedAmount);
34013
- console.log("vesuAmount", vesuAmount);
34014
34113
  if (extendedAmount.lessThan(0)) {
34015
34114
  try {
34016
- const extendedCalls = await this.moveAssets(
34115
+ const { calls: extendedCalls, status: extendedStatus } = await this.moveAssets(
34017
34116
  {
34018
34117
  to: Protocols.VAULT.name,
34019
34118
  from: Protocols.EXTENDED.name,
@@ -34022,14 +34121,18 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
34022
34121
  extendedAdapter,
34023
34122
  vesuAdapter
34024
34123
  );
34025
- calls.push(...extendedCalls);
34124
+ if (extendedStatus) {
34125
+ calls.push(...extendedCalls);
34126
+ } else {
34127
+ return [];
34128
+ }
34026
34129
  } catch (err) {
34027
34130
  logger.error(`Failed moving assets to vault: ${err}`);
34028
34131
  }
34029
34132
  }
34030
34133
  if (vesuAmount.lessThan(0)) {
34031
34134
  try {
34032
- const vesuCalls = await this.moveAssets(
34135
+ const { calls: vesuCalls, status: vesuStatus } = await this.moveAssets(
34033
34136
  {
34034
34137
  to: Protocols.EXTENDED.name,
34035
34138
  from: Protocols.VESU.name,
@@ -34039,6 +34142,9 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
34039
34142
  vesuAdapter
34040
34143
  );
34041
34144
  calls.push(...vesuCalls);
34145
+ if (!vesuStatus) {
34146
+ return [];
34147
+ }
34042
34148
  } catch (err) {
34043
34149
  logger.error(`Failed moving assets to vault: ${err}`);
34044
34150
  }
@@ -34050,15 +34156,15 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
34050
34156
  }
34051
34157
  const usdcAmountInWallet = (await this.getUnusedBalance()).amount;
34052
34158
  const usdcAmountOnExtended = parseFloat(
34053
- extendedHoldings.availableForWithdrawal
34159
+ extendedHoldings.availableForTrade
34054
34160
  );
34055
- if (extendedAmount.minus(usdcAmountOnExtended).greaterThan(0)) {
34161
+ if (extendedAmount.plus(BUFFER_USDC_IN_WITHDRAWAL).minus(usdcAmountOnExtended).greaterThan(0)) {
34056
34162
  try {
34057
- const extendedCalls = await this.moveAssets(
34163
+ const { calls: extendedCalls } = await this.moveAssets(
34058
34164
  {
34059
34165
  to: Protocols.EXTENDED.name,
34060
34166
  from: Protocols.VAULT.name,
34061
- amount: extendedAmount.minus(usdcAmountOnExtended)
34167
+ amount: extendedAmount.plus(BUFFER_USDC_IN_WITHDRAWAL).minus(usdcAmountOnExtended)
34062
34168
  },
34063
34169
  extendedAdapter,
34064
34170
  vesuAdapter
@@ -34070,15 +34176,18 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
34070
34176
  }
34071
34177
  if (vesuAmount.minus(usdcAmountInWallet).greaterThan(0)) {
34072
34178
  try {
34073
- const vesuCalls = await this.moveAssets(
34179
+ const { calls: vesuCalls, status: vesuStatus } = await this.moveAssets(
34074
34180
  {
34075
- to: Protocols.VESU.name,
34181
+ to: Protocols.VAULT.name,
34076
34182
  from: Protocols.EXTENDED.name,
34077
34183
  amount: vesuAmount.minus(usdcAmountInWallet)
34078
34184
  },
34079
34185
  extendedAdapter,
34080
34186
  vesuAdapter
34081
34187
  );
34188
+ if (!vesuStatus) {
34189
+ return [];
34190
+ }
34082
34191
  calls.push(...vesuCalls);
34083
34192
  } catch (err) {
34084
34193
  logger.error(`Failed moving assets to vault: ${err}`);
@@ -34095,9 +34204,12 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
34095
34204
  const avnuAdapter = await this.getAvnuAdapter();
34096
34205
  if (!avnuAdapter) {
34097
34206
  logger.error(`avnu adapter not found: ${avnuAdapter}`);
34098
- return [];
34207
+ return {
34208
+ calls: [],
34209
+ status: false
34210
+ };
34099
34211
  }
34100
- logger.info("moveAssets params", params);
34212
+ logger.info(`moveAssets params, ${JSON.stringify(params)}`);
34101
34213
  const collateralToken = vesuAdapter.config.supportedPositions[0].asset;
34102
34214
  const {
34103
34215
  collateralPrice
@@ -34114,18 +34226,67 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
34114
34226
  await proofsInfo.callConstructor({ amount: params.amount })
34115
34227
  );
34116
34228
  calls.push(call);
34117
- return calls;
34229
+ return {
34230
+ calls: [call],
34231
+ status: true
34232
+ };
34118
34233
  } else if (params.to === Protocols.VAULT.name && params.from === Protocols.EXTENDED.name) {
34234
+ const extendedLeverage = calculateExtendedLevergae();
34235
+ const extendedHoldings = await extendedAdapter.getExtendedDepositAmount();
34236
+ if (!extendedHoldings) {
34237
+ logger.error(`error getting extended holdings: ${extendedHoldings}`);
34238
+ return {
34239
+ calls: [],
34240
+ status: false
34241
+ };
34242
+ }
34243
+ const extendedHoldingAmount = new Web3Number(
34244
+ extendedHoldings.availableForWithdrawal,
34245
+ USDC_TOKEN_DECIMALS
34246
+ );
34247
+ logger.info(`${_VesuExtendedMultiplierStrategy.name}::moveAssets extendedHoldingAmount: ${extendedHoldingAmount.toNumber()}`);
34248
+ if (params.amount.abs().greaterThan(extendedHoldingAmount)) {
34249
+ const leftAmountAfterWithdrawalAmountInAccount = params.amount.abs().minus(extendedHoldingAmount);
34250
+ logger.info(`${_VesuExtendedMultiplierStrategy.name}::moveAssets leftAmountAfterWithdrawalAmountInAccount: ${leftAmountAfterWithdrawalAmountInAccount.toNumber()}`);
34251
+ const btcAmount = leftAmountAfterWithdrawalAmountInAccount.dividedBy(collateralPrice.price);
34252
+ const openLongPosition = btcAmount.multipliedBy(3).greaterThan(MINIMUM_EXTENDED_POSITION_SIZE) ? await extendedAdapter.createOrder(
34253
+ extendedLeverage.toString(),
34254
+ btcAmount.toNumber(),
34255
+ "BUY" /* BUY */
34256
+ ) : await extendedAdapter.createOrder(
34257
+ extendedLeverage.toString(),
34258
+ 35e-6,
34259
+ // just in case amount falls short then we need to create a withdrawal
34260
+ "BUY" /* BUY */
34261
+ );
34262
+ if (!openLongPosition) {
34263
+ logger.error(`error opening long position: ${openLongPosition}`);
34264
+ return {
34265
+ calls: [],
34266
+ status: false
34267
+ };
34268
+ }
34269
+ await new Promise((resolve) => setTimeout(resolve, 5e3));
34270
+ }
34119
34271
  const withdrawalFromExtended = await extendedAdapter.withdrawFromExtended(params.amount);
34120
34272
  if (withdrawalFromExtended) {
34121
- const calls = await this.moveAssetsToVaultAllocator(params.amount);
34273
+ const extendedHoldings2 = await extendedAdapter.getExtendedDepositAmount();
34274
+ logger.info(`extendedHoldings after withdrawal ${extendedHoldings2}`);
34275
+ await new Promise((resolve) => setTimeout(resolve, 1e4));
34276
+ const calls = await this.moveAssetsToVaultAllocator(params.amount, extendedAdapter);
34122
34277
  if (calls.length > 0) {
34123
- return calls;
34278
+ return {
34279
+ calls,
34280
+ status: true
34281
+ };
34124
34282
  }
34125
34283
  } else {
34126
34284
  logger.error("withdrawal from extended failed");
34285
+ return {
34286
+ calls: [],
34287
+ status: false
34288
+ };
34127
34289
  }
34128
- return [];
34129
34290
  } else if (params.to === Protocols.VAULT.name && params.from === Protocols.VESU.name) {
34130
34291
  const vesuAmountInBTC = new Web3Number(
34131
34292
  params.amount.dividedBy(collateralPrice.price).toNumber(),
@@ -34146,7 +34307,10 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
34146
34307
  await swapProofsInfo.callConstructor({ amount: vesuAmountInBTC })
34147
34308
  );
34148
34309
  calls.push(swapCall);
34149
- return calls;
34310
+ return {
34311
+ calls,
34312
+ status: true
34313
+ };
34150
34314
  } else if (params.to === Protocols.EXTENDED.name && params.from === Protocols.VESU.name) {
34151
34315
  const vesuAmountInBTC = new Web3Number(
34152
34316
  params.amount.dividedBy(collateralPrice.price).toNumber(),
@@ -34177,13 +34341,21 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
34177
34341
  await proofsInfoDeposit.callConstructor({ amount: params.amount })
34178
34342
  );
34179
34343
  calls.push(callDeposit);
34180
- return calls;
34344
+ return {
34345
+ calls,
34346
+ status: true
34347
+ };
34181
34348
  }
34182
- console.warn("moveAssets received unsupported route:", params);
34183
- return [];
34349
+ return {
34350
+ calls: [],
34351
+ status: false
34352
+ };
34184
34353
  } catch (err) {
34185
34354
  logger.error(`error moving assets: ${err}`);
34186
- return [];
34355
+ return {
34356
+ calls: [],
34357
+ status: false
34358
+ };
34187
34359
  }
34188
34360
  }
34189
34361
  async handleDeposit() {
@@ -34220,6 +34392,7 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
34220
34392
  };
34221
34393
  }
34222
34394
  const extendedPositionValue = position.length > 0 ? parseFloat(position[0].value) : 0;
34395
+ const BUFFER_AMOUNT_IN_AVAILABLE_FOR_TRADE = BUFFER_USDC_IN_WITHDRAWAL;
34223
34396
  const extendedHoldings = await extendedAdapter.getExtendedDepositAmount();
34224
34397
  if (!extendedHoldings) {
34225
34398
  logger.error(`error getting extended holdings: ${extendedHoldings}`);
@@ -34229,7 +34402,7 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
34229
34402
  };
34230
34403
  }
34231
34404
  const extendedHoldingAmount = new Web3Number(
34232
- extendedHoldings.availableForWithdrawal,
34405
+ extendedHoldings.availableForTrade,
34233
34406
  USDC_TOKEN_DECIMALS
34234
34407
  );
34235
34408
  const {
@@ -34238,12 +34411,11 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
34238
34411
  const { collateralPrice } = await this.getAssetPrices();
34239
34412
  const { vesuAmountInBTC, extendedAmountInBTC } = calculateVesUPositionSizeGivenExtended(
34240
34413
  extendedPositionValue,
34241
- extendedHoldingAmount,
34414
+ extendedHoldingAmount.minus(BUFFER_AMOUNT_IN_AVAILABLE_FOR_TRADE),
34242
34415
  collateralTokenAmount,
34243
34416
  collateralPrice.price
34244
34417
  );
34245
- console.log("vesuAmountInBTC", vesuAmountInBTC);
34246
- console.log("extendedAmountInBTC", extendedAmountInBTC);
34418
+ logger.info(`vesuAmountInBTC ${vesuAmountInBTC}, extendedAmountInBTC ${extendedAmountInBTC}`);
34247
34419
  let calls = [];
34248
34420
  if (vesuAmountInBTC.greaterThan(MINIMUM_EXTENDED_POSITION_SIZE)) {
34249
34421
  const proofsInfo = vesuAdapter.getProofs(true, this.getMerkleTree());
@@ -34256,7 +34428,6 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
34256
34428
  );
34257
34429
  const { amount: wbtcAmountInVaultAllocator } = await this.getUnusedBalanceWBTC();
34258
34430
  if (wbtcAmountInVaultAllocator.lessThan(vesuAmountInBTC)) {
34259
- console.log("error wbtc amount in vault allocator is less than vesu amount in btc", wbtcAmountInVaultAllocator, vesuAmountInBTC);
34260
34431
  const swapProofsInfo = avnuAdapter.getProofs(true, this.getMerkleTree());
34261
34432
  const swapProofGroups = swapProofsInfo.proofs;
34262
34433
  const swapCall = this.getManageCall(
@@ -34300,7 +34471,7 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
34300
34471
  bid
34301
34472
  } = await extendedAdapter.fetchOrderBookBTCUSDC();
34302
34473
  const price = ask.plus(bid).dividedBy(2);
34303
- const btcToken = vesuAdapter.config.supportedPositions[1].asset;
34474
+ const btcToken = vesuAdapter.config.supportedPositions[0].asset;
34304
34475
  const btcPriceAvnu = await avnuAdapter.getPriceOfToken(btcToken.address.toString());
34305
34476
  if (!btcPriceAvnu) {
34306
34477
  logger.error(`error getting btc price avnu: ${btcPriceAvnu}`);
@@ -34316,43 +34487,65 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
34316
34487
  async handleWithdraw(amount) {
34317
34488
  try {
34318
34489
  const usdcBalanceVaultAllocator = await this.getUnusedBalance();
34319
- const usdcBalanceDifference = amount.minus(usdcBalanceVaultAllocator.usdValue);
34490
+ const usdcBalanceDifference = amount.plus(BUFFER_USDC_IN_WITHDRAWAL).minus(usdcBalanceVaultAllocator.usdValue);
34320
34491
  logger.info(`usdcBalanceDifference, ${usdcBalanceDifference.toNumber()}`);
34492
+ let calls = [];
34493
+ let status = true;
34321
34494
  if (usdcBalanceDifference.lessThan(0)) {
34322
- const withdrawCall = await this.getBringLiquidityCall({
34323
- amount
34495
+ const withdrawCall2 = await this.getBringLiquidityCall({
34496
+ amount: usdcBalanceVaultAllocator.amount
34324
34497
  });
34325
- logger.info("withdraw call", withdrawCall);
34326
- return [withdrawCall];
34498
+ logger.info("withdraw call", withdrawCall2);
34499
+ calls.push(withdrawCall2);
34500
+ return {
34501
+ calls,
34502
+ status: true
34503
+ };
34327
34504
  }
34328
34505
  const vesuAdapter = await this.getVesuAdapter();
34329
34506
  const extendedAdapter = await this.getExtendedAdapter();
34330
34507
  if (!vesuAdapter || !extendedAdapter || !extendedAdapter.client) {
34508
+ status = false;
34331
34509
  logger.error(
34332
34510
  `vesu or extended adapter not found: vesuAdapter=${vesuAdapter}, extendedAdapter=${extendedAdapter}`
34333
34511
  );
34334
- return [];
34512
+ return {
34513
+ calls,
34514
+ status
34515
+ };
34335
34516
  }
34336
34517
  const { collateralTokenAmount } = await vesuAdapter.vesuAdapter.getAssetPrices();
34337
34518
  const {
34338
34519
  collateralPrice
34339
34520
  } = await this.getAssetPrices();
34340
34521
  const extendedPositon = await extendedAdapter.getAllOpenPositions();
34522
+ if (!extendedPositon) {
34523
+ status = false;
34524
+ logger.error("error getting extended position", extendedPositon);
34525
+ return {
34526
+ calls,
34527
+ status
34528
+ };
34529
+ }
34341
34530
  const amountDistributionForWithdrawal = await calculateAmountDistributionForWithdrawal(
34342
- amount,
34531
+ usdcBalanceDifference,
34343
34532
  collateralPrice.price,
34344
34533
  collateralTokenAmount,
34345
34534
  extendedPositon
34346
34535
  );
34347
34536
  if (!amountDistributionForWithdrawal) {
34537
+ status = false;
34348
34538
  logger.error(
34349
34539
  `error calculating amount distribution for withdrawal: ${amountDistributionForWithdrawal}`
34350
34540
  );
34351
- return [];
34541
+ return {
34542
+ calls,
34543
+ status
34544
+ };
34352
34545
  }
34353
34546
  const { vesu_amount, extended_amount } = amountDistributionForWithdrawal;
34354
- if (vesu_amount.greaterThan(0)) {
34355
- const result = await this.moveAssets(
34547
+ if (status && vesu_amount.greaterThan(0)) {
34548
+ const { calls: vesuCalls, status: vesuStatus } = await this.moveAssets(
34356
34549
  {
34357
34550
  amount: vesu_amount,
34358
34551
  from: Protocols.VESU.name,
@@ -34361,10 +34554,11 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
34361
34554
  extendedAdapter,
34362
34555
  vesuAdapter
34363
34556
  );
34364
- return result;
34557
+ status = vesuStatus;
34558
+ calls.push(...vesuCalls);
34365
34559
  }
34366
- if (extended_amount.greaterThan(0)) {
34367
- const result = await this.moveAssets(
34560
+ if (status && extended_amount.greaterThan(0)) {
34561
+ const { calls: extendedCalls, status: extendedStatus } = await this.moveAssets(
34368
34562
  {
34369
34563
  amount: extended_amount,
34370
34564
  from: Protocols.EXTENDED.name,
@@ -34373,12 +34567,32 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
34373
34567
  extendedAdapter,
34374
34568
  vesuAdapter
34375
34569
  );
34376
- return result;
34570
+ status = extendedStatus;
34571
+ if (status) {
34572
+ calls.push(...extendedCalls);
34573
+ } else {
34574
+ logger.error("error moving assets to vault: extendedStatus: ${extendedStatus}");
34575
+ return {
34576
+ calls: [],
34577
+ status
34578
+ };
34579
+ }
34377
34580
  }
34378
- return [];
34581
+ const withdrawCall = await this.getBringLiquidityCall({
34582
+ amount
34583
+ });
34584
+ logger.info("withdraw call", withdrawCall);
34585
+ calls.push(withdrawCall);
34586
+ return {
34587
+ calls,
34588
+ status
34589
+ };
34379
34590
  } catch (err) {
34380
34591
  logger.error(`error handling withdrawal: ${err}`);
34381
- return [];
34592
+ return {
34593
+ calls: [],
34594
+ status: false
34595
+ };
34382
34596
  }
34383
34597
  }
34384
34598
  async getAUM() {
@@ -34512,6 +34726,7 @@ function getLooperSettings2(lstSymbol, underlyingSymbol, vaultSettings, pool1, e
34512
34726
  () => vesuMultiplyAdapter.getWithdrawLeaf()
34513
34727
  );
34514
34728
  vaultSettings.leafAdapters.push(() => extendedAdapter.getDepositLeaf());
34729
+ vaultSettings.leafAdapters.push(() => extendedAdapter.getSwapFromLegacyLeaf());
34515
34730
  vaultSettings.leafAdapters.push(() => avnuAdapter.getDepositLeaf());
34516
34731
  vaultSettings.leafAdapters.push(() => avnuAdapter.getWithdrawLeaf());
34517
34732
  vaultSettings.leafAdapters.push(