@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.
package/dist/index.js CHANGED
@@ -4546,6 +4546,7 @@ var EkuboQuoter = class _EkuboQuoter {
4546
4546
  return quote.splits.map((split) => {
4547
4547
  const isNegativeAmount = BigInt(split.amount_specified) <= 0n;
4548
4548
  const token = isNegativeAmount ? toTokenInfo : fromTokenInfo;
4549
+ console.log("token for withdrawal", token, isNegativeAmount);
4549
4550
  return {
4550
4551
  route: split.route.map((_route) => ({
4551
4552
  pool_key: {
@@ -28163,6 +28164,7 @@ var vesu_multiple_abi_default = [
28163
28164
  var AVNU_API = "https://starknet.api.avnu.fi/swap/v2/quotes";
28164
28165
  var USDC_TOKEN_DECIMALS = 6;
28165
28166
  var USDC_TOKEN_ADDRESS = "0x053C91253BC9682c04929cA02ED00b3E423f6710D2ee7e0D5EBB06F3eCF368A8";
28167
+ var BUFFER_USDC_IN_WITHDRAWAL = 5;
28166
28168
  var WBTC_TOKEN_ADDRESS = "0x3fe2b97c1fd336e750087d68b9b867997fd64a2661ff3ca5a7c771641e8e7ac";
28167
28169
  var WBTC_TOKEN_DECIMALS = 8;
28168
28170
  var MAINTENANCE_MARGIN = 0.01;
@@ -28254,8 +28256,8 @@ var calculateAmountDistributionForWithdrawal = async (amountInUsdc, collateralPr
28254
28256
  logger.error("error getting extended positions");
28255
28257
  return null;
28256
28258
  }
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);
28259
+ const extendedExposureUSD = extendedPosition.length > 0 ? new Web3Number(extendedPosition[0].value, USDC_TOKEN_DECIMALS) : new Web3Number(0, USDC_TOKEN_DECIMALS);
28260
+ console.log("THe collateral is", collateralPrice, collateralUnits);
28259
28261
  const vesuExposureUSD = collateralUnits.multipliedBy(collateralPrice);
28260
28262
  if (vesuExposureUSD.lessThan(0)) {
28261
28263
  return {
@@ -28273,9 +28275,14 @@ var calculateAmountDistributionForWithdrawal = async (amountInUsdc, collateralPr
28273
28275
  vesu_leverage
28274
28276
  };
28275
28277
  }
28278
+ console.log("the vesu exposure usd is", vesuExposureUSD.toNumber());
28279
+ console.log("the extended exposure usd is", extendedExposureUSD.toNumber());
28280
+ console.log("the amount in usdc is", amountInUsdc.toNumber());
28281
+ console.log("the extended leverage is", extended_leverage);
28282
+ console.log("the vesu leverage is", vesu_leverage);
28276
28283
  const numerator1 = amountInUsdc.multipliedBy(extended_leverage);
28277
- const numerator2 = vesuExposureUSD.multipliedBy(vesu_leverage);
28278
- const numerator3 = extendedExposureUSD.multipliedBy(extended_leverage).multipliedBy(-1);
28284
+ const numerator2 = vesuExposureUSD;
28285
+ const numerator3 = extendedExposureUSD.multipliedBy(-1);
28279
28286
  const finalNumerator = numerator1.plus(numerator2).plus(numerator3);
28280
28287
  const denominator = extended_leverage + vesu_leverage;
28281
28288
  const vesuAmountInUSDC = finalNumerator.dividedBy(denominator);
@@ -28285,6 +28292,7 @@ var calculateAmountDistributionForWithdrawal = async (amountInUsdc, collateralPr
28285
28292
  "the extended amount in usdc is",
28286
28293
  extendedAmountInUSDC.toNumber()
28287
28294
  );
28295
+ await new Promise((resolve) => setTimeout(resolve, 1e4));
28288
28296
  return {
28289
28297
  vesu_amount: vesuAmountInUSDC,
28290
28298
  extended_amount: extendedAmountInUSDC,
@@ -28725,7 +28733,7 @@ var VesuMultiplyAdapter = class _VesuMultiplyAdapter extends BaseAdapter {
28725
28733
  this.config.debt.address.toBigInt(),
28726
28734
  this.config.vaultAllocator.toBigInt()
28727
28735
  ],
28728
- sanitizer: SIMPLE_SANITIZER_V2,
28736
+ sanitizer: isV2 ? SIMPLE_SANITIZER_V2 : SIMPLE_SANITIZER,
28729
28737
  // vmw = vesu multiply withdraw
28730
28738
  id: `vmw_${this.config.poolId.shortString()}_${collateral.symbol}_${debt.symbol}`
28731
28739
  },
@@ -28874,7 +28882,7 @@ var VesuMultiplyAdapter = class _VesuMultiplyAdapter extends BaseAdapter {
28874
28882
  },
28875
28883
  // Vesu multiply call
28876
28884
  {
28877
- sanitizer: SIMPLE_SANITIZER_V2,
28885
+ sanitizer: isV2 ? SIMPLE_SANITIZER_V2 : SIMPLE_SANITIZER,
28878
28886
  call: {
28879
28887
  contractAddress: vesuMultiply,
28880
28888
  selector: import_starknet21.hash.getSelectorFromName("modify_lever"),
@@ -28962,19 +28970,13 @@ var VesuMultiplyAdapter = class _VesuMultiplyAdapter extends BaseAdapter {
28962
28970
  leverSwap = ekuboQuoter.getVesuMultiplyQuote(swapQuote, debtToken, collateralToken);
28963
28971
  const MAX_SLIPPAGE = 2e-3;
28964
28972
  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);
28973
+ leverSwapLimitAmount = debtAmount.multipliedBy(1 + MAX_SLIPPAGE);
28969
28974
  } 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);
28975
+ leverSwapLimitAmount = debtAmount.abs().multipliedBy(1 - MAX_SLIPPAGE);
28973
28976
  } else {
28974
28977
  leverSwapLimitAmount = Web3Number.fromWei(0, this.config.debt.decimals);
28975
28978
  }
28976
28979
  await new Promise((resolve) => setTimeout(resolve, 1e4));
28977
- console.log("leverSwapLimitAmount", leverSwapLimitAmount);
28978
28980
  } else {
28979
28981
  throw new Error(`VesuMultiplyAdapter: Price impact too high (${swapQuote.price_impact}), skipping swap`);
28980
28982
  }
@@ -29044,26 +29046,23 @@ var VesuMultiplyAdapter = class _VesuMultiplyAdapter extends BaseAdapter {
29044
29046
  debtPrice.price,
29045
29047
  debtToken.decimals
29046
29048
  );
29047
- console.log("debtAmountToRepay", debtAmountToRepay);
29048
29049
  if (!debtAmountToRepay) {
29049
29050
  throw new Error("error calculating debt amount to repay");
29050
29051
  }
29051
29052
  const ekuboQuoter = new EkuboQuoter(this.config.networkConfig, this.config.pricer);
29052
29053
  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
29054
  const swapQuote = await ekuboQuoter.getQuote(
29055
29055
  debtToken.address.address,
29056
29056
  collateralToken.address.address,
29057
29057
  debtInDebtUnits
29058
29058
  );
29059
29059
  const MAX_SLIPPAGE = 2e-3;
29060
- if (swapQuote.price_impact < 0.025) {
29061
- leverSwap = ekuboQuoter.getVesuMultiplyQuote(swapQuote, debtToken, collateralToken);
29060
+ if (swapQuote.price_impact < 25e-4) {
29061
+ leverSwap = ekuboQuoter.getVesuMultiplyQuote(swapQuote, collateralToken, debtToken);
29062
29062
  } else {
29063
29063
  logger.error(`VesuMultiplyAdapter: Price impact too high (${swapQuote.price_impact}), skipping swap`);
29064
29064
  }
29065
- const anotherLeverSwapLimitAmount = await ekuboQuoter.getSwapLimitAmount(collateralToken, debtToken, debtInDebtUnits, MAX_SLIPPAGE);
29066
- leverSwapLimitAmount = await ekuboQuoter.getSwapLimitAmount(debtToken, collateralToken, debtInCollateralUnits, MAX_SLIPPAGE);
29065
+ leverSwapLimitAmount = new Web3Number(debtAmountToRepay, debtToken.decimals).abs().multipliedBy(1 + MAX_SLIPPAGE);
29067
29066
  const multiplyParams = await this.getLeverParams(false, params, leverSwap, leverSwapLimitAmount);
29068
29067
  const call = multiplyContract.populate("modify_lever", {
29069
29068
  modify_lever_params: this.formatMultiplyParams(false, multiplyParams)
@@ -29635,6 +29634,41 @@ var ExtendedAdapter = class _ExtendedAdapter extends BaseAdapter {
29635
29634
  }
29636
29635
  ];
29637
29636
  }
29637
+ getSwapFromLegacyLeaf() {
29638
+ const leafConfigs = this._getSwapFromLegacyLeaf();
29639
+ const leaves = leafConfigs.map((config) => {
29640
+ const { target, method, packedArguments, sanitizer, id } = config;
29641
+ const leaf = this.constructSimpleLeafData({
29642
+ id,
29643
+ target,
29644
+ method,
29645
+ packedArguments
29646
+ }, sanitizer);
29647
+ return leaf;
29648
+ });
29649
+ return { leaves, callConstructor: this.getSwapFromLegacyCall.bind(this) };
29650
+ }
29651
+ _getSwapFromLegacyLeaf() {
29652
+ const usdceToken = Global.getDefaultTokens().find((token) => token.symbol === "USDCe");
29653
+ return [
29654
+ {
29655
+ target: usdceToken.address,
29656
+ method: "approve",
29657
+ packedArguments: [
29658
+ AVNU_EXCHANGE_FOR_LEGACY_USDC.toBigInt()
29659
+ ],
29660
+ id: `extendedswaplegacyapprove_${usdceToken.symbol}`,
29661
+ sanitizer: AVNU_LEGACY_SANITIZER
29662
+ },
29663
+ {
29664
+ target: AVNU_EXCHANGE_FOR_LEGACY_USDC,
29665
+ method: "swap_to_new",
29666
+ packedArguments: [],
29667
+ id: `extended_swap_to_new_${usdceToken.symbol}`,
29668
+ sanitizer: AVNU_LEGACY_SANITIZER
29669
+ }
29670
+ ];
29671
+ }
29638
29672
  _getWithdrawLeaf() {
29639
29673
  return [];
29640
29674
  }
@@ -29715,6 +29749,70 @@ var ExtendedAdapter = class _ExtendedAdapter extends BaseAdapter {
29715
29749
  return [];
29716
29750
  }
29717
29751
  }
29752
+ getProofsForFromLegacySwap(tree) {
29753
+ let proofGroups = [];
29754
+ const ids = this.getSwapFromLegacyLeaf().leaves.map((l) => l.readableId);
29755
+ for (const [i, v] of tree.entries()) {
29756
+ if (ids.includes(v.readableId)) {
29757
+ proofGroups.push(tree.getProof(i));
29758
+ }
29759
+ }
29760
+ if (proofGroups.length != ids.length) {
29761
+ throw new Error(`Not all proofs found for IDs: ${ids.join(", ")}`);
29762
+ }
29763
+ return {
29764
+ proofs: proofGroups,
29765
+ callConstructor: this.getSwapFromLegacyCall.bind(this)
29766
+ };
29767
+ }
29768
+ async getSwapFromLegacyCall(params) {
29769
+ try {
29770
+ const usdcToken = this.config.supportedPositions[0].asset;
29771
+ const usdceToken = Global.getDefaultTokens().find((token) => token.symbol === "USDCe");
29772
+ const amount = import_starknet22.uint256.bnToUint256(params.amount.multipliedBy(10).toWei());
29773
+ const quotes = await this.config.avnuAdapter.getQuotesAvnu(
29774
+ usdceToken.address.toString(),
29775
+ usdcToken.address.toString(),
29776
+ params.amount.toNumber(),
29777
+ this.config.avnuAdapter.config.vaultAllocator.address.toString(),
29778
+ usdcToken.decimals,
29779
+ false
29780
+ );
29781
+ if (!quotes) {
29782
+ logger.error("error getting quotes from avnu");
29783
+ return [];
29784
+ }
29785
+ const getCalldata = await this.config.avnuAdapter.getSwapCallData(quotes);
29786
+ const swapCallData = getCalldata[0];
29787
+ return [
29788
+ {
29789
+ sanitizer: AVNU_LEGACY_SANITIZER,
29790
+ call: {
29791
+ contractAddress: usdceToken.address,
29792
+ selector: import_starknet22.hash.getSelectorFromName("approve"),
29793
+ calldata: [
29794
+ AVNU_EXCHANGE_FOR_LEGACY_USDC.toBigInt(),
29795
+ toBigInt(amount.low.toString()),
29796
+ // amount low
29797
+ toBigInt(amount.high.toString())
29798
+ // amount high
29799
+ ]
29800
+ }
29801
+ },
29802
+ {
29803
+ sanitizer: AVNU_LEGACY_SANITIZER,
29804
+ call: {
29805
+ contractAddress: AVNU_EXCHANGE_FOR_LEGACY_USDC,
29806
+ selector: import_starknet22.hash.getSelectorFromName("swap_to_new"),
29807
+ calldata: swapCallData
29808
+ }
29809
+ }
29810
+ ];
29811
+ } catch (error) {
29812
+ logger.error(`Error creating Deposit Call: ${error}`);
29813
+ return [];
29814
+ }
29815
+ }
29718
29816
  //Swap wbtc to usdc
29719
29817
  async getWithdrawCall(params) {
29720
29818
  try {
@@ -29732,10 +29830,10 @@ var ExtendedAdapter = class _ExtendedAdapter extends BaseAdapter {
29732
29830
  if (!this.client) {
29733
29831
  throw new Error("Client not initialized");
29734
29832
  }
29735
- const withdrawalRequest = this.client.withdrawUSDC(amount.toString());
29736
- if ((await withdrawalRequest).status === "OK") {
29737
- console.log("Withdrawal request successful");
29738
- return true;
29833
+ const withdrawalRequest = await this.client.withdrawUSDC(amount.toFixed(2));
29834
+ if (withdrawalRequest.status === "OK") {
29835
+ const withdrawalStatus = await this.getDepositOrWithdrawalStatus(withdrawalRequest.data, "WITHDRAWAL" /* WITHDRAWAL */);
29836
+ return withdrawalStatus;
29739
29837
  }
29740
29838
  return false;
29741
29839
  } catch (error) {
@@ -29916,7 +30014,7 @@ var ExtendedAdapter = class _ExtendedAdapter extends BaseAdapter {
29916
30014
  logger.error(`createShortOrder failed on attempt ${attempt}: ${err.message}`);
29917
30015
  if (attempt < maxAttempts) {
29918
30016
  const backoff = 1200 * attempt;
29919
- console.log(`Retrying after ${backoff}ms...`);
30017
+ logger.info(`Retrying after ${backoff}ms...`);
29920
30018
  await new Promise((resolve) => setTimeout(resolve, backoff));
29921
30019
  return this.createOrder(
29922
30020
  leverage,
@@ -29947,7 +30045,7 @@ var ExtendedAdapter = class _ExtendedAdapter extends BaseAdapter {
29947
30045
  }
29948
30046
  return null;
29949
30047
  } catch (err) {
29950
- console.log("Error opening short extended position", err);
30048
+ logger.error(`Error opening short extended position, ${err}`);
29951
30049
  return null;
29952
30050
  }
29953
30051
  }
@@ -29957,17 +30055,16 @@ var ExtendedAdapter = class _ExtendedAdapter extends BaseAdapter {
29957
30055
  operationsType: [operationsType],
29958
30056
  operationsStatus: ["COMPLETED" /* COMPLETED */]
29959
30057
  });
29960
- console.log("transferHistory", transferHistory);
29961
30058
  if (operationsType === "DEPOSIT" /* DEPOSIT */) {
29962
30059
  const myTransferStatus = transferHistory.data.find((operation) => operation.transactionHash === orderId);
29963
30060
  if (!myTransferStatus) {
29964
- return false;
30061
+ return true;
29965
30062
  }
29966
30063
  return true;
29967
30064
  } else {
29968
- const myTransferStatus = transferHistory.data.find((operation) => operation.id === orderId);
30065
+ const myTransferStatus = transferHistory.data.find((operation) => operation.id.toString() === orderId.toString());
29969
30066
  if (!myTransferStatus) {
29970
- return false;
30067
+ return true;
29971
30068
  }
29972
30069
  return true;
29973
30070
  }
@@ -33556,7 +33653,7 @@ var AvnuAdapter = class _AvnuAdapter extends BaseAdapter {
33556
33653
  packedArguments: [
33557
33654
  fromToken.address.toBigInt(),
33558
33655
  //wbtc
33559
- fromToken.address.toBigInt(),
33656
+ toToken.address.toBigInt(),
33560
33657
  //usdc
33561
33658
  vaultAllocator.toBigInt()
33562
33659
  ],
@@ -33570,13 +33667,11 @@ var AvnuAdapter = class _AvnuAdapter extends BaseAdapter {
33570
33667
  }
33571
33668
  async getDepositCall(params) {
33572
33669
  try {
33573
- console.log("params.amount", params.amount);
33574
33670
  const fromToken = this.config.supportedPositions[0].asset;
33575
33671
  const toToken = this.config.supportedPositions[1].asset;
33576
33672
  const vaultAllocator = ContractAddr.from(
33577
33673
  this.config.vaultAllocator.address
33578
33674
  );
33579
- console.log("vaultAllocator", vaultAllocator);
33580
33675
  const quote = await this.getQuotesAvnu(
33581
33676
  fromToken.address.toString(),
33582
33677
  toToken.address.toString(),
@@ -33632,7 +33727,6 @@ var AvnuAdapter = class _AvnuAdapter extends BaseAdapter {
33632
33727
  const vaultAllocator = ContractAddr.from(
33633
33728
  this.config.vaultAllocator.address
33634
33729
  );
33635
- console.log("params.amount", params.amount);
33636
33730
  const quote = await this.getQuotesAvnu(
33637
33731
  fromToken.address.toString(),
33638
33732
  toToken.address.toString(),
@@ -33651,8 +33745,6 @@ var AvnuAdapter = class _AvnuAdapter extends BaseAdapter {
33651
33745
  );
33652
33746
  const swapCallData = getCalldata[0];
33653
33747
  const amount = import_starknet24.uint256.bnToUint256(params.amount.toWei());
33654
- console.log("amount", amount);
33655
- console.log("swapCallData", swapCallData);
33656
33748
  return [
33657
33749
  {
33658
33750
  sanitizer: SIMPLE_SANITIZER,
@@ -33727,14 +33819,12 @@ var AvnuAdapter = class _AvnuAdapter extends BaseAdapter {
33727
33819
  return dataObject2;
33728
33820
  }
33729
33821
  const btcPrice = await this.getPriceOfToken(toToken.address.toString());
33730
- console.log("btcPrice", btcPrice);
33731
33822
  if (!btcPrice) {
33732
33823
  logger.error(`error getting btc price: ${btcPrice}`);
33733
33824
  return null;
33734
33825
  }
33735
33826
  const estimatedUsdcAmount = Math.floor(amount * btcPrice);
33736
33827
  const targetBtcBig = BigInt(returnFormattedAmount(amount, toTokenDecimals));
33737
- console.log("targetBtcBig", targetBtcBig);
33738
33828
  let low = BigInt(
33739
33829
  Math.floor(
33740
33830
  estimatedUsdcAmount * 10 ** fromToken.decimals * 0.9
@@ -33837,6 +33927,23 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
33837
33927
  debtPrice
33838
33928
  };
33839
33929
  }
33930
+ async getUnusedBalanceUSDCE() {
33931
+ const usdceToken = Global.getDefaultTokens().find(
33932
+ (token) => token.symbol === "USDCe"
33933
+ );
33934
+ const balance = await new ERC20(this.config).balanceOf(
33935
+ usdceToken.address,
33936
+ WALLET_ADDRESS,
33937
+ usdceToken.decimals
33938
+ );
33939
+ const price = await this.pricer.getPrice(usdceToken.symbol);
33940
+ const usdValue = Number(balance.toFixed(usdceToken.decimals)) * price.price;
33941
+ return {
33942
+ tokenInfo: usdceToken,
33943
+ amount: balance,
33944
+ usdValue
33945
+ };
33946
+ }
33840
33947
  async getUnusedBalanceWBTC() {
33841
33948
  const collateralToken = this.metadata.additionalInfo.borrowable_assets[0];
33842
33949
  const balance = await new ERC20(this.config).balanceOf(
@@ -33882,22 +33989,30 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
33882
33989
  }
33883
33990
  return extendedAdapter.adapter;
33884
33991
  }
33885
- async moveAssetsToVaultAllocator(amount) {
33992
+ async moveAssetsToVaultAllocator(amount, extendedAdapter) {
33886
33993
  try {
33887
- const usdcToken = Global.getDefaultTokens().find(
33888
- (token) => token.symbol === "USDC"
33994
+ const usdceToken = Global.getDefaultTokens().find(
33995
+ (token) => token.symbol === "USDCe"
33889
33996
  );
33890
33997
  const approveCall = new ERC20(this.config).approve(
33891
- usdcToken.address,
33998
+ usdceToken.address,
33892
33999
  this.metadata.additionalInfo.vaultAllocator,
33893
34000
  amount
33894
34001
  );
33895
34002
  const transferCall = new ERC20(this.config).transfer(
33896
- usdcToken.address,
34003
+ usdceToken.address,
33897
34004
  this.metadata.additionalInfo.vaultAllocator,
33898
34005
  amount
33899
34006
  );
33900
- return [approveCall, transferCall];
34007
+ const proofsInfo = extendedAdapter.getProofsForFromLegacySwap(
34008
+ this.getMerkleTree()
34009
+ );
34010
+ const proofGroups = proofsInfo.proofs;
34011
+ const call = this.getManageCall(
34012
+ proofGroups,
34013
+ await proofsInfo.callConstructor({ amount })
34014
+ );
34015
+ return [approveCall, transferCall, call];
33901
34016
  } catch (err) {
33902
34017
  logger.error(`error moving assets to vault allocator: ${err}`);
33903
34018
  return [];
@@ -34009,11 +34124,9 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
34009
34124
  );
34010
34125
  return calls;
34011
34126
  }
34012
- console.log("extendedAmount", extendedAmount);
34013
- console.log("vesuAmount", vesuAmount);
34014
34127
  if (extendedAmount.lessThan(0)) {
34015
34128
  try {
34016
- const extendedCalls = await this.moveAssets(
34129
+ const { calls: extendedCalls, status: extendedStatus } = await this.moveAssets(
34017
34130
  {
34018
34131
  to: Protocols.VAULT.name,
34019
34132
  from: Protocols.EXTENDED.name,
@@ -34022,14 +34135,18 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
34022
34135
  extendedAdapter,
34023
34136
  vesuAdapter
34024
34137
  );
34025
- calls.push(...extendedCalls);
34138
+ if (extendedStatus) {
34139
+ calls.push(...extendedCalls);
34140
+ } else {
34141
+ return [];
34142
+ }
34026
34143
  } catch (err) {
34027
34144
  logger.error(`Failed moving assets to vault: ${err}`);
34028
34145
  }
34029
34146
  }
34030
34147
  if (vesuAmount.lessThan(0)) {
34031
34148
  try {
34032
- const vesuCalls = await this.moveAssets(
34149
+ const { calls: vesuCalls, status: vesuStatus } = await this.moveAssets(
34033
34150
  {
34034
34151
  to: Protocols.EXTENDED.name,
34035
34152
  from: Protocols.VESU.name,
@@ -34039,6 +34156,9 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
34039
34156
  vesuAdapter
34040
34157
  );
34041
34158
  calls.push(...vesuCalls);
34159
+ if (!vesuStatus) {
34160
+ return [];
34161
+ }
34042
34162
  } catch (err) {
34043
34163
  logger.error(`Failed moving assets to vault: ${err}`);
34044
34164
  }
@@ -34054,7 +34174,7 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
34054
34174
  );
34055
34175
  if (extendedAmount.minus(usdcAmountOnExtended).greaterThan(0)) {
34056
34176
  try {
34057
- const extendedCalls = await this.moveAssets(
34177
+ const { calls: extendedCalls } = await this.moveAssets(
34058
34178
  {
34059
34179
  to: Protocols.EXTENDED.name,
34060
34180
  from: Protocols.VAULT.name,
@@ -34070,15 +34190,18 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
34070
34190
  }
34071
34191
  if (vesuAmount.minus(usdcAmountInWallet).greaterThan(0)) {
34072
34192
  try {
34073
- const vesuCalls = await this.moveAssets(
34193
+ const { calls: vesuCalls, status: vesuStatus } = await this.moveAssets(
34074
34194
  {
34075
- to: Protocols.VESU.name,
34195
+ to: Protocols.VAULT.name,
34076
34196
  from: Protocols.EXTENDED.name,
34077
34197
  amount: vesuAmount.minus(usdcAmountInWallet)
34078
34198
  },
34079
34199
  extendedAdapter,
34080
34200
  vesuAdapter
34081
34201
  );
34202
+ if (!vesuStatus) {
34203
+ return [];
34204
+ }
34082
34205
  calls.push(...vesuCalls);
34083
34206
  } catch (err) {
34084
34207
  logger.error(`Failed moving assets to vault: ${err}`);
@@ -34095,9 +34218,12 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
34095
34218
  const avnuAdapter = await this.getAvnuAdapter();
34096
34219
  if (!avnuAdapter) {
34097
34220
  logger.error(`avnu adapter not found: ${avnuAdapter}`);
34098
- return [];
34221
+ return {
34222
+ calls: [],
34223
+ status: false
34224
+ };
34099
34225
  }
34100
- logger.info("moveAssets params", params);
34226
+ logger.info(`moveAssets params, ${JSON.stringify(params)}`);
34101
34227
  const collateralToken = vesuAdapter.config.supportedPositions[0].asset;
34102
34228
  const {
34103
34229
  collateralPrice
@@ -34114,18 +34240,58 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
34114
34240
  await proofsInfo.callConstructor({ amount: params.amount })
34115
34241
  );
34116
34242
  calls.push(call);
34117
- return calls;
34243
+ return {
34244
+ calls: [call],
34245
+ status: true
34246
+ };
34118
34247
  } else if (params.to === Protocols.VAULT.name && params.from === Protocols.EXTENDED.name) {
34248
+ const extendedLeverage = calculateExtendedLevergae();
34249
+ const extendedHoldings = await extendedAdapter.getExtendedDepositAmount();
34250
+ if (!extendedHoldings) {
34251
+ logger.error(`error getting extended holdings: ${extendedHoldings}`);
34252
+ return {
34253
+ calls: [],
34254
+ status: false
34255
+ };
34256
+ }
34257
+ const extendedHoldingAmount = new Web3Number(
34258
+ extendedHoldings.availableForWithdrawal,
34259
+ USDC_TOKEN_DECIMALS
34260
+ );
34261
+ const leftAmountAfterWithdrawalAmountInAccount = params.amount.minus(extendedHoldingAmount);
34262
+ const btcAmount = leftAmountAfterWithdrawalAmountInAccount.dividedBy(collateralPrice.price);
34263
+ const openLongPosition = await extendedAdapter.createOrder(
34264
+ extendedLeverage.toString(),
34265
+ btcAmount.toNumber(),
34266
+ "BUY" /* BUY */
34267
+ );
34268
+ if (!openLongPosition) {
34269
+ logger.error(`error opening long position: ${openLongPosition}`);
34270
+ return {
34271
+ calls: [],
34272
+ status: false
34273
+ };
34274
+ }
34275
+ await new Promise((resolve) => setTimeout(resolve, 5e3));
34119
34276
  const withdrawalFromExtended = await extendedAdapter.withdrawFromExtended(params.amount);
34120
34277
  if (withdrawalFromExtended) {
34121
- const calls = await this.moveAssetsToVaultAllocator(params.amount);
34278
+ const extendedHoldings2 = await extendedAdapter.getExtendedDepositAmount();
34279
+ logger.info(`extendedHoldings after withdrawal ${extendedHoldings2}`);
34280
+ await new Promise((resolve) => setTimeout(resolve, 1e4));
34281
+ const calls = await this.moveAssetsToVaultAllocator(params.amount, extendedAdapter);
34122
34282
  if (calls.length > 0) {
34123
- return calls;
34283
+ return {
34284
+ calls,
34285
+ status: true
34286
+ };
34124
34287
  }
34125
34288
  } else {
34126
34289
  logger.error("withdrawal from extended failed");
34290
+ return {
34291
+ calls: [],
34292
+ status: false
34293
+ };
34127
34294
  }
34128
- return [];
34129
34295
  } else if (params.to === Protocols.VAULT.name && params.from === Protocols.VESU.name) {
34130
34296
  const vesuAmountInBTC = new Web3Number(
34131
34297
  params.amount.dividedBy(collateralPrice.price).toNumber(),
@@ -34146,7 +34312,10 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
34146
34312
  await swapProofsInfo.callConstructor({ amount: vesuAmountInBTC })
34147
34313
  );
34148
34314
  calls.push(swapCall);
34149
- return calls;
34315
+ return {
34316
+ calls,
34317
+ status: true
34318
+ };
34150
34319
  } else if (params.to === Protocols.EXTENDED.name && params.from === Protocols.VESU.name) {
34151
34320
  const vesuAmountInBTC = new Web3Number(
34152
34321
  params.amount.dividedBy(collateralPrice.price).toNumber(),
@@ -34177,13 +34346,21 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
34177
34346
  await proofsInfoDeposit.callConstructor({ amount: params.amount })
34178
34347
  );
34179
34348
  calls.push(callDeposit);
34180
- return calls;
34349
+ return {
34350
+ calls,
34351
+ status: true
34352
+ };
34181
34353
  }
34182
- console.warn("moveAssets received unsupported route:", params);
34183
- return [];
34354
+ return {
34355
+ calls: [],
34356
+ status: false
34357
+ };
34184
34358
  } catch (err) {
34185
34359
  logger.error(`error moving assets: ${err}`);
34186
- return [];
34360
+ return {
34361
+ calls: [],
34362
+ status: false
34363
+ };
34187
34364
  }
34188
34365
  }
34189
34366
  async handleDeposit() {
@@ -34242,8 +34419,7 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
34242
34419
  collateralTokenAmount,
34243
34420
  collateralPrice.price
34244
34421
  );
34245
- console.log("vesuAmountInBTC", vesuAmountInBTC);
34246
- console.log("extendedAmountInBTC", extendedAmountInBTC);
34422
+ logger.info(`vesuAmountInBTC ${vesuAmountInBTC}, extendedAmountInBTC ${extendedAmountInBTC}`);
34247
34423
  let calls = [];
34248
34424
  if (vesuAmountInBTC.greaterThan(MINIMUM_EXTENDED_POSITION_SIZE)) {
34249
34425
  const proofsInfo = vesuAdapter.getProofs(true, this.getMerkleTree());
@@ -34256,7 +34432,7 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
34256
34432
  );
34257
34433
  const { amount: wbtcAmountInVaultAllocator } = await this.getUnusedBalanceWBTC();
34258
34434
  if (wbtcAmountInVaultAllocator.lessThan(vesuAmountInBTC)) {
34259
- console.log("error wbtc amount in vault allocator is less than vesu amount in btc", wbtcAmountInVaultAllocator, vesuAmountInBTC);
34435
+ logger.info(`WBTC amount in vault allocator is less than vesu amount required in WBTC thus swapping, wbtcAmountInVaultAllocator: ${wbtcAmountInVaultAllocator}, vesuAmountInBTC: ${vesuAmountInBTC}`);
34260
34436
  const swapProofsInfo = avnuAdapter.getProofs(true, this.getMerkleTree());
34261
34437
  const swapProofGroups = swapProofsInfo.proofs;
34262
34438
  const swapCall = this.getManageCall(
@@ -34300,7 +34476,7 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
34300
34476
  bid
34301
34477
  } = await extendedAdapter.fetchOrderBookBTCUSDC();
34302
34478
  const price = ask.plus(bid).dividedBy(2);
34303
- const btcToken = vesuAdapter.config.supportedPositions[1].asset;
34479
+ const btcToken = vesuAdapter.config.supportedPositions[0].asset;
34304
34480
  const btcPriceAvnu = await avnuAdapter.getPriceOfToken(btcToken.address.toString());
34305
34481
  if (!btcPriceAvnu) {
34306
34482
  logger.error(`error getting btc price avnu: ${btcPriceAvnu}`);
@@ -34316,43 +34492,65 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
34316
34492
  async handleWithdraw(amount) {
34317
34493
  try {
34318
34494
  const usdcBalanceVaultAllocator = await this.getUnusedBalance();
34319
- const usdcBalanceDifference = amount.minus(usdcBalanceVaultAllocator.usdValue);
34495
+ const usdcBalanceDifference = amount.plus(BUFFER_USDC_IN_WITHDRAWAL).minus(usdcBalanceVaultAllocator.usdValue);
34320
34496
  logger.info(`usdcBalanceDifference, ${usdcBalanceDifference.toNumber()}`);
34497
+ let calls = [];
34498
+ let status = true;
34321
34499
  if (usdcBalanceDifference.lessThan(0)) {
34322
- const withdrawCall = await this.getBringLiquidityCall({
34323
- amount
34500
+ const withdrawCall2 = await this.getBringLiquidityCall({
34501
+ amount: usdcBalanceVaultAllocator.amount
34324
34502
  });
34325
- logger.info("withdraw call", withdrawCall);
34326
- return [withdrawCall];
34503
+ logger.info("withdraw call", withdrawCall2);
34504
+ calls.push(withdrawCall2);
34505
+ return {
34506
+ calls,
34507
+ status: true
34508
+ };
34327
34509
  }
34328
34510
  const vesuAdapter = await this.getVesuAdapter();
34329
34511
  const extendedAdapter = await this.getExtendedAdapter();
34330
34512
  if (!vesuAdapter || !extendedAdapter || !extendedAdapter.client) {
34513
+ status = false;
34331
34514
  logger.error(
34332
34515
  `vesu or extended adapter not found: vesuAdapter=${vesuAdapter}, extendedAdapter=${extendedAdapter}`
34333
34516
  );
34334
- return [];
34517
+ return {
34518
+ calls,
34519
+ status
34520
+ };
34335
34521
  }
34336
34522
  const { collateralTokenAmount } = await vesuAdapter.vesuAdapter.getAssetPrices();
34337
34523
  const {
34338
34524
  collateralPrice
34339
34525
  } = await this.getAssetPrices();
34340
34526
  const extendedPositon = await extendedAdapter.getAllOpenPositions();
34527
+ if (!extendedPositon) {
34528
+ status = false;
34529
+ logger.error("error getting extended position", extendedPositon);
34530
+ return {
34531
+ calls,
34532
+ status
34533
+ };
34534
+ }
34341
34535
  const amountDistributionForWithdrawal = await calculateAmountDistributionForWithdrawal(
34342
- amount,
34536
+ usdcBalanceDifference,
34343
34537
  collateralPrice.price,
34344
34538
  collateralTokenAmount,
34345
34539
  extendedPositon
34346
34540
  );
34347
34541
  if (!amountDistributionForWithdrawal) {
34542
+ status = false;
34348
34543
  logger.error(
34349
34544
  `error calculating amount distribution for withdrawal: ${amountDistributionForWithdrawal}`
34350
34545
  );
34351
- return [];
34546
+ return {
34547
+ calls,
34548
+ status
34549
+ };
34352
34550
  }
34353
34551
  const { vesu_amount, extended_amount } = amountDistributionForWithdrawal;
34354
- if (vesu_amount.greaterThan(0)) {
34355
- const result = await this.moveAssets(
34552
+ if (status && vesu_amount.greaterThan(0)) {
34553
+ const { calls: vesuCalls, status: vesuStatus } = await this.moveAssets(
34356
34554
  {
34357
34555
  amount: vesu_amount,
34358
34556
  from: Protocols.VESU.name,
@@ -34361,10 +34559,11 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
34361
34559
  extendedAdapter,
34362
34560
  vesuAdapter
34363
34561
  );
34364
- return result;
34562
+ status = vesuStatus;
34563
+ calls.push(...vesuCalls);
34365
34564
  }
34366
- if (extended_amount.greaterThan(0)) {
34367
- const result = await this.moveAssets(
34565
+ if (status && extended_amount.greaterThan(0)) {
34566
+ const { calls: extendedCalls, status: extendedStatus } = await this.moveAssets(
34368
34567
  {
34369
34568
  amount: extended_amount,
34370
34569
  from: Protocols.EXTENDED.name,
@@ -34373,12 +34572,32 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
34373
34572
  extendedAdapter,
34374
34573
  vesuAdapter
34375
34574
  );
34376
- return result;
34575
+ status = extendedStatus;
34576
+ if (status) {
34577
+ calls.push(...extendedCalls);
34578
+ } else {
34579
+ logger.error("error moving assets to vault: extendedStatus: ${extendedStatus}");
34580
+ return {
34581
+ calls: [],
34582
+ status
34583
+ };
34584
+ }
34377
34585
  }
34378
- return [];
34586
+ const withdrawCall = await this.getBringLiquidityCall({
34587
+ amount
34588
+ });
34589
+ logger.info("withdraw call", withdrawCall);
34590
+ calls.push(withdrawCall);
34591
+ return {
34592
+ calls,
34593
+ status
34594
+ };
34379
34595
  } catch (err) {
34380
34596
  logger.error(`error handling withdrawal: ${err}`);
34381
- return [];
34597
+ return {
34598
+ calls: [],
34599
+ status: false
34600
+ };
34382
34601
  }
34383
34602
  }
34384
34603
  async getAUM() {
@@ -34512,6 +34731,7 @@ function getLooperSettings2(lstSymbol, underlyingSymbol, vaultSettings, pool1, e
34512
34731
  () => vesuMultiplyAdapter.getWithdrawLeaf()
34513
34732
  );
34514
34733
  vaultSettings.leafAdapters.push(() => extendedAdapter.getDepositLeaf());
34734
+ vaultSettings.leafAdapters.push(() => extendedAdapter.getSwapFromLegacyLeaf());
34515
34735
  vaultSettings.leafAdapters.push(() => avnuAdapter.getDepositLeaf());
34516
34736
  vaultSettings.leafAdapters.push(() => avnuAdapter.getWithdrawLeaf());
34517
34737
  vaultSettings.leafAdapters.push(