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