@strkfarm/sdk 2.0.0-dev.6 → 2.0.0-dev.7

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.
@@ -92380,7 +92380,7 @@ spurious results.`);
92380
92380
  var MAX_RETRIES = Number(process.env.MAX_RETRIES ?? 3);
92381
92381
  var MAX_DELAY = Number(process.env.MAX_DELAY ?? 100);
92382
92382
  var EXTEND_MARKET_NAME = "BTC-USD";
92383
- var LIMIT_BALANCE = Number(process.env.LIMIT_BALANCE ?? 10);
92383
+ var LIMIT_BALANCE = Number(process.env.LIMIT_BALANCE ?? 0.05);
92384
92384
  var REBALANCER_INTERVAL = Number(process.env.REBALANCER_INTERVAL ?? 18e4);
92385
92385
  var WITHDRAWAL_INTERVAL = Number(process.env.WITHDRAWAL_INTERVAL ?? 18e6);
92386
92386
  var INVESTING_INTERVAL = Number(process.env.INVESTING_INTERVAL ?? 18e4);
@@ -92637,6 +92637,7 @@ spurious results.`);
92637
92637
  vaultAllocator: config3.vaultAllocator,
92638
92638
  id: ""
92639
92639
  });
92640
+ this.minimumVesuMovementAmount = config3.minimumVesuMovementAmount ?? 5;
92640
92641
  this.tokenMarketData = new TokenMarketData(
92641
92642
  this.config.pricer,
92642
92643
  this.config.networkConfig
@@ -93645,7 +93646,9 @@ spurious results.`);
93645
93646
  timeout: this.config.extendedTimeout,
93646
93647
  retries: this.config.extendedRetries
93647
93648
  });
93649
+ this.minimumExtendedMovementAmount = this.config.minimumExtendedMovementAmount ?? 5;
93648
93650
  this.client = client;
93651
+ this.retryDelayForOrderStatus = this.config.retryDelayForOrderStatus ?? 3e3;
93649
93652
  }
93650
93653
  //abstract means the method has no implementation in this class; instead, child classes must implement it.
93651
93654
  async getAPY(supportedPosition) {
@@ -94029,13 +94032,13 @@ spurious results.`);
94029
94032
  if (!orderhistory || orderhistory.length === 0) {
94030
94033
  logger2.error(`error getting order history: ${orderId}`);
94031
94034
  } else {
94032
- const order = orderhistory.slice(0, 5).find((order2) => order2.id.toString() === orderId);
94035
+ const order = orderhistory.slice(0, 10).find((order2) => order2.id.toString() === orderId);
94033
94036
  if (order) {
94034
94037
  return order;
94035
94038
  }
94036
94039
  }
94037
- for (let attempt = 1; attempt <= 3; attempt++) {
94038
- await new Promise((resolve) => setTimeout(resolve, 3e3));
94040
+ for (let attempt = 1; attempt <= 5; attempt++) {
94041
+ await new Promise((resolve) => setTimeout(resolve, this.retryDelayForOrderStatus));
94039
94042
  orderhistory = await this.getOrderHistory(marketName);
94040
94043
  if (!orderhistory || orderhistory.length === 0) {
94041
94044
  logger2.error(
@@ -94044,11 +94047,11 @@ spurious results.`);
94044
94047
  continue;
94045
94048
  }
94046
94049
  const order = orderhistory.slice(0, 5).find((order2) => order2.id.toString() === orderId);
94047
- if (order) {
94050
+ if (order && order.status === "FILLED" /* FILLED */) {
94048
94051
  return order;
94049
94052
  }
94050
94053
  logger2.error(
94051
- `order not found in top 5 entries on retry ${attempt}: ${orderId}`
94054
+ `order not found in top 15 entries on retry ${attempt}: ${orderId}`
94052
94055
  );
94053
94056
  }
94054
94057
  logger2.error(`error getting order after all retries: ${orderId}`);
@@ -94129,7 +94132,7 @@ spurious results.`);
94129
94132
  result2.position_id,
94130
94133
  this.config.extendedMarketName
94131
94134
  );
94132
- if (!openOrder || openOrder.status !== "FILLED" /* FILLED */) {
94135
+ if (!openOrder) {
94133
94136
  if (attempt >= maxAttempts) {
94134
94137
  logger2.error("Max retries reached \u2014 could not verify open position");
94135
94138
  return null;
@@ -97480,7 +97483,8 @@ spurious results.`);
97480
97483
  minHealthFactor: vaultSettings.minHealthFactor,
97481
97484
  quoteAmountToFetchPrice: vaultSettings.quoteAmountToFetchPrice,
97482
97485
  ...baseAdapterConfig,
97483
- supportedPositions: [{ asset: lstToken, isDebt: false }, { asset: Global.getDefaultTokens().find((token) => token.symbol === position), isDebt: true }]
97486
+ supportedPositions: [{ asset: lstToken, isDebt: false }, { asset: Global.getDefaultTokens().find((token) => token.symbol === position), isDebt: true }],
97487
+ minimumVesuMovementAmount: 0
97484
97488
  }));
97485
97489
  const unusedBalanceAdapter = new UnusedBalanceAdapter({
97486
97490
  ...baseAdapterConfig
@@ -97821,7 +97825,6 @@ spurious results.`);
97821
97825
  toToken.decimals,
97822
97826
  true
97823
97827
  );
97824
- console.log(`${_AvnuAdapter.name}::getDepositCall quote: ${quote?.sellAmountInUsd}`);
97825
97828
  if (!quote) {
97826
97829
  logger2.error("error getting quote from avnu");
97827
97830
  return [];
@@ -98180,7 +98183,7 @@ spurious results.`);
98180
98183
  }
98181
98184
  const balance = await this.getUnusedBalance();
98182
98185
  const usdcBalanceOnExtended = await extendedAdapter.getExtendedDepositAmount();
98183
- const amountToInvest = new Web3Number(balance.usdValue, USDC_TOKEN_DECIMALS).plus(usdcBalanceOnExtended?.availableForWithdrawal ?? 0).minus(LIMIT_BALANCE);
98186
+ const amountToInvest = new Web3Number(balance.usdValue, USDC_TOKEN_DECIMALS).plus(usdcBalanceOnExtended?.availableForWithdrawal ?? 0).multipliedBy(1 - LIMIT_BALANCE);
98184
98187
  logger2.info(`${_VesuExtendedMultiplierStrategy.name}::shouldInvest amountToInvest: ${amountToInvest.toNumber()}`);
98185
98188
  if (amountToInvest.lessThan(0)) {
98186
98189
  return {
@@ -98268,7 +98271,7 @@ spurious results.`);
98268
98271
  );
98269
98272
  return calls;
98270
98273
  }
98271
- if (extendedAmount.lessThan(0)) {
98274
+ if (extendedAmount.isNegative() && extendedAmount.abs().greaterThan(extendedAdapter.minimumExtendedMovementAmount)) {
98272
98275
  try {
98273
98276
  const { calls: extendedCalls, status: extendedStatus } = await this.moveAssets(
98274
98277
  {
@@ -98288,7 +98291,7 @@ spurious results.`);
98288
98291
  logger2.error(`Failed moving assets to vault: ${err2}`);
98289
98292
  }
98290
98293
  }
98291
- if (vesuAmount.lessThan(0)) {
98294
+ if (vesuAmount.isNegative() && vesuAmount.lessThan(vesuAdapter.minimumVesuMovementAmount)) {
98292
98295
  try {
98293
98296
  const { calls: vesuCalls, status: vesuStatus } = await this.moveAssets(
98294
98297
  {
@@ -98316,7 +98319,7 @@ spurious results.`);
98316
98319
  const usdcAmountOnExtended = parseFloat(
98317
98320
  extendedHoldings.availableForWithdrawal
98318
98321
  );
98319
- if (extendedAmount.minus(usdcAmountOnExtended).greaterThan(0)) {
98322
+ if (extendedAmount.minus(usdcAmountOnExtended).greaterThan(extendedAdapter.minimumExtendedMovementAmount)) {
98320
98323
  try {
98321
98324
  const { calls: extendedCalls } = await this.moveAssets(
98322
98325
  {
@@ -98332,7 +98335,7 @@ spurious results.`);
98332
98335
  logger2.error(`Failed moving assets to extended: ${err2}`);
98333
98336
  }
98334
98337
  }
98335
- if (vesuAmount.minus(usdcAmountInWallet).greaterThan(0)) {
98338
+ if (vesuAmount.minus(usdcAmountInWallet).greaterThan(vesuAdapter.minimumVesuMovementAmount)) {
98336
98339
  try {
98337
98340
  const { calls: vesuCalls, status: vesuStatus } = await this.moveAssets(
98338
98341
  {
@@ -98797,7 +98800,7 @@ spurious results.`);
98797
98800
  };
98798
98801
  }
98799
98802
  };
98800
- function getLooperSettings2(lstSymbol, underlyingSymbol, vaultSettings, pool1, extendedBackendUrl, extendedApiKey, vaultIdExtended) {
98803
+ function getLooperSettings2(lstSymbol, underlyingSymbol, vaultSettings, pool1, extendedBackendUrl, extendedApiKey, vaultIdExtended, minimumExtendedMovementAmount, minimumVesuMovementAmount, minimumExtendedRetriesDelayForOrderStatus) {
98801
98804
  vaultSettings.leafAdapters = [];
98802
98805
  const wbtcToken = Global.getDefaultTokens().find(
98803
98806
  (token) => token.symbol === lstSymbol
@@ -98837,7 +98840,10 @@ spurious results.`);
98837
98840
  extendedBaseUrl: "https://api.starknet.extended.exchange",
98838
98841
  extendedMarketName: "BTC-USD",
98839
98842
  extendedPrecision: 5,
98840
- avnuAdapter
98843
+ avnuAdapter,
98844
+ retryDelayForOrderStatus: minimumExtendedRetriesDelayForOrderStatus ?? 3e3,
98845
+ minimumExtendedMovementAmount: minimumExtendedMovementAmount ?? 5
98846
+ //5 usdcs
98841
98847
  });
98842
98848
  const vesuMultiplyAdapter = new VesuMultiplyAdapter({
98843
98849
  poolId: pool1,
@@ -98850,7 +98856,9 @@ spurious results.`);
98850
98856
  supportedPositions: [
98851
98857
  { asset: wbtcToken, isDebt: false },
98852
98858
  { asset: usdcToken, isDebt: true }
98853
- ]
98859
+ ],
98860
+ minimumVesuMovementAmount: minimumVesuMovementAmount ?? 5
98861
+ //5 usdc
98854
98862
  });
98855
98863
  const unusedBalanceAdapter = new UnusedBalanceAdapter({
98856
98864
  ...baseAdapterConfig
@@ -98965,12 +98973,12 @@ spurious results.`);
98965
98973
  borrowable_assets: [Global.getDefaultTokens().find((token) => token.symbol === "WBTC")],
98966
98974
  minimumWBTCDifferenceForAvnuSwap: MINIMUM_WBTC_DIFFERENCE_FOR_AVNU_SWAP
98967
98975
  };
98968
- var VesuExtendedTestStrategies = (extendedBackendUrl, extendedApiKey, vaultIdExtended) => {
98976
+ var VesuExtendedTestStrategies = (extendedBackendUrl, extendedApiKey, vaultIdExtended, minimumExtendedMovementAmount, minimumVesuMovementAmount, minimumExtendedRetriesDelayForOrderStatus) => {
98969
98977
  return [
98970
- getStrategySettingsVesuExtended("WBTC", "USDC", re7UsdcPrimeDevansh, false, false, extendedBackendUrl, extendedApiKey, vaultIdExtended)
98978
+ getStrategySettingsVesuExtended("WBTC", "USDC", re7UsdcPrimeDevansh, false, false, extendedBackendUrl, extendedApiKey, vaultIdExtended, minimumExtendedMovementAmount, minimumVesuMovementAmount, minimumExtendedRetriesDelayForOrderStatus)
98971
98979
  ];
98972
98980
  };
98973
- function getStrategySettingsVesuExtended(lstSymbol, underlyingSymbol, addresses, isPreview = false, isLST, extendedBackendUrl, extendedApiKey, vaultIdExtended) {
98981
+ function getStrategySettingsVesuExtended(lstSymbol, underlyingSymbol, addresses, isPreview = false, isLST, extendedBackendUrl, extendedApiKey, vaultIdExtended, minimumExtendedMovementAmount, minimumVesuMovementAmount, minimumExtendedRetriesDelayForOrderStatus) {
98974
98982
  return {
98975
98983
  name: `Extended Test ${underlyingSymbol}`,
98976
98984
  description: getDescription2(lstSymbol, underlyingSymbol),
@@ -98978,7 +98986,7 @@ spurious results.`);
98978
98986
  launchBlock: 0,
98979
98987
  type: "Other",
98980
98988
  depositTokens: [Global.getDefaultTokens().find((token) => token.symbol === underlyingSymbol)],
98981
- additionalInfo: getLooperSettings2(lstSymbol, underlyingSymbol, addresses, VesuPools.Re7USDCPrime, extendedBackendUrl, extendedApiKey, vaultIdExtended),
98989
+ additionalInfo: getLooperSettings2(lstSymbol, underlyingSymbol, addresses, VesuPools.Re7USDCPrime, extendedBackendUrl, extendedApiKey, vaultIdExtended, minimumExtendedMovementAmount, minimumVesuMovementAmount, minimumExtendedRetriesDelayForOrderStatus),
98982
98990
  risk: {
98983
98991
  riskFactor: _riskFactor3,
98984
98992
  netRisk: _riskFactor3.reduce((acc, curr) => acc + curr.value * curr.weight, 0) / _riskFactor3.reduce((acc, curr) => acc + curr.weight, 0),
@@ -28351,7 +28351,7 @@ var STRK_API_RPC = process.env.STRK_API_RPC ?? "https://mainnet.starknet.a5a.ch"
28351
28351
  var MAX_RETRIES = Number(process.env.MAX_RETRIES ?? 3);
28352
28352
  var MAX_DELAY = Number(process.env.MAX_DELAY ?? 100);
28353
28353
  var EXTEND_MARKET_NAME = "BTC-USD";
28354
- var LIMIT_BALANCE = Number(process.env.LIMIT_BALANCE ?? 10);
28354
+ var LIMIT_BALANCE = Number(process.env.LIMIT_BALANCE ?? 0.05);
28355
28355
  var REBALANCER_INTERVAL = Number(process.env.REBALANCER_INTERVAL ?? 18e4);
28356
28356
  var WITHDRAWAL_INTERVAL = Number(process.env.WITHDRAWAL_INTERVAL ?? 18e6);
28357
28357
  var INVESTING_INTERVAL = Number(process.env.INVESTING_INTERVAL ?? 18e4);
@@ -28608,6 +28608,7 @@ var VesuMultiplyAdapter = class _VesuMultiplyAdapter extends BaseAdapter {
28608
28608
  vaultAllocator: config.vaultAllocator,
28609
28609
  id: ""
28610
28610
  });
28611
+ this.minimumVesuMovementAmount = config.minimumVesuMovementAmount ?? 5;
28611
28612
  this.tokenMarketData = new TokenMarketData(
28612
28613
  this.config.pricer,
28613
28614
  this.config.networkConfig
@@ -29618,7 +29619,9 @@ var ExtendedAdapter = class _ExtendedAdapter extends BaseAdapter {
29618
29619
  timeout: this.config.extendedTimeout,
29619
29620
  retries: this.config.extendedRetries
29620
29621
  });
29622
+ this.minimumExtendedMovementAmount = this.config.minimumExtendedMovementAmount ?? 5;
29621
29623
  this.client = client;
29624
+ this.retryDelayForOrderStatus = this.config.retryDelayForOrderStatus ?? 3e3;
29622
29625
  }
29623
29626
  //abstract means the method has no implementation in this class; instead, child classes must implement it.
29624
29627
  async getAPY(supportedPosition) {
@@ -30002,13 +30005,13 @@ var ExtendedAdapter = class _ExtendedAdapter extends BaseAdapter {
30002
30005
  if (!orderhistory || orderhistory.length === 0) {
30003
30006
  logger.error(`error getting order history: ${orderId}`);
30004
30007
  } else {
30005
- const order = orderhistory.slice(0, 5).find((order2) => order2.id.toString() === orderId);
30008
+ const order = orderhistory.slice(0, 10).find((order2) => order2.id.toString() === orderId);
30006
30009
  if (order) {
30007
30010
  return order;
30008
30011
  }
30009
30012
  }
30010
- for (let attempt = 1; attempt <= 3; attempt++) {
30011
- await new Promise((resolve) => setTimeout(resolve, 3e3));
30013
+ for (let attempt = 1; attempt <= 5; attempt++) {
30014
+ await new Promise((resolve) => setTimeout(resolve, this.retryDelayForOrderStatus));
30012
30015
  orderhistory = await this.getOrderHistory(marketName);
30013
30016
  if (!orderhistory || orderhistory.length === 0) {
30014
30017
  logger.error(
@@ -30017,11 +30020,11 @@ var ExtendedAdapter = class _ExtendedAdapter extends BaseAdapter {
30017
30020
  continue;
30018
30021
  }
30019
30022
  const order = orderhistory.slice(0, 5).find((order2) => order2.id.toString() === orderId);
30020
- if (order) {
30023
+ if (order && order.status === "FILLED" /* FILLED */) {
30021
30024
  return order;
30022
30025
  }
30023
30026
  logger.error(
30024
- `order not found in top 5 entries on retry ${attempt}: ${orderId}`
30027
+ `order not found in top 15 entries on retry ${attempt}: ${orderId}`
30025
30028
  );
30026
30029
  }
30027
30030
  logger.error(`error getting order after all retries: ${orderId}`);
@@ -30102,7 +30105,7 @@ var ExtendedAdapter = class _ExtendedAdapter extends BaseAdapter {
30102
30105
  result.position_id,
30103
30106
  this.config.extendedMarketName
30104
30107
  );
30105
- if (!openOrder || openOrder.status !== "FILLED" /* FILLED */) {
30108
+ if (!openOrder) {
30106
30109
  if (attempt >= maxAttempts) {
30107
30110
  logger.error("Max retries reached \u2014 could not verify open position");
30108
30111
  return null;
@@ -33456,7 +33459,8 @@ function getLooperSettings(lstSymbol, underlyingSymbol, vaultSettings, pool1) {
33456
33459
  minHealthFactor: vaultSettings.minHealthFactor,
33457
33460
  quoteAmountToFetchPrice: vaultSettings.quoteAmountToFetchPrice,
33458
33461
  ...baseAdapterConfig,
33459
- supportedPositions: [{ asset: lstToken, isDebt: false }, { asset: Global.getDefaultTokens().find((token) => token.symbol === position), isDebt: true }]
33462
+ supportedPositions: [{ asset: lstToken, isDebt: false }, { asset: Global.getDefaultTokens().find((token) => token.symbol === position), isDebt: true }],
33463
+ minimumVesuMovementAmount: 0
33460
33464
  }));
33461
33465
  const unusedBalanceAdapter = new UnusedBalanceAdapter({
33462
33466
  ...baseAdapterConfig
@@ -33799,7 +33803,6 @@ var AvnuAdapter = class _AvnuAdapter extends BaseAdapter {
33799
33803
  toToken.decimals,
33800
33804
  true
33801
33805
  );
33802
- console.log(`${_AvnuAdapter.name}::getDepositCall quote: ${quote?.sellAmountInUsd}`);
33803
33806
  if (!quote) {
33804
33807
  logger.error("error getting quote from avnu");
33805
33808
  return [];
@@ -34158,7 +34161,7 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
34158
34161
  }
34159
34162
  const balance = await this.getUnusedBalance();
34160
34163
  const usdcBalanceOnExtended = await extendedAdapter.getExtendedDepositAmount();
34161
- const amountToInvest = new Web3Number(balance.usdValue, USDC_TOKEN_DECIMALS).plus(usdcBalanceOnExtended?.availableForWithdrawal ?? 0).minus(LIMIT_BALANCE);
34164
+ const amountToInvest = new Web3Number(balance.usdValue, USDC_TOKEN_DECIMALS).plus(usdcBalanceOnExtended?.availableForWithdrawal ?? 0).multipliedBy(1 - LIMIT_BALANCE);
34162
34165
  logger.info(`${_VesuExtendedMultiplierStrategy.name}::shouldInvest amountToInvest: ${amountToInvest.toNumber()}`);
34163
34166
  if (amountToInvest.lessThan(0)) {
34164
34167
  return {
@@ -34246,7 +34249,7 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
34246
34249
  );
34247
34250
  return calls;
34248
34251
  }
34249
- if (extendedAmount.lessThan(0)) {
34252
+ if (extendedAmount.isNegative() && extendedAmount.abs().greaterThan(extendedAdapter.minimumExtendedMovementAmount)) {
34250
34253
  try {
34251
34254
  const { calls: extendedCalls, status: extendedStatus } = await this.moveAssets(
34252
34255
  {
@@ -34266,7 +34269,7 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
34266
34269
  logger.error(`Failed moving assets to vault: ${err}`);
34267
34270
  }
34268
34271
  }
34269
- if (vesuAmount.lessThan(0)) {
34272
+ if (vesuAmount.isNegative() && vesuAmount.lessThan(vesuAdapter.minimumVesuMovementAmount)) {
34270
34273
  try {
34271
34274
  const { calls: vesuCalls, status: vesuStatus } = await this.moveAssets(
34272
34275
  {
@@ -34294,7 +34297,7 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
34294
34297
  const usdcAmountOnExtended = parseFloat(
34295
34298
  extendedHoldings.availableForWithdrawal
34296
34299
  );
34297
- if (extendedAmount.minus(usdcAmountOnExtended).greaterThan(0)) {
34300
+ if (extendedAmount.minus(usdcAmountOnExtended).greaterThan(extendedAdapter.minimumExtendedMovementAmount)) {
34298
34301
  try {
34299
34302
  const { calls: extendedCalls } = await this.moveAssets(
34300
34303
  {
@@ -34310,7 +34313,7 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
34310
34313
  logger.error(`Failed moving assets to extended: ${err}`);
34311
34314
  }
34312
34315
  }
34313
- if (vesuAmount.minus(usdcAmountInWallet).greaterThan(0)) {
34316
+ if (vesuAmount.minus(usdcAmountInWallet).greaterThan(vesuAdapter.minimumVesuMovementAmount)) {
34314
34317
  try {
34315
34318
  const { calls: vesuCalls, status: vesuStatus } = await this.moveAssets(
34316
34319
  {
@@ -34775,7 +34778,7 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
34775
34778
  };
34776
34779
  }
34777
34780
  };
34778
- function getLooperSettings2(lstSymbol, underlyingSymbol, vaultSettings, pool1, extendedBackendUrl, extendedApiKey, vaultIdExtended) {
34781
+ function getLooperSettings2(lstSymbol, underlyingSymbol, vaultSettings, pool1, extendedBackendUrl, extendedApiKey, vaultIdExtended, minimumExtendedMovementAmount, minimumVesuMovementAmount, minimumExtendedRetriesDelayForOrderStatus) {
34779
34782
  vaultSettings.leafAdapters = [];
34780
34783
  const wbtcToken = Global.getDefaultTokens().find(
34781
34784
  (token) => token.symbol === lstSymbol
@@ -34815,7 +34818,10 @@ function getLooperSettings2(lstSymbol, underlyingSymbol, vaultSettings, pool1, e
34815
34818
  extendedBaseUrl: "https://api.starknet.extended.exchange",
34816
34819
  extendedMarketName: "BTC-USD",
34817
34820
  extendedPrecision: 5,
34818
- avnuAdapter
34821
+ avnuAdapter,
34822
+ retryDelayForOrderStatus: minimumExtendedRetriesDelayForOrderStatus ?? 3e3,
34823
+ minimumExtendedMovementAmount: minimumExtendedMovementAmount ?? 5
34824
+ //5 usdcs
34819
34825
  });
34820
34826
  const vesuMultiplyAdapter = new VesuMultiplyAdapter({
34821
34827
  poolId: pool1,
@@ -34828,7 +34834,9 @@ function getLooperSettings2(lstSymbol, underlyingSymbol, vaultSettings, pool1, e
34828
34834
  supportedPositions: [
34829
34835
  { asset: wbtcToken, isDebt: false },
34830
34836
  { asset: usdcToken, isDebt: true }
34831
- ]
34837
+ ],
34838
+ minimumVesuMovementAmount: minimumVesuMovementAmount ?? 5
34839
+ //5 usdc
34832
34840
  });
34833
34841
  const unusedBalanceAdapter = new UnusedBalanceAdapter({
34834
34842
  ...baseAdapterConfig
@@ -34943,12 +34951,12 @@ var re7UsdcPrimeDevansh = {
34943
34951
  borrowable_assets: [Global.getDefaultTokens().find((token) => token.symbol === "WBTC")],
34944
34952
  minimumWBTCDifferenceForAvnuSwap: MINIMUM_WBTC_DIFFERENCE_FOR_AVNU_SWAP
34945
34953
  };
34946
- var VesuExtendedTestStrategies = (extendedBackendUrl, extendedApiKey, vaultIdExtended) => {
34954
+ var VesuExtendedTestStrategies = (extendedBackendUrl, extendedApiKey, vaultIdExtended, minimumExtendedMovementAmount, minimumVesuMovementAmount, minimumExtendedRetriesDelayForOrderStatus) => {
34947
34955
  return [
34948
- getStrategySettingsVesuExtended("WBTC", "USDC", re7UsdcPrimeDevansh, false, false, extendedBackendUrl, extendedApiKey, vaultIdExtended)
34956
+ getStrategySettingsVesuExtended("WBTC", "USDC", re7UsdcPrimeDevansh, false, false, extendedBackendUrl, extendedApiKey, vaultIdExtended, minimumExtendedMovementAmount, minimumVesuMovementAmount, minimumExtendedRetriesDelayForOrderStatus)
34949
34957
  ];
34950
34958
  };
34951
- function getStrategySettingsVesuExtended(lstSymbol, underlyingSymbol, addresses, isPreview = false, isLST, extendedBackendUrl, extendedApiKey, vaultIdExtended) {
34959
+ function getStrategySettingsVesuExtended(lstSymbol, underlyingSymbol, addresses, isPreview = false, isLST, extendedBackendUrl, extendedApiKey, vaultIdExtended, minimumExtendedMovementAmount, minimumVesuMovementAmount, minimumExtendedRetriesDelayForOrderStatus) {
34952
34960
  return {
34953
34961
  name: `Extended Test ${underlyingSymbol}`,
34954
34962
  description: getDescription2(lstSymbol, underlyingSymbol),
@@ -34956,7 +34964,7 @@ function getStrategySettingsVesuExtended(lstSymbol, underlyingSymbol, addresses,
34956
34964
  launchBlock: 0,
34957
34965
  type: "Other",
34958
34966
  depositTokens: [Global.getDefaultTokens().find((token) => token.symbol === underlyingSymbol)],
34959
- additionalInfo: getLooperSettings2(lstSymbol, underlyingSymbol, addresses, VesuPools.Re7USDCPrime, extendedBackendUrl, extendedApiKey, vaultIdExtended),
34967
+ additionalInfo: getLooperSettings2(lstSymbol, underlyingSymbol, addresses, VesuPools.Re7USDCPrime, extendedBackendUrl, extendedApiKey, vaultIdExtended, minimumExtendedMovementAmount, minimumVesuMovementAmount, minimumExtendedRetriesDelayForOrderStatus),
34960
34968
  risk: {
34961
34969
  riskFactor: _riskFactor3,
34962
34970
  netRisk: _riskFactor3.reduce((acc, curr) => acc + curr.value * curr.weight, 0) / _riskFactor3.reduce((acc, curr) => acc + curr.weight, 0),
package/dist/index.d.ts CHANGED
@@ -945,11 +945,13 @@ interface VesuMultiplyAdapterConfig extends BaseAdapterConfig {
945
945
  targetHealthFactor: number;
946
946
  minHealthFactor: number;
947
947
  quoteAmountToFetchPrice: Web3Number;
948
+ minimumVesuMovementAmount: number;
948
949
  }
949
950
  declare class VesuMultiplyAdapter extends BaseAdapter<DepositParams, WithdrawParams> {
950
951
  readonly config: VesuMultiplyAdapterConfig;
951
952
  readonly vesuAdapter: VesuAdapter;
952
953
  readonly tokenMarketData: TokenMarketData;
954
+ readonly minimumVesuMovementAmount: number;
953
955
  constructor(config: VesuMultiplyAdapterConfig);
954
956
  protected getAPY(supportedPosition: SupportedPosition): Promise<PositionAPY>;
955
957
  protected getPosition(supportedPosition: SupportedPosition): Promise<PositionAmount>;
@@ -1472,10 +1474,14 @@ interface ExtendedAdapterConfig extends BaseAdapterConfig {
1472
1474
  extendedMarketName: string;
1473
1475
  extendedPrecision: number;
1474
1476
  avnuAdapter: AvnuAdapter;
1477
+ retryDelayForOrderStatus: number;
1478
+ minimumExtendedMovementAmount: number;
1475
1479
  }
1476
1480
  declare class ExtendedAdapter extends BaseAdapter<DepositParams, WithdrawParams> {
1477
1481
  readonly config: ExtendedAdapterConfig;
1478
1482
  readonly client: ExtendedWrapper;
1483
+ readonly retryDelayForOrderStatus: number;
1484
+ readonly minimumExtendedMovementAmount: number;
1479
1485
  constructor(config: ExtendedAdapterConfig);
1480
1486
  protected getAPY(supportedPosition: SupportedPosition): Promise<PositionAPY>;
1481
1487
  protected getPosition(supportedPosition: SupportedPosition): Promise<PositionAmount>;
@@ -2245,7 +2251,7 @@ declare class VesuExtendedMultiplierStrategy<S extends VesuExtendedStrategySetti
2245
2251
  splits: PositionInfo[];
2246
2252
  }>;
2247
2253
  }
2248
- declare const VesuExtendedTestStrategies: (extendedBackendUrl: string, extendedApiKey: string, vaultIdExtended: number) => IStrategyMetadata<VesuExtendedStrategySettings>[];
2254
+ declare const VesuExtendedTestStrategies: (extendedBackendUrl: string, extendedApiKey: string, vaultIdExtended: number, minimumExtendedMovementAmount: number, minimumVesuMovementAmount: number, minimumExtendedRetriesDelayForOrderStatus: number) => IStrategyMetadata<VesuExtendedStrategySettings>[];
2249
2255
 
2250
2256
  declare const AddressesConfig: {
2251
2257
  readonly tokens: {
package/dist/index.js CHANGED
@@ -28168,7 +28168,7 @@ var STRK_API_RPC = process.env.STRK_API_RPC ?? "https://mainnet.starknet.a5a.ch"
28168
28168
  var MAX_RETRIES = Number(process.env.MAX_RETRIES ?? 3);
28169
28169
  var MAX_DELAY = Number(process.env.MAX_DELAY ?? 100);
28170
28170
  var EXTEND_MARKET_NAME = "BTC-USD";
28171
- var LIMIT_BALANCE = Number(process.env.LIMIT_BALANCE ?? 10);
28171
+ var LIMIT_BALANCE = Number(process.env.LIMIT_BALANCE ?? 0.05);
28172
28172
  var REBALANCER_INTERVAL = Number(process.env.REBALANCER_INTERVAL ?? 18e4);
28173
28173
  var WITHDRAWAL_INTERVAL = Number(process.env.WITHDRAWAL_INTERVAL ?? 18e6);
28174
28174
  var INVESTING_INTERVAL = Number(process.env.INVESTING_INTERVAL ?? 18e4);
@@ -28425,6 +28425,7 @@ var VesuMultiplyAdapter = class _VesuMultiplyAdapter extends BaseAdapter {
28425
28425
  vaultAllocator: config.vaultAllocator,
28426
28426
  id: ""
28427
28427
  });
28428
+ this.minimumVesuMovementAmount = config.minimumVesuMovementAmount ?? 5;
28428
28429
  this.tokenMarketData = new TokenMarketData(
28429
28430
  this.config.pricer,
28430
28431
  this.config.networkConfig
@@ -29771,7 +29772,9 @@ var ExtendedAdapter = class _ExtendedAdapter extends BaseAdapter {
29771
29772
  timeout: this.config.extendedTimeout,
29772
29773
  retries: this.config.extendedRetries
29773
29774
  });
29775
+ this.minimumExtendedMovementAmount = this.config.minimumExtendedMovementAmount ?? 5;
29774
29776
  this.client = client;
29777
+ this.retryDelayForOrderStatus = this.config.retryDelayForOrderStatus ?? 3e3;
29775
29778
  }
29776
29779
  //abstract means the method has no implementation in this class; instead, child classes must implement it.
29777
29780
  async getAPY(supportedPosition) {
@@ -30155,13 +30158,13 @@ var ExtendedAdapter = class _ExtendedAdapter extends BaseAdapter {
30155
30158
  if (!orderhistory || orderhistory.length === 0) {
30156
30159
  logger.error(`error getting order history: ${orderId}`);
30157
30160
  } else {
30158
- const order = orderhistory.slice(0, 5).find((order2) => order2.id.toString() === orderId);
30161
+ const order = orderhistory.slice(0, 10).find((order2) => order2.id.toString() === orderId);
30159
30162
  if (order) {
30160
30163
  return order;
30161
30164
  }
30162
30165
  }
30163
- for (let attempt = 1; attempt <= 3; attempt++) {
30164
- await new Promise((resolve) => setTimeout(resolve, 3e3));
30166
+ for (let attempt = 1; attempt <= 5; attempt++) {
30167
+ await new Promise((resolve) => setTimeout(resolve, this.retryDelayForOrderStatus));
30165
30168
  orderhistory = await this.getOrderHistory(marketName);
30166
30169
  if (!orderhistory || orderhistory.length === 0) {
30167
30170
  logger.error(
@@ -30170,11 +30173,11 @@ var ExtendedAdapter = class _ExtendedAdapter extends BaseAdapter {
30170
30173
  continue;
30171
30174
  }
30172
30175
  const order = orderhistory.slice(0, 5).find((order2) => order2.id.toString() === orderId);
30173
- if (order) {
30176
+ if (order && order.status === "FILLED" /* FILLED */) {
30174
30177
  return order;
30175
30178
  }
30176
30179
  logger.error(
30177
- `order not found in top 5 entries on retry ${attempt}: ${orderId}`
30180
+ `order not found in top 15 entries on retry ${attempt}: ${orderId}`
30178
30181
  );
30179
30182
  }
30180
30183
  logger.error(`error getting order after all retries: ${orderId}`);
@@ -30255,7 +30258,7 @@ var ExtendedAdapter = class _ExtendedAdapter extends BaseAdapter {
30255
30258
  result.position_id,
30256
30259
  this.config.extendedMarketName
30257
30260
  );
30258
- if (!openOrder || openOrder.status !== "FILLED" /* FILLED */) {
30261
+ if (!openOrder) {
30259
30262
  if (attempt >= maxAttempts) {
30260
30263
  logger.error("Max retries reached \u2014 could not verify open position");
30261
30264
  return null;
@@ -33609,7 +33612,8 @@ function getLooperSettings(lstSymbol, underlyingSymbol, vaultSettings, pool1) {
33609
33612
  minHealthFactor: vaultSettings.minHealthFactor,
33610
33613
  quoteAmountToFetchPrice: vaultSettings.quoteAmountToFetchPrice,
33611
33614
  ...baseAdapterConfig,
33612
- supportedPositions: [{ asset: lstToken, isDebt: false }, { asset: Global.getDefaultTokens().find((token) => token.symbol === position), isDebt: true }]
33615
+ supportedPositions: [{ asset: lstToken, isDebt: false }, { asset: Global.getDefaultTokens().find((token) => token.symbol === position), isDebt: true }],
33616
+ minimumVesuMovementAmount: 0
33613
33617
  }));
33614
33618
  const unusedBalanceAdapter = new UnusedBalanceAdapter({
33615
33619
  ...baseAdapterConfig
@@ -33952,7 +33956,6 @@ var AvnuAdapter = class _AvnuAdapter extends BaseAdapter {
33952
33956
  toToken.decimals,
33953
33957
  true
33954
33958
  );
33955
- console.log(`${_AvnuAdapter.name}::getDepositCall quote: ${quote?.sellAmountInUsd}`);
33956
33959
  if (!quote) {
33957
33960
  logger.error("error getting quote from avnu");
33958
33961
  return [];
@@ -34311,7 +34314,7 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
34311
34314
  }
34312
34315
  const balance = await this.getUnusedBalance();
34313
34316
  const usdcBalanceOnExtended = await extendedAdapter.getExtendedDepositAmount();
34314
- const amountToInvest = new Web3Number(balance.usdValue, USDC_TOKEN_DECIMALS).plus(usdcBalanceOnExtended?.availableForWithdrawal ?? 0).minus(LIMIT_BALANCE);
34317
+ const amountToInvest = new Web3Number(balance.usdValue, USDC_TOKEN_DECIMALS).plus(usdcBalanceOnExtended?.availableForWithdrawal ?? 0).multipliedBy(1 - LIMIT_BALANCE);
34315
34318
  logger.info(`${_VesuExtendedMultiplierStrategy.name}::shouldInvest amountToInvest: ${amountToInvest.toNumber()}`);
34316
34319
  if (amountToInvest.lessThan(0)) {
34317
34320
  return {
@@ -34399,7 +34402,7 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
34399
34402
  );
34400
34403
  return calls;
34401
34404
  }
34402
- if (extendedAmount.lessThan(0)) {
34405
+ if (extendedAmount.isNegative() && extendedAmount.abs().greaterThan(extendedAdapter.minimumExtendedMovementAmount)) {
34403
34406
  try {
34404
34407
  const { calls: extendedCalls, status: extendedStatus } = await this.moveAssets(
34405
34408
  {
@@ -34419,7 +34422,7 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
34419
34422
  logger.error(`Failed moving assets to vault: ${err}`);
34420
34423
  }
34421
34424
  }
34422
- if (vesuAmount.lessThan(0)) {
34425
+ if (vesuAmount.isNegative() && vesuAmount.lessThan(vesuAdapter.minimumVesuMovementAmount)) {
34423
34426
  try {
34424
34427
  const { calls: vesuCalls, status: vesuStatus } = await this.moveAssets(
34425
34428
  {
@@ -34447,7 +34450,7 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
34447
34450
  const usdcAmountOnExtended = parseFloat(
34448
34451
  extendedHoldings.availableForWithdrawal
34449
34452
  );
34450
- if (extendedAmount.minus(usdcAmountOnExtended).greaterThan(0)) {
34453
+ if (extendedAmount.minus(usdcAmountOnExtended).greaterThan(extendedAdapter.minimumExtendedMovementAmount)) {
34451
34454
  try {
34452
34455
  const { calls: extendedCalls } = await this.moveAssets(
34453
34456
  {
@@ -34463,7 +34466,7 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
34463
34466
  logger.error(`Failed moving assets to extended: ${err}`);
34464
34467
  }
34465
34468
  }
34466
- if (vesuAmount.minus(usdcAmountInWallet).greaterThan(0)) {
34469
+ if (vesuAmount.minus(usdcAmountInWallet).greaterThan(vesuAdapter.minimumVesuMovementAmount)) {
34467
34470
  try {
34468
34471
  const { calls: vesuCalls, status: vesuStatus } = await this.moveAssets(
34469
34472
  {
@@ -34928,7 +34931,7 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
34928
34931
  };
34929
34932
  }
34930
34933
  };
34931
- function getLooperSettings2(lstSymbol, underlyingSymbol, vaultSettings, pool1, extendedBackendUrl, extendedApiKey, vaultIdExtended) {
34934
+ function getLooperSettings2(lstSymbol, underlyingSymbol, vaultSettings, pool1, extendedBackendUrl, extendedApiKey, vaultIdExtended, minimumExtendedMovementAmount, minimumVesuMovementAmount, minimumExtendedRetriesDelayForOrderStatus) {
34932
34935
  vaultSettings.leafAdapters = [];
34933
34936
  const wbtcToken = Global.getDefaultTokens().find(
34934
34937
  (token) => token.symbol === lstSymbol
@@ -34968,7 +34971,10 @@ function getLooperSettings2(lstSymbol, underlyingSymbol, vaultSettings, pool1, e
34968
34971
  extendedBaseUrl: "https://api.starknet.extended.exchange",
34969
34972
  extendedMarketName: "BTC-USD",
34970
34973
  extendedPrecision: 5,
34971
- avnuAdapter
34974
+ avnuAdapter,
34975
+ retryDelayForOrderStatus: minimumExtendedRetriesDelayForOrderStatus ?? 3e3,
34976
+ minimumExtendedMovementAmount: minimumExtendedMovementAmount ?? 5
34977
+ //5 usdcs
34972
34978
  });
34973
34979
  const vesuMultiplyAdapter = new VesuMultiplyAdapter({
34974
34980
  poolId: pool1,
@@ -34981,7 +34987,9 @@ function getLooperSettings2(lstSymbol, underlyingSymbol, vaultSettings, pool1, e
34981
34987
  supportedPositions: [
34982
34988
  { asset: wbtcToken, isDebt: false },
34983
34989
  { asset: usdcToken, isDebt: true }
34984
- ]
34990
+ ],
34991
+ minimumVesuMovementAmount: minimumVesuMovementAmount ?? 5
34992
+ //5 usdc
34985
34993
  });
34986
34994
  const unusedBalanceAdapter = new UnusedBalanceAdapter({
34987
34995
  ...baseAdapterConfig
@@ -35096,12 +35104,12 @@ var re7UsdcPrimeDevansh = {
35096
35104
  borrowable_assets: [Global.getDefaultTokens().find((token) => token.symbol === "WBTC")],
35097
35105
  minimumWBTCDifferenceForAvnuSwap: MINIMUM_WBTC_DIFFERENCE_FOR_AVNU_SWAP
35098
35106
  };
35099
- var VesuExtendedTestStrategies = (extendedBackendUrl, extendedApiKey, vaultIdExtended) => {
35107
+ var VesuExtendedTestStrategies = (extendedBackendUrl, extendedApiKey, vaultIdExtended, minimumExtendedMovementAmount, minimumVesuMovementAmount, minimumExtendedRetriesDelayForOrderStatus) => {
35100
35108
  return [
35101
- getStrategySettingsVesuExtended("WBTC", "USDC", re7UsdcPrimeDevansh, false, false, extendedBackendUrl, extendedApiKey, vaultIdExtended)
35109
+ getStrategySettingsVesuExtended("WBTC", "USDC", re7UsdcPrimeDevansh, false, false, extendedBackendUrl, extendedApiKey, vaultIdExtended, minimumExtendedMovementAmount, minimumVesuMovementAmount, minimumExtendedRetriesDelayForOrderStatus)
35102
35110
  ];
35103
35111
  };
35104
- function getStrategySettingsVesuExtended(lstSymbol, underlyingSymbol, addresses, isPreview = false, isLST, extendedBackendUrl, extendedApiKey, vaultIdExtended) {
35112
+ function getStrategySettingsVesuExtended(lstSymbol, underlyingSymbol, addresses, isPreview = false, isLST, extendedBackendUrl, extendedApiKey, vaultIdExtended, minimumExtendedMovementAmount, minimumVesuMovementAmount, minimumExtendedRetriesDelayForOrderStatus) {
35105
35113
  return {
35106
35114
  name: `Extended Test ${underlyingSymbol}`,
35107
35115
  description: getDescription2(lstSymbol, underlyingSymbol),
@@ -35109,7 +35117,7 @@ function getStrategySettingsVesuExtended(lstSymbol, underlyingSymbol, addresses,
35109
35117
  launchBlock: 0,
35110
35118
  type: "Other",
35111
35119
  depositTokens: [Global.getDefaultTokens().find((token) => token.symbol === underlyingSymbol)],
35112
- additionalInfo: getLooperSettings2(lstSymbol, underlyingSymbol, addresses, VesuPools.Re7USDCPrime, extendedBackendUrl, extendedApiKey, vaultIdExtended),
35120
+ additionalInfo: getLooperSettings2(lstSymbol, underlyingSymbol, addresses, VesuPools.Re7USDCPrime, extendedBackendUrl, extendedApiKey, vaultIdExtended, minimumExtendedMovementAmount, minimumVesuMovementAmount, minimumExtendedRetriesDelayForOrderStatus),
35113
35121
  risk: {
35114
35122
  riskFactor: _riskFactor3,
35115
35123
  netRisk: _riskFactor3.reduce((acc, curr) => acc + curr.value * curr.weight, 0) / _riskFactor3.reduce((acc, curr) => acc + curr.weight, 0),
package/dist/index.mjs CHANGED
@@ -28026,7 +28026,7 @@ var STRK_API_RPC = process.env.STRK_API_RPC ?? "https://mainnet.starknet.a5a.ch"
28026
28026
  var MAX_RETRIES = Number(process.env.MAX_RETRIES ?? 3);
28027
28027
  var MAX_DELAY = Number(process.env.MAX_DELAY ?? 100);
28028
28028
  var EXTEND_MARKET_NAME = "BTC-USD";
28029
- var LIMIT_BALANCE = Number(process.env.LIMIT_BALANCE ?? 10);
28029
+ var LIMIT_BALANCE = Number(process.env.LIMIT_BALANCE ?? 0.05);
28030
28030
  var REBALANCER_INTERVAL = Number(process.env.REBALANCER_INTERVAL ?? 18e4);
28031
28031
  var WITHDRAWAL_INTERVAL = Number(process.env.WITHDRAWAL_INTERVAL ?? 18e6);
28032
28032
  var INVESTING_INTERVAL = Number(process.env.INVESTING_INTERVAL ?? 18e4);
@@ -28283,6 +28283,7 @@ var VesuMultiplyAdapter = class _VesuMultiplyAdapter extends BaseAdapter {
28283
28283
  vaultAllocator: config.vaultAllocator,
28284
28284
  id: ""
28285
28285
  });
28286
+ this.minimumVesuMovementAmount = config.minimumVesuMovementAmount ?? 5;
28286
28287
  this.tokenMarketData = new TokenMarketData(
28287
28288
  this.config.pricer,
28288
28289
  this.config.networkConfig
@@ -29629,7 +29630,9 @@ var ExtendedAdapter = class _ExtendedAdapter extends BaseAdapter {
29629
29630
  timeout: this.config.extendedTimeout,
29630
29631
  retries: this.config.extendedRetries
29631
29632
  });
29633
+ this.minimumExtendedMovementAmount = this.config.minimumExtendedMovementAmount ?? 5;
29632
29634
  this.client = client;
29635
+ this.retryDelayForOrderStatus = this.config.retryDelayForOrderStatus ?? 3e3;
29633
29636
  }
29634
29637
  //abstract means the method has no implementation in this class; instead, child classes must implement it.
29635
29638
  async getAPY(supportedPosition) {
@@ -30013,13 +30016,13 @@ var ExtendedAdapter = class _ExtendedAdapter extends BaseAdapter {
30013
30016
  if (!orderhistory || orderhistory.length === 0) {
30014
30017
  logger.error(`error getting order history: ${orderId}`);
30015
30018
  } else {
30016
- const order = orderhistory.slice(0, 5).find((order2) => order2.id.toString() === orderId);
30019
+ const order = orderhistory.slice(0, 10).find((order2) => order2.id.toString() === orderId);
30017
30020
  if (order) {
30018
30021
  return order;
30019
30022
  }
30020
30023
  }
30021
- for (let attempt = 1; attempt <= 3; attempt++) {
30022
- await new Promise((resolve) => setTimeout(resolve, 3e3));
30024
+ for (let attempt = 1; attempt <= 5; attempt++) {
30025
+ await new Promise((resolve) => setTimeout(resolve, this.retryDelayForOrderStatus));
30023
30026
  orderhistory = await this.getOrderHistory(marketName);
30024
30027
  if (!orderhistory || orderhistory.length === 0) {
30025
30028
  logger.error(
@@ -30028,11 +30031,11 @@ var ExtendedAdapter = class _ExtendedAdapter extends BaseAdapter {
30028
30031
  continue;
30029
30032
  }
30030
30033
  const order = orderhistory.slice(0, 5).find((order2) => order2.id.toString() === orderId);
30031
- if (order) {
30034
+ if (order && order.status === "FILLED" /* FILLED */) {
30032
30035
  return order;
30033
30036
  }
30034
30037
  logger.error(
30035
- `order not found in top 5 entries on retry ${attempt}: ${orderId}`
30038
+ `order not found in top 15 entries on retry ${attempt}: ${orderId}`
30036
30039
  );
30037
30040
  }
30038
30041
  logger.error(`error getting order after all retries: ${orderId}`);
@@ -30113,7 +30116,7 @@ var ExtendedAdapter = class _ExtendedAdapter extends BaseAdapter {
30113
30116
  result.position_id,
30114
30117
  this.config.extendedMarketName
30115
30118
  );
30116
- if (!openOrder || openOrder.status !== "FILLED" /* FILLED */) {
30119
+ if (!openOrder) {
30117
30120
  if (attempt >= maxAttempts) {
30118
30121
  logger.error("Max retries reached \u2014 could not verify open position");
30119
30122
  return null;
@@ -33467,7 +33470,8 @@ function getLooperSettings(lstSymbol, underlyingSymbol, vaultSettings, pool1) {
33467
33470
  minHealthFactor: vaultSettings.minHealthFactor,
33468
33471
  quoteAmountToFetchPrice: vaultSettings.quoteAmountToFetchPrice,
33469
33472
  ...baseAdapterConfig,
33470
- supportedPositions: [{ asset: lstToken, isDebt: false }, { asset: Global.getDefaultTokens().find((token) => token.symbol === position), isDebt: true }]
33473
+ supportedPositions: [{ asset: lstToken, isDebt: false }, { asset: Global.getDefaultTokens().find((token) => token.symbol === position), isDebt: true }],
33474
+ minimumVesuMovementAmount: 0
33471
33475
  }));
33472
33476
  const unusedBalanceAdapter = new UnusedBalanceAdapter({
33473
33477
  ...baseAdapterConfig
@@ -33810,7 +33814,6 @@ var AvnuAdapter = class _AvnuAdapter extends BaseAdapter {
33810
33814
  toToken.decimals,
33811
33815
  true
33812
33816
  );
33813
- console.log(`${_AvnuAdapter.name}::getDepositCall quote: ${quote?.sellAmountInUsd}`);
33814
33817
  if (!quote) {
33815
33818
  logger.error("error getting quote from avnu");
33816
33819
  return [];
@@ -34169,7 +34172,7 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
34169
34172
  }
34170
34173
  const balance = await this.getUnusedBalance();
34171
34174
  const usdcBalanceOnExtended = await extendedAdapter.getExtendedDepositAmount();
34172
- const amountToInvest = new Web3Number(balance.usdValue, USDC_TOKEN_DECIMALS).plus(usdcBalanceOnExtended?.availableForWithdrawal ?? 0).minus(LIMIT_BALANCE);
34175
+ const amountToInvest = new Web3Number(balance.usdValue, USDC_TOKEN_DECIMALS).plus(usdcBalanceOnExtended?.availableForWithdrawal ?? 0).multipliedBy(1 - LIMIT_BALANCE);
34173
34176
  logger.info(`${_VesuExtendedMultiplierStrategy.name}::shouldInvest amountToInvest: ${amountToInvest.toNumber()}`);
34174
34177
  if (amountToInvest.lessThan(0)) {
34175
34178
  return {
@@ -34257,7 +34260,7 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
34257
34260
  );
34258
34261
  return calls;
34259
34262
  }
34260
- if (extendedAmount.lessThan(0)) {
34263
+ if (extendedAmount.isNegative() && extendedAmount.abs().greaterThan(extendedAdapter.minimumExtendedMovementAmount)) {
34261
34264
  try {
34262
34265
  const { calls: extendedCalls, status: extendedStatus } = await this.moveAssets(
34263
34266
  {
@@ -34277,7 +34280,7 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
34277
34280
  logger.error(`Failed moving assets to vault: ${err}`);
34278
34281
  }
34279
34282
  }
34280
- if (vesuAmount.lessThan(0)) {
34283
+ if (vesuAmount.isNegative() && vesuAmount.lessThan(vesuAdapter.minimumVesuMovementAmount)) {
34281
34284
  try {
34282
34285
  const { calls: vesuCalls, status: vesuStatus } = await this.moveAssets(
34283
34286
  {
@@ -34305,7 +34308,7 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
34305
34308
  const usdcAmountOnExtended = parseFloat(
34306
34309
  extendedHoldings.availableForWithdrawal
34307
34310
  );
34308
- if (extendedAmount.minus(usdcAmountOnExtended).greaterThan(0)) {
34311
+ if (extendedAmount.minus(usdcAmountOnExtended).greaterThan(extendedAdapter.minimumExtendedMovementAmount)) {
34309
34312
  try {
34310
34313
  const { calls: extendedCalls } = await this.moveAssets(
34311
34314
  {
@@ -34321,7 +34324,7 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
34321
34324
  logger.error(`Failed moving assets to extended: ${err}`);
34322
34325
  }
34323
34326
  }
34324
- if (vesuAmount.minus(usdcAmountInWallet).greaterThan(0)) {
34327
+ if (vesuAmount.minus(usdcAmountInWallet).greaterThan(vesuAdapter.minimumVesuMovementAmount)) {
34325
34328
  try {
34326
34329
  const { calls: vesuCalls, status: vesuStatus } = await this.moveAssets(
34327
34330
  {
@@ -34786,7 +34789,7 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
34786
34789
  };
34787
34790
  }
34788
34791
  };
34789
- function getLooperSettings2(lstSymbol, underlyingSymbol, vaultSettings, pool1, extendedBackendUrl, extendedApiKey, vaultIdExtended) {
34792
+ function getLooperSettings2(lstSymbol, underlyingSymbol, vaultSettings, pool1, extendedBackendUrl, extendedApiKey, vaultIdExtended, minimumExtendedMovementAmount, minimumVesuMovementAmount, minimumExtendedRetriesDelayForOrderStatus) {
34790
34793
  vaultSettings.leafAdapters = [];
34791
34794
  const wbtcToken = Global.getDefaultTokens().find(
34792
34795
  (token) => token.symbol === lstSymbol
@@ -34826,7 +34829,10 @@ function getLooperSettings2(lstSymbol, underlyingSymbol, vaultSettings, pool1, e
34826
34829
  extendedBaseUrl: "https://api.starknet.extended.exchange",
34827
34830
  extendedMarketName: "BTC-USD",
34828
34831
  extendedPrecision: 5,
34829
- avnuAdapter
34832
+ avnuAdapter,
34833
+ retryDelayForOrderStatus: minimumExtendedRetriesDelayForOrderStatus ?? 3e3,
34834
+ minimumExtendedMovementAmount: minimumExtendedMovementAmount ?? 5
34835
+ //5 usdcs
34830
34836
  });
34831
34837
  const vesuMultiplyAdapter = new VesuMultiplyAdapter({
34832
34838
  poolId: pool1,
@@ -34839,7 +34845,9 @@ function getLooperSettings2(lstSymbol, underlyingSymbol, vaultSettings, pool1, e
34839
34845
  supportedPositions: [
34840
34846
  { asset: wbtcToken, isDebt: false },
34841
34847
  { asset: usdcToken, isDebt: true }
34842
- ]
34848
+ ],
34849
+ minimumVesuMovementAmount: minimumVesuMovementAmount ?? 5
34850
+ //5 usdc
34843
34851
  });
34844
34852
  const unusedBalanceAdapter = new UnusedBalanceAdapter({
34845
34853
  ...baseAdapterConfig
@@ -34954,12 +34962,12 @@ var re7UsdcPrimeDevansh = {
34954
34962
  borrowable_assets: [Global.getDefaultTokens().find((token) => token.symbol === "WBTC")],
34955
34963
  minimumWBTCDifferenceForAvnuSwap: MINIMUM_WBTC_DIFFERENCE_FOR_AVNU_SWAP
34956
34964
  };
34957
- var VesuExtendedTestStrategies = (extendedBackendUrl, extendedApiKey, vaultIdExtended) => {
34965
+ var VesuExtendedTestStrategies = (extendedBackendUrl, extendedApiKey, vaultIdExtended, minimumExtendedMovementAmount, minimumVesuMovementAmount, minimumExtendedRetriesDelayForOrderStatus) => {
34958
34966
  return [
34959
- getStrategySettingsVesuExtended("WBTC", "USDC", re7UsdcPrimeDevansh, false, false, extendedBackendUrl, extendedApiKey, vaultIdExtended)
34967
+ getStrategySettingsVesuExtended("WBTC", "USDC", re7UsdcPrimeDevansh, false, false, extendedBackendUrl, extendedApiKey, vaultIdExtended, minimumExtendedMovementAmount, minimumVesuMovementAmount, minimumExtendedRetriesDelayForOrderStatus)
34960
34968
  ];
34961
34969
  };
34962
- function getStrategySettingsVesuExtended(lstSymbol, underlyingSymbol, addresses, isPreview = false, isLST, extendedBackendUrl, extendedApiKey, vaultIdExtended) {
34970
+ function getStrategySettingsVesuExtended(lstSymbol, underlyingSymbol, addresses, isPreview = false, isLST, extendedBackendUrl, extendedApiKey, vaultIdExtended, minimumExtendedMovementAmount, minimumVesuMovementAmount, minimumExtendedRetriesDelayForOrderStatus) {
34963
34971
  return {
34964
34972
  name: `Extended Test ${underlyingSymbol}`,
34965
34973
  description: getDescription2(lstSymbol, underlyingSymbol),
@@ -34967,7 +34975,7 @@ function getStrategySettingsVesuExtended(lstSymbol, underlyingSymbol, addresses,
34967
34975
  launchBlock: 0,
34968
34976
  type: "Other",
34969
34977
  depositTokens: [Global.getDefaultTokens().find((token) => token.symbol === underlyingSymbol)],
34970
- additionalInfo: getLooperSettings2(lstSymbol, underlyingSymbol, addresses, VesuPools.Re7USDCPrime, extendedBackendUrl, extendedApiKey, vaultIdExtended),
34978
+ additionalInfo: getLooperSettings2(lstSymbol, underlyingSymbol, addresses, VesuPools.Re7USDCPrime, extendedBackendUrl, extendedApiKey, vaultIdExtended, minimumExtendedMovementAmount, minimumVesuMovementAmount, minimumExtendedRetriesDelayForOrderStatus),
34971
34979
  risk: {
34972
34980
  riskFactor: _riskFactor3,
34973
34981
  netRisk: _riskFactor3.reduce((acc, curr) => acc + curr.value * curr.weight, 0) / _riskFactor3.reduce((acc, curr) => acc + curr.weight, 0),
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@strkfarm/sdk",
3
- "version": "2.0.0-dev.6",
3
+ "version": "2.0.0-dev.7",
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",
@@ -45,6 +45,8 @@ export interface ExtendedAdapterConfig extends BaseAdapterConfig {
45
45
  extendedMarketName: string;
46
46
  extendedPrecision: number;
47
47
  avnuAdapter: AvnuAdapter;
48
+ retryDelayForOrderStatus: number;
49
+ minimumExtendedMovementAmount: number;
48
50
  }
49
51
 
50
52
  export class ExtendedAdapter extends BaseAdapter<
@@ -53,6 +55,8 @@ export class ExtendedAdapter extends BaseAdapter<
53
55
  > {
54
56
  readonly config: ExtendedAdapterConfig;
55
57
  readonly client: ExtendedWrapper;
58
+ readonly retryDelayForOrderStatus: number;
59
+ readonly minimumExtendedMovementAmount: number;
56
60
 
57
61
  constructor(config: ExtendedAdapterConfig) {
58
62
  super(config, ExtendedAdapter.name, Protocols.EXTENDED);
@@ -63,7 +67,9 @@ export class ExtendedAdapter extends BaseAdapter<
63
67
  timeout: this.config.extendedTimeout,
64
68
  retries: this.config.extendedRetries,
65
69
  });
70
+ this.minimumExtendedMovementAmount = this.config.minimumExtendedMovementAmount ?? 5; //5 usdc
66
71
  this.client = client;
72
+ this.retryDelayForOrderStatus = this.config.retryDelayForOrderStatus ?? 3000;
67
73
  }
68
74
  //abstract means the method has no implementation in this class; instead, child classes must implement it.
69
75
  protected async getAPY(
@@ -507,7 +513,7 @@ export class ExtendedAdapter extends BaseAdapter<
507
513
  logger.error(`error getting order history: ${orderId}`);
508
514
  } else {
509
515
  const order = orderhistory
510
- .slice(0, 5)
516
+ .slice(0, 10)
511
517
  .find((order) => order.id.toString() === orderId);
512
518
  if (order) {
513
519
  return order;
@@ -515,8 +521,8 @@ export class ExtendedAdapter extends BaseAdapter<
515
521
  }
516
522
 
517
523
  // Retry logic: 3 more attempts with 3 second delay each
518
- for (let attempt = 1; attempt <= 3; attempt++) {
519
- await new Promise((resolve) => setTimeout(resolve, 3000));
524
+ for (let attempt = 1; attempt <= 5; attempt++) {
525
+ await new Promise((resolve) => setTimeout(resolve, this.retryDelayForOrderStatus));
520
526
  orderhistory = await this.getOrderHistory(marketName);
521
527
 
522
528
  if (!orderhistory || orderhistory.length === 0) {
@@ -530,12 +536,12 @@ export class ExtendedAdapter extends BaseAdapter<
530
536
  .slice(0, 5)
531
537
  .find((order) => order.id.toString() === orderId);
532
538
 
533
- if (order) {
539
+ if (order && order.status === OrderStatus.FILLED) {
534
540
  return order;
535
541
  }
536
542
 
537
543
  logger.error(
538
- `order not found in top 5 entries on retry ${attempt}: ${orderId}`
544
+ `order not found in top 15 entries on retry ${attempt}: ${orderId}`
539
545
  );
540
546
  }
541
547
 
@@ -631,7 +637,7 @@ export class ExtendedAdapter extends BaseAdapter<
631
637
  result.position_id,
632
638
  this.config.extendedMarketName
633
639
  );
634
- if (!openOrder || openOrder.status !== OrderStatus.FILLED) {
640
+ if (!openOrder) {
635
641
  if (attempt >= maxAttempts) {
636
642
  logger.error("Max retries reached — could not verify open position");
637
643
  return null;
@@ -50,6 +50,7 @@ export interface VesuMultiplyAdapterConfig extends BaseAdapterConfig {
50
50
  targetHealthFactor: number;
51
51
  minHealthFactor: number;
52
52
  quoteAmountToFetchPrice: Web3Number;
53
+ minimumVesuMovementAmount: number;
53
54
  }
54
55
 
55
56
  export class VesuMultiplyAdapter extends BaseAdapter<
@@ -59,7 +60,7 @@ export class VesuMultiplyAdapter extends BaseAdapter<
59
60
  readonly config: VesuMultiplyAdapterConfig;
60
61
  readonly vesuAdapter: VesuAdapter;
61
62
  readonly tokenMarketData: TokenMarketData;
62
-
63
+ readonly minimumVesuMovementAmount: number;
63
64
  constructor(config: VesuMultiplyAdapterConfig) {
64
65
  super(config, VesuMultiplyAdapter.name, Protocols.VESU);
65
66
  this.config = config;
@@ -70,6 +71,7 @@ export class VesuMultiplyAdapter extends BaseAdapter<
70
71
  vaultAllocator: config.vaultAllocator,
71
72
  id: "",
72
73
  });
74
+ this.minimumVesuMovementAmount = config.minimumVesuMovementAmount ?? 5; //5 usdc
73
75
  this.tokenMarketData = new TokenMarketData(
74
76
  this.config.pricer,
75
77
  this.config.networkConfig
@@ -786,7 +786,8 @@ function getLooperSettings(
786
786
  minHealthFactor: vaultSettings.minHealthFactor,
787
787
  quoteAmountToFetchPrice: vaultSettings.quoteAmountToFetchPrice,
788
788
  ...baseAdapterConfig,
789
- supportedPositions: [{asset: lstToken, isDebt: false}, {asset: Global.getDefaultTokens().find(token => token.symbol === position)!, isDebt: true}]
789
+ supportedPositions: [{asset: lstToken, isDebt: false}, {asset: Global.getDefaultTokens().find(token => token.symbol === position)!, isDebt: true}],
790
+ minimumVesuMovementAmount: 0
790
791
  }));
791
792
 
792
793
  const unusedBalanceAdapter = new UnusedBalanceAdapter({
@@ -22,7 +22,7 @@ export const STRK_API_RPC = process.env.STRK_API_RPC ?? "https://mainnet.starkne
22
22
  export const MAX_RETRIES = Number(process.env.MAX_RETRIES ?? 3);
23
23
  export const MAX_DELAY = Number(process.env.MAX_DELAY ?? 100);
24
24
  export const EXTEND_MARKET_NAME = "BTC-USD";
25
- export const LIMIT_BALANCE = Number(process.env.LIMIT_BALANCE ?? 10);
25
+ export const LIMIT_BALANCE = Number(process.env.LIMIT_BALANCE ?? 0.05);
26
26
  export const REBALANCER_INTERVAL = Number(process.env.REBALANCER_INTERVAL ?? 180000); //3 mins
27
27
  export const WITHDRAWAL_INTERVAL = Number(process.env.WITHDRAWAL_INTERVAL ?? 18000000); //5 hours
28
28
  export const INVESTING_INTERVAL = Number(process.env.INVESTING_INTERVAL ?? 180000); //3 mins
@@ -71,7 +71,6 @@ export class VesuExtendedMultiplierStrategy<
71
71
  >
72
72
  extends SVKStrategy<S>
73
73
  implements Operations {
74
-
75
74
  constructor(
76
75
  config: IConfig,
77
76
  pricer: PricerBase,
@@ -108,7 +107,7 @@ export class VesuExtendedMultiplierStrategy<
108
107
  debtPrice,
109
108
  };
110
109
  }
111
-
110
+
112
111
  async getUnusedBalanceUSDCE(): Promise<SingleTokenInfo> {
113
112
  const usdceToken = Global.getDefaultTokens().find(
114
113
  (token) => token.symbol === "USDCe"
@@ -238,7 +237,7 @@ export class VesuExtendedMultiplierStrategy<
238
237
  const balance = await this.getUnusedBalance();
239
238
  const usdcBalanceOnExtended = await extendedAdapter.getExtendedDepositAmount();
240
239
  /** The LIMIT_BALANCE is the bffer amount to keep in the investing Cycle */
241
- const amountToInvest = new Web3Number(balance.usdValue, USDC_TOKEN_DECIMALS).plus(usdcBalanceOnExtended?.availableForWithdrawal ?? 0).minus(LIMIT_BALANCE);
240
+ const amountToInvest = new Web3Number(balance.usdValue, USDC_TOKEN_DECIMALS).plus(usdcBalanceOnExtended?.availableForWithdrawal ?? 0).multipliedBy(1 - LIMIT_BALANCE);
242
241
  logger.info(`${VesuExtendedMultiplierStrategy.name}::shouldInvest amountToInvest: ${amountToInvest.toNumber()}`);
243
242
  if (amountToInvest.lessThan(0)) {
244
243
  return {
@@ -336,7 +335,7 @@ export class VesuExtendedMultiplierStrategy<
336
335
  );
337
336
  return calls;
338
337
  }
339
- if (extendedAmount.lessThan(0)) {
338
+ if (extendedAmount.isNegative() && extendedAmount.abs().greaterThan(extendedAdapter.minimumExtendedMovementAmount)) {
340
339
  try {
341
340
  const { calls: extendedCalls, status: extendedStatus } = await this.moveAssets(
342
341
  {
@@ -358,7 +357,7 @@ export class VesuExtendedMultiplierStrategy<
358
357
  }
359
358
  }
360
359
 
361
- if (vesuAmount.lessThan(0)) {
360
+ if (vesuAmount.isNegative() && vesuAmount.lessThan(vesuAdapter.minimumVesuMovementAmount)) {
362
361
  try {
363
362
  const { calls: vesuCalls, status: vesuStatus } = await this.moveAssets(
364
363
  {
@@ -387,7 +386,7 @@ export class VesuExtendedMultiplierStrategy<
387
386
  const usdcAmountOnExtended = parseFloat(
388
387
  extendedHoldings.availableForWithdrawal
389
388
  );
390
- if (extendedAmount.minus(usdcAmountOnExtended).greaterThan(0)) {
389
+ if (extendedAmount.minus(usdcAmountOnExtended).greaterThan(extendedAdapter.minimumExtendedMovementAmount)) {
391
390
  //move assets to extended
392
391
  try {
393
392
  const { calls: extendedCalls } = await this.moveAssets(
@@ -404,7 +403,7 @@ export class VesuExtendedMultiplierStrategy<
404
403
  logger.error(`Failed moving assets to extended: ${err}`);
405
404
  }
406
405
  }
407
- if (vesuAmount.minus(usdcAmountInWallet).greaterThan(0)) {
406
+ if (vesuAmount.minus(usdcAmountInWallet).greaterThan(vesuAdapter.minimumVesuMovementAmount)) {
408
407
  //move assets to vesu
409
408
  try {
410
409
  const { calls: vesuCalls, status: vesuStatus } = await this.moveAssets(
@@ -913,6 +912,9 @@ function getLooperSettings(
913
912
  extendedBackendUrl: string,
914
913
  extendedApiKey: string,
915
914
  vaultIdExtended: number,
915
+ minimumExtendedMovementAmount: number,
916
+ minimumVesuMovementAmount: number,
917
+ minimumExtendedRetriesDelayForOrderStatus: number,
916
918
  ) {
917
919
  vaultSettings.leafAdapters = [];
918
920
 
@@ -958,6 +960,8 @@ function getLooperSettings(
958
960
  extendedMarketName: "BTC-USD",
959
961
  extendedPrecision: 5,
960
962
  avnuAdapter: avnuAdapter,
963
+ retryDelayForOrderStatus: minimumExtendedRetriesDelayForOrderStatus ?? 3000,
964
+ minimumExtendedMovementAmount: minimumExtendedMovementAmount ?? 5, //5 usdcs
961
965
  });
962
966
 
963
967
  const vesuMultiplyAdapter = new VesuMultiplyAdapter({
@@ -972,6 +976,7 @@ function getLooperSettings(
972
976
  { asset: wbtcToken, isDebt: false },
973
977
  { asset: usdcToken, isDebt: true },
974
978
  ],
979
+ minimumVesuMovementAmount: minimumVesuMovementAmount ?? 5, //5 usdc
975
980
  });
976
981
 
977
982
  const unusedBalanceAdapter = new UnusedBalanceAdapter({
@@ -1105,15 +1110,15 @@ const re7UsdcPrimeDevansh: VesuExtendedStrategySettings = {
1105
1110
  minimumWBTCDifferenceForAvnuSwap: MINIMUM_WBTC_DIFFERENCE_FOR_AVNU_SWAP,
1106
1111
  }
1107
1112
 
1108
- export const VesuExtendedTestStrategies = (extendedBackendUrl: string, extendedApiKey: string, vaultIdExtended: number): IStrategyMetadata<VesuExtendedStrategySettings>[] => {
1113
+ export const VesuExtendedTestStrategies = (extendedBackendUrl: string, extendedApiKey: string, vaultIdExtended: number, minimumExtendedMovementAmount: number, minimumVesuMovementAmount: number, minimumExtendedRetriesDelayForOrderStatus: number): IStrategyMetadata<VesuExtendedStrategySettings>[] => {
1109
1114
  return [
1110
- getStrategySettingsVesuExtended('WBTC', 'USDC', re7UsdcPrimeDevansh, false, false, extendedBackendUrl, extendedApiKey, vaultIdExtended),
1115
+ getStrategySettingsVesuExtended('WBTC', 'USDC', re7UsdcPrimeDevansh, false, false, extendedBackendUrl, extendedApiKey, vaultIdExtended, minimumExtendedMovementAmount, minimumVesuMovementAmount, minimumExtendedRetriesDelayForOrderStatus),
1111
1116
  ]
1112
1117
  }
1113
1118
 
1114
1119
 
1115
1120
 
1116
- function getStrategySettingsVesuExtended(lstSymbol: string, underlyingSymbol: string, addresses: VesuExtendedStrategySettings, isPreview: boolean = false, isLST: boolean, extendedBackendUrl: string, extendedApiKey: string, vaultIdExtended: number): IStrategyMetadata<VesuExtendedStrategySettings> {
1121
+ function getStrategySettingsVesuExtended(lstSymbol: string, underlyingSymbol: string, addresses: VesuExtendedStrategySettings, isPreview: boolean = false, isLST: boolean, extendedBackendUrl: string, extendedApiKey: string, vaultIdExtended: number, minimumExtendedMovementAmount: number, minimumVesuMovementAmount: number, minimumExtendedRetriesDelayForOrderStatus: number): IStrategyMetadata<VesuExtendedStrategySettings> {
1117
1122
  return {
1118
1123
  name: `Extended Test ${underlyingSymbol}`,
1119
1124
  description: getDescription(lstSymbol, underlyingSymbol),
@@ -1121,7 +1126,7 @@ function getStrategySettingsVesuExtended(lstSymbol: string, underlyingSymbol: st
1121
1126
  launchBlock: 0,
1122
1127
  type: 'Other',
1123
1128
  depositTokens: [Global.getDefaultTokens().find(token => token.symbol === underlyingSymbol)!],
1124
- additionalInfo: getLooperSettings(lstSymbol, underlyingSymbol, addresses, VesuPools.Re7USDCPrime, extendedBackendUrl, extendedApiKey, vaultIdExtended),
1129
+ additionalInfo: getLooperSettings(lstSymbol, underlyingSymbol, addresses, VesuPools.Re7USDCPrime, extendedBackendUrl, extendedApiKey, vaultIdExtended, minimumExtendedMovementAmount, minimumVesuMovementAmount, minimumExtendedRetriesDelayForOrderStatus),
1125
1130
  risk: {
1126
1131
  riskFactor: _riskFactor,
1127
1132
  netRisk: