@strkfarm/sdk 2.0.0-dev.14 → 2.0.0-dev.16

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.mjs CHANGED
@@ -27065,11 +27065,6 @@ var VesuAdapter = class _VesuAdapter extends CacheClass {
27065
27065
  if (!this.pricer) {
27066
27066
  throw new Error("Pricer is not initialized");
27067
27067
  }
27068
- const CACHE_KEY = `positions_${blockNumber}_${this.config.poolId.shortString()}_${this.config.collateral.symbol}_${this.config.debt.symbol}`;
27069
- const cacheData = this.getCache(CACHE_KEY);
27070
- if (cacheData) {
27071
- return cacheData;
27072
- }
27073
27068
  const { contract, isV2 } = this.getVesuSingletonContract(config, this.config.poolId);
27074
27069
  const output = await contract.call(isV2 ? "position" : "position_unsafe", [
27075
27070
  ...isV2 ? [] : [this.config.poolId.address],
@@ -27095,7 +27090,6 @@ var VesuAdapter = class _VesuAdapter extends CacheClass {
27095
27090
  usdValue: debtAmount.multipliedBy(token2Price.price).toNumber(),
27096
27091
  remarks: "Debt"
27097
27092
  }];
27098
- this.setCache(CACHE_KEY, value, 6e4);
27099
27093
  return value.map((v) => ({ ...v, protocol: Protocols.VESU }));
27100
27094
  }
27101
27095
  async getCollateralization(config, blockNumber = "latest") {
@@ -29962,26 +29956,38 @@ var ExtendedAdapter = class _ExtendedAdapter extends BaseAdapter {
29962
29956
  try {
29963
29957
  if (!this.client) {
29964
29958
  logger.error("Client not initialized");
29965
- return false;
29959
+ return {
29960
+ status: false,
29961
+ receivedTxnHash: false
29962
+ };
29966
29963
  }
29967
29964
  if (amount.lessThanOrEqualTo(0)) {
29968
29965
  logger.error(
29969
29966
  `Invalid withdrawal amount: ${amount.toNumber()}. Amount must be positive.`
29970
29967
  );
29971
- return false;
29968
+ return {
29969
+ status: false,
29970
+ receivedTxnHash: false
29971
+ };
29972
29972
  }
29973
29973
  if (amount.lessThanOrEqualTo(this.minimumExtendedMovementAmount)) {
29974
29974
  logger.warn(
29975
29975
  `Withdrawal amount ${amount.toNumber()} is below minimum Extended movement amount ${this.minimumExtendedMovementAmount}. Skipping withdrawal.`
29976
29976
  );
29977
- return false;
29977
+ return {
29978
+ status: false,
29979
+ receivedTxnHash: false
29980
+ };
29978
29981
  }
29979
29982
  const holdings = await this.getExtendedDepositAmount();
29980
29983
  if (!holdings) {
29981
29984
  logger.error(
29982
29985
  "Cannot get holdings - unable to validate withdrawal amount"
29983
29986
  );
29984
- return false;
29987
+ return {
29988
+ status: false,
29989
+ receivedTxnHash: false
29990
+ };
29985
29991
  }
29986
29992
  const availableForWithdrawal = parseFloat(
29987
29993
  holdings.availableForWithdrawal
@@ -29990,14 +29996,20 @@ var ExtendedAdapter = class _ExtendedAdapter extends BaseAdapter {
29990
29996
  logger.error(
29991
29997
  `Invalid availableForWithdrawal: ${holdings.availableForWithdrawal}. Expected a finite, non-negative number.`
29992
29998
  );
29993
- return false;
29999
+ return {
30000
+ status: false,
30001
+ receivedTxnHash: false
30002
+ };
29994
30003
  }
29995
30004
  const withdrawalAmount = amount.toNumber();
29996
30005
  if (withdrawalAmount > availableForWithdrawal) {
29997
30006
  logger.error(
29998
30007
  `Withdrawal amount ${withdrawalAmount} exceeds available balance ${availableForWithdrawal}`
29999
30008
  );
30000
- return false;
30009
+ return {
30010
+ status: false,
30011
+ receivedTxnHash: false
30012
+ };
30001
30013
  }
30002
30014
  logger.info(
30003
30015
  `Withdrawing ${withdrawalAmount} from Extended. Available balance: ${availableForWithdrawal}`
@@ -30010,15 +30022,24 @@ var ExtendedAdapter = class _ExtendedAdapter extends BaseAdapter {
30010
30022
  withdrawalRequest.data,
30011
30023
  "WITHDRAWAL" /* WITHDRAWAL */
30012
30024
  );
30013
- return withdrawalStatus;
30025
+ return {
30026
+ status: true,
30027
+ receivedTxnHash: withdrawalStatus
30028
+ };
30014
30029
  }
30015
30030
  logger.error(
30016
30031
  `Withdrawal request failed with status: ${withdrawalRequest.status}`
30017
30032
  );
30018
- return false;
30033
+ return {
30034
+ status: false,
30035
+ receivedTxnHash: false
30036
+ };
30019
30037
  } catch (error) {
30020
30038
  logger.error(`Error creating Withdraw Call: ${error}`);
30021
- return false;
30039
+ return {
30040
+ status: false,
30041
+ receivedTxnHash: false
30042
+ };
30022
30043
  }
30023
30044
  }
30024
30045
  async getHealthFactor() {
@@ -34371,10 +34392,16 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
34371
34392
  proofGroups,
34372
34393
  await proofsInfo.callConstructor({ amount })
34373
34394
  );
34374
- return [approveCall, transferCall, call];
34395
+ return {
34396
+ calls: [approveCall, transferCall, call],
34397
+ status: true
34398
+ };
34375
34399
  } catch (err) {
34376
34400
  logger.error(`error moving assets to vault allocator: ${err}`);
34377
- return [];
34401
+ return {
34402
+ calls: [],
34403
+ status: false
34404
+ };
34378
34405
  }
34379
34406
  }
34380
34407
  async shouldInvest() {
@@ -34623,9 +34650,10 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
34623
34650
  const vesuAmountDifferenceAbs = vesuAmountDifference.abs();
34624
34651
  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()}`);
34625
34652
  let calls = [];
34653
+ let transactionResults = [];
34626
34654
  if (extendedAmount.isNegative() && extendedAmount.abs().greaterThan(extendedAdapter.minimumExtendedMovementAmount)) {
34627
34655
  try {
34628
- const { calls: extendedCalls, status: extendedStatus } = await this.moveAssets(
34656
+ const { calls: extendedCalls, status: extendedStatus, transactionMetadata: extendedTransactionMetadata } = await this.moveAssets(
34629
34657
  {
34630
34658
  to: Protocols.VAULT.name,
34631
34659
  from: Protocols.EXTENDED.name,
@@ -34635,17 +34663,25 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
34635
34663
  vesuAdapter
34636
34664
  );
34637
34665
  if (extendedStatus) {
34638
- calls.push(...extendedCalls);
34666
+ transactionResults.push({
34667
+ status: extendedStatus,
34668
+ calls: extendedCalls,
34669
+ transactionMetadata: {
34670
+ ...extendedTransactionMetadata,
34671
+ transactionType: "DEPOSIT"
34672
+ }
34673
+ });
34639
34674
  } else {
34640
- return [];
34675
+ return [this.createTransactionResult([], false, { from: Protocols.EXTENDED.name, to: Protocols.VAULT.name, amount: extendedAmount.abs() }, "NONE")];
34641
34676
  }
34642
34677
  } catch (err) {
34643
34678
  logger.error(`Failed moving assets to vault: ${err}`);
34679
+ return [this.createTransactionResult([], false, { from: Protocols.EXTENDED.name, to: Protocols.VAULT.name, amount: extendedAmount.abs() }, "NONE")];
34644
34680
  }
34645
34681
  }
34646
34682
  if (vesuAmount.isNegative() && vesuAmount.abs().greaterThan(vesuAdapter.minimumVesuMovementAmount)) {
34647
34683
  try {
34648
- const { calls: vesuCalls, status: vesuStatus } = await this.moveAssets(
34684
+ const { calls: vesuCalls, status: vesuStatus, transactionMetadata: vesuTransactionMetadata } = await this.moveAssets(
34649
34685
  {
34650
34686
  to: Protocols.EXTENDED.name,
34651
34687
  from: Protocols.VESU.name,
@@ -34654,18 +34690,26 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
34654
34690
  extendedAdapter,
34655
34691
  vesuAdapter
34656
34692
  );
34657
- calls.push(...vesuCalls);
34658
34693
  if (!vesuStatus) {
34659
- return [];
34660
- }
34694
+ return [this.createTransactionResult([], false, { from: Protocols.VESU.name, to: Protocols.EXTENDED.name, amount: vesuAmount.abs() }, "NONE")];
34695
+ }
34696
+ transactionResults.push({
34697
+ status: vesuStatus,
34698
+ calls: vesuCalls,
34699
+ transactionMetadata: {
34700
+ ...vesuTransactionMetadata,
34701
+ transactionType: "DEPOSIT"
34702
+ }
34703
+ });
34661
34704
  } catch (err) {
34662
- logger.error(`Failed moving assets to vault: ${err}`);
34705
+ logger.error(`Failed moving assets to extended via vault allocator: ${err}`);
34706
+ return [this.createTransactionResult([], false, { from: Protocols.VESU.name, to: Protocols.EXTENDED.name, amount: vesuAmount.abs() }, "NONE")];
34663
34707
  }
34664
34708
  }
34665
34709
  if (extendedAmountDifferenceAbs.greaterThan(extendedAdapter.minimumExtendedMovementAmount)) {
34666
34710
  if (extendedAmountDifference.greaterThan(0)) {
34667
34711
  try {
34668
- const { calls: extendedCalls, status: extendedStatus } = await this.moveAssets(
34712
+ const { calls: extendedCalls, status: extendedStatus, transactionMetadata: extendedTransactionMetadata } = await this.moveAssets(
34669
34713
  {
34670
34714
  to: Protocols.EXTENDED.name,
34671
34715
  from: Protocols.VAULT.name,
@@ -34675,18 +34719,22 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
34675
34719
  vesuAdapter
34676
34720
  );
34677
34721
  if (extendedStatus) {
34678
- calls.push(...extendedCalls);
34722
+ transactionResults.push({
34723
+ status: extendedStatus,
34724
+ calls: extendedCalls,
34725
+ transactionMetadata: extendedTransactionMetadata
34726
+ });
34679
34727
  } else {
34680
34728
  logger.error(`Failed to move assets to extended - operation returned false status`);
34681
- return [];
34729
+ return [this.createTransactionResult([], false, { from: Protocols.VAULT.name, to: Protocols.EXTENDED.name, amount: extendedAmountDifference }, "NONE")];
34682
34730
  }
34683
34731
  } catch (err) {
34684
34732
  logger.error(`Failed moving assets to extended: ${err}`);
34685
- return [];
34733
+ return [this.createTransactionResult([], false, { from: Protocols.VAULT.name, to: Protocols.EXTENDED.name, amount: extendedAmountDifference }, "NONE")];
34686
34734
  }
34687
34735
  } else if (extendedAmountDifference.lessThan(0)) {
34688
34736
  try {
34689
- const { calls: extendedCalls, status: extendedStatus } = await this.moveAssets(
34737
+ const { calls: extendedCalls, status: extendedStatus, transactionMetadata: extendedTransactionMetadata } = await this.moveAssets(
34690
34738
  {
34691
34739
  to: Protocols.VAULT.name,
34692
34740
  from: Protocols.EXTENDED.name,
@@ -34696,14 +34744,21 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
34696
34744
  vesuAdapter
34697
34745
  );
34698
34746
  if (extendedStatus) {
34699
- calls.push(...extendedCalls);
34747
+ transactionResults.push({
34748
+ status: extendedStatus,
34749
+ calls: extendedCalls,
34750
+ transactionMetadata: {
34751
+ ...extendedTransactionMetadata,
34752
+ transactionType: "DEPOSIT"
34753
+ }
34754
+ });
34700
34755
  } else {
34701
34756
  logger.error(`Failed to withdraw from extended - operation returned false status`);
34702
- return [];
34757
+ return [this.createTransactionResult([], false, { from: Protocols.EXTENDED.name, to: Protocols.VAULT.name, amount: extendedAmountDifferenceAbs }, "NONE")];
34703
34758
  }
34704
34759
  } catch (err) {
34705
34760
  logger.error(`Failed moving assets from extended to vault: ${err}`);
34706
- return [];
34761
+ return [this.createTransactionResult([], false, { from: Protocols.EXTENDED.name, to: Protocols.VAULT.name, amount: extendedAmountDifferenceAbs }, "NONE")];
34707
34762
  }
34708
34763
  }
34709
34764
  }
@@ -34714,7 +34769,7 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
34714
34769
  );
34715
34770
  } else {
34716
34771
  try {
34717
- const { calls: vesuCalls, status: vesuStatus } = await this.moveAssets(
34772
+ const { calls: vesuCalls, status: vesuStatus, transactionMetadata: vesuTransactionMetadata } = await this.moveAssets(
34718
34773
  {
34719
34774
  to: Protocols.VAULT.name,
34720
34775
  from: Protocols.EXTENDED.name,
@@ -34725,31 +34780,54 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
34725
34780
  );
34726
34781
  if (!vesuStatus) {
34727
34782
  logger.error(`Failed to move assets to vesu - operation returned false status`);
34728
- return [];
34783
+ return [this.createTransactionResult([], false, { from: Protocols.EXTENDED.name, to: Protocols.VAULT.name, amount: vesuAmountDifference }, "NONE")];
34729
34784
  }
34730
- calls.push(...vesuCalls);
34785
+ transactionResults.push({
34786
+ status: vesuStatus,
34787
+ calls: vesuCalls,
34788
+ transactionMetadata: {
34789
+ ...vesuTransactionMetadata,
34790
+ transactionType: "DEPOSIT"
34791
+ }
34792
+ });
34731
34793
  } catch (err) {
34732
34794
  logger.error(`Failed moving assets to vault: ${err}`);
34733
- return [];
34795
+ return [this.createTransactionResult([], false, { from: Protocols.EXTENDED.name, to: Protocols.VAULT.name, amount: vesuAmountDifference }, "NONE")];
34734
34796
  }
34735
34797
  }
34736
34798
  }
34737
- return calls;
34799
+ return transactionResults;
34738
34800
  } catch (err) {
34739
34801
  logger.error(`Failed moving assets to vesu: ${err}`);
34740
- return [];
34802
+ return [this.createTransactionResult([], false, { from: Protocols.EXTENDED.name, to: Protocols.VAULT.name, amount: new Web3Number(0, USDC_TOKEN_DECIMALS) }, "NONE")];
34741
34803
  }
34742
34804
  }
34805
+ /**
34806
+ * Helper method to create transaction result with metadata
34807
+ */
34808
+ createTransactionResult(calls, status, params, transactionType) {
34809
+ if (status) {
34810
+ return {
34811
+ calls,
34812
+ status,
34813
+ transactionMetadata: {
34814
+ protocolFrom: params.from,
34815
+ protocolTo: params.to,
34816
+ transactionType,
34817
+ usdAmount: params.amount.abs().toFixed(),
34818
+ status: "PENDING"
34819
+ }
34820
+ };
34821
+ }
34822
+ return { calls: [], status: false, transactionMetadata: { protocolFrom: "", protocolTo: "", transactionType: "DEPOSIT", usdAmount: "0", status: "FAILED" } };
34823
+ }
34743
34824
  async moveAssets(params, extendedAdapter, vesuAdapter) {
34744
34825
  try {
34745
34826
  if (params.amount.lessThanOrEqualTo(0)) {
34746
34827
  logger.error(
34747
34828
  `Invalid amount for moveAssets: ${params.amount.toNumber()}. Amount must be positive.`
34748
34829
  );
34749
- return {
34750
- calls: [],
34751
- status: false
34752
- };
34830
+ return this.createTransactionResult([], false, params, "NONE");
34753
34831
  }
34754
34832
  const amountAbs = params.amount.abs();
34755
34833
  if (params.from === Protocols.EXTENDED.name || params.to === Protocols.EXTENDED.name) {
@@ -34757,10 +34835,7 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
34757
34835
  logger.warn(
34758
34836
  `Amount ${amountAbs.toNumber()} is below minimum Extended movement amount ${extendedAdapter.minimumExtendedMovementAmount}. Skipping operation.`
34759
34837
  );
34760
- return {
34761
- calls: [],
34762
- status: false
34763
- };
34838
+ return this.createTransactionResult([], false, params, "NONE");
34764
34839
  }
34765
34840
  }
34766
34841
  if (params.from === Protocols.VESU.name || params.to === Protocols.VESU.name) {
@@ -34768,19 +34843,13 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
34768
34843
  logger.warn(
34769
34844
  `Amount ${amountAbs.toNumber()} is below minimum Vesu movement amount ${vesuAdapter.minimumVesuMovementAmount}. Skipping operation.`
34770
34845
  );
34771
- return {
34772
- calls: [],
34773
- status: false
34774
- };
34846
+ return this.createTransactionResult([], false, params, "NONE");
34775
34847
  }
34776
34848
  }
34777
34849
  const avnuAdapter = await this.getAvnuAdapter();
34778
34850
  if (!avnuAdapter) {
34779
34851
  logger.error(`avnu adapter not found: ${avnuAdapter}`);
34780
- return {
34781
- calls: [],
34782
- status: false
34783
- };
34852
+ return this.createTransactionResult([], false, params, "NONE");
34784
34853
  }
34785
34854
  logger.info(`moveAssets params, ${JSON.stringify(params)}`);
34786
34855
  const collateralToken = vesuAdapter.config.supportedPositions[0].asset;
@@ -34799,19 +34868,13 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
34799
34868
  await proofsInfo.callConstructor({ amount: params.amount })
34800
34869
  );
34801
34870
  calls.push(call);
34802
- return {
34803
- calls: [call],
34804
- status: true
34805
- };
34871
+ return this.createTransactionResult(calls, true, params, "DEPOSIT");
34806
34872
  } else if (params.to === Protocols.VAULT.name && params.from === Protocols.EXTENDED.name) {
34807
34873
  const extendedLeverage = calculateExtendedLevergae();
34808
34874
  const extendedHoldings = await extendedAdapter.getExtendedDepositAmount();
34809
34875
  if (!extendedHoldings) {
34810
34876
  logger.error(`error getting extended holdings: ${extendedHoldings}`);
34811
- return {
34812
- calls: [],
34813
- status: false
34814
- };
34877
+ return this.createTransactionResult([], false, params, "NONE");
34815
34878
  }
34816
34879
  const extendedHoldingAmount = new Web3Number(
34817
34880
  extendedHoldings.availableForWithdrawal,
@@ -34838,36 +34901,36 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
34838
34901
  const updatedHoldings = await extendedAdapter.getExtendedDepositAmount();
34839
34902
  if (!updatedHoldings || new Web3Number(updatedHoldings.availableForWithdrawal, USDC_TOKEN_DECIMALS).lessThan(params.amount.abs())) {
34840
34903
  logger.error(`Insufficient balance after opening position. Available: ${updatedHoldings?.availableForWithdrawal}, Needed: ${params.amount.abs()}`);
34841
- return { calls: [], status: false };
34904
+ return this.createTransactionResult([], false, params, "NONE");
34842
34905
  }
34843
34906
  }
34844
- const withdrawalFromExtended = await extendedAdapter.withdrawFromExtended(params.amount);
34845
- if (withdrawalFromExtended) {
34907
+ const {
34908
+ status: withdrawalFromExtendedStatus,
34909
+ receivedTxnHash: withdrawalFromExtendedTxnHash
34910
+ } = await extendedAdapter.withdrawFromExtended(params.amount);
34911
+ logger.info(`withdrawalFromExtendedStatus: ${withdrawalFromExtendedStatus}, withdrawalFromExtendedTxnHash: ${withdrawalFromExtendedTxnHash}`);
34912
+ if (withdrawalFromExtendedStatus && withdrawalFromExtendedTxnHash) {
34846
34913
  const extendedHoldings2 = await extendedAdapter.getExtendedDepositAmount();
34847
34914
  logger.info(`extendedHoldings after withdrawal ${extendedHoldings2?.availableForWithdrawal}`);
34848
34915
  await new Promise((resolve) => setTimeout(resolve, 5e3));
34849
- const calls = await this.moveAssetsToVaultAllocator(params.amount, extendedAdapter);
34850
- if (calls.length > 0) {
34851
- return {
34852
- calls,
34853
- status: true
34854
- };
34916
+ const { calls, status } = await this.moveAssetsToVaultAllocator(params.amount, extendedAdapter);
34917
+ if (calls.length > 0 && status) {
34918
+ return this.createTransactionResult(calls, true, params, "WITHDRAWAL");
34919
+ } else {
34920
+ return this.createTransactionResult([], true, params, "WITHDRAWAL");
34855
34921
  }
34922
+ } else if (withdrawalFromExtendedStatus && !withdrawalFromExtendedTxnHash) {
34923
+ logger.error("withdrawal from extended successful, but funds didn't get transferred to the wallet");
34924
+ return this.createTransactionResult([], true, params, "WITHDRAWAL");
34856
34925
  } else {
34857
34926
  logger.error("withdrawal from extended failed");
34858
- return {
34859
- calls: [],
34860
- status: false
34861
- };
34927
+ return this.createTransactionResult([], false, params, "NONE");
34862
34928
  }
34863
34929
  } else if (params.to === Protocols.VAULT.name && params.from === Protocols.VESU.name) {
34864
34930
  const isPriceDifferenceBetweenAvnuAndExtended = await this.checkPriceDifferenceBetweenAvnuAndExtended(extendedAdapter, vesuAdapter, avnuAdapter, "close" /* CLOSE */);
34865
34931
  if (!isPriceDifferenceBetweenAvnuAndExtended) {
34866
34932
  logger.warn(`price difference between avnu and extended doesn't fit the range for close position, ${avnuAdapter.config.maximumExtendedPriceDifferenceForSwapClosing}`);
34867
- return {
34868
- calls: [],
34869
- status: false
34870
- };
34933
+ return this.createTransactionResult([], false, params, "NONE");
34871
34934
  }
34872
34935
  const vesuAmountInBTC = new Web3Number(
34873
34936
  params.amount.dividedBy(collateralPrice.price).toFixed(WBTC_TOKEN_DECIMALS),
@@ -34888,18 +34951,12 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
34888
34951
  await swapProofsInfo.callConstructor({ amount: vesuAmountInBTC })
34889
34952
  );
34890
34953
  calls.push(swapCall);
34891
- return {
34892
- calls,
34893
- status: true
34894
- };
34954
+ return this.createTransactionResult(calls, true, params, "WITHDRAWAL");
34895
34955
  } else if (params.to === Protocols.EXTENDED.name && params.from === Protocols.VESU.name) {
34896
34956
  const isPriceDifferenceBetweenAvnuAndExtended = await this.checkPriceDifferenceBetweenAvnuAndExtended(extendedAdapter, vesuAdapter, avnuAdapter, "close" /* CLOSE */);
34897
34957
  if (!isPriceDifferenceBetweenAvnuAndExtended) {
34898
34958
  logger.warn(`price difference between avnu and extended doesn't fit the range for close position, ${avnuAdapter.config.maximumExtendedPriceDifferenceForSwapClosing}`);
34899
- return {
34900
- calls: [],
34901
- status: false
34902
- };
34959
+ return this.createTransactionResult([], false, params, "NONE");
34903
34960
  }
34904
34961
  const vesuAmountInBTC = new Web3Number(
34905
34962
  params.amount.dividedBy(collateralPrice.price).toNumber(),
@@ -34930,127 +34987,21 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
34930
34987
  await proofsInfoDeposit.callConstructor({ amount: params.amount })
34931
34988
  );
34932
34989
  calls.push(callDeposit);
34933
- return {
34934
- calls,
34935
- status: true
34936
- };
34990
+ return this.createTransactionResult(calls, true, params, "DEPOSIT");
34937
34991
  }
34938
- return {
34939
- calls: [],
34940
- status: false
34941
- };
34992
+ logger.error(`Unsupported assets movement: ${params.from} to ${params.to}`);
34993
+ return this.createTransactionResult([], false, params, "NONE");
34942
34994
  } catch (err) {
34943
34995
  logger.error(`error moving assets: ${err}`);
34944
- return {
34945
- calls: [],
34946
- status: false
34947
- };
34996
+ return this.createTransactionResult([], false, params, "NONE");
34948
34997
  }
34949
34998
  }
34950
34999
  async handleDeposit() {
34951
35000
  try {
34952
- const vesuAdapter = await this.getVesuAdapter();
34953
- const extendedAdapter = await this.getExtendedAdapter();
34954
- const avnuAdapter = await this.getAvnuAdapter();
34955
- if (!vesuAdapter || !extendedAdapter || !extendedAdapter.client || !avnuAdapter) {
34956
- logger.error(
34957
- "vesu or extended adapter not found",
34958
- vesuAdapter,
34959
- extendedAdapter
34960
- );
34961
- return {
34962
- extendedAmountInBTC: new Web3Number(0, 0),
34963
- calls: []
34964
- };
34965
- }
34966
- const extendedLeverage = calculateExtendedLevergae();
34967
- const isPriceDifferenceBetweenAvnuAndExtended = await this.checkPriceDifferenceBetweenAvnuAndExtended(extendedAdapter, vesuAdapter, avnuAdapter, "open" /* OPEN */);
34968
- if (!isPriceDifferenceBetweenAvnuAndExtended) {
34969
- logger.error("price difference between avnu and extended doesn't fit the range");
34970
- return {
34971
- extendedAmountInBTC: new Web3Number(0, 0),
34972
- calls: []
34973
- };
34974
- }
34975
- const position = await extendedAdapter.getAllOpenPositions();
34976
- if (!position) {
34977
- logger.error("error getting extended position", position);
34978
- return {
34979
- extendedAmountInBTC: new Web3Number(0, 0),
34980
- calls: []
34981
- };
34982
- }
34983
- const extendedPositionValue = position.length > 0 ? parseFloat(position[0].value) : 0;
34984
- const BUFFER_AMOUNT_IN_AVAILABLE_FOR_TRADE = BUFFER_USDC_IN_WITHDRAWAL;
34985
- const extendedHoldings = await extendedAdapter.getExtendedDepositAmount();
34986
- if (!extendedHoldings) {
34987
- logger.error(`error getting extended holdings: ${extendedHoldings}`);
34988
- return {
34989
- extendedAmountInBTC: new Web3Number(0, 0),
34990
- calls: []
34991
- };
34992
- }
34993
- const extendedHoldingAmount = new Web3Number(
34994
- extendedHoldings.availableForWithdrawal,
34995
- USDC_TOKEN_DECIMALS
34996
- );
34997
- const {
34998
- collateralTokenAmount
34999
- } = await vesuAdapter.vesuAdapter.getAssetPrices();
35000
- const { collateralPrice } = await this.getAssetPrices();
35001
- const { vesuAmountInBTC, extendedAmountInBTC } = calculateVesUPositionSizeGivenExtended(
35002
- extendedPositionValue,
35003
- extendedHoldingAmount.minus(BUFFER_AMOUNT_IN_AVAILABLE_FOR_TRADE),
35004
- collateralTokenAmount,
35005
- collateralPrice.price
35006
- );
35007
- logger.info(`vesuAmountInBTC ${vesuAmountInBTC}, extendedAmountInBTC ${extendedAmountInBTC}`);
35008
- let calls = [];
35009
- if (vesuAmountInBTC.greaterThan(MINIMUM_EXTENDED_POSITION_SIZE)) {
35010
- const proofsInfo = vesuAdapter.getProofs(true, this.getMerkleTree());
35011
- const proofGroups = proofsInfo.proofs;
35012
- const call = this.getManageCall(
35013
- proofGroups,
35014
- await proofsInfo.callConstructor({
35015
- amount: vesuAmountInBTC
35016
- })
35017
- );
35018
- const { amount: wbtcAmountInVaultAllocator } = await this.getUnusedBalanceWBTC();
35019
- if (wbtcAmountInVaultAllocator.lessThan(vesuAmountInBTC)) {
35020
- const swapProofsInfo = avnuAdapter.getProofs(true, this.getMerkleTree());
35021
- const swapProofGroups = swapProofsInfo.proofs;
35022
- const swapCall = this.getManageCall(
35023
- swapProofGroups,
35024
- await swapProofsInfo.callConstructor({
35025
- amount: vesuAmountInBTC
35026
- })
35027
- );
35028
- calls.push(swapCall);
35029
- }
35030
- calls.push(call);
35031
- }
35032
- const shortPosition = extendedAmountInBTC.multipliedBy(3).abs().greaterThan(MINIMUM_EXTENDED_POSITION_SIZE) ? await extendedAdapter.createOrder(
35033
- extendedLeverage.toString(),
35034
- extendedAmountInBTC.toNumber(),
35035
- "SELL" /* SELL */
35036
- ) : null;
35037
- if (!shortPosition && extendedAmountInBTC.multipliedBy(3).abs().greaterThan(MINIMUM_EXTENDED_POSITION_SIZE)) {
35038
- logger.error(`error creating short position thus no position to be opened on vesu: ${shortPosition}`);
35039
- return {
35040
- extendedAmountInBTC: new Web3Number(0, 0),
35041
- calls: []
35042
- };
35043
- }
35044
- return {
35045
- extendedAmountInBTC,
35046
- calls
35047
- };
35001
+ return this.createTransactionResult([], false, { from: Protocols.VAULT.name, to: Protocols.VAULT.name, amount: new Web3Number(0, 0) }, "NONE");
35048
35002
  } catch (err) {
35049
35003
  logger.error(`error handling deposit: ${err}`);
35050
- return {
35051
- extendedAmountInBTC: new Web3Number(0, 0),
35052
- calls: []
35053
- };
35004
+ return this.createTransactionResult([], false, { from: Protocols.VAULT.name, to: Protocols.VAULT.name, amount: new Web3Number(0, 0) }, "NONE");
35054
35005
  }
35055
35006
  }
35056
35007
  async checkPriceDifferenceBetweenAvnuAndExtended(extendedAdapter, vesuAdapter, avnuAdapter, positionType) {
@@ -35095,12 +35046,8 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
35095
35046
  const withdrawCall2 = await this.getBringLiquidityCall({
35096
35047
  amount: usdcBalanceVaultAllocator.amount
35097
35048
  });
35098
- logger.info("withdraw call", withdrawCall2);
35099
35049
  calls.push(withdrawCall2);
35100
- return {
35101
- calls,
35102
- status: true
35103
- };
35050
+ return [this.createTransactionResult(calls, true, { from: Protocols.VAULT.name, to: Protocols.NONE.name, amount }, "WITHDRAWAL")];
35104
35051
  }
35105
35052
  const vesuAdapter = await this.getVesuAdapter();
35106
35053
  const extendedAdapter = await this.getExtendedAdapter();
@@ -35109,11 +35056,9 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
35109
35056
  logger.error(
35110
35057
  `vesu or extended adapter not found: vesuAdapter=${vesuAdapter}, extendedAdapter=${extendedAdapter}`
35111
35058
  );
35112
- return {
35113
- calls,
35114
- status
35115
- };
35059
+ return [this.createTransactionResult(calls, status, { from: Protocols.VAULT.name, to: Protocols.NONE.name, amount }, "NONE")];
35116
35060
  }
35061
+ let transactionResults = [];
35117
35062
  const { collateralTokenAmount } = await vesuAdapter.vesuAdapter.getAssetPrices();
35118
35063
  const {
35119
35064
  collateralPrice
@@ -35122,10 +35067,7 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
35122
35067
  if (!extendedPositon) {
35123
35068
  status = false;
35124
35069
  logger.error("error getting extended position", extendedPositon);
35125
- return {
35126
- calls,
35127
- status
35128
- };
35070
+ return [this.createTransactionResult(calls, status, { from: Protocols.VAULT.name, to: Protocols.NONE.name, amount }, "NONE")];
35129
35071
  }
35130
35072
  const amountDistributionForWithdrawal = await calculateAmountDistributionForWithdrawal(
35131
35073
  usdcBalanceDifference,
@@ -35138,14 +35080,11 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
35138
35080
  logger.error(
35139
35081
  `error calculating amount distribution for withdrawal: ${amountDistributionForWithdrawal}`
35140
35082
  );
35141
- return {
35142
- calls,
35143
- status
35144
- };
35083
+ return [this.createTransactionResult(calls, status, { from: Protocols.VAULT.name, to: Protocols.NONE.name, amount }, "NONE")];
35145
35084
  }
35146
35085
  const { vesu_amount, extended_amount } = amountDistributionForWithdrawal;
35147
35086
  if (status && vesu_amount.greaterThan(0)) {
35148
- const { calls: vesuCalls, status: vesuStatus } = await this.moveAssets(
35087
+ const { calls: vesuCalls, status: vesuStatus, transactionMetadata: vesuTransactionMetadata } = await this.moveAssets(
35149
35088
  {
35150
35089
  amount: vesu_amount,
35151
35090
  from: Protocols.VESU.name,
@@ -35155,10 +35094,14 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
35155
35094
  vesuAdapter
35156
35095
  );
35157
35096
  status = vesuStatus;
35158
- calls.push(...vesuCalls);
35097
+ transactionResults.push({
35098
+ status: vesuStatus,
35099
+ calls: vesuCalls,
35100
+ transactionMetadata: vesuTransactionMetadata
35101
+ });
35159
35102
  }
35160
35103
  if (status && extended_amount.greaterThan(0)) {
35161
- const { calls: extendedCalls, status: extendedStatus } = await this.moveAssets(
35104
+ const { calls: extendedCalls, status: extendedStatus, transactionMetadata: extendedTransactionMetadata } = await this.moveAssets(
35162
35105
  {
35163
35106
  amount: extended_amount,
35164
35107
  from: Protocols.EXTENDED.name,
@@ -35169,30 +35112,35 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
35169
35112
  );
35170
35113
  status = extendedStatus;
35171
35114
  if (status) {
35172
- calls.push(...extendedCalls);
35115
+ transactionResults.push({
35116
+ status: extendedStatus,
35117
+ calls: extendedCalls,
35118
+ transactionMetadata: extendedTransactionMetadata
35119
+ });
35173
35120
  } else {
35174
35121
  logger.error("error moving assets to vault: extendedStatus: ${extendedStatus}");
35175
- return {
35176
- calls: [],
35177
- status
35178
- };
35122
+ return [this.createTransactionResult([], status, { from: Protocols.VAULT.name, to: Protocols.NONE.name, amount }, "NONE")];
35179
35123
  }
35180
35124
  }
35181
35125
  const withdrawCall = await this.getBringLiquidityCall({
35182
35126
  amount
35183
35127
  });
35184
35128
  logger.info("withdraw call", withdrawCall);
35185
- calls.push(withdrawCall);
35186
- return {
35187
- calls,
35188
- status
35189
- };
35129
+ transactionResults.push({
35130
+ status,
35131
+ calls: [withdrawCall],
35132
+ transactionMetadata: {
35133
+ protocolFrom: Protocols.VAULT.name,
35134
+ protocolTo: Protocols.NONE.name,
35135
+ transactionType: "WITHDRAWAL",
35136
+ usdAmount: amount.toFixed(),
35137
+ status: "PENDING"
35138
+ }
35139
+ });
35140
+ return transactionResults;
35190
35141
  } catch (err) {
35191
35142
  logger.error(`error handling withdrawal: ${err}`);
35192
- return {
35193
- calls: [],
35194
- status: false
35195
- };
35143
+ return [this.createTransactionResult([], false, { from: Protocols.VAULT.name, to: Protocols.NONE.name, amount }, "NONE")];
35196
35144
  }
35197
35145
  }
35198
35146
  async getAUM() {
@@ -35239,6 +35187,36 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
35239
35187
  splits: [realAUM, estimatedAUMDelta]
35240
35188
  };
35241
35189
  }
35190
+ async processTransactionDataFromSDK(txnData) {
35191
+ try {
35192
+ const txnsToBeExecuted = txnData.filter((txn) => {
35193
+ return txn.transactionMetadata.transactionType !== "NONE" && txn.transactionMetadata.protocolFrom !== "" && txn.transactionMetadata.protocolTo !== "";
35194
+ });
35195
+ const callsToBeExecutedFinal = txnsToBeExecuted.flatMap((txn) => txn.calls);
35196
+ const txnMetadata = txnsToBeExecuted.map((txn) => txn.transactionMetadata);
35197
+ return { callsToBeExecutedFinal, txnMetadata };
35198
+ } catch (err) {
35199
+ logger.error(`error processing transaction data from SDK: ${err}`);
35200
+ return null;
35201
+ }
35202
+ }
35203
+ async processTransactionMetadata(txnMetadata, extendedIntentFulfilled) {
35204
+ try {
35205
+ const txnMetadataNew = txnMetadata.map((txn) => {
35206
+ const isExtendedProtocol = txn.protocolFrom === Protocols.EXTENDED.name || txn.protocolTo === Protocols.EXTENDED.name;
35207
+ if (isExtendedProtocol) {
35208
+ txn.status = extendedIntentFulfilled ? "COMPLETED" : "PENDING";
35209
+ } else {
35210
+ txn.status = "COMPLETED";
35211
+ }
35212
+ return txn;
35213
+ });
35214
+ return txnMetadataNew;
35215
+ } catch (err) {
35216
+ logger.error(`error processing transaction data from SDK: ${err}`);
35217
+ return null;
35218
+ }
35219
+ }
35242
35220
  };
35243
35221
  function getLooperSettings2(lstSymbol, underlyingSymbol, vaultSettings, pool1, extendedBackendUrl, extendedApiKey, vaultIdExtended, minimumExtendedMovementAmount, minimumVesuMovementAmount, minimumExtendedRetriesDelayForOrderStatus, minimumExtendedPriceDifferenceForSwapOpen, maximumExtendedPriceDifferenceForSwapClosing) {
35244
35222
  vaultSettings.leafAdapters = [];