@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.mjs CHANGED
@@ -4328,20 +4328,13 @@ var EkuboQuoter = class _EkuboQuoter {
4328
4328
  async getDexPrice(baseToken, quoteToken, amount) {
4329
4329
  const lstTokenInfo = baseToken;
4330
4330
  const lstUnderlyingTokenInfo = quoteToken;
4331
- console.log("lstTokenInfo", lstTokenInfo);
4332
- console.log("lstUnderlyingTokenInfo", lstUnderlyingTokenInfo);
4333
- console.log("amount", amount);
4334
4331
  const quote = await this.getQuote(
4335
4332
  lstTokenInfo.address.address,
4336
4333
  lstUnderlyingTokenInfo.address.address,
4337
4334
  amount
4338
4335
  );
4339
- console.log("quote", quote);
4340
4336
  const outputAmount = Web3Number.fromWei(quote.total_calculated, lstUnderlyingTokenInfo.decimals);
4341
- console.log("outputAmount", outputAmount);
4342
- console.log("amount", amount);
4343
4337
  const price = outputAmount.toNumber() / amount.toNumber();
4344
- console.log("price", price);
4345
4338
  logger.verbose(`${_EkuboQuoter.name}:: LST Dex Price: ${price}`);
4346
4339
  return price;
4347
4340
  }
@@ -4360,16 +4353,12 @@ var EkuboQuoter = class _EkuboQuoter {
4360
4353
  // debt collateral
4361
4354
  async getSwapLimitAmount(fromToken, toToken, amount, max_slippage = 2e-3) {
4362
4355
  const isExactAmountIn = amount.greaterThanOrEqualTo(0);
4363
- console.log("isExactAmountIn", isExactAmountIn);
4364
4356
  logger.verbose(`${_EkuboQuoter.name}::getSwapLimitAmount isExactAmountIn: ${isExactAmountIn}, fromToken: ${fromToken.symbol}, toToken: ${toToken.symbol}, amount: ${amount}`);
4365
4357
  const isYieldToken = this.tokenMarketData.isAPYSupported(toToken);
4366
4358
  console.log("isYieldToken", isYieldToken);
4367
4359
  const baseToken = isExactAmountIn ? toToken : fromToken;
4368
4360
  const quoteToken = isExactAmountIn ? fromToken : toToken;
4369
- console.log("baseToken", baseToken);
4370
- console.log("quoteToken", quoteToken);
4371
4361
  const dexPrice = await this.getDexPrice(baseToken, quoteToken, amount);
4372
- console.log("dexPrice", dexPrice);
4373
4362
  const trueExchangeRate = isYieldToken ? await this.tokenMarketData.getTruePrice(baseToken) : dexPrice;
4374
4363
  console.log("trueExchangeRate", trueExchangeRate);
4375
4364
  if (isExactAmountIn) {
@@ -28021,6 +28010,7 @@ var vesu_multiple_abi_default = [
28021
28010
  var AVNU_API = "https://starknet.api.avnu.fi/swap/v2/quotes";
28022
28011
  var USDC_TOKEN_DECIMALS = 6;
28023
28012
  var USDC_TOKEN_ADDRESS = "0x053C91253BC9682c04929cA02ED00b3E423f6710D2ee7e0D5EBB06F3eCF368A8";
28013
+ var BUFFER_USDC_IN_WITHDRAWAL = 5;
28024
28014
  var WBTC_TOKEN_ADDRESS = "0x3fe2b97c1fd336e750087d68b9b867997fd64a2661ff3ca5a7c771641e8e7ac";
28025
28015
  var WBTC_TOKEN_DECIMALS = 8;
28026
28016
  var MAINTENANCE_MARGIN = 0.01;
@@ -28112,8 +28102,7 @@ var calculateAmountDistributionForWithdrawal = async (amountInUsdc, collateralPr
28112
28102
  logger.error("error getting extended positions");
28113
28103
  return null;
28114
28104
  }
28115
- const extendedBTCExposure = extendedPosition.length > 0 ? new Web3Number(extendedPosition[0].size, WBTC_TOKEN_DECIMALS) : new Web3Number(0, WBTC_TOKEN_DECIMALS);
28116
- const extendedExposureUSD = extendedBTCExposure.multipliedBy(collateralPrice);
28105
+ const extendedExposureUSD = extendedPosition.length > 0 ? new Web3Number(extendedPosition[0].value, USDC_TOKEN_DECIMALS) : new Web3Number(0, USDC_TOKEN_DECIMALS);
28117
28106
  const vesuExposureUSD = collateralUnits.multipliedBy(collateralPrice);
28118
28107
  if (vesuExposureUSD.lessThan(0)) {
28119
28108
  return {
@@ -28131,9 +28120,14 @@ var calculateAmountDistributionForWithdrawal = async (amountInUsdc, collateralPr
28131
28120
  vesu_leverage
28132
28121
  };
28133
28122
  }
28123
+ console.log("the vesu exposure usd is", vesuExposureUSD.toNumber());
28124
+ console.log("the extended exposure usd is", extendedExposureUSD.toNumber());
28125
+ console.log("the amount in usdc is", amountInUsdc.toNumber());
28126
+ console.log("the extended leverage is", extended_leverage);
28127
+ console.log("the vesu leverage is", vesu_leverage);
28134
28128
  const numerator1 = amountInUsdc.multipliedBy(extended_leverage);
28135
- const numerator2 = vesuExposureUSD.multipliedBy(vesu_leverage);
28136
- const numerator3 = extendedExposureUSD.multipliedBy(extended_leverage).multipliedBy(-1);
28129
+ const numerator2 = vesuExposureUSD;
28130
+ const numerator3 = extendedExposureUSD.multipliedBy(-1);
28137
28131
  const finalNumerator = numerator1.plus(numerator2).plus(numerator3);
28138
28132
  const denominator = extended_leverage + vesu_leverage;
28139
28133
  const vesuAmountInUSDC = finalNumerator.dividedBy(denominator);
@@ -28143,6 +28137,7 @@ var calculateAmountDistributionForWithdrawal = async (amountInUsdc, collateralPr
28143
28137
  "the extended amount in usdc is",
28144
28138
  extendedAmountInUSDC.toNumber()
28145
28139
  );
28140
+ await new Promise((resolve) => setTimeout(resolve, 1e4));
28146
28141
  return {
28147
28142
  vesu_amount: vesuAmountInUSDC,
28148
28143
  extended_amount: extendedAmountInUSDC,
@@ -28164,10 +28159,10 @@ var calculateExtendedLevergae = () => {
28164
28159
  const extended_leverage_max = 1 / (MAINTENANCE_MARGIN + MAX_PRICE_DROP_PERCENTAGE);
28165
28160
  return Math.floor(extended_leverage_max);
28166
28161
  };
28167
- var calculateDebtAmount = (collateralAmount, debtAmount, debtPrice, maxLtv = MAX_LTV_BTC_USDC, addedAmount, collateralPrice, isDeposit) => {
28162
+ var calculateDebtAmount = (collateralAmount, debtAmount, debtPrice, maxLtv = MAX_LIQUIDATION_RATIO, addedAmount, collateralPrice, isDeposit) => {
28168
28163
  try {
28169
- const marginAmount = addedAmount.multipliedBy(isDeposit ? 1 : -1);
28170
- const numerator1 = collateralAmount.plus(addedAmount).multipliedBy(collateralPrice).multipliedBy(maxLtv);
28164
+ const addedCollateral = addedAmount.multipliedBy(isDeposit ? 1 : -1);
28165
+ const numerator1 = collateralAmount.plus(addedCollateral).multipliedBy(collateralPrice).multipliedBy(maxLtv);
28171
28166
  const numerator2 = debtAmount.multipliedBy(debtPrice).multipliedBy(TARGET_HF);
28172
28167
  const denominator = TARGET_HF - maxLtv;
28173
28168
  const x_debt_usd = numerator1.minus(numerator2).dividedBy(denominator);
@@ -28202,7 +28197,6 @@ var calculateAmountDepositOnExtendedWhenIncurringLosses = async (client) => {
28202
28197
  const extendedHoldings = await client.getHoldings();
28203
28198
  const extended_leverage = calculateExtendedLevergae();
28204
28199
  const latestPosition = (await client.getPositions()).data.pop();
28205
- console.log("the latest position is", latestPosition, extendedHoldings);
28206
28200
  if (!extendedHoldings || !latestPosition) {
28207
28201
  logger.error(`error getting extended position: extendedHoldings=${extendedHoldings}, latestPosition=${latestPosition}`);
28208
28202
  return null;
@@ -28583,7 +28577,7 @@ var VesuMultiplyAdapter = class _VesuMultiplyAdapter extends BaseAdapter {
28583
28577
  this.config.debt.address.toBigInt(),
28584
28578
  this.config.vaultAllocator.toBigInt()
28585
28579
  ],
28586
- sanitizer: SIMPLE_SANITIZER_V2,
28580
+ sanitizer: isV2 ? SIMPLE_SANITIZER_V2 : SIMPLE_SANITIZER,
28587
28581
  // vmw = vesu multiply withdraw
28588
28582
  id: `vmw_${this.config.poolId.shortString()}_${collateral.symbol}_${debt.symbol}`
28589
28583
  },
@@ -28732,7 +28726,7 @@ var VesuMultiplyAdapter = class _VesuMultiplyAdapter extends BaseAdapter {
28732
28726
  },
28733
28727
  // Vesu multiply call
28734
28728
  {
28735
- sanitizer: SIMPLE_SANITIZER_V2,
28729
+ sanitizer: isV2 ? SIMPLE_SANITIZER_V2 : SIMPLE_SANITIZER,
28736
28730
  call: {
28737
28731
  contractAddress: vesuMultiply,
28738
28732
  selector: hash5.getSelectorFromName("modify_lever"),
@@ -28820,19 +28814,13 @@ var VesuMultiplyAdapter = class _VesuMultiplyAdapter extends BaseAdapter {
28820
28814
  leverSwap = ekuboQuoter.getVesuMultiplyQuote(swapQuote, debtToken, collateralToken);
28821
28815
  const MAX_SLIPPAGE = 2e-3;
28822
28816
  if (debtAmount.greaterThan(0)) {
28823
- console.log("debtAmountInCollateralUnits", debtAmountInCollateralUnits.toNumber());
28824
- leverSwapLimitAmount = await ekuboQuoter.getSwapLimitAmount(debtToken, collateralToken, debtAmount, MAX_SLIPPAGE);
28825
- const anotherleverSwapLimitAmount = debtAmount.multipliedBy(1 + MAX_SLIPPAGE);
28826
- console.log("anotherleverSwapLimitAmount", anotherleverSwapLimitAmount, leverSwapLimitAmount);
28817
+ leverSwapLimitAmount = debtAmount.multipliedBy(1 + MAX_SLIPPAGE);
28827
28818
  } else if (debtAmount.lessThan(0)) {
28828
- leverSwapLimitAmount = await ekuboQuoter.getSwapLimitAmount(collateralToken, debtToken, debtAmountInCollateralUnits.multipliedBy(-1), MAX_SLIPPAGE);
28829
- const anotherleverSwapLimitAmount = debtAmount.abs().multipliedBy(1 - MAX_SLIPPAGE);
28830
- console.log("anotherleverSwapLimitAmount", anotherleverSwapLimitAmount, leverSwapLimitAmount);
28819
+ leverSwapLimitAmount = debtAmount.abs().multipliedBy(1 - MAX_SLIPPAGE);
28831
28820
  } else {
28832
28821
  leverSwapLimitAmount = Web3Number.fromWei(0, this.config.debt.decimals);
28833
28822
  }
28834
28823
  await new Promise((resolve) => setTimeout(resolve, 1e4));
28835
- console.log("leverSwapLimitAmount", leverSwapLimitAmount);
28836
28824
  } else {
28837
28825
  throw new Error(`VesuMultiplyAdapter: Price impact too high (${swapQuote.price_impact}), skipping swap`);
28838
28826
  }
@@ -28902,26 +28890,23 @@ var VesuMultiplyAdapter = class _VesuMultiplyAdapter extends BaseAdapter {
28902
28890
  debtPrice.price,
28903
28891
  debtToken.decimals
28904
28892
  );
28905
- console.log("debtAmountToRepay", debtAmountToRepay);
28906
28893
  if (!debtAmountToRepay) {
28907
28894
  throw new Error("error calculating debt amount to repay");
28908
28895
  }
28909
28896
  const ekuboQuoter = new EkuboQuoter(this.config.networkConfig, this.config.pricer);
28910
28897
  const debtInDebtUnits = new Web3Number(debtAmountToRepay, debtToken.decimals).dividedBy(debtPrice.price).multipliedBy(10 ** debtToken.decimals);
28911
- const debtInCollateralUnits = new Web3Number(debtAmountToRepay, debtToken.decimals).dividedBy(collateralPrice.price).multipliedBy(10 ** collateralToken.decimals);
28912
28898
  const swapQuote = await ekuboQuoter.getQuote(
28913
28899
  debtToken.address.address,
28914
28900
  collateralToken.address.address,
28915
28901
  debtInDebtUnits
28916
28902
  );
28917
28903
  const MAX_SLIPPAGE = 2e-3;
28918
- if (swapQuote.price_impact < 0.025) {
28919
- leverSwap = ekuboQuoter.getVesuMultiplyQuote(swapQuote, debtToken, collateralToken);
28904
+ if (swapQuote.price_impact < 25e-4) {
28905
+ leverSwap = ekuboQuoter.getVesuMultiplyQuote(swapQuote, collateralToken, debtToken);
28920
28906
  } else {
28921
28907
  logger.error(`VesuMultiplyAdapter: Price impact too high (${swapQuote.price_impact}), skipping swap`);
28922
28908
  }
28923
- const anotherLeverSwapLimitAmount = await ekuboQuoter.getSwapLimitAmount(collateralToken, debtToken, debtInDebtUnits, MAX_SLIPPAGE);
28924
- leverSwapLimitAmount = await ekuboQuoter.getSwapLimitAmount(debtToken, collateralToken, debtInCollateralUnits, MAX_SLIPPAGE);
28909
+ leverSwapLimitAmount = new Web3Number(debtAmountToRepay, debtToken.decimals).abs().multipliedBy(1 + MAX_SLIPPAGE);
28925
28910
  const multiplyParams = await this.getLeverParams(false, params, leverSwap, leverSwapLimitAmount);
28926
28911
  const call = multiplyContract.populate("modify_lever", {
28927
28912
  modify_lever_params: this.formatMultiplyParams(false, multiplyParams)
@@ -29493,6 +29478,41 @@ var ExtendedAdapter = class _ExtendedAdapter extends BaseAdapter {
29493
29478
  }
29494
29479
  ];
29495
29480
  }
29481
+ getSwapFromLegacyLeaf() {
29482
+ const leafConfigs = this._getSwapFromLegacyLeaf();
29483
+ const leaves = leafConfigs.map((config) => {
29484
+ const { target, method, packedArguments, sanitizer, id } = config;
29485
+ const leaf = this.constructSimpleLeafData({
29486
+ id,
29487
+ target,
29488
+ method,
29489
+ packedArguments
29490
+ }, sanitizer);
29491
+ return leaf;
29492
+ });
29493
+ return { leaves, callConstructor: this.getSwapFromLegacyCall.bind(this) };
29494
+ }
29495
+ _getSwapFromLegacyLeaf() {
29496
+ const usdceToken = Global.getDefaultTokens().find((token) => token.symbol === "USDCe");
29497
+ return [
29498
+ {
29499
+ target: usdceToken.address,
29500
+ method: "approve",
29501
+ packedArguments: [
29502
+ AVNU_EXCHANGE_FOR_LEGACY_USDC.toBigInt()
29503
+ ],
29504
+ id: `extendedswaplegacyapprove_${usdceToken.symbol}`,
29505
+ sanitizer: AVNU_LEGACY_SANITIZER
29506
+ },
29507
+ {
29508
+ target: AVNU_EXCHANGE_FOR_LEGACY_USDC,
29509
+ method: "swap_to_new",
29510
+ packedArguments: [],
29511
+ id: `extended_swap_to_new_${usdceToken.symbol}`,
29512
+ sanitizer: AVNU_LEGACY_SANITIZER
29513
+ }
29514
+ ];
29515
+ }
29496
29516
  _getWithdrawLeaf() {
29497
29517
  return [];
29498
29518
  }
@@ -29573,6 +29593,70 @@ var ExtendedAdapter = class _ExtendedAdapter extends BaseAdapter {
29573
29593
  return [];
29574
29594
  }
29575
29595
  }
29596
+ getProofsForFromLegacySwap(tree) {
29597
+ let proofGroups = [];
29598
+ const ids = this.getSwapFromLegacyLeaf().leaves.map((l) => l.readableId);
29599
+ for (const [i, v] of tree.entries()) {
29600
+ if (ids.includes(v.readableId)) {
29601
+ proofGroups.push(tree.getProof(i));
29602
+ }
29603
+ }
29604
+ if (proofGroups.length != ids.length) {
29605
+ throw new Error(`Not all proofs found for IDs: ${ids.join(", ")}`);
29606
+ }
29607
+ return {
29608
+ proofs: proofGroups,
29609
+ callConstructor: this.getSwapFromLegacyCall.bind(this)
29610
+ };
29611
+ }
29612
+ async getSwapFromLegacyCall(params) {
29613
+ try {
29614
+ const usdcToken = this.config.supportedPositions[0].asset;
29615
+ const usdceToken = Global.getDefaultTokens().find((token) => token.symbol === "USDCe");
29616
+ const amount = uint25613.bnToUint256(params.amount.multipliedBy(10).toWei());
29617
+ const quotes = await this.config.avnuAdapter.getQuotesAvnu(
29618
+ usdceToken.address.toString(),
29619
+ usdcToken.address.toString(),
29620
+ params.amount.toNumber(),
29621
+ this.config.avnuAdapter.config.vaultAllocator.address.toString(),
29622
+ usdcToken.decimals,
29623
+ false
29624
+ );
29625
+ if (!quotes) {
29626
+ logger.error("error getting quotes from avnu");
29627
+ return [];
29628
+ }
29629
+ const getCalldata = await this.config.avnuAdapter.getSwapCallData(quotes);
29630
+ const swapCallData = getCalldata[0];
29631
+ return [
29632
+ {
29633
+ sanitizer: AVNU_LEGACY_SANITIZER,
29634
+ call: {
29635
+ contractAddress: usdceToken.address,
29636
+ selector: hash6.getSelectorFromName("approve"),
29637
+ calldata: [
29638
+ AVNU_EXCHANGE_FOR_LEGACY_USDC.toBigInt(),
29639
+ toBigInt(amount.low.toString()),
29640
+ // amount low
29641
+ toBigInt(amount.high.toString())
29642
+ // amount high
29643
+ ]
29644
+ }
29645
+ },
29646
+ {
29647
+ sanitizer: AVNU_LEGACY_SANITIZER,
29648
+ call: {
29649
+ contractAddress: AVNU_EXCHANGE_FOR_LEGACY_USDC,
29650
+ selector: hash6.getSelectorFromName("swap_to_new"),
29651
+ calldata: swapCallData
29652
+ }
29653
+ }
29654
+ ];
29655
+ } catch (error) {
29656
+ logger.error(`Error creating Deposit Call: ${error}`);
29657
+ return [];
29658
+ }
29659
+ }
29576
29660
  //Swap wbtc to usdc
29577
29661
  async getWithdrawCall(params) {
29578
29662
  try {
@@ -29590,10 +29674,10 @@ var ExtendedAdapter = class _ExtendedAdapter extends BaseAdapter {
29590
29674
  if (!this.client) {
29591
29675
  throw new Error("Client not initialized");
29592
29676
  }
29593
- const withdrawalRequest = this.client.withdrawUSDC(amount.toString());
29594
- if ((await withdrawalRequest).status === "OK") {
29595
- console.log("Withdrawal request successful");
29596
- return true;
29677
+ const withdrawalRequest = await this.client.withdrawUSDC(amount.toFixed(2));
29678
+ if (withdrawalRequest.status === "OK") {
29679
+ const withdrawalStatus = await this.getDepositOrWithdrawalStatus(withdrawalRequest.data, "WITHDRAWAL" /* WITHDRAWAL */);
29680
+ return withdrawalStatus;
29597
29681
  }
29598
29682
  return false;
29599
29683
  } catch (error) {
@@ -29774,7 +29858,7 @@ var ExtendedAdapter = class _ExtendedAdapter extends BaseAdapter {
29774
29858
  logger.error(`createShortOrder failed on attempt ${attempt}: ${err.message}`);
29775
29859
  if (attempt < maxAttempts) {
29776
29860
  const backoff = 1200 * attempt;
29777
- console.log(`Retrying after ${backoff}ms...`);
29861
+ logger.info(`Retrying after ${backoff}ms...`);
29778
29862
  await new Promise((resolve) => setTimeout(resolve, backoff));
29779
29863
  return this.createOrder(
29780
29864
  leverage,
@@ -29805,7 +29889,7 @@ var ExtendedAdapter = class _ExtendedAdapter extends BaseAdapter {
29805
29889
  }
29806
29890
  return null;
29807
29891
  } catch (err) {
29808
- console.log("Error opening short extended position", err);
29892
+ logger.error(`Error opening short extended position, ${err}`);
29809
29893
  return null;
29810
29894
  }
29811
29895
  }
@@ -29815,17 +29899,16 @@ var ExtendedAdapter = class _ExtendedAdapter extends BaseAdapter {
29815
29899
  operationsType: [operationsType],
29816
29900
  operationsStatus: ["COMPLETED" /* COMPLETED */]
29817
29901
  });
29818
- console.log("transferHistory", transferHistory);
29819
29902
  if (operationsType === "DEPOSIT" /* DEPOSIT */) {
29820
29903
  const myTransferStatus = transferHistory.data.find((operation) => operation.transactionHash === orderId);
29821
29904
  if (!myTransferStatus) {
29822
- return false;
29905
+ return true;
29823
29906
  }
29824
29907
  return true;
29825
29908
  } else {
29826
- const myTransferStatus = transferHistory.data.find((operation) => operation.id === orderId);
29909
+ const myTransferStatus = transferHistory.data.find((operation) => operation.id.toString() === orderId.toString());
29827
29910
  if (!myTransferStatus) {
29828
- return false;
29911
+ return true;
29829
29912
  }
29830
29913
  return true;
29831
29914
  }
@@ -33414,7 +33497,7 @@ var AvnuAdapter = class _AvnuAdapter extends BaseAdapter {
33414
33497
  packedArguments: [
33415
33498
  fromToken.address.toBigInt(),
33416
33499
  //wbtc
33417
- fromToken.address.toBigInt(),
33500
+ toToken.address.toBigInt(),
33418
33501
  //usdc
33419
33502
  vaultAllocator.toBigInt()
33420
33503
  ],
@@ -33428,13 +33511,11 @@ var AvnuAdapter = class _AvnuAdapter extends BaseAdapter {
33428
33511
  }
33429
33512
  async getDepositCall(params) {
33430
33513
  try {
33431
- console.log("params.amount", params.amount);
33432
33514
  const fromToken = this.config.supportedPositions[0].asset;
33433
33515
  const toToken = this.config.supportedPositions[1].asset;
33434
33516
  const vaultAllocator = ContractAddr.from(
33435
33517
  this.config.vaultAllocator.address
33436
33518
  );
33437
- console.log("vaultAllocator", vaultAllocator);
33438
33519
  const quote = await this.getQuotesAvnu(
33439
33520
  fromToken.address.toString(),
33440
33521
  toToken.address.toString(),
@@ -33490,7 +33571,6 @@ var AvnuAdapter = class _AvnuAdapter extends BaseAdapter {
33490
33571
  const vaultAllocator = ContractAddr.from(
33491
33572
  this.config.vaultAllocator.address
33492
33573
  );
33493
- console.log("params.amount", params.amount);
33494
33574
  const quote = await this.getQuotesAvnu(
33495
33575
  fromToken.address.toString(),
33496
33576
  toToken.address.toString(),
@@ -33509,8 +33589,6 @@ var AvnuAdapter = class _AvnuAdapter extends BaseAdapter {
33509
33589
  );
33510
33590
  const swapCallData = getCalldata[0];
33511
33591
  const amount = uint25614.bnToUint256(params.amount.toWei());
33512
- console.log("amount", amount);
33513
- console.log("swapCallData", swapCallData);
33514
33592
  return [
33515
33593
  {
33516
33594
  sanitizer: SIMPLE_SANITIZER,
@@ -33564,7 +33642,7 @@ var AvnuAdapter = class _AvnuAdapter extends BaseAdapter {
33564
33642
  }
33565
33643
  throw new Error("Failed to fetch quote after retries");
33566
33644
  }
33567
- async getQuotesAvnu(from_token_address, to_token_address, amount, takerAddress, toTokenDecimals, usdcToBtc, maxIterations = 5, tolerance = 1e4) {
33645
+ async getQuotesAvnu(from_token_address, to_token_address, amount, takerAddress, toTokenDecimals, usdcToBtc, maxIterations = 5, tolerance = 1e3) {
33568
33646
  try {
33569
33647
  const fromToken = this.config.supportedPositions[0].asset;
33570
33648
  const toToken = this.config.supportedPositions[1].asset;
@@ -33585,14 +33663,12 @@ var AvnuAdapter = class _AvnuAdapter extends BaseAdapter {
33585
33663
  return dataObject2;
33586
33664
  }
33587
33665
  const btcPrice = await this.getPriceOfToken(toToken.address.toString());
33588
- console.log("btcPrice", btcPrice);
33589
33666
  if (!btcPrice) {
33590
33667
  logger.error(`error getting btc price: ${btcPrice}`);
33591
33668
  return null;
33592
33669
  }
33593
33670
  const estimatedUsdcAmount = Math.floor(amount * btcPrice);
33594
33671
  const targetBtcBig = BigInt(returnFormattedAmount(amount, toTokenDecimals));
33595
- console.log("targetBtcBig", targetBtcBig);
33596
33672
  let low = BigInt(
33597
33673
  Math.floor(
33598
33674
  estimatedUsdcAmount * 10 ** fromToken.decimals * 0.9
@@ -33695,6 +33771,23 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
33695
33771
  debtPrice
33696
33772
  };
33697
33773
  }
33774
+ async getUnusedBalanceUSDCE() {
33775
+ const usdceToken = Global.getDefaultTokens().find(
33776
+ (token) => token.symbol === "USDCe"
33777
+ );
33778
+ const balance = await new ERC20(this.config).balanceOf(
33779
+ usdceToken.address,
33780
+ WALLET_ADDRESS,
33781
+ usdceToken.decimals
33782
+ );
33783
+ const price = await this.pricer.getPrice(usdceToken.symbol);
33784
+ const usdValue = Number(balance.toFixed(usdceToken.decimals)) * price.price;
33785
+ return {
33786
+ tokenInfo: usdceToken,
33787
+ amount: balance,
33788
+ usdValue
33789
+ };
33790
+ }
33698
33791
  async getUnusedBalanceWBTC() {
33699
33792
  const collateralToken = this.metadata.additionalInfo.borrowable_assets[0];
33700
33793
  const balance = await new ERC20(this.config).balanceOf(
@@ -33740,22 +33833,30 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
33740
33833
  }
33741
33834
  return extendedAdapter.adapter;
33742
33835
  }
33743
- async moveAssetsToVaultAllocator(amount) {
33836
+ async moveAssetsToVaultAllocator(amount, extendedAdapter) {
33744
33837
  try {
33745
- const usdcToken = Global.getDefaultTokens().find(
33746
- (token) => token.symbol === "USDC"
33838
+ const usdceToken = Global.getDefaultTokens().find(
33839
+ (token) => token.symbol === "USDCe"
33747
33840
  );
33748
33841
  const approveCall = new ERC20(this.config).approve(
33749
- usdcToken.address,
33842
+ usdceToken.address,
33750
33843
  this.metadata.additionalInfo.vaultAllocator,
33751
33844
  amount
33752
33845
  );
33753
33846
  const transferCall = new ERC20(this.config).transfer(
33754
- usdcToken.address,
33847
+ usdceToken.address,
33755
33848
  this.metadata.additionalInfo.vaultAllocator,
33756
33849
  amount
33757
33850
  );
33758
- return [approveCall, transferCall];
33851
+ const proofsInfo = extendedAdapter.getProofsForFromLegacySwap(
33852
+ this.getMerkleTree()
33853
+ );
33854
+ const proofGroups = proofsInfo.proofs;
33855
+ const call = this.getManageCall(
33856
+ proofGroups,
33857
+ await proofsInfo.callConstructor({ amount })
33858
+ );
33859
+ return [approveCall, transferCall, call];
33759
33860
  } catch (err) {
33760
33861
  logger.error(`error moving assets to vault allocator: ${err}`);
33761
33862
  return [];
@@ -33867,11 +33968,9 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
33867
33968
  );
33868
33969
  return calls;
33869
33970
  }
33870
- console.log("extendedAmount", extendedAmount);
33871
- console.log("vesuAmount", vesuAmount);
33872
33971
  if (extendedAmount.lessThan(0)) {
33873
33972
  try {
33874
- const extendedCalls = await this.moveAssets(
33973
+ const { calls: extendedCalls, status: extendedStatus } = await this.moveAssets(
33875
33974
  {
33876
33975
  to: Protocols.VAULT.name,
33877
33976
  from: Protocols.EXTENDED.name,
@@ -33880,14 +33979,18 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
33880
33979
  extendedAdapter,
33881
33980
  vesuAdapter
33882
33981
  );
33883
- calls.push(...extendedCalls);
33982
+ if (extendedStatus) {
33983
+ calls.push(...extendedCalls);
33984
+ } else {
33985
+ return [];
33986
+ }
33884
33987
  } catch (err) {
33885
33988
  logger.error(`Failed moving assets to vault: ${err}`);
33886
33989
  }
33887
33990
  }
33888
33991
  if (vesuAmount.lessThan(0)) {
33889
33992
  try {
33890
- const vesuCalls = await this.moveAssets(
33993
+ const { calls: vesuCalls, status: vesuStatus } = await this.moveAssets(
33891
33994
  {
33892
33995
  to: Protocols.EXTENDED.name,
33893
33996
  from: Protocols.VESU.name,
@@ -33897,6 +34000,9 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
33897
34000
  vesuAdapter
33898
34001
  );
33899
34002
  calls.push(...vesuCalls);
34003
+ if (!vesuStatus) {
34004
+ return [];
34005
+ }
33900
34006
  } catch (err) {
33901
34007
  logger.error(`Failed moving assets to vault: ${err}`);
33902
34008
  }
@@ -33908,15 +34014,15 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
33908
34014
  }
33909
34015
  const usdcAmountInWallet = (await this.getUnusedBalance()).amount;
33910
34016
  const usdcAmountOnExtended = parseFloat(
33911
- extendedHoldings.availableForWithdrawal
34017
+ extendedHoldings.availableForTrade
33912
34018
  );
33913
- if (extendedAmount.minus(usdcAmountOnExtended).greaterThan(0)) {
34019
+ if (extendedAmount.plus(BUFFER_USDC_IN_WITHDRAWAL).minus(usdcAmountOnExtended).greaterThan(0)) {
33914
34020
  try {
33915
- const extendedCalls = await this.moveAssets(
34021
+ const { calls: extendedCalls } = await this.moveAssets(
33916
34022
  {
33917
34023
  to: Protocols.EXTENDED.name,
33918
34024
  from: Protocols.VAULT.name,
33919
- amount: extendedAmount.minus(usdcAmountOnExtended)
34025
+ amount: extendedAmount.plus(BUFFER_USDC_IN_WITHDRAWAL).minus(usdcAmountOnExtended)
33920
34026
  },
33921
34027
  extendedAdapter,
33922
34028
  vesuAdapter
@@ -33928,15 +34034,18 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
33928
34034
  }
33929
34035
  if (vesuAmount.minus(usdcAmountInWallet).greaterThan(0)) {
33930
34036
  try {
33931
- const vesuCalls = await this.moveAssets(
34037
+ const { calls: vesuCalls, status: vesuStatus } = await this.moveAssets(
33932
34038
  {
33933
- to: Protocols.VESU.name,
34039
+ to: Protocols.VAULT.name,
33934
34040
  from: Protocols.EXTENDED.name,
33935
34041
  amount: vesuAmount.minus(usdcAmountInWallet)
33936
34042
  },
33937
34043
  extendedAdapter,
33938
34044
  vesuAdapter
33939
34045
  );
34046
+ if (!vesuStatus) {
34047
+ return [];
34048
+ }
33940
34049
  calls.push(...vesuCalls);
33941
34050
  } catch (err) {
33942
34051
  logger.error(`Failed moving assets to vault: ${err}`);
@@ -33953,9 +34062,12 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
33953
34062
  const avnuAdapter = await this.getAvnuAdapter();
33954
34063
  if (!avnuAdapter) {
33955
34064
  logger.error(`avnu adapter not found: ${avnuAdapter}`);
33956
- return [];
34065
+ return {
34066
+ calls: [],
34067
+ status: false
34068
+ };
33957
34069
  }
33958
- logger.info("moveAssets params", params);
34070
+ logger.info(`moveAssets params, ${JSON.stringify(params)}`);
33959
34071
  const collateralToken = vesuAdapter.config.supportedPositions[0].asset;
33960
34072
  const {
33961
34073
  collateralPrice
@@ -33972,18 +34084,67 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
33972
34084
  await proofsInfo.callConstructor({ amount: params.amount })
33973
34085
  );
33974
34086
  calls.push(call);
33975
- return calls;
34087
+ return {
34088
+ calls: [call],
34089
+ status: true
34090
+ };
33976
34091
  } else if (params.to === Protocols.VAULT.name && params.from === Protocols.EXTENDED.name) {
34092
+ const extendedLeverage = calculateExtendedLevergae();
34093
+ const extendedHoldings = await extendedAdapter.getExtendedDepositAmount();
34094
+ if (!extendedHoldings) {
34095
+ logger.error(`error getting extended holdings: ${extendedHoldings}`);
34096
+ return {
34097
+ calls: [],
34098
+ status: false
34099
+ };
34100
+ }
34101
+ const extendedHoldingAmount = new Web3Number(
34102
+ extendedHoldings.availableForWithdrawal,
34103
+ USDC_TOKEN_DECIMALS
34104
+ );
34105
+ logger.info(`${_VesuExtendedMultiplierStrategy.name}::moveAssets extendedHoldingAmount: ${extendedHoldingAmount.toNumber()}`);
34106
+ if (params.amount.abs().greaterThan(extendedHoldingAmount)) {
34107
+ const leftAmountAfterWithdrawalAmountInAccount = params.amount.abs().minus(extendedHoldingAmount);
34108
+ logger.info(`${_VesuExtendedMultiplierStrategy.name}::moveAssets leftAmountAfterWithdrawalAmountInAccount: ${leftAmountAfterWithdrawalAmountInAccount.toNumber()}`);
34109
+ const btcAmount = leftAmountAfterWithdrawalAmountInAccount.dividedBy(collateralPrice.price);
34110
+ const openLongPosition = btcAmount.multipliedBy(3).greaterThan(MINIMUM_EXTENDED_POSITION_SIZE) ? await extendedAdapter.createOrder(
34111
+ extendedLeverage.toString(),
34112
+ btcAmount.toNumber(),
34113
+ "BUY" /* BUY */
34114
+ ) : await extendedAdapter.createOrder(
34115
+ extendedLeverage.toString(),
34116
+ 35e-6,
34117
+ // just in case amount falls short then we need to create a withdrawal
34118
+ "BUY" /* BUY */
34119
+ );
34120
+ if (!openLongPosition) {
34121
+ logger.error(`error opening long position: ${openLongPosition}`);
34122
+ return {
34123
+ calls: [],
34124
+ status: false
34125
+ };
34126
+ }
34127
+ await new Promise((resolve) => setTimeout(resolve, 5e3));
34128
+ }
33977
34129
  const withdrawalFromExtended = await extendedAdapter.withdrawFromExtended(params.amount);
33978
34130
  if (withdrawalFromExtended) {
33979
- const calls = await this.moveAssetsToVaultAllocator(params.amount);
34131
+ const extendedHoldings2 = await extendedAdapter.getExtendedDepositAmount();
34132
+ logger.info(`extendedHoldings after withdrawal ${extendedHoldings2}`);
34133
+ await new Promise((resolve) => setTimeout(resolve, 1e4));
34134
+ const calls = await this.moveAssetsToVaultAllocator(params.amount, extendedAdapter);
33980
34135
  if (calls.length > 0) {
33981
- return calls;
34136
+ return {
34137
+ calls,
34138
+ status: true
34139
+ };
33982
34140
  }
33983
34141
  } else {
33984
34142
  logger.error("withdrawal from extended failed");
34143
+ return {
34144
+ calls: [],
34145
+ status: false
34146
+ };
33985
34147
  }
33986
- return [];
33987
34148
  } else if (params.to === Protocols.VAULT.name && params.from === Protocols.VESU.name) {
33988
34149
  const vesuAmountInBTC = new Web3Number(
33989
34150
  params.amount.dividedBy(collateralPrice.price).toNumber(),
@@ -34004,7 +34165,10 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
34004
34165
  await swapProofsInfo.callConstructor({ amount: vesuAmountInBTC })
34005
34166
  );
34006
34167
  calls.push(swapCall);
34007
- return calls;
34168
+ return {
34169
+ calls,
34170
+ status: true
34171
+ };
34008
34172
  } else if (params.to === Protocols.EXTENDED.name && params.from === Protocols.VESU.name) {
34009
34173
  const vesuAmountInBTC = new Web3Number(
34010
34174
  params.amount.dividedBy(collateralPrice.price).toNumber(),
@@ -34035,13 +34199,21 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
34035
34199
  await proofsInfoDeposit.callConstructor({ amount: params.amount })
34036
34200
  );
34037
34201
  calls.push(callDeposit);
34038
- return calls;
34202
+ return {
34203
+ calls,
34204
+ status: true
34205
+ };
34039
34206
  }
34040
- console.warn("moveAssets received unsupported route:", params);
34041
- return [];
34207
+ return {
34208
+ calls: [],
34209
+ status: false
34210
+ };
34042
34211
  } catch (err) {
34043
34212
  logger.error(`error moving assets: ${err}`);
34044
- return [];
34213
+ return {
34214
+ calls: [],
34215
+ status: false
34216
+ };
34045
34217
  }
34046
34218
  }
34047
34219
  async handleDeposit() {
@@ -34078,6 +34250,7 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
34078
34250
  };
34079
34251
  }
34080
34252
  const extendedPositionValue = position.length > 0 ? parseFloat(position[0].value) : 0;
34253
+ const BUFFER_AMOUNT_IN_AVAILABLE_FOR_TRADE = BUFFER_USDC_IN_WITHDRAWAL;
34081
34254
  const extendedHoldings = await extendedAdapter.getExtendedDepositAmount();
34082
34255
  if (!extendedHoldings) {
34083
34256
  logger.error(`error getting extended holdings: ${extendedHoldings}`);
@@ -34087,7 +34260,7 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
34087
34260
  };
34088
34261
  }
34089
34262
  const extendedHoldingAmount = new Web3Number(
34090
- extendedHoldings.availableForWithdrawal,
34263
+ extendedHoldings.availableForTrade,
34091
34264
  USDC_TOKEN_DECIMALS
34092
34265
  );
34093
34266
  const {
@@ -34096,12 +34269,11 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
34096
34269
  const { collateralPrice } = await this.getAssetPrices();
34097
34270
  const { vesuAmountInBTC, extendedAmountInBTC } = calculateVesUPositionSizeGivenExtended(
34098
34271
  extendedPositionValue,
34099
- extendedHoldingAmount,
34272
+ extendedHoldingAmount.minus(BUFFER_AMOUNT_IN_AVAILABLE_FOR_TRADE),
34100
34273
  collateralTokenAmount,
34101
34274
  collateralPrice.price
34102
34275
  );
34103
- console.log("vesuAmountInBTC", vesuAmountInBTC);
34104
- console.log("extendedAmountInBTC", extendedAmountInBTC);
34276
+ logger.info(`vesuAmountInBTC ${vesuAmountInBTC}, extendedAmountInBTC ${extendedAmountInBTC}`);
34105
34277
  let calls = [];
34106
34278
  if (vesuAmountInBTC.greaterThan(MINIMUM_EXTENDED_POSITION_SIZE)) {
34107
34279
  const proofsInfo = vesuAdapter.getProofs(true, this.getMerkleTree());
@@ -34114,7 +34286,6 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
34114
34286
  );
34115
34287
  const { amount: wbtcAmountInVaultAllocator } = await this.getUnusedBalanceWBTC();
34116
34288
  if (wbtcAmountInVaultAllocator.lessThan(vesuAmountInBTC)) {
34117
- console.log("error wbtc amount in vault allocator is less than vesu amount in btc", wbtcAmountInVaultAllocator, vesuAmountInBTC);
34118
34289
  const swapProofsInfo = avnuAdapter.getProofs(true, this.getMerkleTree());
34119
34290
  const swapProofGroups = swapProofsInfo.proofs;
34120
34291
  const swapCall = this.getManageCall(
@@ -34158,7 +34329,7 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
34158
34329
  bid
34159
34330
  } = await extendedAdapter.fetchOrderBookBTCUSDC();
34160
34331
  const price = ask.plus(bid).dividedBy(2);
34161
- const btcToken = vesuAdapter.config.supportedPositions[1].asset;
34332
+ const btcToken = vesuAdapter.config.supportedPositions[0].asset;
34162
34333
  const btcPriceAvnu = await avnuAdapter.getPriceOfToken(btcToken.address.toString());
34163
34334
  if (!btcPriceAvnu) {
34164
34335
  logger.error(`error getting btc price avnu: ${btcPriceAvnu}`);
@@ -34174,43 +34345,65 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
34174
34345
  async handleWithdraw(amount) {
34175
34346
  try {
34176
34347
  const usdcBalanceVaultAllocator = await this.getUnusedBalance();
34177
- const usdcBalanceDifference = amount.minus(usdcBalanceVaultAllocator.usdValue);
34348
+ const usdcBalanceDifference = amount.plus(BUFFER_USDC_IN_WITHDRAWAL).minus(usdcBalanceVaultAllocator.usdValue);
34178
34349
  logger.info(`usdcBalanceDifference, ${usdcBalanceDifference.toNumber()}`);
34350
+ let calls = [];
34351
+ let status = true;
34179
34352
  if (usdcBalanceDifference.lessThan(0)) {
34180
- const withdrawCall = await this.getBringLiquidityCall({
34181
- amount
34353
+ const withdrawCall2 = await this.getBringLiquidityCall({
34354
+ amount: usdcBalanceVaultAllocator.amount
34182
34355
  });
34183
- logger.info("withdraw call", withdrawCall);
34184
- return [withdrawCall];
34356
+ logger.info("withdraw call", withdrawCall2);
34357
+ calls.push(withdrawCall2);
34358
+ return {
34359
+ calls,
34360
+ status: true
34361
+ };
34185
34362
  }
34186
34363
  const vesuAdapter = await this.getVesuAdapter();
34187
34364
  const extendedAdapter = await this.getExtendedAdapter();
34188
34365
  if (!vesuAdapter || !extendedAdapter || !extendedAdapter.client) {
34366
+ status = false;
34189
34367
  logger.error(
34190
34368
  `vesu or extended adapter not found: vesuAdapter=${vesuAdapter}, extendedAdapter=${extendedAdapter}`
34191
34369
  );
34192
- return [];
34370
+ return {
34371
+ calls,
34372
+ status
34373
+ };
34193
34374
  }
34194
34375
  const { collateralTokenAmount } = await vesuAdapter.vesuAdapter.getAssetPrices();
34195
34376
  const {
34196
34377
  collateralPrice
34197
34378
  } = await this.getAssetPrices();
34198
34379
  const extendedPositon = await extendedAdapter.getAllOpenPositions();
34380
+ if (!extendedPositon) {
34381
+ status = false;
34382
+ logger.error("error getting extended position", extendedPositon);
34383
+ return {
34384
+ calls,
34385
+ status
34386
+ };
34387
+ }
34199
34388
  const amountDistributionForWithdrawal = await calculateAmountDistributionForWithdrawal(
34200
- amount,
34389
+ usdcBalanceDifference,
34201
34390
  collateralPrice.price,
34202
34391
  collateralTokenAmount,
34203
34392
  extendedPositon
34204
34393
  );
34205
34394
  if (!amountDistributionForWithdrawal) {
34395
+ status = false;
34206
34396
  logger.error(
34207
34397
  `error calculating amount distribution for withdrawal: ${amountDistributionForWithdrawal}`
34208
34398
  );
34209
- return [];
34399
+ return {
34400
+ calls,
34401
+ status
34402
+ };
34210
34403
  }
34211
34404
  const { vesu_amount, extended_amount } = amountDistributionForWithdrawal;
34212
- if (vesu_amount.greaterThan(0)) {
34213
- const result = await this.moveAssets(
34405
+ if (status && vesu_amount.greaterThan(0)) {
34406
+ const { calls: vesuCalls, status: vesuStatus } = await this.moveAssets(
34214
34407
  {
34215
34408
  amount: vesu_amount,
34216
34409
  from: Protocols.VESU.name,
@@ -34219,10 +34412,11 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
34219
34412
  extendedAdapter,
34220
34413
  vesuAdapter
34221
34414
  );
34222
- return result;
34415
+ status = vesuStatus;
34416
+ calls.push(...vesuCalls);
34223
34417
  }
34224
- if (extended_amount.greaterThan(0)) {
34225
- const result = await this.moveAssets(
34418
+ if (status && extended_amount.greaterThan(0)) {
34419
+ const { calls: extendedCalls, status: extendedStatus } = await this.moveAssets(
34226
34420
  {
34227
34421
  amount: extended_amount,
34228
34422
  from: Protocols.EXTENDED.name,
@@ -34231,12 +34425,32 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
34231
34425
  extendedAdapter,
34232
34426
  vesuAdapter
34233
34427
  );
34234
- return result;
34428
+ status = extendedStatus;
34429
+ if (status) {
34430
+ calls.push(...extendedCalls);
34431
+ } else {
34432
+ logger.error("error moving assets to vault: extendedStatus: ${extendedStatus}");
34433
+ return {
34434
+ calls: [],
34435
+ status
34436
+ };
34437
+ }
34235
34438
  }
34236
- return [];
34439
+ const withdrawCall = await this.getBringLiquidityCall({
34440
+ amount
34441
+ });
34442
+ logger.info("withdraw call", withdrawCall);
34443
+ calls.push(withdrawCall);
34444
+ return {
34445
+ calls,
34446
+ status
34447
+ };
34237
34448
  } catch (err) {
34238
34449
  logger.error(`error handling withdrawal: ${err}`);
34239
- return [];
34450
+ return {
34451
+ calls: [],
34452
+ status: false
34453
+ };
34240
34454
  }
34241
34455
  }
34242
34456
  async getAUM() {
@@ -34370,6 +34584,7 @@ function getLooperSettings2(lstSymbol, underlyingSymbol, vaultSettings, pool1, e
34370
34584
  () => vesuMultiplyAdapter.getWithdrawLeaf()
34371
34585
  );
34372
34586
  vaultSettings.leafAdapters.push(() => extendedAdapter.getDepositLeaf());
34587
+ vaultSettings.leafAdapters.push(() => extendedAdapter.getSwapFromLegacyLeaf());
34373
34588
  vaultSettings.leafAdapters.push(() => avnuAdapter.getDepositLeaf());
34374
34589
  vaultSettings.leafAdapters.push(() => avnuAdapter.getWithdrawLeaf());
34375
34590
  vaultSettings.leafAdapters.push(