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

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.
@@ -55997,20 +55997,13 @@ ${JSON.stringify(data, null, 2)}`;
55997
55997
  async getDexPrice(baseToken, quoteToken, amount) {
55998
55998
  const lstTokenInfo = baseToken;
55999
55999
  const lstUnderlyingTokenInfo = quoteToken;
56000
- console.log("lstTokenInfo", lstTokenInfo);
56001
- console.log("lstUnderlyingTokenInfo", lstUnderlyingTokenInfo);
56002
- console.log("amount", amount);
56003
56000
  const quote = await this.getQuote(
56004
56001
  lstTokenInfo.address.address,
56005
56002
  lstUnderlyingTokenInfo.address.address,
56006
56003
  amount
56007
56004
  );
56008
- console.log("quote", quote);
56009
56005
  const outputAmount = Web3Number.fromWei(quote.total_calculated, lstUnderlyingTokenInfo.decimals);
56010
- console.log("outputAmount", outputAmount);
56011
- console.log("amount", amount);
56012
56006
  const price = outputAmount.toNumber() / amount.toNumber();
56013
- console.log("price", price);
56014
56007
  logger2.verbose(`${_EkuboQuoter.name}:: LST Dex Price: ${price}`);
56015
56008
  return price;
56016
56009
  }
@@ -56029,16 +56022,12 @@ ${JSON.stringify(data, null, 2)}`;
56029
56022
  // debt collateral
56030
56023
  async getSwapLimitAmount(fromToken, toToken, amount, max_slippage = 2e-3) {
56031
56024
  const isExactAmountIn = amount.greaterThanOrEqualTo(0);
56032
- console.log("isExactAmountIn", isExactAmountIn);
56033
56025
  logger2.verbose(`${_EkuboQuoter.name}::getSwapLimitAmount isExactAmountIn: ${isExactAmountIn}, fromToken: ${fromToken.symbol}, toToken: ${toToken.symbol}, amount: ${amount}`);
56034
56026
  const isYieldToken = this.tokenMarketData.isAPYSupported(toToken);
56035
56027
  console.log("isYieldToken", isYieldToken);
56036
56028
  const baseToken = isExactAmountIn ? toToken : fromToken;
56037
56029
  const quoteToken = isExactAmountIn ? fromToken : toToken;
56038
- console.log("baseToken", baseToken);
56039
- console.log("quoteToken", quoteToken);
56040
56030
  const dexPrice = await this.getDexPrice(baseToken, quoteToken, amount);
56041
- console.log("dexPrice", dexPrice);
56042
56031
  const trueExchangeRate = isYieldToken ? await this.tokenMarketData.getTruePrice(baseToken) : dexPrice;
56043
56032
  console.log("trueExchangeRate", trueExchangeRate);
56044
56033
  if (isExactAmountIn) {
@@ -56069,7 +56058,6 @@ ${JSON.stringify(data, null, 2)}`;
56069
56058
  return quote.splits.map((split2) => {
56070
56059
  const isNegativeAmount = BigInt(split2.amount_specified) <= 0n;
56071
56060
  const token = isNegativeAmount ? toTokenInfo : fromTokenInfo;
56072
- console.log("token for withdrawal", token, isNegativeAmount);
56073
56061
  return {
56074
56062
  route: split2.route.map((_route) => ({
56075
56063
  pool_key: {
@@ -92469,7 +92457,6 @@ spurious results.`);
92469
92457
  return null;
92470
92458
  }
92471
92459
  const extendedExposureUSD = extendedPosition.length > 0 ? new Web3Number(extendedPosition[0].value, USDC_TOKEN_DECIMALS) : new Web3Number(0, USDC_TOKEN_DECIMALS);
92472
- console.log("THe collateral is", collateralPrice, collateralUnits);
92473
92460
  const vesuExposureUSD = collateralUnits.multipliedBy(collateralPrice);
92474
92461
  if (vesuExposureUSD.lessThan(0)) {
92475
92462
  return {
@@ -92526,10 +92513,10 @@ spurious results.`);
92526
92513
  const extended_leverage_max = 1 / (MAINTENANCE_MARGIN + MAX_PRICE_DROP_PERCENTAGE);
92527
92514
  return Math.floor(extended_leverage_max);
92528
92515
  };
92529
- var calculateDebtAmount = (collateralAmount, debtAmount, debtPrice, maxLtv = MAX_LTV_BTC_USDC, addedAmount, collateralPrice, isDeposit) => {
92516
+ var calculateDebtAmount = (collateralAmount, debtAmount, debtPrice, maxLtv = MAX_LIQUIDATION_RATIO, addedAmount, collateralPrice, isDeposit) => {
92530
92517
  try {
92531
- const marginAmount = addedAmount.multipliedBy(isDeposit ? 1 : -1);
92532
- const numerator1 = collateralAmount.plus(addedAmount).multipliedBy(collateralPrice).multipliedBy(maxLtv);
92518
+ const addedCollateral = addedAmount.multipliedBy(isDeposit ? 1 : -1);
92519
+ const numerator1 = collateralAmount.plus(addedCollateral).multipliedBy(collateralPrice).multipliedBy(maxLtv);
92533
92520
  const numerator2 = debtAmount.multipliedBy(debtPrice).multipliedBy(TARGET_HF);
92534
92521
  const denominator = TARGET_HF - maxLtv;
92535
92522
  const x_debt_usd = numerator1.minus(numerator2).dividedBy(denominator);
@@ -92564,16 +92551,16 @@ spurious results.`);
92564
92551
  const extendedHoldings = await client.getHoldings();
92565
92552
  const extended_leverage = calculateExtendedLevergae();
92566
92553
  const latestPosition = (await client.getPositions()).data.pop();
92567
- console.log("the latest position is", latestPosition, extendedHoldings);
92568
92554
  if (!extendedHoldings || !latestPosition) {
92569
92555
  logger2.error(`error getting extended position: extendedHoldings=${extendedHoldings}, latestPosition=${latestPosition}`);
92570
92556
  return null;
92571
92557
  }
92572
- const positionValueInUSD = latestPosition.value;
92558
+ const positionValueInUSD = new Web3Number(latestPosition.value, USDC_TOKEN_DECIMALS);
92573
92559
  const equity = extendedHoldings.data.equity;
92574
- const deposit = Number(positionValueInUSD) / extended_leverage - Number(equity);
92575
- return new Web3Number(Math.floor(deposit / 0.2) * 0.2, USDC_TOKEN_DECIMALS);
92560
+ const deposit = positionValueInUSD.dividedBy(extended_leverage).minus(equity).toFixed(2);
92561
+ return new Web3Number(deposit, USDC_TOKEN_DECIMALS);
92576
92562
  } catch (err2) {
92563
+ logger2.error(`error calculating amount deposit on extended when incurring losses: ${err2}`);
92577
92564
  return null;
92578
92565
  }
92579
92566
  };
@@ -97667,7 +97654,7 @@ spurious results.`);
97667
97654
  }
97668
97655
  throw new Error("Failed to fetch quote after retries");
97669
97656
  }
97670
- async getQuotesAvnu(from_token_address, to_token_address, amount, takerAddress, toTokenDecimals, usdcToBtc, maxIterations = 5, tolerance = 1e4) {
97657
+ async getQuotesAvnu(from_token_address, to_token_address, amount, takerAddress, toTokenDecimals, usdcToBtc, maxIterations = 5, tolerance = 1e3) {
97671
97658
  try {
97672
97659
  const fromToken = this.config.supportedPositions[0].asset;
97673
97660
  const toToken = this.config.supportedPositions[1].asset;
@@ -98039,15 +98026,15 @@ spurious results.`);
98039
98026
  }
98040
98027
  const usdcAmountInWallet = (await this.getUnusedBalance()).amount;
98041
98028
  const usdcAmountOnExtended = parseFloat(
98042
- extendedHoldings.availableForWithdrawal
98029
+ extendedHoldings.availableForTrade
98043
98030
  );
98044
- if (extendedAmount.minus(usdcAmountOnExtended).greaterThan(0)) {
98031
+ if (extendedAmount.plus(BUFFER_USDC_IN_WITHDRAWAL).minus(usdcAmountOnExtended).greaterThan(0)) {
98045
98032
  try {
98046
98033
  const { calls: extendedCalls } = await this.moveAssets(
98047
98034
  {
98048
98035
  to: Protocols.EXTENDED.name,
98049
98036
  from: Protocols.VAULT.name,
98050
- amount: extendedAmount.minus(usdcAmountOnExtended)
98037
+ amount: extendedAmount.plus(BUFFER_USDC_IN_WITHDRAWAL).minus(usdcAmountOnExtended)
98051
98038
  },
98052
98039
  extendedAdapter,
98053
98040
  vesuAdapter
@@ -98127,21 +98114,30 @@ spurious results.`);
98127
98114
  extendedHoldings.availableForWithdrawal,
98128
98115
  USDC_TOKEN_DECIMALS
98129
98116
  );
98130
- const leftAmountAfterWithdrawalAmountInAccount = params.amount.minus(extendedHoldingAmount);
98131
- const btcAmount = leftAmountAfterWithdrawalAmountInAccount.dividedBy(collateralPrice.price);
98132
- const openLongPosition = await extendedAdapter.createOrder(
98133
- extendedLeverage.toString(),
98134
- btcAmount.toNumber(),
98135
- "BUY" /* BUY */
98136
- );
98137
- if (!openLongPosition) {
98138
- logger2.error(`error opening long position: ${openLongPosition}`);
98139
- return {
98140
- calls: [],
98141
- status: false
98142
- };
98117
+ logger2.info(`${_VesuExtendedMultiplierStrategy.name}::moveAssets extendedHoldingAmount: ${extendedHoldingAmount.toNumber()}`);
98118
+ if (params.amount.abs().greaterThan(extendedHoldingAmount)) {
98119
+ const leftAmountAfterWithdrawalAmountInAccount = params.amount.abs().minus(extendedHoldingAmount);
98120
+ logger2.info(`${_VesuExtendedMultiplierStrategy.name}::moveAssets leftAmountAfterWithdrawalAmountInAccount: ${leftAmountAfterWithdrawalAmountInAccount.toNumber()}`);
98121
+ const btcAmount = leftAmountAfterWithdrawalAmountInAccount.dividedBy(collateralPrice.price);
98122
+ const openLongPosition = btcAmount.multipliedBy(3).greaterThan(MINIMUM_EXTENDED_POSITION_SIZE) ? await extendedAdapter.createOrder(
98123
+ extendedLeverage.toString(),
98124
+ btcAmount.toNumber(),
98125
+ "BUY" /* BUY */
98126
+ ) : await extendedAdapter.createOrder(
98127
+ extendedLeverage.toString(),
98128
+ 35e-6,
98129
+ // just in case amount falls short then we need to create a withdrawal
98130
+ "BUY" /* BUY */
98131
+ );
98132
+ if (!openLongPosition) {
98133
+ logger2.error(`error opening long position: ${openLongPosition}`);
98134
+ return {
98135
+ calls: [],
98136
+ status: false
98137
+ };
98138
+ }
98139
+ await new Promise((resolve) => setTimeout(resolve, 5e3));
98143
98140
  }
98144
- await new Promise((resolve) => setTimeout(resolve, 5e3));
98145
98141
  const withdrawalFromExtended = await extendedAdapter.withdrawFromExtended(params.amount);
98146
98142
  if (withdrawalFromExtended) {
98147
98143
  const extendedHoldings2 = await extendedAdapter.getExtendedDepositAmount();
@@ -98266,6 +98262,7 @@ spurious results.`);
98266
98262
  };
98267
98263
  }
98268
98264
  const extendedPositionValue = position.length > 0 ? parseFloat(position[0].value) : 0;
98265
+ const BUFFER_AMOUNT_IN_AVAILABLE_FOR_TRADE = BUFFER_USDC_IN_WITHDRAWAL;
98269
98266
  const extendedHoldings = await extendedAdapter.getExtendedDepositAmount();
98270
98267
  if (!extendedHoldings) {
98271
98268
  logger2.error(`error getting extended holdings: ${extendedHoldings}`);
@@ -98275,7 +98272,7 @@ spurious results.`);
98275
98272
  };
98276
98273
  }
98277
98274
  const extendedHoldingAmount = new Web3Number(
98278
- extendedHoldings.availableForWithdrawal,
98275
+ extendedHoldings.availableForTrade,
98279
98276
  USDC_TOKEN_DECIMALS
98280
98277
  );
98281
98278
  const {
@@ -98284,7 +98281,7 @@ spurious results.`);
98284
98281
  const { collateralPrice } = await this.getAssetPrices();
98285
98282
  const { vesuAmountInBTC, extendedAmountInBTC } = calculateVesUPositionSizeGivenExtended(
98286
98283
  extendedPositionValue,
98287
- extendedHoldingAmount,
98284
+ extendedHoldingAmount.minus(BUFFER_AMOUNT_IN_AVAILABLE_FOR_TRADE),
98288
98285
  collateralTokenAmount,
98289
98286
  collateralPrice.price
98290
98287
  );
@@ -98301,7 +98298,6 @@ spurious results.`);
98301
98298
  );
98302
98299
  const { amount: wbtcAmountInVaultAllocator } = await this.getUnusedBalanceWBTC();
98303
98300
  if (wbtcAmountInVaultAllocator.lessThan(vesuAmountInBTC)) {
98304
- logger2.info(`WBTC amount in vault allocator is less than vesu amount required in WBTC thus swapping, wbtcAmountInVaultAllocator: ${wbtcAmountInVaultAllocator}, vesuAmountInBTC: ${vesuAmountInBTC}`);
98305
98301
  const swapProofsInfo = avnuAdapter.getProofs(true, this.getMerkleTree());
98306
98302
  const swapProofGroups = swapProofsInfo.proofs;
98307
98303
  const swapCall = this.getManageCall(
@@ -4269,20 +4269,13 @@ var EkuboQuoter = class _EkuboQuoter {
4269
4269
  async getDexPrice(baseToken, quoteToken, amount) {
4270
4270
  const lstTokenInfo = baseToken;
4271
4271
  const lstUnderlyingTokenInfo = quoteToken;
4272
- console.log("lstTokenInfo", lstTokenInfo);
4273
- console.log("lstUnderlyingTokenInfo", lstUnderlyingTokenInfo);
4274
- console.log("amount", amount);
4275
4272
  const quote = await this.getQuote(
4276
4273
  lstTokenInfo.address.address,
4277
4274
  lstUnderlyingTokenInfo.address.address,
4278
4275
  amount
4279
4276
  );
4280
- console.log("quote", quote);
4281
4277
  const outputAmount = Web3Number.fromWei(quote.total_calculated, lstUnderlyingTokenInfo.decimals);
4282
- console.log("outputAmount", outputAmount);
4283
- console.log("amount", amount);
4284
4278
  const price = outputAmount.toNumber() / amount.toNumber();
4285
- console.log("price", price);
4286
4279
  logger.verbose(`${_EkuboQuoter.name}:: LST Dex Price: ${price}`);
4287
4280
  return price;
4288
4281
  }
@@ -4301,16 +4294,12 @@ var EkuboQuoter = class _EkuboQuoter {
4301
4294
  // debt collateral
4302
4295
  async getSwapLimitAmount(fromToken, toToken, amount, max_slippage = 2e-3) {
4303
4296
  const isExactAmountIn = amount.greaterThanOrEqualTo(0);
4304
- console.log("isExactAmountIn", isExactAmountIn);
4305
4297
  logger.verbose(`${_EkuboQuoter.name}::getSwapLimitAmount isExactAmountIn: ${isExactAmountIn}, fromToken: ${fromToken.symbol}, toToken: ${toToken.symbol}, amount: ${amount}`);
4306
4298
  const isYieldToken = this.tokenMarketData.isAPYSupported(toToken);
4307
4299
  console.log("isYieldToken", isYieldToken);
4308
4300
  const baseToken = isExactAmountIn ? toToken : fromToken;
4309
4301
  const quoteToken = isExactAmountIn ? fromToken : toToken;
4310
- console.log("baseToken", baseToken);
4311
- console.log("quoteToken", quoteToken);
4312
4302
  const dexPrice = await this.getDexPrice(baseToken, quoteToken, amount);
4313
- console.log("dexPrice", dexPrice);
4314
4303
  const trueExchangeRate = isYieldToken ? await this.tokenMarketData.getTruePrice(baseToken) : dexPrice;
4315
4304
  console.log("trueExchangeRate", trueExchangeRate);
4316
4305
  if (isExactAmountIn) {
@@ -4341,7 +4330,6 @@ var EkuboQuoter = class _EkuboQuoter {
4341
4330
  return quote.splits.map((split) => {
4342
4331
  const isNegativeAmount = BigInt(split.amount_specified) <= 0n;
4343
4332
  const token = isNegativeAmount ? toTokenInfo : fromTokenInfo;
4344
- console.log("token for withdrawal", token, isNegativeAmount);
4345
4333
  return {
4346
4334
  route: split.route.map((_route) => ({
4347
4335
  pool_key: {
@@ -28440,7 +28428,6 @@ var calculateAmountDistributionForWithdrawal = async (amountInUsdc, collateralPr
28440
28428
  return null;
28441
28429
  }
28442
28430
  const extendedExposureUSD = extendedPosition.length > 0 ? new Web3Number(extendedPosition[0].value, USDC_TOKEN_DECIMALS) : new Web3Number(0, USDC_TOKEN_DECIMALS);
28443
- console.log("THe collateral is", collateralPrice, collateralUnits);
28444
28431
  const vesuExposureUSD = collateralUnits.multipliedBy(collateralPrice);
28445
28432
  if (vesuExposureUSD.lessThan(0)) {
28446
28433
  return {
@@ -28497,10 +28484,10 @@ var calculateExtendedLevergae = () => {
28497
28484
  const extended_leverage_max = 1 / (MAINTENANCE_MARGIN + MAX_PRICE_DROP_PERCENTAGE);
28498
28485
  return Math.floor(extended_leverage_max);
28499
28486
  };
28500
- var calculateDebtAmount = (collateralAmount, debtAmount, debtPrice, maxLtv = MAX_LTV_BTC_USDC, addedAmount, collateralPrice, isDeposit) => {
28487
+ var calculateDebtAmount = (collateralAmount, debtAmount, debtPrice, maxLtv = MAX_LIQUIDATION_RATIO, addedAmount, collateralPrice, isDeposit) => {
28501
28488
  try {
28502
- const marginAmount = addedAmount.multipliedBy(isDeposit ? 1 : -1);
28503
- const numerator1 = collateralAmount.plus(addedAmount).multipliedBy(collateralPrice).multipliedBy(maxLtv);
28489
+ const addedCollateral = addedAmount.multipliedBy(isDeposit ? 1 : -1);
28490
+ const numerator1 = collateralAmount.plus(addedCollateral).multipliedBy(collateralPrice).multipliedBy(maxLtv);
28504
28491
  const numerator2 = debtAmount.multipliedBy(debtPrice).multipliedBy(TARGET_HF);
28505
28492
  const denominator = TARGET_HF - maxLtv;
28506
28493
  const x_debt_usd = numerator1.minus(numerator2).dividedBy(denominator);
@@ -28535,16 +28522,16 @@ var calculateAmountDepositOnExtendedWhenIncurringLosses = async (client) => {
28535
28522
  const extendedHoldings = await client.getHoldings();
28536
28523
  const extended_leverage = calculateExtendedLevergae();
28537
28524
  const latestPosition = (await client.getPositions()).data.pop();
28538
- console.log("the latest position is", latestPosition, extendedHoldings);
28539
28525
  if (!extendedHoldings || !latestPosition) {
28540
28526
  logger.error(`error getting extended position: extendedHoldings=${extendedHoldings}, latestPosition=${latestPosition}`);
28541
28527
  return null;
28542
28528
  }
28543
- const positionValueInUSD = latestPosition.value;
28529
+ const positionValueInUSD = new Web3Number(latestPosition.value, USDC_TOKEN_DECIMALS);
28544
28530
  const equity = extendedHoldings.data.equity;
28545
- const deposit = Number(positionValueInUSD) / extended_leverage - Number(equity);
28546
- return new Web3Number(Math.floor(deposit / 0.2) * 0.2, USDC_TOKEN_DECIMALS);
28531
+ const deposit = positionValueInUSD.dividedBy(extended_leverage).minus(equity).toFixed(2);
28532
+ return new Web3Number(deposit, USDC_TOKEN_DECIMALS);
28547
28533
  } catch (err) {
28534
+ logger.error(`error calculating amount deposit on extended when incurring losses: ${err}`);
28548
28535
  return null;
28549
28536
  }
28550
28537
  };
@@ -33645,7 +33632,7 @@ var AvnuAdapter = class _AvnuAdapter extends BaseAdapter {
33645
33632
  }
33646
33633
  throw new Error("Failed to fetch quote after retries");
33647
33634
  }
33648
- async getQuotesAvnu(from_token_address, to_token_address, amount, takerAddress, toTokenDecimals, usdcToBtc, maxIterations = 5, tolerance = 1e4) {
33635
+ async getQuotesAvnu(from_token_address, to_token_address, amount, takerAddress, toTokenDecimals, usdcToBtc, maxIterations = 5, tolerance = 1e3) {
33649
33636
  try {
33650
33637
  const fromToken = this.config.supportedPositions[0].asset;
33651
33638
  const toToken = this.config.supportedPositions[1].asset;
@@ -34017,15 +34004,15 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
34017
34004
  }
34018
34005
  const usdcAmountInWallet = (await this.getUnusedBalance()).amount;
34019
34006
  const usdcAmountOnExtended = parseFloat(
34020
- extendedHoldings.availableForWithdrawal
34007
+ extendedHoldings.availableForTrade
34021
34008
  );
34022
- if (extendedAmount.minus(usdcAmountOnExtended).greaterThan(0)) {
34009
+ if (extendedAmount.plus(BUFFER_USDC_IN_WITHDRAWAL).minus(usdcAmountOnExtended).greaterThan(0)) {
34023
34010
  try {
34024
34011
  const { calls: extendedCalls } = await this.moveAssets(
34025
34012
  {
34026
34013
  to: Protocols.EXTENDED.name,
34027
34014
  from: Protocols.VAULT.name,
34028
- amount: extendedAmount.minus(usdcAmountOnExtended)
34015
+ amount: extendedAmount.plus(BUFFER_USDC_IN_WITHDRAWAL).minus(usdcAmountOnExtended)
34029
34016
  },
34030
34017
  extendedAdapter,
34031
34018
  vesuAdapter
@@ -34105,21 +34092,30 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
34105
34092
  extendedHoldings.availableForWithdrawal,
34106
34093
  USDC_TOKEN_DECIMALS
34107
34094
  );
34108
- const leftAmountAfterWithdrawalAmountInAccount = params.amount.minus(extendedHoldingAmount);
34109
- const btcAmount = leftAmountAfterWithdrawalAmountInAccount.dividedBy(collateralPrice.price);
34110
- const openLongPosition = await extendedAdapter.createOrder(
34111
- extendedLeverage.toString(),
34112
- btcAmount.toNumber(),
34113
- "BUY" /* BUY */
34114
- );
34115
- if (!openLongPosition) {
34116
- logger.error(`error opening long position: ${openLongPosition}`);
34117
- return {
34118
- calls: [],
34119
- status: false
34120
- };
34095
+ logger.info(`${_VesuExtendedMultiplierStrategy.name}::moveAssets extendedHoldingAmount: ${extendedHoldingAmount.toNumber()}`);
34096
+ if (params.amount.abs().greaterThan(extendedHoldingAmount)) {
34097
+ const leftAmountAfterWithdrawalAmountInAccount = params.amount.abs().minus(extendedHoldingAmount);
34098
+ logger.info(`${_VesuExtendedMultiplierStrategy.name}::moveAssets leftAmountAfterWithdrawalAmountInAccount: ${leftAmountAfterWithdrawalAmountInAccount.toNumber()}`);
34099
+ const btcAmount = leftAmountAfterWithdrawalAmountInAccount.dividedBy(collateralPrice.price);
34100
+ const openLongPosition = btcAmount.multipliedBy(3).greaterThan(MINIMUM_EXTENDED_POSITION_SIZE) ? await extendedAdapter.createOrder(
34101
+ extendedLeverage.toString(),
34102
+ btcAmount.toNumber(),
34103
+ "BUY" /* BUY */
34104
+ ) : await extendedAdapter.createOrder(
34105
+ extendedLeverage.toString(),
34106
+ 35e-6,
34107
+ // just in case amount falls short then we need to create a withdrawal
34108
+ "BUY" /* BUY */
34109
+ );
34110
+ if (!openLongPosition) {
34111
+ logger.error(`error opening long position: ${openLongPosition}`);
34112
+ return {
34113
+ calls: [],
34114
+ status: false
34115
+ };
34116
+ }
34117
+ await new Promise((resolve) => setTimeout(resolve, 5e3));
34121
34118
  }
34122
- await new Promise((resolve) => setTimeout(resolve, 5e3));
34123
34119
  const withdrawalFromExtended = await extendedAdapter.withdrawFromExtended(params.amount);
34124
34120
  if (withdrawalFromExtended) {
34125
34121
  const extendedHoldings2 = await extendedAdapter.getExtendedDepositAmount();
@@ -34244,6 +34240,7 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
34244
34240
  };
34245
34241
  }
34246
34242
  const extendedPositionValue = position.length > 0 ? parseFloat(position[0].value) : 0;
34243
+ const BUFFER_AMOUNT_IN_AVAILABLE_FOR_TRADE = BUFFER_USDC_IN_WITHDRAWAL;
34247
34244
  const extendedHoldings = await extendedAdapter.getExtendedDepositAmount();
34248
34245
  if (!extendedHoldings) {
34249
34246
  logger.error(`error getting extended holdings: ${extendedHoldings}`);
@@ -34253,7 +34250,7 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
34253
34250
  };
34254
34251
  }
34255
34252
  const extendedHoldingAmount = new Web3Number(
34256
- extendedHoldings.availableForWithdrawal,
34253
+ extendedHoldings.availableForTrade,
34257
34254
  USDC_TOKEN_DECIMALS
34258
34255
  );
34259
34256
  const {
@@ -34262,7 +34259,7 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
34262
34259
  const { collateralPrice } = await this.getAssetPrices();
34263
34260
  const { vesuAmountInBTC, extendedAmountInBTC } = calculateVesUPositionSizeGivenExtended(
34264
34261
  extendedPositionValue,
34265
- extendedHoldingAmount,
34262
+ extendedHoldingAmount.minus(BUFFER_AMOUNT_IN_AVAILABLE_FOR_TRADE),
34266
34263
  collateralTokenAmount,
34267
34264
  collateralPrice.price
34268
34265
  );
@@ -34279,7 +34276,6 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
34279
34276
  );
34280
34277
  const { amount: wbtcAmountInVaultAllocator } = await this.getUnusedBalanceWBTC();
34281
34278
  if (wbtcAmountInVaultAllocator.lessThan(vesuAmountInBTC)) {
34282
- logger.info(`WBTC amount in vault allocator is less than vesu amount required in WBTC thus swapping, wbtcAmountInVaultAllocator: ${wbtcAmountInVaultAllocator}, vesuAmountInBTC: ${vesuAmountInBTC}`);
34283
34279
  const swapProofsInfo = avnuAdapter.getProofs(true, this.getMerkleTree());
34284
34280
  const swapProofGroups = swapProofsInfo.proofs;
34285
34281
  const swapCall = this.getManageCall(
package/dist/index.js CHANGED
@@ -4474,20 +4474,13 @@ var EkuboQuoter = class _EkuboQuoter {
4474
4474
  async getDexPrice(baseToken, quoteToken, amount) {
4475
4475
  const lstTokenInfo = baseToken;
4476
4476
  const lstUnderlyingTokenInfo = quoteToken;
4477
- console.log("lstTokenInfo", lstTokenInfo);
4478
- console.log("lstUnderlyingTokenInfo", lstUnderlyingTokenInfo);
4479
- console.log("amount", amount);
4480
4477
  const quote = await this.getQuote(
4481
4478
  lstTokenInfo.address.address,
4482
4479
  lstUnderlyingTokenInfo.address.address,
4483
4480
  amount
4484
4481
  );
4485
- console.log("quote", quote);
4486
4482
  const outputAmount = Web3Number.fromWei(quote.total_calculated, lstUnderlyingTokenInfo.decimals);
4487
- console.log("outputAmount", outputAmount);
4488
- console.log("amount", amount);
4489
4483
  const price = outputAmount.toNumber() / amount.toNumber();
4490
- console.log("price", price);
4491
4484
  logger.verbose(`${_EkuboQuoter.name}:: LST Dex Price: ${price}`);
4492
4485
  return price;
4493
4486
  }
@@ -4506,16 +4499,12 @@ var EkuboQuoter = class _EkuboQuoter {
4506
4499
  // debt collateral
4507
4500
  async getSwapLimitAmount(fromToken, toToken, amount, max_slippage = 2e-3) {
4508
4501
  const isExactAmountIn = amount.greaterThanOrEqualTo(0);
4509
- console.log("isExactAmountIn", isExactAmountIn);
4510
4502
  logger.verbose(`${_EkuboQuoter.name}::getSwapLimitAmount isExactAmountIn: ${isExactAmountIn}, fromToken: ${fromToken.symbol}, toToken: ${toToken.symbol}, amount: ${amount}`);
4511
4503
  const isYieldToken = this.tokenMarketData.isAPYSupported(toToken);
4512
4504
  console.log("isYieldToken", isYieldToken);
4513
4505
  const baseToken = isExactAmountIn ? toToken : fromToken;
4514
4506
  const quoteToken = isExactAmountIn ? fromToken : toToken;
4515
- console.log("baseToken", baseToken);
4516
- console.log("quoteToken", quoteToken);
4517
4507
  const dexPrice = await this.getDexPrice(baseToken, quoteToken, amount);
4518
- console.log("dexPrice", dexPrice);
4519
4508
  const trueExchangeRate = isYieldToken ? await this.tokenMarketData.getTruePrice(baseToken) : dexPrice;
4520
4509
  console.log("trueExchangeRate", trueExchangeRate);
4521
4510
  if (isExactAmountIn) {
@@ -4546,7 +4535,6 @@ var EkuboQuoter = class _EkuboQuoter {
4546
4535
  return quote.splits.map((split) => {
4547
4536
  const isNegativeAmount = BigInt(split.amount_specified) <= 0n;
4548
4537
  const token = isNegativeAmount ? toTokenInfo : fromTokenInfo;
4549
- console.log("token for withdrawal", token, isNegativeAmount);
4550
4538
  return {
4551
4539
  route: split.route.map((_route) => ({
4552
4540
  pool_key: {
@@ -28257,7 +28245,6 @@ var calculateAmountDistributionForWithdrawal = async (amountInUsdc, collateralPr
28257
28245
  return null;
28258
28246
  }
28259
28247
  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);
28261
28248
  const vesuExposureUSD = collateralUnits.multipliedBy(collateralPrice);
28262
28249
  if (vesuExposureUSD.lessThan(0)) {
28263
28250
  return {
@@ -28314,10 +28301,10 @@ var calculateExtendedLevergae = () => {
28314
28301
  const extended_leverage_max = 1 / (MAINTENANCE_MARGIN + MAX_PRICE_DROP_PERCENTAGE);
28315
28302
  return Math.floor(extended_leverage_max);
28316
28303
  };
28317
- var calculateDebtAmount = (collateralAmount, debtAmount, debtPrice, maxLtv = MAX_LTV_BTC_USDC, addedAmount, collateralPrice, isDeposit) => {
28304
+ var calculateDebtAmount = (collateralAmount, debtAmount, debtPrice, maxLtv = MAX_LIQUIDATION_RATIO, addedAmount, collateralPrice, isDeposit) => {
28318
28305
  try {
28319
- const marginAmount = addedAmount.multipliedBy(isDeposit ? 1 : -1);
28320
- const numerator1 = collateralAmount.plus(addedAmount).multipliedBy(collateralPrice).multipliedBy(maxLtv);
28306
+ const addedCollateral = addedAmount.multipliedBy(isDeposit ? 1 : -1);
28307
+ const numerator1 = collateralAmount.plus(addedCollateral).multipliedBy(collateralPrice).multipliedBy(maxLtv);
28321
28308
  const numerator2 = debtAmount.multipliedBy(debtPrice).multipliedBy(TARGET_HF);
28322
28309
  const denominator = TARGET_HF - maxLtv;
28323
28310
  const x_debt_usd = numerator1.minus(numerator2).dividedBy(denominator);
@@ -28352,16 +28339,16 @@ var calculateAmountDepositOnExtendedWhenIncurringLosses = async (client) => {
28352
28339
  const extendedHoldings = await client.getHoldings();
28353
28340
  const extended_leverage = calculateExtendedLevergae();
28354
28341
  const latestPosition = (await client.getPositions()).data.pop();
28355
- console.log("the latest position is", latestPosition, extendedHoldings);
28356
28342
  if (!extendedHoldings || !latestPosition) {
28357
28343
  logger.error(`error getting extended position: extendedHoldings=${extendedHoldings}, latestPosition=${latestPosition}`);
28358
28344
  return null;
28359
28345
  }
28360
- const positionValueInUSD = latestPosition.value;
28346
+ const positionValueInUSD = new Web3Number(latestPosition.value, USDC_TOKEN_DECIMALS);
28361
28347
  const equity = extendedHoldings.data.equity;
28362
- const deposit = Number(positionValueInUSD) / extended_leverage - Number(equity);
28363
- return new Web3Number(Math.floor(deposit / 0.2) * 0.2, USDC_TOKEN_DECIMALS);
28348
+ const deposit = positionValueInUSD.dividedBy(extended_leverage).minus(equity).toFixed(2);
28349
+ return new Web3Number(deposit, USDC_TOKEN_DECIMALS);
28364
28350
  } catch (err) {
28351
+ logger.error(`error calculating amount deposit on extended when incurring losses: ${err}`);
28365
28352
  return null;
28366
28353
  }
28367
28354
  };
@@ -33798,7 +33785,7 @@ var AvnuAdapter = class _AvnuAdapter extends BaseAdapter {
33798
33785
  }
33799
33786
  throw new Error("Failed to fetch quote after retries");
33800
33787
  }
33801
- async getQuotesAvnu(from_token_address, to_token_address, amount, takerAddress, toTokenDecimals, usdcToBtc, maxIterations = 5, tolerance = 1e4) {
33788
+ async getQuotesAvnu(from_token_address, to_token_address, amount, takerAddress, toTokenDecimals, usdcToBtc, maxIterations = 5, tolerance = 1e3) {
33802
33789
  try {
33803
33790
  const fromToken = this.config.supportedPositions[0].asset;
33804
33791
  const toToken = this.config.supportedPositions[1].asset;
@@ -34170,15 +34157,15 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
34170
34157
  }
34171
34158
  const usdcAmountInWallet = (await this.getUnusedBalance()).amount;
34172
34159
  const usdcAmountOnExtended = parseFloat(
34173
- extendedHoldings.availableForWithdrawal
34160
+ extendedHoldings.availableForTrade
34174
34161
  );
34175
- if (extendedAmount.minus(usdcAmountOnExtended).greaterThan(0)) {
34162
+ if (extendedAmount.plus(BUFFER_USDC_IN_WITHDRAWAL).minus(usdcAmountOnExtended).greaterThan(0)) {
34176
34163
  try {
34177
34164
  const { calls: extendedCalls } = await this.moveAssets(
34178
34165
  {
34179
34166
  to: Protocols.EXTENDED.name,
34180
34167
  from: Protocols.VAULT.name,
34181
- amount: extendedAmount.minus(usdcAmountOnExtended)
34168
+ amount: extendedAmount.plus(BUFFER_USDC_IN_WITHDRAWAL).minus(usdcAmountOnExtended)
34182
34169
  },
34183
34170
  extendedAdapter,
34184
34171
  vesuAdapter
@@ -34258,21 +34245,30 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
34258
34245
  extendedHoldings.availableForWithdrawal,
34259
34246
  USDC_TOKEN_DECIMALS
34260
34247
  );
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
- };
34248
+ logger.info(`${_VesuExtendedMultiplierStrategy.name}::moveAssets extendedHoldingAmount: ${extendedHoldingAmount.toNumber()}`);
34249
+ if (params.amount.abs().greaterThan(extendedHoldingAmount)) {
34250
+ const leftAmountAfterWithdrawalAmountInAccount = params.amount.abs().minus(extendedHoldingAmount);
34251
+ logger.info(`${_VesuExtendedMultiplierStrategy.name}::moveAssets leftAmountAfterWithdrawalAmountInAccount: ${leftAmountAfterWithdrawalAmountInAccount.toNumber()}`);
34252
+ const btcAmount = leftAmountAfterWithdrawalAmountInAccount.dividedBy(collateralPrice.price);
34253
+ const openLongPosition = btcAmount.multipliedBy(3).greaterThan(MINIMUM_EXTENDED_POSITION_SIZE) ? await extendedAdapter.createOrder(
34254
+ extendedLeverage.toString(),
34255
+ btcAmount.toNumber(),
34256
+ "BUY" /* BUY */
34257
+ ) : await extendedAdapter.createOrder(
34258
+ extendedLeverage.toString(),
34259
+ 35e-6,
34260
+ // just in case amount falls short then we need to create a withdrawal
34261
+ "BUY" /* BUY */
34262
+ );
34263
+ if (!openLongPosition) {
34264
+ logger.error(`error opening long position: ${openLongPosition}`);
34265
+ return {
34266
+ calls: [],
34267
+ status: false
34268
+ };
34269
+ }
34270
+ await new Promise((resolve) => setTimeout(resolve, 5e3));
34274
34271
  }
34275
- await new Promise((resolve) => setTimeout(resolve, 5e3));
34276
34272
  const withdrawalFromExtended = await extendedAdapter.withdrawFromExtended(params.amount);
34277
34273
  if (withdrawalFromExtended) {
34278
34274
  const extendedHoldings2 = await extendedAdapter.getExtendedDepositAmount();
@@ -34397,6 +34393,7 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
34397
34393
  };
34398
34394
  }
34399
34395
  const extendedPositionValue = position.length > 0 ? parseFloat(position[0].value) : 0;
34396
+ const BUFFER_AMOUNT_IN_AVAILABLE_FOR_TRADE = BUFFER_USDC_IN_WITHDRAWAL;
34400
34397
  const extendedHoldings = await extendedAdapter.getExtendedDepositAmount();
34401
34398
  if (!extendedHoldings) {
34402
34399
  logger.error(`error getting extended holdings: ${extendedHoldings}`);
@@ -34406,7 +34403,7 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
34406
34403
  };
34407
34404
  }
34408
34405
  const extendedHoldingAmount = new Web3Number(
34409
- extendedHoldings.availableForWithdrawal,
34406
+ extendedHoldings.availableForTrade,
34410
34407
  USDC_TOKEN_DECIMALS
34411
34408
  );
34412
34409
  const {
@@ -34415,7 +34412,7 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
34415
34412
  const { collateralPrice } = await this.getAssetPrices();
34416
34413
  const { vesuAmountInBTC, extendedAmountInBTC } = calculateVesUPositionSizeGivenExtended(
34417
34414
  extendedPositionValue,
34418
- extendedHoldingAmount,
34415
+ extendedHoldingAmount.minus(BUFFER_AMOUNT_IN_AVAILABLE_FOR_TRADE),
34419
34416
  collateralTokenAmount,
34420
34417
  collateralPrice.price
34421
34418
  );
@@ -34432,7 +34429,6 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
34432
34429
  );
34433
34430
  const { amount: wbtcAmountInVaultAllocator } = await this.getUnusedBalanceWBTC();
34434
34431
  if (wbtcAmountInVaultAllocator.lessThan(vesuAmountInBTC)) {
34435
- logger.info(`WBTC amount in vault allocator is less than vesu amount required in WBTC thus swapping, wbtcAmountInVaultAllocator: ${wbtcAmountInVaultAllocator}, vesuAmountInBTC: ${vesuAmountInBTC}`);
34436
34432
  const swapProofsInfo = avnuAdapter.getProofs(true, this.getMerkleTree());
34437
34433
  const swapProofGroups = swapProofsInfo.proofs;
34438
34434
  const swapCall = this.getManageCall(
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) {
@@ -4400,7 +4389,6 @@ var EkuboQuoter = class _EkuboQuoter {
4400
4389
  return quote.splits.map((split) => {
4401
4390
  const isNegativeAmount = BigInt(split.amount_specified) <= 0n;
4402
4391
  const token = isNegativeAmount ? toTokenInfo : fromTokenInfo;
4403
- console.log("token for withdrawal", token, isNegativeAmount);
4404
4392
  return {
4405
4393
  route: split.route.map((_route) => ({
4406
4394
  pool_key: {
@@ -28115,7 +28103,6 @@ var calculateAmountDistributionForWithdrawal = async (amountInUsdc, collateralPr
28115
28103
  return null;
28116
28104
  }
28117
28105
  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);
28119
28106
  const vesuExposureUSD = collateralUnits.multipliedBy(collateralPrice);
28120
28107
  if (vesuExposureUSD.lessThan(0)) {
28121
28108
  return {
@@ -28172,10 +28159,10 @@ var calculateExtendedLevergae = () => {
28172
28159
  const extended_leverage_max = 1 / (MAINTENANCE_MARGIN + MAX_PRICE_DROP_PERCENTAGE);
28173
28160
  return Math.floor(extended_leverage_max);
28174
28161
  };
28175
- 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) => {
28176
28163
  try {
28177
- const marginAmount = addedAmount.multipliedBy(isDeposit ? 1 : -1);
28178
- 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);
28179
28166
  const numerator2 = debtAmount.multipliedBy(debtPrice).multipliedBy(TARGET_HF);
28180
28167
  const denominator = TARGET_HF - maxLtv;
28181
28168
  const x_debt_usd = numerator1.minus(numerator2).dividedBy(denominator);
@@ -28210,16 +28197,16 @@ var calculateAmountDepositOnExtendedWhenIncurringLosses = async (client) => {
28210
28197
  const extendedHoldings = await client.getHoldings();
28211
28198
  const extended_leverage = calculateExtendedLevergae();
28212
28199
  const latestPosition = (await client.getPositions()).data.pop();
28213
- console.log("the latest position is", latestPosition, extendedHoldings);
28214
28200
  if (!extendedHoldings || !latestPosition) {
28215
28201
  logger.error(`error getting extended position: extendedHoldings=${extendedHoldings}, latestPosition=${latestPosition}`);
28216
28202
  return null;
28217
28203
  }
28218
- const positionValueInUSD = latestPosition.value;
28204
+ const positionValueInUSD = new Web3Number(latestPosition.value, USDC_TOKEN_DECIMALS);
28219
28205
  const equity = extendedHoldings.data.equity;
28220
- const deposit = Number(positionValueInUSD) / extended_leverage - Number(equity);
28221
- return new Web3Number(Math.floor(deposit / 0.2) * 0.2, USDC_TOKEN_DECIMALS);
28206
+ const deposit = positionValueInUSD.dividedBy(extended_leverage).minus(equity).toFixed(2);
28207
+ return new Web3Number(deposit, USDC_TOKEN_DECIMALS);
28222
28208
  } catch (err) {
28209
+ logger.error(`error calculating amount deposit on extended when incurring losses: ${err}`);
28223
28210
  return null;
28224
28211
  }
28225
28212
  };
@@ -33656,7 +33643,7 @@ var AvnuAdapter = class _AvnuAdapter extends BaseAdapter {
33656
33643
  }
33657
33644
  throw new Error("Failed to fetch quote after retries");
33658
33645
  }
33659
- async getQuotesAvnu(from_token_address, to_token_address, amount, takerAddress, toTokenDecimals, usdcToBtc, maxIterations = 5, tolerance = 1e4) {
33646
+ async getQuotesAvnu(from_token_address, to_token_address, amount, takerAddress, toTokenDecimals, usdcToBtc, maxIterations = 5, tolerance = 1e3) {
33660
33647
  try {
33661
33648
  const fromToken = this.config.supportedPositions[0].asset;
33662
33649
  const toToken = this.config.supportedPositions[1].asset;
@@ -34028,15 +34015,15 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
34028
34015
  }
34029
34016
  const usdcAmountInWallet = (await this.getUnusedBalance()).amount;
34030
34017
  const usdcAmountOnExtended = parseFloat(
34031
- extendedHoldings.availableForWithdrawal
34018
+ extendedHoldings.availableForTrade
34032
34019
  );
34033
- if (extendedAmount.minus(usdcAmountOnExtended).greaterThan(0)) {
34020
+ if (extendedAmount.plus(BUFFER_USDC_IN_WITHDRAWAL).minus(usdcAmountOnExtended).greaterThan(0)) {
34034
34021
  try {
34035
34022
  const { calls: extendedCalls } = await this.moveAssets(
34036
34023
  {
34037
34024
  to: Protocols.EXTENDED.name,
34038
34025
  from: Protocols.VAULT.name,
34039
- amount: extendedAmount.minus(usdcAmountOnExtended)
34026
+ amount: extendedAmount.plus(BUFFER_USDC_IN_WITHDRAWAL).minus(usdcAmountOnExtended)
34040
34027
  },
34041
34028
  extendedAdapter,
34042
34029
  vesuAdapter
@@ -34116,21 +34103,30 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
34116
34103
  extendedHoldings.availableForWithdrawal,
34117
34104
  USDC_TOKEN_DECIMALS
34118
34105
  );
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
- };
34106
+ logger.info(`${_VesuExtendedMultiplierStrategy.name}::moveAssets extendedHoldingAmount: ${extendedHoldingAmount.toNumber()}`);
34107
+ if (params.amount.abs().greaterThan(extendedHoldingAmount)) {
34108
+ const leftAmountAfterWithdrawalAmountInAccount = params.amount.abs().minus(extendedHoldingAmount);
34109
+ logger.info(`${_VesuExtendedMultiplierStrategy.name}::moveAssets leftAmountAfterWithdrawalAmountInAccount: ${leftAmountAfterWithdrawalAmountInAccount.toNumber()}`);
34110
+ const btcAmount = leftAmountAfterWithdrawalAmountInAccount.dividedBy(collateralPrice.price);
34111
+ const openLongPosition = btcAmount.multipliedBy(3).greaterThan(MINIMUM_EXTENDED_POSITION_SIZE) ? await extendedAdapter.createOrder(
34112
+ extendedLeverage.toString(),
34113
+ btcAmount.toNumber(),
34114
+ "BUY" /* BUY */
34115
+ ) : await extendedAdapter.createOrder(
34116
+ extendedLeverage.toString(),
34117
+ 35e-6,
34118
+ // just in case amount falls short then we need to create a withdrawal
34119
+ "BUY" /* BUY */
34120
+ );
34121
+ if (!openLongPosition) {
34122
+ logger.error(`error opening long position: ${openLongPosition}`);
34123
+ return {
34124
+ calls: [],
34125
+ status: false
34126
+ };
34127
+ }
34128
+ await new Promise((resolve) => setTimeout(resolve, 5e3));
34132
34129
  }
34133
- await new Promise((resolve) => setTimeout(resolve, 5e3));
34134
34130
  const withdrawalFromExtended = await extendedAdapter.withdrawFromExtended(params.amount);
34135
34131
  if (withdrawalFromExtended) {
34136
34132
  const extendedHoldings2 = await extendedAdapter.getExtendedDepositAmount();
@@ -34255,6 +34251,7 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
34255
34251
  };
34256
34252
  }
34257
34253
  const extendedPositionValue = position.length > 0 ? parseFloat(position[0].value) : 0;
34254
+ const BUFFER_AMOUNT_IN_AVAILABLE_FOR_TRADE = BUFFER_USDC_IN_WITHDRAWAL;
34258
34255
  const extendedHoldings = await extendedAdapter.getExtendedDepositAmount();
34259
34256
  if (!extendedHoldings) {
34260
34257
  logger.error(`error getting extended holdings: ${extendedHoldings}`);
@@ -34264,7 +34261,7 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
34264
34261
  };
34265
34262
  }
34266
34263
  const extendedHoldingAmount = new Web3Number(
34267
- extendedHoldings.availableForWithdrawal,
34264
+ extendedHoldings.availableForTrade,
34268
34265
  USDC_TOKEN_DECIMALS
34269
34266
  );
34270
34267
  const {
@@ -34273,7 +34270,7 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
34273
34270
  const { collateralPrice } = await this.getAssetPrices();
34274
34271
  const { vesuAmountInBTC, extendedAmountInBTC } = calculateVesUPositionSizeGivenExtended(
34275
34272
  extendedPositionValue,
34276
- extendedHoldingAmount,
34273
+ extendedHoldingAmount.minus(BUFFER_AMOUNT_IN_AVAILABLE_FOR_TRADE),
34277
34274
  collateralTokenAmount,
34278
34275
  collateralPrice.price
34279
34276
  );
@@ -34290,7 +34287,6 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
34290
34287
  );
34291
34288
  const { amount: wbtcAmountInVaultAllocator } = await this.getUnusedBalanceWBTC();
34292
34289
  if (wbtcAmountInVaultAllocator.lessThan(vesuAmountInBTC)) {
34293
- logger.info(`WBTC amount in vault allocator is less than vesu amount required in WBTC thus swapping, wbtcAmountInVaultAllocator: ${wbtcAmountInVaultAllocator}, vesuAmountInBTC: ${vesuAmountInBTC}`);
34294
34290
  const swapProofsInfo = avnuAdapter.getProofs(true, this.getMerkleTree());
34295
34291
  const swapProofGroups = swapProofsInfo.proofs;
34296
34292
  const swapCall = this.getManageCall(
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@strkfarm/sdk",
3
- "version": "2.0.0-dev.2",
3
+ "version": "2.0.0-dev.4",
4
4
  "description": "STRKFarm TS SDK (Meant for our internal use, but feel free to use it)",
5
5
  "typings": "dist/index.d.ts",
6
6
  "types": "dist/index.d.ts",
@@ -70,21 +70,14 @@ export class EkuboQuoter {
70
70
  async getDexPrice(baseToken: TokenInfo, quoteToken: TokenInfo, amount: Web3Number) {
71
71
  const lstTokenInfo = baseToken;
72
72
  const lstUnderlyingTokenInfo = quoteToken;
73
- console.log("lstTokenInfo", lstTokenInfo);
74
- console.log("lstUnderlyingTokenInfo", lstUnderlyingTokenInfo);
75
- console.log("amount", amount);
76
73
  const quote = await this.getQuote(
77
74
  lstTokenInfo.address.address,
78
75
  lstUnderlyingTokenInfo.address.address,
79
76
  amount
80
77
  );
81
- console.log("quote", quote);
82
78
  // in Underlying
83
79
  const outputAmount = Web3Number.fromWei(quote.total_calculated, lstUnderlyingTokenInfo.decimals);
84
- console.log("outputAmount", outputAmount);
85
- console.log("amount", amount);
86
80
  const price = outputAmount.toNumber() / amount.toNumber();
87
- console.log("price", price);
88
81
  logger.verbose(`${EkuboQuoter.name}:: LST Dex Price: ${price}`);
89
82
  return price;
90
83
  }
@@ -105,7 +98,6 @@ export class EkuboQuoter {
105
98
  // debt collateral
106
99
  async getSwapLimitAmount(fromToken: TokenInfo, toToken: TokenInfo, amount: Web3Number, max_slippage: number = 0.002): Promise<Web3Number> {
107
100
  const isExactAmountIn = amount.greaterThanOrEqualTo(0);
108
- console.log("isExactAmountIn", isExactAmountIn);
109
101
  logger.verbose(`${EkuboQuoter.name}::getSwapLimitAmount isExactAmountIn: ${isExactAmountIn}, fromToken: ${fromToken.symbol}, toToken: ${toToken.symbol}, amount: ${amount}`);
110
102
  const isYieldToken = this.tokenMarketData.isAPYSupported(toToken);
111
103
  console.log("isYieldToken", isYieldToken);
@@ -114,13 +106,10 @@ export class EkuboQuoter {
114
106
  // wbtc
115
107
  const baseToken = isExactAmountIn ? toToken : fromToken; // fromToken -> wbtc,
116
108
  const quoteToken = isExactAmountIn ? fromToken : toToken; // toToken -> usdc,
117
- console.log("baseToken", baseToken);
118
- console.log("quoteToken", quoteToken);
119
109
  // need dex price of from token in toToken
120
110
  // from baseToken to underlying token
121
111
  // for withdraw, usdc to btc with amount negative
122
112
  const dexPrice = await this.getDexPrice(baseToken, quoteToken, amount);
123
- console.log("dexPrice", dexPrice);
124
113
  const trueExchangeRate = isYieldToken ? await this.tokenMarketData.getTruePrice(baseToken) : dexPrice;
125
114
  console.log("trueExchangeRate", trueExchangeRate);
126
115
  if (isExactAmountIn) {
@@ -155,7 +144,6 @@ export class EkuboQuoter {
155
144
 
156
145
  const isNegativeAmount = BigInt(split.amount_specified) <= 0n;
157
146
  const token = isNegativeAmount ? toTokenInfo : fromTokenInfo;
158
- console.log("token for withdrawal", token, isNegativeAmount);
159
147
  return {
160
148
  route: split.route.map(_route => ({
161
149
  pool_key: {
@@ -156,8 +156,8 @@ export class AvnuAdapter extends BaseAdapter<DepositParams, WithdrawParams> {
156
156
 
157
157
  async getDepositCall(params: DepositParams): Promise<ManageCall[]> {
158
158
  try {
159
- const fromToken = this.config.supportedPositions[0].asset;
160
- const toToken = this.config.supportedPositions[1].asset;
159
+ const fromToken = this.config.supportedPositions[0].asset; //usdc
160
+ const toToken = this.config.supportedPositions[1].asset; //wbtc
161
161
  const vaultAllocator = ContractAddr.from(
162
162
  this.config.vaultAllocator.address
163
163
  );
@@ -169,15 +169,18 @@ export class AvnuAdapter extends BaseAdapter<DepositParams, WithdrawParams> {
169
169
  toToken.decimals,
170
170
  true
171
171
  )
172
+ //console.log(`${AvnuAdapter.name}::getDepositCall quote: ${JSON.stringify(quote)}`);
172
173
  if (!quote) {
173
174
  logger.error("error getting quote from avnu");
174
175
  return [];
175
176
  }
177
+
176
178
  const getCalldata = await this.avnuWrapper.getSwapCallData(
177
179
  quote,
178
180
  vaultAllocator.address
179
181
  );
180
182
  const swapCallData = getCalldata[0];
183
+
181
184
  // const approveCallData = getCalldata[0];
182
185
  const amount = uint256.bnToUint256(quote.sellAmountInUsd*10**7)
183
186
  return [
@@ -300,7 +303,7 @@ export class AvnuAdapter extends BaseAdapter<DepositParams, WithdrawParams> {
300
303
  toTokenDecimals: number,
301
304
  usdcToBtc: boolean,
302
305
  maxIterations: number = 5,
303
- tolerance: number = 10000
306
+ tolerance: number = 1000
304
307
  ): Promise<Quote | null>{
305
308
  try {
306
309
  const fromToken = this.config.supportedPositions[0].asset;
@@ -131,9 +131,6 @@ export const calculateAmountDistributionForWithdrawal = async (
131
131
  extendedPosition.length > 0
132
132
  ? new Web3Number(extendedPosition[0].value, USDC_TOKEN_DECIMALS)
133
133
  : new Web3Number(0, USDC_TOKEN_DECIMALS);
134
- console.log("THe collateral is", collateralPrice, collateralUnits);
135
- // console.log("the extended exposure usd is", extendedExposureUSD.toNumber());
136
- //console.log("the collateral units are", collateralUnits.toNumber());\
137
134
  const vesuExposureUSD = collateralUnits.multipliedBy(collateralPrice);
138
135
  if (vesuExposureUSD.lessThan(0)) {
139
136
  return {
@@ -223,16 +220,16 @@ export const calculateDebtAmount = (
223
220
  collateralAmount: Web3Number,
224
221
  debtAmount: Web3Number,
225
222
  debtPrice: number,
226
- maxLtv: number = MAX_LTV_BTC_USDC,
223
+ maxLtv: number = MAX_LIQUIDATION_RATIO,
227
224
  addedAmount: Web3Number, // this is in btc
228
225
  collateralPrice: number,
229
226
  isDeposit: boolean
230
227
  ) => {
231
228
  try {
232
229
  // => X = (((collateral + legDepositAmount) * collateralPrice * ltv) - (debt * debtPrice * target hf)) / (target hf - ltv)
233
- const marginAmount = addedAmount.multipliedBy(isDeposit ? 1 : -1);
234
- const numerator1 = collateralAmount
235
- .plus(addedAmount)
230
+ const addedCollateral = addedAmount.multipliedBy(isDeposit ? 1 : -1);
231
+ const numerator1 = (collateralAmount
232
+ .plus(addedCollateral))
236
233
  .multipliedBy(collateralPrice)
237
234
  .multipliedBy(maxLtv);
238
235
  const numerator2 = debtAmount
@@ -308,17 +305,16 @@ export const calculateAmountDepositOnExtendedWhenIncurringLosses = async (
308
305
  const extendedHoldings = await client.getHoldings();
309
306
  const extended_leverage = calculateExtendedLevergae();
310
307
  const latestPosition = (await client.getPositions()).data.pop();
311
- console.log("the latest position is", latestPosition, extendedHoldings);
312
308
  if (!extendedHoldings || !latestPosition) {
313
309
  logger.error(`error getting extended position: extendedHoldings=${extendedHoldings}, latestPosition=${latestPosition}`);
314
310
  return null;
315
311
  }
316
- const positionValueInUSD = latestPosition.value;
312
+ const positionValueInUSD = new Web3Number(latestPosition.value, USDC_TOKEN_DECIMALS);
317
313
  const equity = extendedHoldings.data.equity;
318
- const deposit =
319
- Number(positionValueInUSD) / extended_leverage - Number(equity);
320
- return new Web3Number(Math.floor(deposit / 0.2) * 0.2, USDC_TOKEN_DECIMALS);
314
+ const deposit = positionValueInUSD.dividedBy(extended_leverage).minus(equity).toFixed(2);
315
+ return new Web3Number(deposit, USDC_TOKEN_DECIMALS);
321
316
  } catch (err) {
317
+ logger.error(`error calculating amount deposit on extended when incurring losses: ${err}`);
322
318
  return null;
323
319
  }
324
320
  };
@@ -337,7 +337,7 @@ export class VesuExtendedMultiplierStrategy<
337
337
  }
338
338
  if (extendedAmount.lessThan(0)) {
339
339
  try {
340
- const {calls: extendedCalls, status: extendedStatus} = await this.moveAssets(
340
+ const { calls: extendedCalls, status: extendedStatus } = await this.moveAssets(
341
341
  {
342
342
  to: Protocols.VAULT.name,
343
343
  from: Protocols.EXTENDED.name,
@@ -347,9 +347,9 @@ export class VesuExtendedMultiplierStrategy<
347
347
  vesuAdapter
348
348
  );
349
349
  //If withdrawal succesfull, then do further
350
- if(extendedStatus){
351
- calls.push(...extendedCalls);
352
- }else{
350
+ if (extendedStatus) {
351
+ calls.push(...extendedCalls);
352
+ } else {
353
353
  return [];
354
354
  }
355
355
  } catch (err) {
@@ -359,7 +359,7 @@ export class VesuExtendedMultiplierStrategy<
359
359
 
360
360
  if (vesuAmount.lessThan(0)) {
361
361
  try {
362
- const {calls: vesuCalls, status: vesuStatus} = await this.moveAssets(
362
+ const { calls: vesuCalls, status: vesuStatus } = await this.moveAssets(
363
363
  {
364
364
  to: Protocols.EXTENDED.name,
365
365
  from: Protocols.VESU.name,
@@ -369,7 +369,7 @@ export class VesuExtendedMultiplierStrategy<
369
369
  vesuAdapter
370
370
  );
371
371
  calls.push(...vesuCalls);
372
- if(!vesuStatus){
372
+ if (!vesuStatus) {
373
373
  return [];
374
374
  }
375
375
  } catch (err) {
@@ -384,16 +384,16 @@ export class VesuExtendedMultiplierStrategy<
384
384
  }
385
385
  const usdcAmountInWallet = (await this.getUnusedBalance()).amount;
386
386
  const usdcAmountOnExtended = parseFloat(
387
- extendedHoldings.availableForWithdrawal
387
+ extendedHoldings.availableForTrade
388
388
  );
389
- if (extendedAmount.minus(usdcAmountOnExtended).greaterThan(0)) {
389
+ if (extendedAmount.plus(BUFFER_USDC_IN_WITHDRAWAL).minus(usdcAmountOnExtended).greaterThan(0)) {
390
390
  //move assets to extended
391
391
  try {
392
- const {calls: extendedCalls} = await this.moveAssets(
392
+ const { calls: extendedCalls } = await this.moveAssets(
393
393
  {
394
394
  to: Protocols.EXTENDED.name,
395
395
  from: Protocols.VAULT.name,
396
- amount: extendedAmount.minus(usdcAmountOnExtended),
396
+ amount: extendedAmount.plus(BUFFER_USDC_IN_WITHDRAWAL).minus(usdcAmountOnExtended),
397
397
  },
398
398
  extendedAdapter,
399
399
  vesuAdapter
@@ -406,7 +406,7 @@ export class VesuExtendedMultiplierStrategy<
406
406
  if (vesuAmount.minus(usdcAmountInWallet).greaterThan(0)) {
407
407
  //move assets to vesu
408
408
  try {
409
- const {calls: vesuCalls, status: vesuStatus} = await this.moveAssets(
409
+ const { calls: vesuCalls, status: vesuStatus } = await this.moveAssets(
410
410
  {
411
411
  to: Protocols.VAULT.name,
412
412
  from: Protocols.EXTENDED.name,
@@ -415,7 +415,7 @@ export class VesuExtendedMultiplierStrategy<
415
415
  extendedAdapter,
416
416
  vesuAdapter
417
417
  );
418
- if(!vesuStatus){
418
+ if (!vesuStatus) {
419
419
  return [];
420
420
  }
421
421
  calls.push(...vesuCalls);
@@ -487,22 +487,29 @@ export class VesuExtendedMultiplierStrategy<
487
487
  extendedHoldings.availableForWithdrawal,
488
488
  USDC_TOKEN_DECIMALS
489
489
  );
490
-
491
- const leftAmountAfterWithdrawalAmountInAccount = params.amount.minus(extendedHoldingAmount);
492
- const btcAmount = leftAmountAfterWithdrawalAmountInAccount.dividedBy(collateralPrice.price);
493
- const openLongPosition = await extendedAdapter.createOrder(
494
- extendedLeverage.toString(),
495
- btcAmount.toNumber(),
496
- OrderSide.BUY
497
- )
498
- if (!openLongPosition) {
499
- logger.error(`error opening long position: ${openLongPosition}`);
500
- return {
501
- calls: [],
502
- status: false
503
- };
490
+ logger.info(`${VesuExtendedMultiplierStrategy.name}::moveAssets extendedHoldingAmount: ${extendedHoldingAmount.toNumber()}`);
491
+ if (params.amount.abs().greaterThan(extendedHoldingAmount)) {
492
+ const leftAmountAfterWithdrawalAmountInAccount = params.amount.abs().minus(extendedHoldingAmount);
493
+ logger.info(`${VesuExtendedMultiplierStrategy.name}::moveAssets leftAmountAfterWithdrawalAmountInAccount: ${leftAmountAfterWithdrawalAmountInAccount.toNumber()}`);
494
+ const btcAmount = leftAmountAfterWithdrawalAmountInAccount.dividedBy(collateralPrice.price);
495
+ const openLongPosition = btcAmount.multipliedBy(3).greaterThan(MINIMUM_EXTENDED_POSITION_SIZE) ? await extendedAdapter.createOrder(
496
+ extendedLeverage.toString(),
497
+ btcAmount.toNumber(),
498
+ OrderSide.BUY
499
+ ) : await extendedAdapter.createOrder(
500
+ extendedLeverage.toString(),
501
+ 0.000035, // just in case amount falls short then we need to create a withdrawal
502
+ OrderSide.BUY
503
+ )
504
+ if (!openLongPosition) {
505
+ logger.error(`error opening long position: ${openLongPosition}`);
506
+ return {
507
+ calls: [],
508
+ status: false
509
+ };
510
+ }
511
+ await new Promise(resolve => setTimeout(resolve, 5000));
504
512
  }
505
- await new Promise(resolve => setTimeout(resolve, 5000));
506
513
  const withdrawalFromExtended =
507
514
  await extendedAdapter.withdrawFromExtended(params.amount);
508
515
  if (withdrawalFromExtended) {
@@ -642,6 +649,7 @@ export class VesuExtendedMultiplierStrategy<
642
649
  };
643
650
  }
644
651
  const extendedPositionValue = position.length > 0 ? parseFloat(position[0].value) : 0;
652
+ const BUFFER_AMOUNT_IN_AVAILABLE_FOR_TRADE = BUFFER_USDC_IN_WITHDRAWAL;
645
653
  const extendedHoldings = await extendedAdapter.getExtendedDepositAmount();
646
654
  if (!extendedHoldings) {
647
655
  logger.error(`error getting extended holdings: ${extendedHoldings}`);
@@ -651,7 +659,7 @@ export class VesuExtendedMultiplierStrategy<
651
659
  };
652
660
  }
653
661
  const extendedHoldingAmount = new Web3Number(
654
- extendedHoldings.availableForWithdrawal,
662
+ extendedHoldings.availableForTrade,
655
663
  USDC_TOKEN_DECIMALS
656
664
  );
657
665
  const {
@@ -660,12 +668,12 @@ export class VesuExtendedMultiplierStrategy<
660
668
  const { collateralPrice } = await this.getAssetPrices();
661
669
  const { vesuAmountInBTC, extendedAmountInBTC } = calculateVesUPositionSizeGivenExtended(
662
670
  extendedPositionValue,
663
- extendedHoldingAmount,
671
+ extendedHoldingAmount.minus(BUFFER_AMOUNT_IN_AVAILABLE_FOR_TRADE),
664
672
  collateralTokenAmount,
665
673
  collateralPrice.price
666
674
  );
667
- logger.info(`vesuAmountInBTC ${vesuAmountInBTC}, extendedAmountInBTC ${extendedAmountInBTC}`);
668
-
675
+ logger.info(`vesuAmountInBTC ${vesuAmountInBTC}, extendedAmountInBTC ${extendedAmountInBTC}`);
676
+
669
677
  let calls: Call[] = [];
670
678
  if (vesuAmountInBTC.greaterThan(MINIMUM_EXTENDED_POSITION_SIZE)) {
671
679
  const proofsInfo = vesuAdapter.getProofs(true, this.getMerkleTree());
@@ -678,7 +686,6 @@ export class VesuExtendedMultiplierStrategy<
678
686
  );
679
687
  const { amount: wbtcAmountInVaultAllocator } = await this.getUnusedBalanceWBTC();
680
688
  if (wbtcAmountInVaultAllocator.lessThan(vesuAmountInBTC)) {
681
- logger.info(`WBTC amount in vault allocator is less than vesu amount required in WBTC thus swapping, wbtcAmountInVaultAllocator: ${wbtcAmountInVaultAllocator}, vesuAmountInBTC: ${vesuAmountInBTC}`);
682
689
  const swapProofsInfo = avnuAdapter.getProofs(true, this.getMerkleTree());
683
690
  const swapProofGroups = swapProofsInfo.proofs;
684
691
  const swapCall = this.getManageCall(
@@ -691,7 +698,6 @@ export class VesuExtendedMultiplierStrategy<
691
698
  }
692
699
  calls.push(call);
693
700
  }
694
-
695
701
  const shortPosition = extendedAmountInBTC.multipliedBy(3).abs().greaterThan(MINIMUM_EXTENDED_POSITION_SIZE) ? await extendedAdapter.createOrder(
696
702
  extendedLeverage.toString(),
697
703
  extendedAmountInBTC.toNumber(),
@@ -736,7 +742,7 @@ export class VesuExtendedMultiplierStrategy<
736
742
  return false;
737
743
  }
738
744
 
739
- async handleWithdraw(amount: Web3Number): Promise<{calls: Call[], status: boolean}> {
745
+ async handleWithdraw(amount: Web3Number): Promise<{ calls: Call[], status: boolean }> {
740
746
  try {
741
747
  const usdcBalanceVaultAllocator = await this.getUnusedBalance()
742
748
  const usdcBalanceDifference = amount.plus(BUFFER_USDC_IN_WITHDRAWAL).minus(usdcBalanceVaultAllocator.usdValue);
@@ -750,8 +756,8 @@ export class VesuExtendedMultiplierStrategy<
750
756
  logger.info("withdraw call", withdrawCall);
751
757
  calls.push(withdrawCall);
752
758
  return {
753
- calls:calls,
754
- status:true
759
+ calls: calls,
760
+ status: true
755
761
  };
756
762
  }
757
763
  const vesuAdapter = await this.getVesuAdapter();
@@ -762,8 +768,8 @@ export class VesuExtendedMultiplierStrategy<
762
768
  `vesu or extended adapter not found: vesuAdapter=${vesuAdapter}, extendedAdapter=${extendedAdapter}`
763
769
  );
764
770
  return {
765
- calls:calls,
766
- status:status
771
+ calls: calls,
772
+ status: status
767
773
  };
768
774
  }
769
775
  const { collateralTokenAmount } =
@@ -772,12 +778,12 @@ export class VesuExtendedMultiplierStrategy<
772
778
  collateralPrice
773
779
  } = await this.getAssetPrices();
774
780
  const extendedPositon = await extendedAdapter.getAllOpenPositions();
775
- if(!extendedPositon) {
781
+ if (!extendedPositon) {
776
782
  status = false;
777
783
  logger.error("error getting extended position", extendedPositon);
778
784
  return {
779
- calls:calls,
780
- status:status
785
+ calls: calls,
786
+ status: status
781
787
  }
782
788
  }
783
789
  const amountDistributionForWithdrawal =
@@ -793,14 +799,14 @@ export class VesuExtendedMultiplierStrategy<
793
799
  `error calculating amount distribution for withdrawal: ${amountDistributionForWithdrawal}`
794
800
  );
795
801
  return {
796
- calls:calls,
797
- status:status
802
+ calls: calls,
803
+ status: status
798
804
  };
799
805
  }
800
806
  const { vesu_amount, extended_amount } = amountDistributionForWithdrawal;
801
-
807
+
802
808
  if (status && vesu_amount.greaterThan(0)) {
803
- const {calls: vesuCalls, status: vesuStatus} = await this.moveAssets(
809
+ const { calls: vesuCalls, status: vesuStatus } = await this.moveAssets(
804
810
  {
805
811
  amount: vesu_amount,
806
812
  from: Protocols.VESU.name,
@@ -813,7 +819,7 @@ export class VesuExtendedMultiplierStrategy<
813
819
  calls.push(...vesuCalls);
814
820
  }
815
821
  if (status && extended_amount.greaterThan(0)) {
816
- const {calls: extendedCalls, status: extendedStatus} = await this.moveAssets(
822
+ const { calls: extendedCalls, status: extendedStatus } = await this.moveAssets(
817
823
  {
818
824
  amount: extended_amount,
819
825
  from: Protocols.EXTENDED.name,
@@ -823,9 +829,9 @@ export class VesuExtendedMultiplierStrategy<
823
829
  vesuAdapter
824
830
  );
825
831
  status = extendedStatus;
826
- if(status) {
832
+ if (status) {
827
833
  calls.push(...extendedCalls);
828
- }else{
834
+ } else {
829
835
  logger.error("error moving assets to vault: extendedStatus: ${extendedStatus}");
830
836
  return {
831
837
  calls: [],