@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.mjs CHANGED
@@ -4400,6 +4400,7 @@ var EkuboQuoter = class _EkuboQuoter {
4400
4400
  return quote.splits.map((split) => {
4401
4401
  const isNegativeAmount = BigInt(split.amount_specified) <= 0n;
4402
4402
  const token = isNegativeAmount ? toTokenInfo : fromTokenInfo;
4403
+ console.log("token for withdrawal", token, isNegativeAmount);
4403
4404
  return {
4404
4405
  route: split.route.map((_route) => ({
4405
4406
  pool_key: {
@@ -28021,6 +28022,7 @@ var vesu_multiple_abi_default = [
28021
28022
  var AVNU_API = "https://starknet.api.avnu.fi/swap/v2/quotes";
28022
28023
  var USDC_TOKEN_DECIMALS = 6;
28023
28024
  var USDC_TOKEN_ADDRESS = "0x053C91253BC9682c04929cA02ED00b3E423f6710D2ee7e0D5EBB06F3eCF368A8";
28025
+ var BUFFER_USDC_IN_WITHDRAWAL = 5;
28024
28026
  var WBTC_TOKEN_ADDRESS = "0x3fe2b97c1fd336e750087d68b9b867997fd64a2661ff3ca5a7c771641e8e7ac";
28025
28027
  var WBTC_TOKEN_DECIMALS = 8;
28026
28028
  var MAINTENANCE_MARGIN = 0.01;
@@ -28112,8 +28114,8 @@ var calculateAmountDistributionForWithdrawal = async (amountInUsdc, collateralPr
28112
28114
  logger.error("error getting extended positions");
28113
28115
  return null;
28114
28116
  }
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);
28117
+ const extendedExposureUSD = extendedPosition.length > 0 ? new Web3Number(extendedPosition[0].value, USDC_TOKEN_DECIMALS) : new Web3Number(0, USDC_TOKEN_DECIMALS);
28118
+ console.log("THe collateral is", collateralPrice, collateralUnits);
28117
28119
  const vesuExposureUSD = collateralUnits.multipliedBy(collateralPrice);
28118
28120
  if (vesuExposureUSD.lessThan(0)) {
28119
28121
  return {
@@ -28131,9 +28133,14 @@ var calculateAmountDistributionForWithdrawal = async (amountInUsdc, collateralPr
28131
28133
  vesu_leverage
28132
28134
  };
28133
28135
  }
28136
+ console.log("the vesu exposure usd is", vesuExposureUSD.toNumber());
28137
+ console.log("the extended exposure usd is", extendedExposureUSD.toNumber());
28138
+ console.log("the amount in usdc is", amountInUsdc.toNumber());
28139
+ console.log("the extended leverage is", extended_leverage);
28140
+ console.log("the vesu leverage is", vesu_leverage);
28134
28141
  const numerator1 = amountInUsdc.multipliedBy(extended_leverage);
28135
- const numerator2 = vesuExposureUSD.multipliedBy(vesu_leverage);
28136
- const numerator3 = extendedExposureUSD.multipliedBy(extended_leverage).multipliedBy(-1);
28142
+ const numerator2 = vesuExposureUSD;
28143
+ const numerator3 = extendedExposureUSD.multipliedBy(-1);
28137
28144
  const finalNumerator = numerator1.plus(numerator2).plus(numerator3);
28138
28145
  const denominator = extended_leverage + vesu_leverage;
28139
28146
  const vesuAmountInUSDC = finalNumerator.dividedBy(denominator);
@@ -28143,6 +28150,7 @@ var calculateAmountDistributionForWithdrawal = async (amountInUsdc, collateralPr
28143
28150
  "the extended amount in usdc is",
28144
28151
  extendedAmountInUSDC.toNumber()
28145
28152
  );
28153
+ await new Promise((resolve) => setTimeout(resolve, 1e4));
28146
28154
  return {
28147
28155
  vesu_amount: vesuAmountInUSDC,
28148
28156
  extended_amount: extendedAmountInUSDC,
@@ -28583,7 +28591,7 @@ var VesuMultiplyAdapter = class _VesuMultiplyAdapter extends BaseAdapter {
28583
28591
  this.config.debt.address.toBigInt(),
28584
28592
  this.config.vaultAllocator.toBigInt()
28585
28593
  ],
28586
- sanitizer: SIMPLE_SANITIZER_V2,
28594
+ sanitizer: isV2 ? SIMPLE_SANITIZER_V2 : SIMPLE_SANITIZER,
28587
28595
  // vmw = vesu multiply withdraw
28588
28596
  id: `vmw_${this.config.poolId.shortString()}_${collateral.symbol}_${debt.symbol}`
28589
28597
  },
@@ -28732,7 +28740,7 @@ var VesuMultiplyAdapter = class _VesuMultiplyAdapter extends BaseAdapter {
28732
28740
  },
28733
28741
  // Vesu multiply call
28734
28742
  {
28735
- sanitizer: SIMPLE_SANITIZER_V2,
28743
+ sanitizer: isV2 ? SIMPLE_SANITIZER_V2 : SIMPLE_SANITIZER,
28736
28744
  call: {
28737
28745
  contractAddress: vesuMultiply,
28738
28746
  selector: hash5.getSelectorFromName("modify_lever"),
@@ -28820,19 +28828,13 @@ var VesuMultiplyAdapter = class _VesuMultiplyAdapter extends BaseAdapter {
28820
28828
  leverSwap = ekuboQuoter.getVesuMultiplyQuote(swapQuote, debtToken, collateralToken);
28821
28829
  const MAX_SLIPPAGE = 2e-3;
28822
28830
  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);
28831
+ leverSwapLimitAmount = debtAmount.multipliedBy(1 + MAX_SLIPPAGE);
28827
28832
  } 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);
28833
+ leverSwapLimitAmount = debtAmount.abs().multipliedBy(1 - MAX_SLIPPAGE);
28831
28834
  } else {
28832
28835
  leverSwapLimitAmount = Web3Number.fromWei(0, this.config.debt.decimals);
28833
28836
  }
28834
28837
  await new Promise((resolve) => setTimeout(resolve, 1e4));
28835
- console.log("leverSwapLimitAmount", leverSwapLimitAmount);
28836
28838
  } else {
28837
28839
  throw new Error(`VesuMultiplyAdapter: Price impact too high (${swapQuote.price_impact}), skipping swap`);
28838
28840
  }
@@ -28902,26 +28904,23 @@ var VesuMultiplyAdapter = class _VesuMultiplyAdapter extends BaseAdapter {
28902
28904
  debtPrice.price,
28903
28905
  debtToken.decimals
28904
28906
  );
28905
- console.log("debtAmountToRepay", debtAmountToRepay);
28906
28907
  if (!debtAmountToRepay) {
28907
28908
  throw new Error("error calculating debt amount to repay");
28908
28909
  }
28909
28910
  const ekuboQuoter = new EkuboQuoter(this.config.networkConfig, this.config.pricer);
28910
28911
  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
28912
  const swapQuote = await ekuboQuoter.getQuote(
28913
28913
  debtToken.address.address,
28914
28914
  collateralToken.address.address,
28915
28915
  debtInDebtUnits
28916
28916
  );
28917
28917
  const MAX_SLIPPAGE = 2e-3;
28918
- if (swapQuote.price_impact < 0.025) {
28919
- leverSwap = ekuboQuoter.getVesuMultiplyQuote(swapQuote, debtToken, collateralToken);
28918
+ if (swapQuote.price_impact < 25e-4) {
28919
+ leverSwap = ekuboQuoter.getVesuMultiplyQuote(swapQuote, collateralToken, debtToken);
28920
28920
  } else {
28921
28921
  logger.error(`VesuMultiplyAdapter: Price impact too high (${swapQuote.price_impact}), skipping swap`);
28922
28922
  }
28923
- const anotherLeverSwapLimitAmount = await ekuboQuoter.getSwapLimitAmount(collateralToken, debtToken, debtInDebtUnits, MAX_SLIPPAGE);
28924
- leverSwapLimitAmount = await ekuboQuoter.getSwapLimitAmount(debtToken, collateralToken, debtInCollateralUnits, MAX_SLIPPAGE);
28923
+ leverSwapLimitAmount = new Web3Number(debtAmountToRepay, debtToken.decimals).abs().multipliedBy(1 + MAX_SLIPPAGE);
28925
28924
  const multiplyParams = await this.getLeverParams(false, params, leverSwap, leverSwapLimitAmount);
28926
28925
  const call = multiplyContract.populate("modify_lever", {
28927
28926
  modify_lever_params: this.formatMultiplyParams(false, multiplyParams)
@@ -29493,6 +29492,41 @@ var ExtendedAdapter = class _ExtendedAdapter extends BaseAdapter {
29493
29492
  }
29494
29493
  ];
29495
29494
  }
29495
+ getSwapFromLegacyLeaf() {
29496
+ const leafConfigs = this._getSwapFromLegacyLeaf();
29497
+ const leaves = leafConfigs.map((config) => {
29498
+ const { target, method, packedArguments, sanitizer, id } = config;
29499
+ const leaf = this.constructSimpleLeafData({
29500
+ id,
29501
+ target,
29502
+ method,
29503
+ packedArguments
29504
+ }, sanitizer);
29505
+ return leaf;
29506
+ });
29507
+ return { leaves, callConstructor: this.getSwapFromLegacyCall.bind(this) };
29508
+ }
29509
+ _getSwapFromLegacyLeaf() {
29510
+ const usdceToken = Global.getDefaultTokens().find((token) => token.symbol === "USDCe");
29511
+ return [
29512
+ {
29513
+ target: usdceToken.address,
29514
+ method: "approve",
29515
+ packedArguments: [
29516
+ AVNU_EXCHANGE_FOR_LEGACY_USDC.toBigInt()
29517
+ ],
29518
+ id: `extendedswaplegacyapprove_${usdceToken.symbol}`,
29519
+ sanitizer: AVNU_LEGACY_SANITIZER
29520
+ },
29521
+ {
29522
+ target: AVNU_EXCHANGE_FOR_LEGACY_USDC,
29523
+ method: "swap_to_new",
29524
+ packedArguments: [],
29525
+ id: `extended_swap_to_new_${usdceToken.symbol}`,
29526
+ sanitizer: AVNU_LEGACY_SANITIZER
29527
+ }
29528
+ ];
29529
+ }
29496
29530
  _getWithdrawLeaf() {
29497
29531
  return [];
29498
29532
  }
@@ -29573,6 +29607,70 @@ var ExtendedAdapter = class _ExtendedAdapter extends BaseAdapter {
29573
29607
  return [];
29574
29608
  }
29575
29609
  }
29610
+ getProofsForFromLegacySwap(tree) {
29611
+ let proofGroups = [];
29612
+ const ids = this.getSwapFromLegacyLeaf().leaves.map((l) => l.readableId);
29613
+ for (const [i, v] of tree.entries()) {
29614
+ if (ids.includes(v.readableId)) {
29615
+ proofGroups.push(tree.getProof(i));
29616
+ }
29617
+ }
29618
+ if (proofGroups.length != ids.length) {
29619
+ throw new Error(`Not all proofs found for IDs: ${ids.join(", ")}`);
29620
+ }
29621
+ return {
29622
+ proofs: proofGroups,
29623
+ callConstructor: this.getSwapFromLegacyCall.bind(this)
29624
+ };
29625
+ }
29626
+ async getSwapFromLegacyCall(params) {
29627
+ try {
29628
+ const usdcToken = this.config.supportedPositions[0].asset;
29629
+ const usdceToken = Global.getDefaultTokens().find((token) => token.symbol === "USDCe");
29630
+ const amount = uint25613.bnToUint256(params.amount.multipliedBy(10).toWei());
29631
+ const quotes = await this.config.avnuAdapter.getQuotesAvnu(
29632
+ usdceToken.address.toString(),
29633
+ usdcToken.address.toString(),
29634
+ params.amount.toNumber(),
29635
+ this.config.avnuAdapter.config.vaultAllocator.address.toString(),
29636
+ usdcToken.decimals,
29637
+ false
29638
+ );
29639
+ if (!quotes) {
29640
+ logger.error("error getting quotes from avnu");
29641
+ return [];
29642
+ }
29643
+ const getCalldata = await this.config.avnuAdapter.getSwapCallData(quotes);
29644
+ const swapCallData = getCalldata[0];
29645
+ return [
29646
+ {
29647
+ sanitizer: AVNU_LEGACY_SANITIZER,
29648
+ call: {
29649
+ contractAddress: usdceToken.address,
29650
+ selector: hash6.getSelectorFromName("approve"),
29651
+ calldata: [
29652
+ AVNU_EXCHANGE_FOR_LEGACY_USDC.toBigInt(),
29653
+ toBigInt(amount.low.toString()),
29654
+ // amount low
29655
+ toBigInt(amount.high.toString())
29656
+ // amount high
29657
+ ]
29658
+ }
29659
+ },
29660
+ {
29661
+ sanitizer: AVNU_LEGACY_SANITIZER,
29662
+ call: {
29663
+ contractAddress: AVNU_EXCHANGE_FOR_LEGACY_USDC,
29664
+ selector: hash6.getSelectorFromName("swap_to_new"),
29665
+ calldata: swapCallData
29666
+ }
29667
+ }
29668
+ ];
29669
+ } catch (error) {
29670
+ logger.error(`Error creating Deposit Call: ${error}`);
29671
+ return [];
29672
+ }
29673
+ }
29576
29674
  //Swap wbtc to usdc
29577
29675
  async getWithdrawCall(params) {
29578
29676
  try {
@@ -29590,10 +29688,10 @@ var ExtendedAdapter = class _ExtendedAdapter extends BaseAdapter {
29590
29688
  if (!this.client) {
29591
29689
  throw new Error("Client not initialized");
29592
29690
  }
29593
- const withdrawalRequest = this.client.withdrawUSDC(amount.toString());
29594
- if ((await withdrawalRequest).status === "OK") {
29595
- console.log("Withdrawal request successful");
29596
- return true;
29691
+ const withdrawalRequest = await this.client.withdrawUSDC(amount.toFixed(2));
29692
+ if (withdrawalRequest.status === "OK") {
29693
+ const withdrawalStatus = await this.getDepositOrWithdrawalStatus(withdrawalRequest.data, "WITHDRAWAL" /* WITHDRAWAL */);
29694
+ return withdrawalStatus;
29597
29695
  }
29598
29696
  return false;
29599
29697
  } catch (error) {
@@ -29774,7 +29872,7 @@ var ExtendedAdapter = class _ExtendedAdapter extends BaseAdapter {
29774
29872
  logger.error(`createShortOrder failed on attempt ${attempt}: ${err.message}`);
29775
29873
  if (attempt < maxAttempts) {
29776
29874
  const backoff = 1200 * attempt;
29777
- console.log(`Retrying after ${backoff}ms...`);
29875
+ logger.info(`Retrying after ${backoff}ms...`);
29778
29876
  await new Promise((resolve) => setTimeout(resolve, backoff));
29779
29877
  return this.createOrder(
29780
29878
  leverage,
@@ -29805,7 +29903,7 @@ var ExtendedAdapter = class _ExtendedAdapter extends BaseAdapter {
29805
29903
  }
29806
29904
  return null;
29807
29905
  } catch (err) {
29808
- console.log("Error opening short extended position", err);
29906
+ logger.error(`Error opening short extended position, ${err}`);
29809
29907
  return null;
29810
29908
  }
29811
29909
  }
@@ -29815,17 +29913,16 @@ var ExtendedAdapter = class _ExtendedAdapter extends BaseAdapter {
29815
29913
  operationsType: [operationsType],
29816
29914
  operationsStatus: ["COMPLETED" /* COMPLETED */]
29817
29915
  });
29818
- console.log("transferHistory", transferHistory);
29819
29916
  if (operationsType === "DEPOSIT" /* DEPOSIT */) {
29820
29917
  const myTransferStatus = transferHistory.data.find((operation) => operation.transactionHash === orderId);
29821
29918
  if (!myTransferStatus) {
29822
- return false;
29919
+ return true;
29823
29920
  }
29824
29921
  return true;
29825
29922
  } else {
29826
- const myTransferStatus = transferHistory.data.find((operation) => operation.id === orderId);
29923
+ const myTransferStatus = transferHistory.data.find((operation) => operation.id.toString() === orderId.toString());
29827
29924
  if (!myTransferStatus) {
29828
- return false;
29925
+ return true;
29829
29926
  }
29830
29927
  return true;
29831
29928
  }
@@ -33414,7 +33511,7 @@ var AvnuAdapter = class _AvnuAdapter extends BaseAdapter {
33414
33511
  packedArguments: [
33415
33512
  fromToken.address.toBigInt(),
33416
33513
  //wbtc
33417
- fromToken.address.toBigInt(),
33514
+ toToken.address.toBigInt(),
33418
33515
  //usdc
33419
33516
  vaultAllocator.toBigInt()
33420
33517
  ],
@@ -33428,13 +33525,11 @@ var AvnuAdapter = class _AvnuAdapter extends BaseAdapter {
33428
33525
  }
33429
33526
  async getDepositCall(params) {
33430
33527
  try {
33431
- console.log("params.amount", params.amount);
33432
33528
  const fromToken = this.config.supportedPositions[0].asset;
33433
33529
  const toToken = this.config.supportedPositions[1].asset;
33434
33530
  const vaultAllocator = ContractAddr.from(
33435
33531
  this.config.vaultAllocator.address
33436
33532
  );
33437
- console.log("vaultAllocator", vaultAllocator);
33438
33533
  const quote = await this.getQuotesAvnu(
33439
33534
  fromToken.address.toString(),
33440
33535
  toToken.address.toString(),
@@ -33490,7 +33585,6 @@ var AvnuAdapter = class _AvnuAdapter extends BaseAdapter {
33490
33585
  const vaultAllocator = ContractAddr.from(
33491
33586
  this.config.vaultAllocator.address
33492
33587
  );
33493
- console.log("params.amount", params.amount);
33494
33588
  const quote = await this.getQuotesAvnu(
33495
33589
  fromToken.address.toString(),
33496
33590
  toToken.address.toString(),
@@ -33509,8 +33603,6 @@ var AvnuAdapter = class _AvnuAdapter extends BaseAdapter {
33509
33603
  );
33510
33604
  const swapCallData = getCalldata[0];
33511
33605
  const amount = uint25614.bnToUint256(params.amount.toWei());
33512
- console.log("amount", amount);
33513
- console.log("swapCallData", swapCallData);
33514
33606
  return [
33515
33607
  {
33516
33608
  sanitizer: SIMPLE_SANITIZER,
@@ -33585,14 +33677,12 @@ var AvnuAdapter = class _AvnuAdapter extends BaseAdapter {
33585
33677
  return dataObject2;
33586
33678
  }
33587
33679
  const btcPrice = await this.getPriceOfToken(toToken.address.toString());
33588
- console.log("btcPrice", btcPrice);
33589
33680
  if (!btcPrice) {
33590
33681
  logger.error(`error getting btc price: ${btcPrice}`);
33591
33682
  return null;
33592
33683
  }
33593
33684
  const estimatedUsdcAmount = Math.floor(amount * btcPrice);
33594
33685
  const targetBtcBig = BigInt(returnFormattedAmount(amount, toTokenDecimals));
33595
- console.log("targetBtcBig", targetBtcBig);
33596
33686
  let low = BigInt(
33597
33687
  Math.floor(
33598
33688
  estimatedUsdcAmount * 10 ** fromToken.decimals * 0.9
@@ -33695,6 +33785,23 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
33695
33785
  debtPrice
33696
33786
  };
33697
33787
  }
33788
+ async getUnusedBalanceUSDCE() {
33789
+ const usdceToken = Global.getDefaultTokens().find(
33790
+ (token) => token.symbol === "USDCe"
33791
+ );
33792
+ const balance = await new ERC20(this.config).balanceOf(
33793
+ usdceToken.address,
33794
+ WALLET_ADDRESS,
33795
+ usdceToken.decimals
33796
+ );
33797
+ const price = await this.pricer.getPrice(usdceToken.symbol);
33798
+ const usdValue = Number(balance.toFixed(usdceToken.decimals)) * price.price;
33799
+ return {
33800
+ tokenInfo: usdceToken,
33801
+ amount: balance,
33802
+ usdValue
33803
+ };
33804
+ }
33698
33805
  async getUnusedBalanceWBTC() {
33699
33806
  const collateralToken = this.metadata.additionalInfo.borrowable_assets[0];
33700
33807
  const balance = await new ERC20(this.config).balanceOf(
@@ -33740,22 +33847,30 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
33740
33847
  }
33741
33848
  return extendedAdapter.adapter;
33742
33849
  }
33743
- async moveAssetsToVaultAllocator(amount) {
33850
+ async moveAssetsToVaultAllocator(amount, extendedAdapter) {
33744
33851
  try {
33745
- const usdcToken = Global.getDefaultTokens().find(
33746
- (token) => token.symbol === "USDC"
33852
+ const usdceToken = Global.getDefaultTokens().find(
33853
+ (token) => token.symbol === "USDCe"
33747
33854
  );
33748
33855
  const approveCall = new ERC20(this.config).approve(
33749
- usdcToken.address,
33856
+ usdceToken.address,
33750
33857
  this.metadata.additionalInfo.vaultAllocator,
33751
33858
  amount
33752
33859
  );
33753
33860
  const transferCall = new ERC20(this.config).transfer(
33754
- usdcToken.address,
33861
+ usdceToken.address,
33755
33862
  this.metadata.additionalInfo.vaultAllocator,
33756
33863
  amount
33757
33864
  );
33758
- return [approveCall, transferCall];
33865
+ const proofsInfo = extendedAdapter.getProofsForFromLegacySwap(
33866
+ this.getMerkleTree()
33867
+ );
33868
+ const proofGroups = proofsInfo.proofs;
33869
+ const call = this.getManageCall(
33870
+ proofGroups,
33871
+ await proofsInfo.callConstructor({ amount })
33872
+ );
33873
+ return [approveCall, transferCall, call];
33759
33874
  } catch (err) {
33760
33875
  logger.error(`error moving assets to vault allocator: ${err}`);
33761
33876
  return [];
@@ -33867,11 +33982,9 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
33867
33982
  );
33868
33983
  return calls;
33869
33984
  }
33870
- console.log("extendedAmount", extendedAmount);
33871
- console.log("vesuAmount", vesuAmount);
33872
33985
  if (extendedAmount.lessThan(0)) {
33873
33986
  try {
33874
- const extendedCalls = await this.moveAssets(
33987
+ const { calls: extendedCalls, status: extendedStatus } = await this.moveAssets(
33875
33988
  {
33876
33989
  to: Protocols.VAULT.name,
33877
33990
  from: Protocols.EXTENDED.name,
@@ -33880,14 +33993,18 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
33880
33993
  extendedAdapter,
33881
33994
  vesuAdapter
33882
33995
  );
33883
- calls.push(...extendedCalls);
33996
+ if (extendedStatus) {
33997
+ calls.push(...extendedCalls);
33998
+ } else {
33999
+ return [];
34000
+ }
33884
34001
  } catch (err) {
33885
34002
  logger.error(`Failed moving assets to vault: ${err}`);
33886
34003
  }
33887
34004
  }
33888
34005
  if (vesuAmount.lessThan(0)) {
33889
34006
  try {
33890
- const vesuCalls = await this.moveAssets(
34007
+ const { calls: vesuCalls, status: vesuStatus } = await this.moveAssets(
33891
34008
  {
33892
34009
  to: Protocols.EXTENDED.name,
33893
34010
  from: Protocols.VESU.name,
@@ -33897,6 +34014,9 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
33897
34014
  vesuAdapter
33898
34015
  );
33899
34016
  calls.push(...vesuCalls);
34017
+ if (!vesuStatus) {
34018
+ return [];
34019
+ }
33900
34020
  } catch (err) {
33901
34021
  logger.error(`Failed moving assets to vault: ${err}`);
33902
34022
  }
@@ -33912,7 +34032,7 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
33912
34032
  );
33913
34033
  if (extendedAmount.minus(usdcAmountOnExtended).greaterThan(0)) {
33914
34034
  try {
33915
- const extendedCalls = await this.moveAssets(
34035
+ const { calls: extendedCalls } = await this.moveAssets(
33916
34036
  {
33917
34037
  to: Protocols.EXTENDED.name,
33918
34038
  from: Protocols.VAULT.name,
@@ -33928,15 +34048,18 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
33928
34048
  }
33929
34049
  if (vesuAmount.minus(usdcAmountInWallet).greaterThan(0)) {
33930
34050
  try {
33931
- const vesuCalls = await this.moveAssets(
34051
+ const { calls: vesuCalls, status: vesuStatus } = await this.moveAssets(
33932
34052
  {
33933
- to: Protocols.VESU.name,
34053
+ to: Protocols.VAULT.name,
33934
34054
  from: Protocols.EXTENDED.name,
33935
34055
  amount: vesuAmount.minus(usdcAmountInWallet)
33936
34056
  },
33937
34057
  extendedAdapter,
33938
34058
  vesuAdapter
33939
34059
  );
34060
+ if (!vesuStatus) {
34061
+ return [];
34062
+ }
33940
34063
  calls.push(...vesuCalls);
33941
34064
  } catch (err) {
33942
34065
  logger.error(`Failed moving assets to vault: ${err}`);
@@ -33953,9 +34076,12 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
33953
34076
  const avnuAdapter = await this.getAvnuAdapter();
33954
34077
  if (!avnuAdapter) {
33955
34078
  logger.error(`avnu adapter not found: ${avnuAdapter}`);
33956
- return [];
34079
+ return {
34080
+ calls: [],
34081
+ status: false
34082
+ };
33957
34083
  }
33958
- logger.info("moveAssets params", params);
34084
+ logger.info(`moveAssets params, ${JSON.stringify(params)}`);
33959
34085
  const collateralToken = vesuAdapter.config.supportedPositions[0].asset;
33960
34086
  const {
33961
34087
  collateralPrice
@@ -33972,18 +34098,58 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
33972
34098
  await proofsInfo.callConstructor({ amount: params.amount })
33973
34099
  );
33974
34100
  calls.push(call);
33975
- return calls;
34101
+ return {
34102
+ calls: [call],
34103
+ status: true
34104
+ };
33976
34105
  } else if (params.to === Protocols.VAULT.name && params.from === Protocols.EXTENDED.name) {
34106
+ const extendedLeverage = calculateExtendedLevergae();
34107
+ const extendedHoldings = await extendedAdapter.getExtendedDepositAmount();
34108
+ if (!extendedHoldings) {
34109
+ logger.error(`error getting extended holdings: ${extendedHoldings}`);
34110
+ return {
34111
+ calls: [],
34112
+ status: false
34113
+ };
34114
+ }
34115
+ const extendedHoldingAmount = new Web3Number(
34116
+ extendedHoldings.availableForWithdrawal,
34117
+ USDC_TOKEN_DECIMALS
34118
+ );
34119
+ const leftAmountAfterWithdrawalAmountInAccount = params.amount.minus(extendedHoldingAmount);
34120
+ const btcAmount = leftAmountAfterWithdrawalAmountInAccount.dividedBy(collateralPrice.price);
34121
+ const openLongPosition = await extendedAdapter.createOrder(
34122
+ extendedLeverage.toString(),
34123
+ btcAmount.toNumber(),
34124
+ "BUY" /* BUY */
34125
+ );
34126
+ if (!openLongPosition) {
34127
+ logger.error(`error opening long position: ${openLongPosition}`);
34128
+ return {
34129
+ calls: [],
34130
+ status: false
34131
+ };
34132
+ }
34133
+ await new Promise((resolve) => setTimeout(resolve, 5e3));
33977
34134
  const withdrawalFromExtended = await extendedAdapter.withdrawFromExtended(params.amount);
33978
34135
  if (withdrawalFromExtended) {
33979
- const calls = await this.moveAssetsToVaultAllocator(params.amount);
34136
+ const extendedHoldings2 = await extendedAdapter.getExtendedDepositAmount();
34137
+ logger.info(`extendedHoldings after withdrawal ${extendedHoldings2}`);
34138
+ await new Promise((resolve) => setTimeout(resolve, 1e4));
34139
+ const calls = await this.moveAssetsToVaultAllocator(params.amount, extendedAdapter);
33980
34140
  if (calls.length > 0) {
33981
- return calls;
34141
+ return {
34142
+ calls,
34143
+ status: true
34144
+ };
33982
34145
  }
33983
34146
  } else {
33984
34147
  logger.error("withdrawal from extended failed");
34148
+ return {
34149
+ calls: [],
34150
+ status: false
34151
+ };
33985
34152
  }
33986
- return [];
33987
34153
  } else if (params.to === Protocols.VAULT.name && params.from === Protocols.VESU.name) {
33988
34154
  const vesuAmountInBTC = new Web3Number(
33989
34155
  params.amount.dividedBy(collateralPrice.price).toNumber(),
@@ -34004,7 +34170,10 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
34004
34170
  await swapProofsInfo.callConstructor({ amount: vesuAmountInBTC })
34005
34171
  );
34006
34172
  calls.push(swapCall);
34007
- return calls;
34173
+ return {
34174
+ calls,
34175
+ status: true
34176
+ };
34008
34177
  } else if (params.to === Protocols.EXTENDED.name && params.from === Protocols.VESU.name) {
34009
34178
  const vesuAmountInBTC = new Web3Number(
34010
34179
  params.amount.dividedBy(collateralPrice.price).toNumber(),
@@ -34035,13 +34204,21 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
34035
34204
  await proofsInfoDeposit.callConstructor({ amount: params.amount })
34036
34205
  );
34037
34206
  calls.push(callDeposit);
34038
- return calls;
34207
+ return {
34208
+ calls,
34209
+ status: true
34210
+ };
34039
34211
  }
34040
- console.warn("moveAssets received unsupported route:", params);
34041
- return [];
34212
+ return {
34213
+ calls: [],
34214
+ status: false
34215
+ };
34042
34216
  } catch (err) {
34043
34217
  logger.error(`error moving assets: ${err}`);
34044
- return [];
34218
+ return {
34219
+ calls: [],
34220
+ status: false
34221
+ };
34045
34222
  }
34046
34223
  }
34047
34224
  async handleDeposit() {
@@ -34100,8 +34277,7 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
34100
34277
  collateralTokenAmount,
34101
34278
  collateralPrice.price
34102
34279
  );
34103
- console.log("vesuAmountInBTC", vesuAmountInBTC);
34104
- console.log("extendedAmountInBTC", extendedAmountInBTC);
34280
+ logger.info(`vesuAmountInBTC ${vesuAmountInBTC}, extendedAmountInBTC ${extendedAmountInBTC}`);
34105
34281
  let calls = [];
34106
34282
  if (vesuAmountInBTC.greaterThan(MINIMUM_EXTENDED_POSITION_SIZE)) {
34107
34283
  const proofsInfo = vesuAdapter.getProofs(true, this.getMerkleTree());
@@ -34114,7 +34290,7 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
34114
34290
  );
34115
34291
  const { amount: wbtcAmountInVaultAllocator } = await this.getUnusedBalanceWBTC();
34116
34292
  if (wbtcAmountInVaultAllocator.lessThan(vesuAmountInBTC)) {
34117
- console.log("error wbtc amount in vault allocator is less than vesu amount in btc", wbtcAmountInVaultAllocator, vesuAmountInBTC);
34293
+ logger.info(`WBTC amount in vault allocator is less than vesu amount required in WBTC thus swapping, wbtcAmountInVaultAllocator: ${wbtcAmountInVaultAllocator}, vesuAmountInBTC: ${vesuAmountInBTC}`);
34118
34294
  const swapProofsInfo = avnuAdapter.getProofs(true, this.getMerkleTree());
34119
34295
  const swapProofGroups = swapProofsInfo.proofs;
34120
34296
  const swapCall = this.getManageCall(
@@ -34158,7 +34334,7 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
34158
34334
  bid
34159
34335
  } = await extendedAdapter.fetchOrderBookBTCUSDC();
34160
34336
  const price = ask.plus(bid).dividedBy(2);
34161
- const btcToken = vesuAdapter.config.supportedPositions[1].asset;
34337
+ const btcToken = vesuAdapter.config.supportedPositions[0].asset;
34162
34338
  const btcPriceAvnu = await avnuAdapter.getPriceOfToken(btcToken.address.toString());
34163
34339
  if (!btcPriceAvnu) {
34164
34340
  logger.error(`error getting btc price avnu: ${btcPriceAvnu}`);
@@ -34174,43 +34350,65 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
34174
34350
  async handleWithdraw(amount) {
34175
34351
  try {
34176
34352
  const usdcBalanceVaultAllocator = await this.getUnusedBalance();
34177
- const usdcBalanceDifference = amount.minus(usdcBalanceVaultAllocator.usdValue);
34353
+ const usdcBalanceDifference = amount.plus(BUFFER_USDC_IN_WITHDRAWAL).minus(usdcBalanceVaultAllocator.usdValue);
34178
34354
  logger.info(`usdcBalanceDifference, ${usdcBalanceDifference.toNumber()}`);
34355
+ let calls = [];
34356
+ let status = true;
34179
34357
  if (usdcBalanceDifference.lessThan(0)) {
34180
- const withdrawCall = await this.getBringLiquidityCall({
34181
- amount
34358
+ const withdrawCall2 = await this.getBringLiquidityCall({
34359
+ amount: usdcBalanceVaultAllocator.amount
34182
34360
  });
34183
- logger.info("withdraw call", withdrawCall);
34184
- return [withdrawCall];
34361
+ logger.info("withdraw call", withdrawCall2);
34362
+ calls.push(withdrawCall2);
34363
+ return {
34364
+ calls,
34365
+ status: true
34366
+ };
34185
34367
  }
34186
34368
  const vesuAdapter = await this.getVesuAdapter();
34187
34369
  const extendedAdapter = await this.getExtendedAdapter();
34188
34370
  if (!vesuAdapter || !extendedAdapter || !extendedAdapter.client) {
34371
+ status = false;
34189
34372
  logger.error(
34190
34373
  `vesu or extended adapter not found: vesuAdapter=${vesuAdapter}, extendedAdapter=${extendedAdapter}`
34191
34374
  );
34192
- return [];
34375
+ return {
34376
+ calls,
34377
+ status
34378
+ };
34193
34379
  }
34194
34380
  const { collateralTokenAmount } = await vesuAdapter.vesuAdapter.getAssetPrices();
34195
34381
  const {
34196
34382
  collateralPrice
34197
34383
  } = await this.getAssetPrices();
34198
34384
  const extendedPositon = await extendedAdapter.getAllOpenPositions();
34385
+ if (!extendedPositon) {
34386
+ status = false;
34387
+ logger.error("error getting extended position", extendedPositon);
34388
+ return {
34389
+ calls,
34390
+ status
34391
+ };
34392
+ }
34199
34393
  const amountDistributionForWithdrawal = await calculateAmountDistributionForWithdrawal(
34200
- amount,
34394
+ usdcBalanceDifference,
34201
34395
  collateralPrice.price,
34202
34396
  collateralTokenAmount,
34203
34397
  extendedPositon
34204
34398
  );
34205
34399
  if (!amountDistributionForWithdrawal) {
34400
+ status = false;
34206
34401
  logger.error(
34207
34402
  `error calculating amount distribution for withdrawal: ${amountDistributionForWithdrawal}`
34208
34403
  );
34209
- return [];
34404
+ return {
34405
+ calls,
34406
+ status
34407
+ };
34210
34408
  }
34211
34409
  const { vesu_amount, extended_amount } = amountDistributionForWithdrawal;
34212
- if (vesu_amount.greaterThan(0)) {
34213
- const result = await this.moveAssets(
34410
+ if (status && vesu_amount.greaterThan(0)) {
34411
+ const { calls: vesuCalls, status: vesuStatus } = await this.moveAssets(
34214
34412
  {
34215
34413
  amount: vesu_amount,
34216
34414
  from: Protocols.VESU.name,
@@ -34219,10 +34417,11 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
34219
34417
  extendedAdapter,
34220
34418
  vesuAdapter
34221
34419
  );
34222
- return result;
34420
+ status = vesuStatus;
34421
+ calls.push(...vesuCalls);
34223
34422
  }
34224
- if (extended_amount.greaterThan(0)) {
34225
- const result = await this.moveAssets(
34423
+ if (status && extended_amount.greaterThan(0)) {
34424
+ const { calls: extendedCalls, status: extendedStatus } = await this.moveAssets(
34226
34425
  {
34227
34426
  amount: extended_amount,
34228
34427
  from: Protocols.EXTENDED.name,
@@ -34231,12 +34430,32 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
34231
34430
  extendedAdapter,
34232
34431
  vesuAdapter
34233
34432
  );
34234
- return result;
34433
+ status = extendedStatus;
34434
+ if (status) {
34435
+ calls.push(...extendedCalls);
34436
+ } else {
34437
+ logger.error("error moving assets to vault: extendedStatus: ${extendedStatus}");
34438
+ return {
34439
+ calls: [],
34440
+ status
34441
+ };
34442
+ }
34235
34443
  }
34236
- return [];
34444
+ const withdrawCall = await this.getBringLiquidityCall({
34445
+ amount
34446
+ });
34447
+ logger.info("withdraw call", withdrawCall);
34448
+ calls.push(withdrawCall);
34449
+ return {
34450
+ calls,
34451
+ status
34452
+ };
34237
34453
  } catch (err) {
34238
34454
  logger.error(`error handling withdrawal: ${err}`);
34239
- return [];
34455
+ return {
34456
+ calls: [],
34457
+ status: false
34458
+ };
34240
34459
  }
34241
34460
  }
34242
34461
  async getAUM() {
@@ -34370,6 +34589,7 @@ function getLooperSettings2(lstSymbol, underlyingSymbol, vaultSettings, pool1, e
34370
34589
  () => vesuMultiplyAdapter.getWithdrawLeaf()
34371
34590
  );
34372
34591
  vaultSettings.leafAdapters.push(() => extendedAdapter.getDepositLeaf());
34592
+ vaultSettings.leafAdapters.push(() => extendedAdapter.getSwapFromLegacyLeaf());
34373
34593
  vaultSettings.leafAdapters.push(() => avnuAdapter.getDepositLeaf());
34374
34594
  vaultSettings.leafAdapters.push(() => avnuAdapter.getWithdrawLeaf());
34375
34595
  vaultSettings.leafAdapters.push(