@strkfarm/sdk 2.0.0-dev.21 → 2.0.0-dev.22

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.
@@ -98553,7 +98553,7 @@ spurious results.`);
98553
98553
  };
98554
98554
  }
98555
98555
  }
98556
- const amountToInvest = new Web3Number(balance.usdValue, USDC_TOKEN_DECIMALS).plus(usdcBalanceOnExtended?.availableForWithdrawal ?? 0).multipliedBy(1 - LIMIT_BALANCE);
98556
+ const amountToInvest = new Web3Number(balance.usdValue, USDC_TOKEN_DECIMALS).plus(usdcBalanceOnExtended?.availableForTrade ?? 0).multipliedBy(1 - LIMIT_BALANCE);
98557
98557
  const amountToInvestNumber = amountToInvest.toNumber();
98558
98558
  if (!Number.isFinite(amountToInvestNumber)) {
98559
98559
  logger2.error(
@@ -98689,17 +98689,17 @@ spurious results.`);
98689
98689
  return [];
98690
98690
  }
98691
98691
  const usdcAmountInWallet = (await this.getUnusedBalance()).amount;
98692
- const usdcAmountOnExtendedAvailableForWithdrawal = parseFloat(
98693
- extendedHoldings.availableForWithdrawal
98692
+ const usdcAmountOnExtendedAvailableForTrade = parseFloat(
98693
+ extendedHoldings.availableForTrade
98694
98694
  );
98695
- logger2.info(`${_VesuExtendedMultiplierStrategy.name}::shouldMoveAssets calculating movements - Extended current: ${usdcAmountOnExtendedAvailableForWithdrawal}, Wallet: ${usdcAmountInWallet.toNumber()}, Target Extended: ${extendedAmount.toNumber()}, Target Vesu: ${vesuAmount.toNumber()}`);
98695
+ logger2.info(`${_VesuExtendedMultiplierStrategy.name}::shouldMoveAssets calculating movements - Extended current: ${usdcAmountOnExtendedAvailableForTrade}, Wallet: ${usdcAmountInWallet.toNumber()}, Target Extended: ${extendedAmount.toNumber()}, Target Vesu: ${vesuAmount.toNumber()}`);
98696
98696
  let totalExtendedWithdrawal = new Web3Number(0, USDC_TOKEN_DECIMALS);
98697
98697
  let totalExtendedDeposit = new Web3Number(0, USDC_TOKEN_DECIMALS);
98698
98698
  if (extendedAmount.isNegative() && extendedAmount.abs().greaterThan(extendedAdapter.minimumExtendedMovementAmount)) {
98699
98699
  totalExtendedWithdrawal = totalExtendedWithdrawal.plus(extendedAmount.abs());
98700
98700
  }
98701
98701
  const extendedTargetAmount = extendedAmount.abs();
98702
- let projectedExtendedBalance = usdcAmountOnExtendedAvailableForWithdrawal;
98702
+ let projectedExtendedBalance = usdcAmountOnExtendedAvailableForTrade;
98703
98703
  if (extendedAmount.isNegative()) {
98704
98704
  projectedExtendedBalance = projectedExtendedBalance - extendedAmount.abs().toNumber();
98705
98705
  }
@@ -98715,7 +98715,6 @@ spurious results.`);
98715
98715
  let vesuAmountDifference = vesuTargetAmount.minus(projectedWalletBalance);
98716
98716
  const vesuAmountDifferenceAbs = vesuAmountDifference.abs();
98717
98717
  logger2.info(`${_VesuExtendedMultiplierStrategy.name}::shouldMoveAssets calculated movements - Extended withdrawal: ${totalExtendedWithdrawal.toNumber()}, Extended deposit: ${totalExtendedDeposit.toNumber()}, Extended diff: ${extendedAmountDifference.toNumber()}, Projected wallet: ${projectedWalletBalance.toNumber()}, Vesu diff: ${vesuAmountDifference.toNumber()}`);
98718
- let calls = [];
98719
98718
  let transactionResults = [];
98720
98719
  if (extendedAmount.isNegative() && extendedAmount.abs().greaterThan(extendedAdapter.minimumExtendedMovementAmount)) {
98721
98720
  try {
@@ -98893,6 +98892,15 @@ spurious results.`);
98893
98892
  }
98894
98893
  return { calls: [], status: false, transactionMetadata: { protocolFrom: "", protocolTo: "", transactionType: "DEPOSIT", usdAmount: "0", status: "FAILED", cycleType } };
98895
98894
  }
98895
+ /**
98896
+ * This method is used to move assets between protocols
98897
+ * @param params - The parameters for the move assets operation
98898
+ * @param extendedAdapter - The extended adapter
98899
+ * @param vesuAdapter - The vesu adapter
98900
+ * @returns The transaction result
98901
+ * If Extended amount is greater than amount of withdrawal from extended, then we need to open a long position
98902
+ * so that the amount of withdrawal from extended is fullfilled
98903
+ */
98896
98904
  async moveAssets(params, extendedAdapter, vesuAdapter) {
98897
98905
  try {
98898
98906
  if (params.amount.lessThanOrEqualTo(0)) {
@@ -98901,23 +98909,6 @@ spurious results.`);
98901
98909
  );
98902
98910
  return this.createTransactionResult([], false, params, "NONE", params.cycleType);
98903
98911
  }
98904
- const amountAbs = params.amount.abs();
98905
- if (params.from === Protocols.EXTENDED.name || params.to === Protocols.EXTENDED.name) {
98906
- if (amountAbs.lessThanOrEqualTo(extendedAdapter.minimumExtendedMovementAmount)) {
98907
- logger2.warn(
98908
- `Amount ${amountAbs.toNumber()} is below minimum Extended movement amount ${extendedAdapter.minimumExtendedMovementAmount}. Skipping operation.`
98909
- );
98910
- return this.createTransactionResult([], false, params, "NONE", params.cycleType);
98911
- }
98912
- }
98913
- if (params.from === Protocols.VESU.name || params.to === Protocols.VESU.name) {
98914
- if (amountAbs.lessThanOrEqualTo(vesuAdapter.minimumVesuMovementAmount)) {
98915
- logger2.warn(
98916
- `Amount ${amountAbs.toNumber()} is below minimum Vesu movement amount ${vesuAdapter.minimumVesuMovementAmount}. Skipping operation.`
98917
- );
98918
- return this.createTransactionResult([], false, params, "NONE", params.cycleType);
98919
- }
98920
- }
98921
98912
  const avnuAdapter = await this.getAvnuAdapter();
98922
98913
  if (!avnuAdapter) {
98923
98914
  logger2.error(`avnu adapter not found: ${avnuAdapter}`);
@@ -98954,9 +98945,22 @@ spurious results.`);
98954
98945
  );
98955
98946
  logger2.info(`${_VesuExtendedMultiplierStrategy.name}::moveAssets extendedHoldingAmount: ${extendedHoldingAmount.toNumber()}`);
98956
98947
  if (params.amount.abs().greaterThan(extendedHoldingAmount)) {
98957
- const leftAmountAfterWithdrawalAmountInAccount = params.amount.abs().minus(extendedHoldingAmount);
98948
+ const leftAmountAfterWithdrawalAmountInAccount = new Web3Number(Math.ceil(params.amount.abs().minus(extendedHoldingAmount).toNumber()), USDC_TOKEN_DECIMALS);
98958
98949
  logger2.info(`${_VesuExtendedMultiplierStrategy.name}::moveAssets leftAmountAfterWithdrawalAmountInAccount: ${leftAmountAfterWithdrawalAmountInAccount.toNumber()}`);
98959
- const btcAmount = leftAmountAfterWithdrawalAmountInAccount.dividedBy(collateralPrice.price);
98950
+ let priceOfBTC;
98951
+ const {
98952
+ ask,
98953
+ bid,
98954
+ status
98955
+ } = await extendedAdapter.fetchOrderBookBTCUSDC();
98956
+ const price = ask.plus(bid).dividedBy(2);
98957
+ if (status) {
98958
+ priceOfBTC = price;
98959
+ } else {
98960
+ logger2.error(`error fetching order book btc usdc: ${status}`);
98961
+ priceOfBTC = collateralPrice.price;
98962
+ }
98963
+ const btcAmount = leftAmountAfterWithdrawalAmountInAccount.dividedBy(priceOfBTC);
98960
98964
  const openLongPosition = btcAmount.multipliedBy(3).greaterThan(MINIMUM_EXTENDED_POSITION_SIZE) ? await extendedAdapter.createOrder(
98961
98965
  extendedLeverage.toString(),
98962
98966
  btcAmount.toNumber(),
@@ -34517,7 +34517,7 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
34517
34517
  };
34518
34518
  }
34519
34519
  }
34520
- const amountToInvest = new Web3Number(balance.usdValue, USDC_TOKEN_DECIMALS).plus(usdcBalanceOnExtended?.availableForWithdrawal ?? 0).multipliedBy(1 - LIMIT_BALANCE);
34520
+ const amountToInvest = new Web3Number(balance.usdValue, USDC_TOKEN_DECIMALS).plus(usdcBalanceOnExtended?.availableForTrade ?? 0).multipliedBy(1 - LIMIT_BALANCE);
34521
34521
  const amountToInvestNumber = amountToInvest.toNumber();
34522
34522
  if (!Number.isFinite(amountToInvestNumber)) {
34523
34523
  logger.error(
@@ -34653,17 +34653,17 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
34653
34653
  return [];
34654
34654
  }
34655
34655
  const usdcAmountInWallet = (await this.getUnusedBalance()).amount;
34656
- const usdcAmountOnExtendedAvailableForWithdrawal = parseFloat(
34657
- extendedHoldings.availableForWithdrawal
34656
+ const usdcAmountOnExtendedAvailableForTrade = parseFloat(
34657
+ extendedHoldings.availableForTrade
34658
34658
  );
34659
- logger.info(`${_VesuExtendedMultiplierStrategy.name}::shouldMoveAssets calculating movements - Extended current: ${usdcAmountOnExtendedAvailableForWithdrawal}, Wallet: ${usdcAmountInWallet.toNumber()}, Target Extended: ${extendedAmount.toNumber()}, Target Vesu: ${vesuAmount.toNumber()}`);
34659
+ logger.info(`${_VesuExtendedMultiplierStrategy.name}::shouldMoveAssets calculating movements - Extended current: ${usdcAmountOnExtendedAvailableForTrade}, Wallet: ${usdcAmountInWallet.toNumber()}, Target Extended: ${extendedAmount.toNumber()}, Target Vesu: ${vesuAmount.toNumber()}`);
34660
34660
  let totalExtendedWithdrawal = new Web3Number(0, USDC_TOKEN_DECIMALS);
34661
34661
  let totalExtendedDeposit = new Web3Number(0, USDC_TOKEN_DECIMALS);
34662
34662
  if (extendedAmount.isNegative() && extendedAmount.abs().greaterThan(extendedAdapter.minimumExtendedMovementAmount)) {
34663
34663
  totalExtendedWithdrawal = totalExtendedWithdrawal.plus(extendedAmount.abs());
34664
34664
  }
34665
34665
  const extendedTargetAmount = extendedAmount.abs();
34666
- let projectedExtendedBalance = usdcAmountOnExtendedAvailableForWithdrawal;
34666
+ let projectedExtendedBalance = usdcAmountOnExtendedAvailableForTrade;
34667
34667
  if (extendedAmount.isNegative()) {
34668
34668
  projectedExtendedBalance = projectedExtendedBalance - extendedAmount.abs().toNumber();
34669
34669
  }
@@ -34679,7 +34679,6 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
34679
34679
  let vesuAmountDifference = vesuTargetAmount.minus(projectedWalletBalance);
34680
34680
  const vesuAmountDifferenceAbs = vesuAmountDifference.abs();
34681
34681
  logger.info(`${_VesuExtendedMultiplierStrategy.name}::shouldMoveAssets calculated movements - Extended withdrawal: ${totalExtendedWithdrawal.toNumber()}, Extended deposit: ${totalExtendedDeposit.toNumber()}, Extended diff: ${extendedAmountDifference.toNumber()}, Projected wallet: ${projectedWalletBalance.toNumber()}, Vesu diff: ${vesuAmountDifference.toNumber()}`);
34682
- let calls = [];
34683
34682
  let transactionResults = [];
34684
34683
  if (extendedAmount.isNegative() && extendedAmount.abs().greaterThan(extendedAdapter.minimumExtendedMovementAmount)) {
34685
34684
  try {
@@ -34857,6 +34856,15 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
34857
34856
  }
34858
34857
  return { calls: [], status: false, transactionMetadata: { protocolFrom: "", protocolTo: "", transactionType: "DEPOSIT", usdAmount: "0", status: "FAILED", cycleType } };
34859
34858
  }
34859
+ /**
34860
+ * This method is used to move assets between protocols
34861
+ * @param params - The parameters for the move assets operation
34862
+ * @param extendedAdapter - The extended adapter
34863
+ * @param vesuAdapter - The vesu adapter
34864
+ * @returns The transaction result
34865
+ * If Extended amount is greater than amount of withdrawal from extended, then we need to open a long position
34866
+ * so that the amount of withdrawal from extended is fullfilled
34867
+ */
34860
34868
  async moveAssets(params, extendedAdapter, vesuAdapter) {
34861
34869
  try {
34862
34870
  if (params.amount.lessThanOrEqualTo(0)) {
@@ -34865,23 +34873,6 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
34865
34873
  );
34866
34874
  return this.createTransactionResult([], false, params, "NONE", params.cycleType);
34867
34875
  }
34868
- const amountAbs = params.amount.abs();
34869
- if (params.from === Protocols.EXTENDED.name || params.to === Protocols.EXTENDED.name) {
34870
- if (amountAbs.lessThanOrEqualTo(extendedAdapter.minimumExtendedMovementAmount)) {
34871
- logger.warn(
34872
- `Amount ${amountAbs.toNumber()} is below minimum Extended movement amount ${extendedAdapter.minimumExtendedMovementAmount}. Skipping operation.`
34873
- );
34874
- return this.createTransactionResult([], false, params, "NONE", params.cycleType);
34875
- }
34876
- }
34877
- if (params.from === Protocols.VESU.name || params.to === Protocols.VESU.name) {
34878
- if (amountAbs.lessThanOrEqualTo(vesuAdapter.minimumVesuMovementAmount)) {
34879
- logger.warn(
34880
- `Amount ${amountAbs.toNumber()} is below minimum Vesu movement amount ${vesuAdapter.minimumVesuMovementAmount}. Skipping operation.`
34881
- );
34882
- return this.createTransactionResult([], false, params, "NONE", params.cycleType);
34883
- }
34884
- }
34885
34876
  const avnuAdapter = await this.getAvnuAdapter();
34886
34877
  if (!avnuAdapter) {
34887
34878
  logger.error(`avnu adapter not found: ${avnuAdapter}`);
@@ -34918,9 +34909,22 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
34918
34909
  );
34919
34910
  logger.info(`${_VesuExtendedMultiplierStrategy.name}::moveAssets extendedHoldingAmount: ${extendedHoldingAmount.toNumber()}`);
34920
34911
  if (params.amount.abs().greaterThan(extendedHoldingAmount)) {
34921
- const leftAmountAfterWithdrawalAmountInAccount = params.amount.abs().minus(extendedHoldingAmount);
34912
+ const leftAmountAfterWithdrawalAmountInAccount = new Web3Number(Math.ceil(params.amount.abs().minus(extendedHoldingAmount).toNumber()), USDC_TOKEN_DECIMALS);
34922
34913
  logger.info(`${_VesuExtendedMultiplierStrategy.name}::moveAssets leftAmountAfterWithdrawalAmountInAccount: ${leftAmountAfterWithdrawalAmountInAccount.toNumber()}`);
34923
- const btcAmount = leftAmountAfterWithdrawalAmountInAccount.dividedBy(collateralPrice.price);
34914
+ let priceOfBTC;
34915
+ const {
34916
+ ask,
34917
+ bid,
34918
+ status
34919
+ } = await extendedAdapter.fetchOrderBookBTCUSDC();
34920
+ const price = ask.plus(bid).dividedBy(2);
34921
+ if (status) {
34922
+ priceOfBTC = price;
34923
+ } else {
34924
+ logger.error(`error fetching order book btc usdc: ${status}`);
34925
+ priceOfBTC = collateralPrice.price;
34926
+ }
34927
+ const btcAmount = leftAmountAfterWithdrawalAmountInAccount.dividedBy(priceOfBTC);
34924
34928
  const openLongPosition = btcAmount.multipliedBy(3).greaterThan(MINIMUM_EXTENDED_POSITION_SIZE) ? await extendedAdapter.createOrder(
34925
34929
  extendedLeverage.toString(),
34926
34930
  btcAmount.toNumber(),
package/dist/index.d.ts CHANGED
@@ -2287,6 +2287,15 @@ declare class VesuExtendedMultiplierStrategy<S extends VesuExtendedStrategySetti
2287
2287
  * Helper method to create transaction result with metadata
2288
2288
  */
2289
2289
  private createTransactionResult;
2290
+ /**
2291
+ * This method is used to move assets between protocols
2292
+ * @param params - The parameters for the move assets operation
2293
+ * @param extendedAdapter - The extended adapter
2294
+ * @param vesuAdapter - The vesu adapter
2295
+ * @returns The transaction result
2296
+ * If Extended amount is greater than amount of withdrawal from extended, then we need to open a long position
2297
+ * so that the amount of withdrawal from extended is fullfilled
2298
+ */
2290
2299
  moveAssets(params: {
2291
2300
  amount: Web3Number;
2292
2301
  from: string;
package/dist/index.js CHANGED
@@ -34674,7 +34674,7 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
34674
34674
  };
34675
34675
  }
34676
34676
  }
34677
- const amountToInvest = new Web3Number(balance.usdValue, USDC_TOKEN_DECIMALS).plus(usdcBalanceOnExtended?.availableForWithdrawal ?? 0).multipliedBy(1 - LIMIT_BALANCE);
34677
+ const amountToInvest = new Web3Number(balance.usdValue, USDC_TOKEN_DECIMALS).plus(usdcBalanceOnExtended?.availableForTrade ?? 0).multipliedBy(1 - LIMIT_BALANCE);
34678
34678
  const amountToInvestNumber = amountToInvest.toNumber();
34679
34679
  if (!Number.isFinite(amountToInvestNumber)) {
34680
34680
  logger.error(
@@ -34810,17 +34810,17 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
34810
34810
  return [];
34811
34811
  }
34812
34812
  const usdcAmountInWallet = (await this.getUnusedBalance()).amount;
34813
- const usdcAmountOnExtendedAvailableForWithdrawal = parseFloat(
34814
- extendedHoldings.availableForWithdrawal
34813
+ const usdcAmountOnExtendedAvailableForTrade = parseFloat(
34814
+ extendedHoldings.availableForTrade
34815
34815
  );
34816
- logger.info(`${_VesuExtendedMultiplierStrategy.name}::shouldMoveAssets calculating movements - Extended current: ${usdcAmountOnExtendedAvailableForWithdrawal}, Wallet: ${usdcAmountInWallet.toNumber()}, Target Extended: ${extendedAmount.toNumber()}, Target Vesu: ${vesuAmount.toNumber()}`);
34816
+ logger.info(`${_VesuExtendedMultiplierStrategy.name}::shouldMoveAssets calculating movements - Extended current: ${usdcAmountOnExtendedAvailableForTrade}, Wallet: ${usdcAmountInWallet.toNumber()}, Target Extended: ${extendedAmount.toNumber()}, Target Vesu: ${vesuAmount.toNumber()}`);
34817
34817
  let totalExtendedWithdrawal = new Web3Number(0, USDC_TOKEN_DECIMALS);
34818
34818
  let totalExtendedDeposit = new Web3Number(0, USDC_TOKEN_DECIMALS);
34819
34819
  if (extendedAmount.isNegative() && extendedAmount.abs().greaterThan(extendedAdapter.minimumExtendedMovementAmount)) {
34820
34820
  totalExtendedWithdrawal = totalExtendedWithdrawal.plus(extendedAmount.abs());
34821
34821
  }
34822
34822
  const extendedTargetAmount = extendedAmount.abs();
34823
- let projectedExtendedBalance = usdcAmountOnExtendedAvailableForWithdrawal;
34823
+ let projectedExtendedBalance = usdcAmountOnExtendedAvailableForTrade;
34824
34824
  if (extendedAmount.isNegative()) {
34825
34825
  projectedExtendedBalance = projectedExtendedBalance - extendedAmount.abs().toNumber();
34826
34826
  }
@@ -34836,7 +34836,6 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
34836
34836
  let vesuAmountDifference = vesuTargetAmount.minus(projectedWalletBalance);
34837
34837
  const vesuAmountDifferenceAbs = vesuAmountDifference.abs();
34838
34838
  logger.info(`${_VesuExtendedMultiplierStrategy.name}::shouldMoveAssets calculated movements - Extended withdrawal: ${totalExtendedWithdrawal.toNumber()}, Extended deposit: ${totalExtendedDeposit.toNumber()}, Extended diff: ${extendedAmountDifference.toNumber()}, Projected wallet: ${projectedWalletBalance.toNumber()}, Vesu diff: ${vesuAmountDifference.toNumber()}`);
34839
- let calls = [];
34840
34839
  let transactionResults = [];
34841
34840
  if (extendedAmount.isNegative() && extendedAmount.abs().greaterThan(extendedAdapter.minimumExtendedMovementAmount)) {
34842
34841
  try {
@@ -35014,6 +35013,15 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
35014
35013
  }
35015
35014
  return { calls: [], status: false, transactionMetadata: { protocolFrom: "", protocolTo: "", transactionType: "DEPOSIT", usdAmount: "0", status: "FAILED", cycleType } };
35016
35015
  }
35016
+ /**
35017
+ * This method is used to move assets between protocols
35018
+ * @param params - The parameters for the move assets operation
35019
+ * @param extendedAdapter - The extended adapter
35020
+ * @param vesuAdapter - The vesu adapter
35021
+ * @returns The transaction result
35022
+ * If Extended amount is greater than amount of withdrawal from extended, then we need to open a long position
35023
+ * so that the amount of withdrawal from extended is fullfilled
35024
+ */
35017
35025
  async moveAssets(params, extendedAdapter, vesuAdapter) {
35018
35026
  try {
35019
35027
  if (params.amount.lessThanOrEqualTo(0)) {
@@ -35022,23 +35030,6 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
35022
35030
  );
35023
35031
  return this.createTransactionResult([], false, params, "NONE", params.cycleType);
35024
35032
  }
35025
- const amountAbs = params.amount.abs();
35026
- if (params.from === Protocols.EXTENDED.name || params.to === Protocols.EXTENDED.name) {
35027
- if (amountAbs.lessThanOrEqualTo(extendedAdapter.minimumExtendedMovementAmount)) {
35028
- logger.warn(
35029
- `Amount ${amountAbs.toNumber()} is below minimum Extended movement amount ${extendedAdapter.minimumExtendedMovementAmount}. Skipping operation.`
35030
- );
35031
- return this.createTransactionResult([], false, params, "NONE", params.cycleType);
35032
- }
35033
- }
35034
- if (params.from === Protocols.VESU.name || params.to === Protocols.VESU.name) {
35035
- if (amountAbs.lessThanOrEqualTo(vesuAdapter.minimumVesuMovementAmount)) {
35036
- logger.warn(
35037
- `Amount ${amountAbs.toNumber()} is below minimum Vesu movement amount ${vesuAdapter.minimumVesuMovementAmount}. Skipping operation.`
35038
- );
35039
- return this.createTransactionResult([], false, params, "NONE", params.cycleType);
35040
- }
35041
- }
35042
35033
  const avnuAdapter = await this.getAvnuAdapter();
35043
35034
  if (!avnuAdapter) {
35044
35035
  logger.error(`avnu adapter not found: ${avnuAdapter}`);
@@ -35075,9 +35066,22 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
35075
35066
  );
35076
35067
  logger.info(`${_VesuExtendedMultiplierStrategy.name}::moveAssets extendedHoldingAmount: ${extendedHoldingAmount.toNumber()}`);
35077
35068
  if (params.amount.abs().greaterThan(extendedHoldingAmount)) {
35078
- const leftAmountAfterWithdrawalAmountInAccount = params.amount.abs().minus(extendedHoldingAmount);
35069
+ const leftAmountAfterWithdrawalAmountInAccount = new Web3Number(Math.ceil(params.amount.abs().minus(extendedHoldingAmount).toNumber()), USDC_TOKEN_DECIMALS);
35079
35070
  logger.info(`${_VesuExtendedMultiplierStrategy.name}::moveAssets leftAmountAfterWithdrawalAmountInAccount: ${leftAmountAfterWithdrawalAmountInAccount.toNumber()}`);
35080
- const btcAmount = leftAmountAfterWithdrawalAmountInAccount.dividedBy(collateralPrice.price);
35071
+ let priceOfBTC;
35072
+ const {
35073
+ ask,
35074
+ bid,
35075
+ status
35076
+ } = await extendedAdapter.fetchOrderBookBTCUSDC();
35077
+ const price = ask.plus(bid).dividedBy(2);
35078
+ if (status) {
35079
+ priceOfBTC = price;
35080
+ } else {
35081
+ logger.error(`error fetching order book btc usdc: ${status}`);
35082
+ priceOfBTC = collateralPrice.price;
35083
+ }
35084
+ const btcAmount = leftAmountAfterWithdrawalAmountInAccount.dividedBy(priceOfBTC);
35081
35085
  const openLongPosition = btcAmount.multipliedBy(3).greaterThan(MINIMUM_EXTENDED_POSITION_SIZE) ? await extendedAdapter.createOrder(
35082
35086
  extendedLeverage.toString(),
35083
35087
  btcAmount.toNumber(),
package/dist/index.mjs CHANGED
@@ -34528,7 +34528,7 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
34528
34528
  };
34529
34529
  }
34530
34530
  }
34531
- const amountToInvest = new Web3Number(balance.usdValue, USDC_TOKEN_DECIMALS).plus(usdcBalanceOnExtended?.availableForWithdrawal ?? 0).multipliedBy(1 - LIMIT_BALANCE);
34531
+ const amountToInvest = new Web3Number(balance.usdValue, USDC_TOKEN_DECIMALS).plus(usdcBalanceOnExtended?.availableForTrade ?? 0).multipliedBy(1 - LIMIT_BALANCE);
34532
34532
  const amountToInvestNumber = amountToInvest.toNumber();
34533
34533
  if (!Number.isFinite(amountToInvestNumber)) {
34534
34534
  logger.error(
@@ -34664,17 +34664,17 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
34664
34664
  return [];
34665
34665
  }
34666
34666
  const usdcAmountInWallet = (await this.getUnusedBalance()).amount;
34667
- const usdcAmountOnExtendedAvailableForWithdrawal = parseFloat(
34668
- extendedHoldings.availableForWithdrawal
34667
+ const usdcAmountOnExtendedAvailableForTrade = parseFloat(
34668
+ extendedHoldings.availableForTrade
34669
34669
  );
34670
- logger.info(`${_VesuExtendedMultiplierStrategy.name}::shouldMoveAssets calculating movements - Extended current: ${usdcAmountOnExtendedAvailableForWithdrawal}, Wallet: ${usdcAmountInWallet.toNumber()}, Target Extended: ${extendedAmount.toNumber()}, Target Vesu: ${vesuAmount.toNumber()}`);
34670
+ logger.info(`${_VesuExtendedMultiplierStrategy.name}::shouldMoveAssets calculating movements - Extended current: ${usdcAmountOnExtendedAvailableForTrade}, Wallet: ${usdcAmountInWallet.toNumber()}, Target Extended: ${extendedAmount.toNumber()}, Target Vesu: ${vesuAmount.toNumber()}`);
34671
34671
  let totalExtendedWithdrawal = new Web3Number(0, USDC_TOKEN_DECIMALS);
34672
34672
  let totalExtendedDeposit = new Web3Number(0, USDC_TOKEN_DECIMALS);
34673
34673
  if (extendedAmount.isNegative() && extendedAmount.abs().greaterThan(extendedAdapter.minimumExtendedMovementAmount)) {
34674
34674
  totalExtendedWithdrawal = totalExtendedWithdrawal.plus(extendedAmount.abs());
34675
34675
  }
34676
34676
  const extendedTargetAmount = extendedAmount.abs();
34677
- let projectedExtendedBalance = usdcAmountOnExtendedAvailableForWithdrawal;
34677
+ let projectedExtendedBalance = usdcAmountOnExtendedAvailableForTrade;
34678
34678
  if (extendedAmount.isNegative()) {
34679
34679
  projectedExtendedBalance = projectedExtendedBalance - extendedAmount.abs().toNumber();
34680
34680
  }
@@ -34690,7 +34690,6 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
34690
34690
  let vesuAmountDifference = vesuTargetAmount.minus(projectedWalletBalance);
34691
34691
  const vesuAmountDifferenceAbs = vesuAmountDifference.abs();
34692
34692
  logger.info(`${_VesuExtendedMultiplierStrategy.name}::shouldMoveAssets calculated movements - Extended withdrawal: ${totalExtendedWithdrawal.toNumber()}, Extended deposit: ${totalExtendedDeposit.toNumber()}, Extended diff: ${extendedAmountDifference.toNumber()}, Projected wallet: ${projectedWalletBalance.toNumber()}, Vesu diff: ${vesuAmountDifference.toNumber()}`);
34693
- let calls = [];
34694
34693
  let transactionResults = [];
34695
34694
  if (extendedAmount.isNegative() && extendedAmount.abs().greaterThan(extendedAdapter.minimumExtendedMovementAmount)) {
34696
34695
  try {
@@ -34868,6 +34867,15 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
34868
34867
  }
34869
34868
  return { calls: [], status: false, transactionMetadata: { protocolFrom: "", protocolTo: "", transactionType: "DEPOSIT", usdAmount: "0", status: "FAILED", cycleType } };
34870
34869
  }
34870
+ /**
34871
+ * This method is used to move assets between protocols
34872
+ * @param params - The parameters for the move assets operation
34873
+ * @param extendedAdapter - The extended adapter
34874
+ * @param vesuAdapter - The vesu adapter
34875
+ * @returns The transaction result
34876
+ * If Extended amount is greater than amount of withdrawal from extended, then we need to open a long position
34877
+ * so that the amount of withdrawal from extended is fullfilled
34878
+ */
34871
34879
  async moveAssets(params, extendedAdapter, vesuAdapter) {
34872
34880
  try {
34873
34881
  if (params.amount.lessThanOrEqualTo(0)) {
@@ -34876,23 +34884,6 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
34876
34884
  );
34877
34885
  return this.createTransactionResult([], false, params, "NONE", params.cycleType);
34878
34886
  }
34879
- const amountAbs = params.amount.abs();
34880
- if (params.from === Protocols.EXTENDED.name || params.to === Protocols.EXTENDED.name) {
34881
- if (amountAbs.lessThanOrEqualTo(extendedAdapter.minimumExtendedMovementAmount)) {
34882
- logger.warn(
34883
- `Amount ${amountAbs.toNumber()} is below minimum Extended movement amount ${extendedAdapter.minimumExtendedMovementAmount}. Skipping operation.`
34884
- );
34885
- return this.createTransactionResult([], false, params, "NONE", params.cycleType);
34886
- }
34887
- }
34888
- if (params.from === Protocols.VESU.name || params.to === Protocols.VESU.name) {
34889
- if (amountAbs.lessThanOrEqualTo(vesuAdapter.minimumVesuMovementAmount)) {
34890
- logger.warn(
34891
- `Amount ${amountAbs.toNumber()} is below minimum Vesu movement amount ${vesuAdapter.minimumVesuMovementAmount}. Skipping operation.`
34892
- );
34893
- return this.createTransactionResult([], false, params, "NONE", params.cycleType);
34894
- }
34895
- }
34896
34887
  const avnuAdapter = await this.getAvnuAdapter();
34897
34888
  if (!avnuAdapter) {
34898
34889
  logger.error(`avnu adapter not found: ${avnuAdapter}`);
@@ -34929,9 +34920,22 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
34929
34920
  );
34930
34921
  logger.info(`${_VesuExtendedMultiplierStrategy.name}::moveAssets extendedHoldingAmount: ${extendedHoldingAmount.toNumber()}`);
34931
34922
  if (params.amount.abs().greaterThan(extendedHoldingAmount)) {
34932
- const leftAmountAfterWithdrawalAmountInAccount = params.amount.abs().minus(extendedHoldingAmount);
34923
+ const leftAmountAfterWithdrawalAmountInAccount = new Web3Number(Math.ceil(params.amount.abs().minus(extendedHoldingAmount).toNumber()), USDC_TOKEN_DECIMALS);
34933
34924
  logger.info(`${_VesuExtendedMultiplierStrategy.name}::moveAssets leftAmountAfterWithdrawalAmountInAccount: ${leftAmountAfterWithdrawalAmountInAccount.toNumber()}`);
34934
- const btcAmount = leftAmountAfterWithdrawalAmountInAccount.dividedBy(collateralPrice.price);
34925
+ let priceOfBTC;
34926
+ const {
34927
+ ask,
34928
+ bid,
34929
+ status
34930
+ } = await extendedAdapter.fetchOrderBookBTCUSDC();
34931
+ const price = ask.plus(bid).dividedBy(2);
34932
+ if (status) {
34933
+ priceOfBTC = price;
34934
+ } else {
34935
+ logger.error(`error fetching order book btc usdc: ${status}`);
34936
+ priceOfBTC = collateralPrice.price;
34937
+ }
34938
+ const btcAmount = leftAmountAfterWithdrawalAmountInAccount.dividedBy(priceOfBTC);
34935
34939
  const openLongPosition = btcAmount.multipliedBy(3).greaterThan(MINIMUM_EXTENDED_POSITION_SIZE) ? await extendedAdapter.createOrder(
34936
34940
  extendedLeverage.toString(),
34937
34941
  btcAmount.toNumber(),
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@strkfarm/sdk",
3
- "version": "2.0.0-dev.21",
3
+ "version": "2.0.0-dev.22",
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",
@@ -335,7 +335,7 @@ export class VesuExtendedMultiplierStrategy<
335
335
  }
336
336
 
337
337
  /** The LIMIT_BALANCE is the bffer amount to keep in the investing Cycle */
338
- const amountToInvest = new Web3Number(balance.usdValue, USDC_TOKEN_DECIMALS).plus(usdcBalanceOnExtended?.availableForWithdrawal ?? 0).multipliedBy(1 - LIMIT_BALANCE);
338
+ const amountToInvest = new Web3Number(balance.usdValue, USDC_TOKEN_DECIMALS).plus(usdcBalanceOnExtended?.availableForTrade ?? 0).multipliedBy(1 - LIMIT_BALANCE);
339
339
 
340
340
 
341
341
  const amountToInvestNumber = amountToInvest.toNumber();
@@ -488,11 +488,14 @@ export class VesuExtendedMultiplierStrategy<
488
488
  return [];
489
489
  }
490
490
  const usdcAmountInWallet = (await this.getUnusedBalance()).amount;
491
- const usdcAmountOnExtendedAvailableForWithdrawal = parseFloat(
492
- extendedHoldings.availableForWithdrawal
491
+ /**
492
+ * Trade is the correct metric, since we can close position for some vesu amount, otherwise underutilisation of funds will be a huge issue
493
+ */
494
+ const usdcAmountOnExtendedAvailableForTrade = parseFloat(
495
+ extendedHoldings.availableForTrade
493
496
  );
494
497
 
495
- logger.info(`${VesuExtendedMultiplierStrategy.name}::shouldMoveAssets calculating movements - Extended current: ${usdcAmountOnExtendedAvailableForWithdrawal}, Wallet: ${usdcAmountInWallet.toNumber()}, Target Extended: ${extendedAmount.toNumber()}, Target Vesu: ${vesuAmount.toNumber()}`);
498
+ logger.info(`${VesuExtendedMultiplierStrategy.name}::shouldMoveAssets calculating movements - Extended current: ${usdcAmountOnExtendedAvailableForTrade}, Wallet: ${usdcAmountInWallet.toNumber()}, Target Extended: ${extendedAmount.toNumber()}, Target Vesu: ${vesuAmount.toNumber()}`);
496
499
 
497
500
  let totalExtendedWithdrawal = new Web3Number(0, USDC_TOKEN_DECIMALS);
498
501
  let totalExtendedDeposit = new Web3Number(0, USDC_TOKEN_DECIMALS);
@@ -505,7 +508,7 @@ export class VesuExtendedMultiplierStrategy<
505
508
  // If extendedAmount was negative, we've already accounted for that withdrawal
506
509
  // So we calculate based on what Extended will be after that withdrawal
507
510
  const extendedTargetAmount = extendedAmount.abs(); // Use absolute value as target
508
- let projectedExtendedBalance = usdcAmountOnExtendedAvailableForWithdrawal;
511
+ let projectedExtendedBalance = usdcAmountOnExtendedAvailableForTrade;
509
512
 
510
513
  if (extendedAmount.isNegative()) {
511
514
  projectedExtendedBalance = projectedExtendedBalance - extendedAmount.abs().toNumber();
@@ -530,7 +533,6 @@ export class VesuExtendedMultiplierStrategy<
530
533
  const vesuAmountDifferenceAbs = vesuAmountDifference.abs();
531
534
 
532
535
  logger.info(`${VesuExtendedMultiplierStrategy.name}::shouldMoveAssets calculated movements - Extended withdrawal: ${totalExtendedWithdrawal.toNumber()}, Extended deposit: ${totalExtendedDeposit.toNumber()}, Extended diff: ${extendedAmountDifference.toNumber()}, Projected wallet: ${projectedWalletBalance.toNumber()}, Vesu diff: ${vesuAmountDifference.toNumber()}`);
533
- let calls: Call[] = [];
534
536
  let transactionResults: TransactionResult[] = [];
535
537
 
536
538
  // Handle negative extendedAmount (initial withdrawal needed)
@@ -690,7 +692,6 @@ export class VesuExtendedMultiplierStrategy<
690
692
  }
691
693
  }
692
694
  }
693
-
694
695
  return transactionResults;
695
696
  } catch (err) {
696
697
  logger.error(`Failed moving assets to vesu: ${err}`);
@@ -725,6 +726,15 @@ export class VesuExtendedMultiplierStrategy<
725
726
  return { calls: [], status: false, transactionMetadata: { protocolFrom: '', protocolTo: '', transactionType: 'DEPOSIT', usdAmount: '0', status: 'FAILED', cycleType: cycleType } };
726
727
  }
727
728
 
729
+ /**
730
+ * This method is used to move assets between protocols
731
+ * @param params - The parameters for the move assets operation
732
+ * @param extendedAdapter - The extended adapter
733
+ * @param vesuAdapter - The vesu adapter
734
+ * @returns The transaction result
735
+ * If Extended amount is greater than amount of withdrawal from extended, then we need to open a long position
736
+ * so that the amount of withdrawal from extended is fullfilled
737
+ */
728
738
  async moveAssets(
729
739
  params: {
730
740
  amount: Web3Number;
@@ -745,23 +755,23 @@ export class VesuExtendedMultiplierStrategy<
745
755
  }
746
756
 
747
757
  // Check minimum movement amounts before starting operations
748
- const amountAbs = params.amount.abs();
749
- if (params.from === Protocols.EXTENDED.name || params.to === Protocols.EXTENDED.name) {
750
- if (amountAbs.lessThanOrEqualTo(extendedAdapter.minimumExtendedMovementAmount)) {
751
- logger.warn(
752
- `Amount ${amountAbs.toNumber()} is below minimum Extended movement amount ${extendedAdapter.minimumExtendedMovementAmount}. Skipping operation.`
753
- );
754
- return this.createTransactionResult([], false, params, "NONE", params.cycleType);
755
- }
756
- }
757
- if (params.from === Protocols.VESU.name || params.to === Protocols.VESU.name) {
758
- if (amountAbs.lessThanOrEqualTo(vesuAdapter.minimumVesuMovementAmount)) {
759
- logger.warn(
760
- `Amount ${amountAbs.toNumber()} is below minimum Vesu movement amount ${vesuAdapter.minimumVesuMovementAmount}. Skipping operation.`
761
- );
762
- return this.createTransactionResult([], false, params, "NONE", params.cycleType);
763
- }
764
- }
758
+ // const amountAbs = params.amount.abs();
759
+ // if (params.from === Protocols.EXTENDED.name || params.to === Protocols.EXTENDED.name) {
760
+ // if (amountAbs.lessThanOrEqualTo(extendedAdapter.minimumExtendedMovementAmount)) {
761
+ // logger.warn(
762
+ // `Amount ${amountAbs.toNumber()} is below minimum Extended movement amount ${extendedAdapter.minimumExtendedMovementAmount}. Skipping operation.`
763
+ // );
764
+ // return this.createTransactionResult([], false, params, "NONE", params.cycleType);
765
+ // }
766
+ // }
767
+ // if (params.from === Protocols.VESU.name || params.to === Protocols.VESU.name) {
768
+ // if (amountAbs.lessThanOrEqualTo(vesuAdapter.minimumVesuMovementAmount)) {
769
+ // logger.warn(
770
+ // `Amount ${amountAbs.toNumber()} is below minimum Vesu movement amount ${vesuAdapter.minimumVesuMovementAmount}. Skipping operation.`
771
+ // );
772
+ // return this.createTransactionResult([], false, params, "NONE", params.cycleType);
773
+ // }
774
+ // }
765
775
 
766
776
  const avnuAdapter = await this.getAvnuAdapter();
767
777
  if (!avnuAdapter) {
@@ -787,7 +797,8 @@ export class VesuExtendedMultiplierStrategy<
787
797
  );
788
798
  calls.push(call);
789
799
  return this.createTransactionResult(calls, true, params, "DEPOSIT", params.cycleType);
790
- } else if (params.to === Protocols.VAULT.name && params.from === Protocols.EXTENDED.name) {
800
+ }
801
+ else if (params.to === Protocols.VAULT.name && params.from === Protocols.EXTENDED.name) {
791
802
  const extendedLeverage = calculateExtendedLevergae();
792
803
  const extendedHoldings = await extendedAdapter.getExtendedDepositAmount();
793
804
  if (!extendedHoldings) {
@@ -800,9 +811,26 @@ export class VesuExtendedMultiplierStrategy<
800
811
  );
801
812
  logger.info(`${VesuExtendedMultiplierStrategy.name}::moveAssets extendedHoldingAmount: ${extendedHoldingAmount.toNumber()}`);
802
813
  if (params.amount.abs().greaterThan(extendedHoldingAmount)) {
803
- const leftAmountAfterWithdrawalAmountInAccount = params.amount.abs().minus(extendedHoldingAmount);
814
+ const leftAmountAfterWithdrawalAmountInAccount = new Web3Number(Math.ceil(params.amount.abs().minus(extendedHoldingAmount).toNumber()), USDC_TOKEN_DECIMALS);
804
815
  logger.info(`${VesuExtendedMultiplierStrategy.name}::moveAssets leftAmountAfterWithdrawalAmountInAccount: ${leftAmountAfterWithdrawalAmountInAccount.toNumber()}`);
805
- const btcAmount = leftAmountAfterWithdrawalAmountInAccount.dividedBy(collateralPrice.price);
816
+ let priceOfBTC;
817
+ const {
818
+ ask,
819
+ bid,
820
+ status
821
+ } = await extendedAdapter.fetchOrderBookBTCUSDC();
822
+ const price = ask.plus(bid).dividedBy(2);
823
+ if (status) {
824
+ priceOfBTC = price;
825
+ } else {
826
+ logger.error(`error fetching order book btc usdc: ${status}`);
827
+ priceOfBTC = collateralPrice.price;
828
+ }
829
+ const btcAmount = leftAmountAfterWithdrawalAmountInAccount.dividedBy(priceOfBTC);
830
+ /**
831
+ * If amount for withdrawal is greater than the amount in extended available for withdrawal,
832
+ * then we need to open a long position depending on the difference between the two
833
+ */
806
834
  const openLongPosition = btcAmount.multipliedBy(3).greaterThan(MINIMUM_EXTENDED_POSITION_SIZE) ? await extendedAdapter.createOrder(
807
835
  extendedLeverage.toString(),
808
836
  btcAmount.toNumber(),
@@ -856,6 +884,7 @@ export class VesuExtendedMultiplierStrategy<
856
884
  return this.createTransactionResult([], false, params, "NONE", params.cycleType);
857
885
  }
858
886
  } else if (params.to === Protocols.VAULT.name && params.from === Protocols.VESU.name) {
887
+
859
888
  const isPriceDifferenceBetweenAvnuAndExtended = await this.checkPriceDifferenceBetweenAvnuAndExtended(extendedAdapter, vesuAdapter, avnuAdapter, PositionTypeAvnuExtended.CLOSE);
860
889
  if (!isPriceDifferenceBetweenAvnuAndExtended) {
861
890
  logger.warn(`price difference between avnu and extended doesn't fit the range for close position, ${avnuAdapter.config.maximumExtendedPriceDifferenceForSwapClosing}`);
@@ -882,7 +911,10 @@ export class VesuExtendedMultiplierStrategy<
882
911
  );
883
912
  calls.push(swapCall);
884
913
  return this.createTransactionResult(calls, true, params, "WITHDRAWAL", params.cycleType);
885
- } else if (params.to === Protocols.EXTENDED.name && params.from === Protocols.VESU.name) {
914
+
915
+ }
916
+ else if (params.to === Protocols.EXTENDED.name && params.from === Protocols.VESU.name) {
917
+
886
918
  const isPriceDifferenceBetweenAvnuAndExtended = await this.checkPriceDifferenceBetweenAvnuAndExtended(extendedAdapter, vesuAdapter, avnuAdapter, PositionTypeAvnuExtended.CLOSE);
887
919
  if (!isPriceDifferenceBetweenAvnuAndExtended) {
888
920
  logger.warn(`price difference between avnu and extended doesn't fit the range for close position, ${avnuAdapter.config.maximumExtendedPriceDifferenceForSwapClosing}`);
@@ -922,6 +954,7 @@ export class VesuExtendedMultiplierStrategy<
922
954
  }
923
955
  logger.error(`Unsupported assets movement: ${params.from} to ${params.to}`);
924
956
  return this.createTransactionResult([], false, params, "NONE", params.cycleType);
957
+
925
958
  } catch (err) {
926
959
  logger.error(`error moving assets: ${err}`);
927
960
  return this.createTransactionResult([], false, params, "NONE", params.cycleType);