@strkfarm/sdk 1.1.4 → 1.1.6

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.
@@ -177,7 +177,7 @@ var defaultTokens = [{
177
177
  name: "WBTC",
178
178
  symbol: "WBTC",
179
179
  logo: "https://assets.troves.fi/integrations/tokens/wbtc.svg",
180
- address: ContractAddr.from("0x3fe2b97c1fd336e750087d68b9b867997fd64a2661ff3ca5a7c771641e8e7ac"),
180
+ address: ContractAddr.from("0x03fe2b97c1fd336e750087d68b9b867997fd64a2661ff3ca5a7c771641e8e7ac"),
181
181
  decimals: 8,
182
182
  coingeckId: void 0,
183
183
  displayDecimals: 6,
@@ -193,6 +193,61 @@ var defaultTokens = [{
193
193
  displayDecimals: 6,
194
194
  priceCheckAmount: 1e-4
195
195
  // 112000 * 0.0001 = $11.2
196
+ }, {
197
+ name: "solvBTC",
198
+ symbol: "solvBTC",
199
+ logo: "https://assets.strkfarm.com/integrations/tokens/solvbtc.svg",
200
+ address: ContractAddr.from("0x0593e034dda23eea82d2ba9a30960ed42cf4a01502cc2351dc9b9881f9931a68"),
201
+ decimals: 18,
202
+ coingeckId: void 0,
203
+ priceProxySymbol: "WBTC",
204
+ displayDecimals: 6,
205
+ priceCheckAmount: 1e-4
206
+ // 112000 * 0.0001 = $11.2
207
+ }, {
208
+ name: "LBTC",
209
+ symbol: "LBTC",
210
+ logo: "https://assets.strkfarm.com/integrations/tokens/lbtc.svg",
211
+ address: ContractAddr.from("0x036834a40984312f7f7de8d31e3f6305b325389eaeea5b1c0664b2fb936461a4"),
212
+ decimals: 8,
213
+ coingeckId: void 0,
214
+ displayDecimals: 6,
215
+ priceProxySymbol: "WBTC",
216
+ priceCheckAmount: 1e-4
217
+ // 112000 * 0.0001 = $11.2
218
+ }, {
219
+ name: "xWBTC",
220
+ symbol: "xWBTC",
221
+ logo: "https://assets.strkfarm.com/integrations/tokens/xwbtc.svg",
222
+ address: ContractAddr.from("0x6a567e68c805323525fe1649adb80b03cddf92c23d2629a6779f54192dffc13"),
223
+ decimals: 8,
224
+ coingeckId: void 0,
225
+ displayDecimals: 6,
226
+ priceProxySymbol: "WBTC",
227
+ priceCheckAmount: 1e-4
228
+ // 112000 * 0.0001 = $11.2
229
+ }, {
230
+ name: "xsBTC",
231
+ symbol: "xsBTC",
232
+ logo: "https://assets.strkfarm.com/integrations/tokens/xsbtc_solv.svg",
233
+ address: ContractAddr.from("0x580f3dc564a7b82f21d40d404b3842d490ae7205e6ac07b1b7af2b4a5183dc9"),
234
+ decimals: 18,
235
+ coingeckId: void 0,
236
+ displayDecimals: 6,
237
+ priceProxySymbol: "WBTC",
238
+ priceCheckAmount: 1e-4
239
+ // 112000 * 0.0001 = $11.2
240
+ }, {
241
+ name: "xtBTC",
242
+ symbol: "xtBTC",
243
+ logo: "https://assets.strkfarm.com/integrations/tokens/xtbtc.svg",
244
+ address: ContractAddr.from("0x43a35c1425a0125ef8c171f1a75c6f31ef8648edcc8324b55ce1917db3f9b91"),
245
+ decimals: 8,
246
+ coingeckId: void 0,
247
+ displayDecimals: 6,
248
+ priceProxySymbol: "WBTC",
249
+ priceCheckAmount: 1e-4
250
+ // 112000 * 0.0001 = $11.2
196
251
  }];
197
252
  var tokens = defaultTokens;
198
253
  var _Global = class _Global {
@@ -280,9 +335,11 @@ var PricerBase = class {
280
335
  // src/modules/pricer.ts
281
336
  var Pricer = class extends PricerBase {
282
337
  // e.g. ETH/USDC
283
- constructor(config, tokens2) {
338
+ constructor(config, tokens2, refreshInterval = 3e4, staleTime = 6e4) {
284
339
  super(config, tokens2);
285
340
  this.prices = {};
341
+ this.refreshInterval = 3e4;
342
+ this.staleTime = 6e4;
286
343
  // code populates this map during runtime to determine which method to use for a given token
287
344
  // The method set will be the first one to try after first attempt
288
345
  this.methodToUse = {};
@@ -291,6 +348,8 @@ var Pricer = class extends PricerBase {
291
348
  */
292
349
  this.PRICE_API = `https://api.coinbase.com/v2/prices/{{PRICER_KEY}}/buy`;
293
350
  this.EKUBO_API = "https://quoter-mainnet-api.ekubo.org/{{AMOUNT}}/{{TOKEN_ADDRESS}}/0x053c91253bc9682c04929ca02ed00b3e423f6710d2ee7e0d5ebb06f3ecf368a8";
351
+ this.refreshInterval = refreshInterval;
352
+ this.staleTime = staleTime;
294
353
  }
295
354
  isReady() {
296
355
  const allPricesExist = Object.keys(this.prices).length === this.tokens.length;
@@ -323,10 +382,10 @@ var Pricer = class extends PricerBase {
323
382
  this._loadPrices();
324
383
  setInterval(() => {
325
384
  this._loadPrices();
326
- }, 3e4);
385
+ }, this.refreshInterval);
327
386
  }
328
387
  isStale(timestamp, tokenName) {
329
- const STALE_TIME = 6e4;
388
+ const STALE_TIME = this.staleTime;
330
389
  return (/* @__PURE__ */ new Date()).getTime() - timestamp.getTime() > STALE_TIME;
331
390
  }
332
391
  assertNotStale(timestamp, tokenName) {
@@ -352,13 +411,25 @@ var Pricer = class extends PricerBase {
352
411
  onUpdate(token.symbol);
353
412
  return;
354
413
  }
355
- const price = await this._getPrice(token);
356
- this.prices[token.symbol] = {
357
- price,
358
- timestamp: /* @__PURE__ */ new Date()
359
- };
414
+ if (token.priceProxySymbol) {
415
+ const proxyToken = this.tokens.find((t) => t.symbol === token.priceProxySymbol);
416
+ if (!proxyToken) {
417
+ throw new FatalError(`Price proxy token ${token.priceProxySymbol} not found`);
418
+ }
419
+ const price = await this._getPrice(proxyToken);
420
+ this.prices[token.symbol] = {
421
+ price,
422
+ timestamp: /* @__PURE__ */ new Date()
423
+ };
424
+ } else {
425
+ const price = await this._getPrice(token);
426
+ this.prices[token.symbol] = {
427
+ price,
428
+ timestamp: /* @__PURE__ */ new Date()
429
+ };
430
+ }
360
431
  onUpdate(token.symbol);
361
- logger.verbose(`Fetched price of ${token.name} as ${price}`);
432
+ logger.verbose(`Fetched price of ${token.name} as ${this.prices[token.symbol].price}`);
362
433
  break;
363
434
  } catch (error) {
364
435
  if (retry < MAX_RETRIES) {
@@ -3790,6 +3861,18 @@ async function getAPIUsingHeadlessBrowser(url) {
3790
3861
 
3791
3862
  // src/modules/harvests.ts
3792
3863
  import { Contract as Contract4, num as num3 } from "starknet";
3864
+
3865
+ // src/strategies/constants.ts
3866
+ var COMMON_CONTRACTS = [{
3867
+ address: ContractAddr.from("0x0636a3f51cc37f5729e4da4b1de6a8549a28f3c0d5bf3b17f150971e451ff9c2"),
3868
+ name: "Access Controller",
3869
+ sourceCodeUrl: "https://github.com/strkfarm/strkfarm-contracts/blob/main/src/components/accessControl.cairo"
3870
+ }];
3871
+ var ENDPOINTS = {
3872
+ VESU_BASE: "https://cache-server-t2me.onrender.com/vesu"
3873
+ };
3874
+
3875
+ // src/modules/harvests.ts
3793
3876
  var Harvests = class _Harvests {
3794
3877
  constructor(config) {
3795
3878
  this.config = config;
@@ -3849,7 +3932,7 @@ var EkuboHarvests = class extends Harvests {
3849
3932
  var VESU_REWARDS_CONTRACT = ContractAddr.from("0x0387f3eb1d98632fbe3440a9f1385Aec9d87b6172491d3Dd81f1c35A7c61048F");
3850
3933
  var VesuHarvests = class _VesuHarvests extends Harvests {
3851
3934
  async getHarvests(addr) {
3852
- const result = await fetch(`https://api.vesu.xyz/users/${addr.address}/strk-rewards/calldata`);
3935
+ const result = await fetch(`${ENDPOINTS.VESU_BASE}/users/${addr.address}/strk-rewards/calldata`);
3853
3936
  const data = await result.json();
3854
3937
  const rewardsContract = VESU_REWARDS_CONTRACT;
3855
3938
  const cls = await this.config.provider.getClassAt(rewardsContract.address);
@@ -9327,13 +9410,6 @@ var vesu_pools_default = {
9327
9410
  ]
9328
9411
  };
9329
9412
 
9330
- // src/strategies/constants.ts
9331
- var COMMON_CONTRACTS = [{
9332
- address: ContractAddr.from("0x0636a3f51cc37f5729e4da4b1de6a8549a28f3c0d5bf3b17f150971e451ff9c2"),
9333
- name: "Access Controller",
9334
- sourceCodeUrl: "https://github.com/strkfarm/strkfarm-contracts/blob/main/src/components/accessControl.cairo"
9335
- }];
9336
-
9337
9413
  // src/strategies/vesu-rebalance.tsx
9338
9414
  import { jsx as jsx2, jsxs } from "react/jsx-runtime";
9339
9415
  var VesuRebalance = class _VesuRebalance extends BaseStrategy {
@@ -9462,7 +9538,7 @@ var VesuRebalance = class _VesuRebalance extends BaseStrategy {
9462
9538
  };
9463
9539
  }
9464
9540
  static async getAllPossibleVerifiedPools(asset) {
9465
- const data = await getAPIUsingHeadlessBrowser("https://api.vesu.xyz/pools");
9541
+ const data = await getAPIUsingHeadlessBrowser(`${ENDPOINTS.VESU_BASE}/pools`);
9466
9542
  const verifiedPools = data.data.filter((d) => d.isVerified);
9467
9543
  const pools = verifiedPools.map((p) => {
9468
9544
  const hasMyAsset = p.assets.find((a) => asset.eqString(a.address));
@@ -9639,7 +9715,7 @@ var VesuRebalance = class _VesuRebalance extends BaseStrategy {
9639
9715
  let pools = [];
9640
9716
  try {
9641
9717
  const data = await getAPIUsingHeadlessBrowser(
9642
- "https://api.vesu.xyz/pools"
9718
+ `${ENDPOINTS.VESU_BASE}/pools`
9643
9719
  );
9644
9720
  pools = data.data;
9645
9721
  for (const pool of vesu_pools_default.data) {
@@ -16216,14 +16292,31 @@ var _protocol2 = {
16216
16292
  name: "Ekubo",
16217
16293
  logo: "https://app.ekubo.org/favicon.ico"
16218
16294
  };
16219
- var _riskFactor2 = [
16220
- { type: "Smart Contract Risk" /* SMART_CONTRACT_RISK */, value: 0.5, weight: 34, reason: "Audited smart contracts" },
16221
- { type: "Impermanent Loss Risk" /* IMPERMANENT_LOSS */, value: 0.75, weight: 33, reason: "Low risk due to co-related assets" },
16222
- { type: "Market Risk" /* MARKET_RISK */, value: 0.75, weight: 33, reason: "Low risk due to co-related assets" }
16295
+ var _corelatedPoolRiskFactors = [
16296
+ { type: "Smart Contract Risk" /* SMART_CONTRACT_RISK */, value: 2 /* WELL_AUDITED */, weight: 34, reason: "Audited smart contracts" },
16297
+ { type: "Impermanent Loss Risk" /* IMPERMANENT_LOSS */, value: 1 /* HIGHLY_CORRELATED */, weight: 33, reason: "Low risk due to co-related assets" },
16298
+ { type: "Market Risk" /* MARKET_RISK */, value: 1 /* VERY_LOW_VOLATILITY */, weight: 33, reason: "Low risk due to co-related assets" }
16299
+ ];
16300
+ var mediumVolatilityPoolRiskFactors = [
16301
+ { type: "Smart Contract Risk" /* SMART_CONTRACT_RISK */, value: 2 /* WELL_AUDITED */, weight: 34, reason: "Audited smart contracts" },
16302
+ { type: "Impermanent Loss Risk" /* IMPERMANENT_LOSS */, value: 3 /* NON_CORRELATED */, weight: 33, reason: "Low risk due to co-related assets" },
16303
+ { type: "Market Risk" /* MARKET_RISK */, value: 3 /* MODERATE_VOLATILITY */, weight: 33, reason: "Low risk due to co-related assets" }
16223
16304
  ];
16224
- var _riskFactorStable = [
16225
- { type: "Smart Contract Risk" /* SMART_CONTRACT_RISK */, value: 0.5, weight: 25 }
16305
+ var highVolatilityPoolRiskFactors = [
16306
+ { type: "Smart Contract Risk" /* SMART_CONTRACT_RISK */, value: 2 /* WELL_AUDITED */, weight: 34, reason: "Audited smart contracts" },
16307
+ { type: "Impermanent Loss Risk" /* IMPERMANENT_LOSS */, value: 3 /* NON_CORRELATED */, weight: 33, reason: "Low risk due to co-related assets" },
16308
+ { type: "Market Risk" /* MARKET_RISK */, value: 4 /* HIGH_VOLATILITY */, weight: 33, reason: "Low risk due to co-related assets" }
16226
16309
  ];
16310
+ var mediumRisk = {
16311
+ riskFactor: mediumVolatilityPoolRiskFactors,
16312
+ netRisk: mediumVolatilityPoolRiskFactors.reduce((acc, curr) => acc + curr.value * curr.weight, 0) / mediumVolatilityPoolRiskFactors.reduce((acc, curr) => acc + curr.weight, 0),
16313
+ notARisks: getNoRiskTags(mediumVolatilityPoolRiskFactors)
16314
+ };
16315
+ var highRisk = {
16316
+ riskFactor: highVolatilityPoolRiskFactors,
16317
+ netRisk: highVolatilityPoolRiskFactors.reduce((acc, curr) => acc + curr.value * curr.weight, 0) / highVolatilityPoolRiskFactors.reduce((acc, curr) => acc + curr.weight, 0),
16318
+ notARisks: getNoRiskTags(highVolatilityPoolRiskFactors)
16319
+ };
16227
16320
  var AUDIT_URL2 = "https://assets.troves.fi/strkfarm/audit_report_vesu_and_ekubo_strats.pdf";
16228
16321
  var faqs2 = [
16229
16322
  {
@@ -16238,6 +16331,10 @@ var faqs2 = [
16238
16331
  question: "What happens during withdrawal?",
16239
16332
  answer: "During withdrawal, you may receive either or both tokens depending on market conditions and prevailing prices."
16240
16333
  },
16334
+ {
16335
+ question: "Are there any deposit/withdrawal fees?",
16336
+ answer: "No, there are no deposit/withdrawal fees. However, there is a performance fee varying between 10-20% of the fees and rewards generated. The exact fee is determined by the strategy and the APY shown is net of this fee."
16337
+ },
16241
16338
  {
16242
16339
  question: "Is the strategy audited?",
16243
16340
  answer: /* @__PURE__ */ jsxs2("div", { children: [
@@ -16255,6 +16352,15 @@ var faqs2 = [
16255
16352
  ] })
16256
16353
  }
16257
16354
  ];
16355
+ function getLSTFAQs(lstSymbol) {
16356
+ return [
16357
+ ...faqs2,
16358
+ {
16359
+ question: "Why might I see a negative APY?",
16360
+ answer: `A negative APY can occur when ${lstSymbol}'s price drops on DEXes. This is usually temporary and tends to recover within a few days or a week.`
16361
+ }
16362
+ ];
16363
+ }
16258
16364
  var xSTRKSTRK = {
16259
16365
  name: "Ekubo xSTRK/STRK",
16260
16366
  description: /* @__PURE__ */ jsx3(Fragment2, {}),
@@ -16272,9 +16378,9 @@ var xSTRKSTRK = {
16272
16378
  auditUrl: AUDIT_URL2,
16273
16379
  maxTVL: Web3Number.fromWei("0", 18),
16274
16380
  risk: {
16275
- riskFactor: _riskFactor2,
16276
- netRisk: _riskFactor2.reduce((acc, curr) => acc + curr.value * curr.weight, 0) / _riskFactor2.reduce((acc, curr) => acc + curr.weight, 0),
16277
- notARisks: getNoRiskTags(_riskFactor2)
16381
+ riskFactor: _corelatedPoolRiskFactors,
16382
+ netRisk: _corelatedPoolRiskFactors.reduce((acc, curr) => acc + curr.value * curr.weight, 0) / _corelatedPoolRiskFactors.reduce((acc, curr) => acc + curr.weight, 0),
16383
+ notARisks: getNoRiskTags(_corelatedPoolRiskFactors)
16278
16384
  },
16279
16385
  apyMethodology: "APY based on 7-day historical performance, including fees and rewards.",
16280
16386
  additionalInfo: {
@@ -16290,15 +16396,10 @@ var xSTRKSTRK = {
16290
16396
  customShouldRebalance: async (currentPrice) => true,
16291
16397
  minWaitHours: 24,
16292
16398
  direction: "uponly"
16293
- }
16399
+ },
16400
+ quoteAsset: Global.getDefaultTokens().find((t) => t.symbol === "STRK")
16294
16401
  },
16295
- faqs: [
16296
- ...faqs2,
16297
- {
16298
- question: "Why might I see a negative APY?",
16299
- answer: "A negative APY can occur when xSTRK's price drops on DEXes. This is usually temporary and tends to recover within a few days or a week."
16300
- }
16301
- ],
16402
+ faqs: getLSTFAQs("xSTRK"),
16302
16403
  points: [{
16303
16404
  multiplier: 1,
16304
16405
  logo: "https://endur.fi/favicon.ico",
@@ -16307,68 +16408,237 @@ var xSTRKSTRK = {
16307
16408
  contractDetails: [],
16308
16409
  investmentSteps: []
16309
16410
  };
16310
- var EkuboCLVaultStrategies = [
16411
+ var lstStrategies = [
16311
16412
  xSTRKSTRK,
16312
16413
  {
16313
16414
  ...xSTRKSTRK,
16415
+ name: "Ekubo xWBTC/WBTC",
16416
+ description: /* @__PURE__ */ jsx3(Fragment2, {}),
16417
+ address: ContractAddr.from(
16418
+ "0x2ea99b4971d3c277fa4a9b4beb7d4d7d169e683393a29eef263d5d57b4380a"
16419
+ ),
16420
+ launchBlock: 2338309,
16421
+ // must be same order as poolKey token0 and token1
16422
+ depositTokens: [
16423
+ Global.getDefaultTokens().find((t) => t.symbol === "WBTC"),
16424
+ Global.getDefaultTokens().find((t) => t.symbol === "xWBTC")
16425
+ ],
16426
+ additionalInfo: {
16427
+ ...xSTRKSTRK.additionalInfo,
16428
+ quoteAsset: Global.getDefaultTokens().find((t) => t.symbol === "WBTC"),
16429
+ lstContract: Global.getDefaultTokens().find((t) => t.symbol === "xWBTC").address
16430
+ },
16431
+ faqs: getLSTFAQs("xWBTC"),
16432
+ points: [],
16433
+ contractDetails: [],
16434
+ investmentSteps: []
16435
+ },
16436
+ {
16437
+ ...xSTRKSTRK,
16438
+ name: "Ekubo xtBTC/tBTC",
16439
+ description: /* @__PURE__ */ jsx3(Fragment2, {}),
16440
+ address: ContractAddr.from(
16441
+ "0x785dc3dfc4e80ef2690a99512481e3ed3a5266180adda5a47e856245d68a4af"
16442
+ ),
16443
+ launchBlock: 2344809,
16444
+ // must be same order as poolKey token0 and token1
16445
+ depositTokens: [
16446
+ Global.getDefaultTokens().find((t) => t.symbol === "xtBTC"),
16447
+ Global.getDefaultTokens().find((t) => t.symbol === "tBTC")
16448
+ ],
16449
+ additionalInfo: {
16450
+ ...xSTRKSTRK.additionalInfo,
16451
+ quoteAsset: Global.getDefaultTokens().find((t) => t.symbol === "tBTC"),
16452
+ lstContract: Global.getDefaultTokens().find((t) => t.symbol === "xtBTC").address
16453
+ },
16454
+ faqs: getLSTFAQs("xtBTC"),
16455
+ points: [],
16456
+ contractDetails: [],
16457
+ investmentSteps: []
16458
+ },
16459
+ {
16460
+ ...xSTRKSTRK,
16461
+ name: "Ekubo xsBTC/solvBTC",
16462
+ description: /* @__PURE__ */ jsx3(Fragment2, {}),
16463
+ address: ContractAddr.from(
16464
+ "0x3af1c7faa7c464cf2c494e988972ad1939f1103dbfb6e47e9bf0c47e49b14ef"
16465
+ ),
16466
+ launchBlock: 2344809,
16467
+ // must be same order as poolKey token0 and token1
16468
+ depositTokens: [
16469
+ Global.getDefaultTokens().find((t) => t.symbol === "xsBTC"),
16470
+ Global.getDefaultTokens().find((t) => t.symbol === "solvBTC")
16471
+ ],
16472
+ additionalInfo: {
16473
+ ...xSTRKSTRK.additionalInfo,
16474
+ quoteAsset: Global.getDefaultTokens().find((t) => t.symbol === "solvBTC"),
16475
+ lstContract: Global.getDefaultTokens().find((t) => t.symbol === "xsBTC").address
16476
+ },
16477
+ faqs: getLSTFAQs("xsBTC"),
16478
+ points: [],
16479
+ contractDetails: [],
16480
+ investmentSteps: []
16481
+ }
16482
+ ];
16483
+ var ETHUSDCRe7Strategy = {
16484
+ ...xSTRKSTRK,
16485
+ name: "Ekubo ETH/USDC",
16486
+ description: /* @__PURE__ */ jsx3(Fragment2, {}),
16487
+ address: ContractAddr.from(
16488
+ "0x160d8fa4569ef6a12e6bf47cb943d7b5ebba8a41a69a14c1d943050ba5ff947"
16489
+ ),
16490
+ launchBlock: 1504232,
16491
+ // must be same order as poolKey token0 and token1
16492
+ depositTokens: [
16493
+ Global.getDefaultTokens().find((t) => t.symbol === "ETH"),
16494
+ Global.getDefaultTokens().find((t) => t.symbol === "USDC")
16495
+ ],
16496
+ additionalInfo: {
16497
+ newBounds: "Managed by Re7",
16498
+ truePrice: 1,
16499
+ feeBps: 1e3,
16500
+ rebalanceConditions: {
16501
+ customShouldRebalance: async (currentPrice) => currentPrice > 0.99 && currentPrice < 1.01,
16502
+ minWaitHours: 6,
16503
+ direction: "any"
16504
+ },
16505
+ quoteAsset: Global.getDefaultTokens().find((t) => t.symbol === "USDC")
16506
+ },
16507
+ faqs: [
16508
+ ...faqs2,
16509
+ {
16510
+ question: "Who is the curator of this strategy?",
16511
+ answer: /* @__PURE__ */ jsxs2("div", { children: [
16512
+ "Re7 Labs is the curator of this strategy. Re7 Labs is a well-known Web3 asset management firm. This strategy is completely managed by them, including ownership of the vault. Troves is developer of the smart contracts and maintains infrastructure to help users access these strategies. You can find more information about them on their website ",
16513
+ /* @__PURE__ */ jsx3("a", { href: "https://www.re7labs.xyz", style: { textDecoration: "underline", marginLeft: "2px" }, target: "_blank", children: "here" }),
16514
+ "."
16515
+ ] })
16516
+ }
16517
+ ],
16518
+ risk: highRisk,
16519
+ points: [],
16520
+ curator: { name: "Re7 Labs", logo: "https://www.re7labs.xyz/favicon.ico" }
16521
+ };
16522
+ var RE7Strategies = [
16523
+ ETHUSDCRe7Strategy,
16524
+ {
16525
+ ...ETHUSDCRe7Strategy,
16314
16526
  name: "Ekubo USDC/USDT",
16315
16527
  description: /* @__PURE__ */ jsx3(Fragment2, {}),
16316
16528
  address: ContractAddr.from(
16317
- "0xd647ed735f0db52f2a5502b6e06ed21dc4284a43a36af4b60d3c80fbc56c91"
16529
+ "0x3a4f8debaf12af97bb911099bc011d63d6c208d4c5ba8e15d7f437785b0aaa2"
16318
16530
  ),
16319
- launchBlock: 1385576,
16531
+ launchBlock: 1506139,
16320
16532
  // must be same order as poolKey token0 and token1
16321
16533
  depositTokens: [
16322
16534
  Global.getDefaultTokens().find((t) => t.symbol === "USDC"),
16323
16535
  Global.getDefaultTokens().find((t) => t.symbol === "USDT")
16324
16536
  ],
16325
- additionalInfo: {
16326
- newBounds: {
16327
- lower: -1,
16328
- upper: 1
16329
- },
16330
- truePrice: 1,
16331
- feeBps: 1e3,
16332
- rebalanceConditions: {
16333
- customShouldRebalance: async (currentPrice) => currentPrice > 0.99 && currentPrice < 1.01,
16334
- minWaitHours: 6,
16335
- direction: "any"
16336
- }
16337
- }
16537
+ risk: xSTRKSTRK.risk
16338
16538
  },
16339
16539
  {
16340
- ...xSTRKSTRK,
16540
+ ...ETHUSDCRe7Strategy,
16341
16541
  name: "Ekubo STRK/USDC",
16342
16542
  description: /* @__PURE__ */ jsx3(Fragment2, {}),
16343
16543
  address: ContractAddr.from(
16344
- "0xb7bd37121041261446d8eedec618955a4490641034942da688e8cbddea7b23"
16544
+ "0x351b36d0d9d8b40010658825adeeddb1397436cd41acd0ff6c6e23aaa8b5b30"
16345
16545
  ),
16346
- launchBlock: 1492136,
16546
+ launchBlock: 1504079,
16347
16547
  // must be same order as poolKey token0 and token1
16348
16548
  depositTokens: [
16349
16549
  Global.getDefaultTokens().find((t) => t.symbol === "STRK"),
16350
16550
  Global.getDefaultTokens().find((t) => t.symbol === "USDC")
16351
16551
  ],
16352
- maxTVL: Web3Number.fromWei("0", 6),
16353
- additionalInfo: {
16354
- newBounds: "Managed by Re7",
16355
- feeBps: 1e3,
16356
- rebalanceConditions: {
16357
- customShouldRebalance: async (currentPrice) => true,
16358
- minWaitHours: 6,
16359
- direction: "any"
16360
- }
16361
- }
16552
+ risk: highRisk
16553
+ },
16554
+ {
16555
+ ...ETHUSDCRe7Strategy,
16556
+ name: "Ekubo STRK/ETH",
16557
+ description: /* @__PURE__ */ jsx3(Fragment2, {}),
16558
+ address: ContractAddr.from(
16559
+ "0x4ce3024b0ee879009112d7b0e073f8a87153dd35b029347d4247ffe48d28f51"
16560
+ ),
16561
+ launchBlock: 1504149,
16562
+ // must be same order as poolKey token0 and token1
16563
+ depositTokens: [
16564
+ Global.getDefaultTokens().find((t) => t.symbol === "STRK"),
16565
+ Global.getDefaultTokens().find((t) => t.symbol === "ETH")
16566
+ ],
16567
+ risk: highRisk
16568
+ },
16569
+ {
16570
+ ...ETHUSDCRe7Strategy,
16571
+ name: "Ekubo WBTC/USDC",
16572
+ description: /* @__PURE__ */ jsx3(Fragment2, {}),
16573
+ address: ContractAddr.from(
16574
+ "0x2bcaef2eb7706875a5fdc6853dd961a0590f850bc3a031c59887189b5e84ba1"
16575
+ ),
16576
+ launchBlock: 1506144,
16577
+ // must be same order as poolKey token0 and token1
16578
+ depositTokens: [
16579
+ Global.getDefaultTokens().find((t) => t.symbol === "WBTC"),
16580
+ Global.getDefaultTokens().find((t) => t.symbol === "USDC")
16581
+ ],
16582
+ risk: mediumRisk
16583
+ },
16584
+ {
16585
+ ...ETHUSDCRe7Strategy,
16586
+ name: "Ekubo tBTC/USDC",
16587
+ description: /* @__PURE__ */ jsx3(Fragment2, {}),
16588
+ address: ContractAddr.from(
16589
+ "0x4aad891a2d4432fba06b6558631bb13f6bbd7f6f33ab8c3111e344889ea4456"
16590
+ ),
16591
+ launchBlock: 1501764,
16592
+ // must be same order as poolKey token0 and token1
16593
+ depositTokens: [
16594
+ Global.getDefaultTokens().find((t) => t.symbol === "tBTC"),
16595
+ Global.getDefaultTokens().find((t) => t.symbol === "USDC")
16596
+ ],
16597
+ risk: mediumRisk
16598
+ },
16599
+ {
16600
+ ...ETHUSDCRe7Strategy,
16601
+ name: "Ekubo WBTC/ETH",
16602
+ description: /* @__PURE__ */ jsx3(Fragment2, {}),
16603
+ address: ContractAddr.from(
16604
+ "0x1c9232b8186d9317652f05055615f18a120c2ad9e5ee96c39e031c257fb945b"
16605
+ ),
16606
+ launchBlock: 1506145,
16607
+ // must be same order as poolKey token0 and token1
16608
+ depositTokens: [
16609
+ Global.getDefaultTokens().find((t) => t.symbol === "WBTC"),
16610
+ Global.getDefaultTokens().find((t) => t.symbol === "ETH")
16611
+ ],
16612
+ risk: mediumRisk
16613
+ },
16614
+ {
16615
+ ...ETHUSDCRe7Strategy,
16616
+ name: "Ekubo WBTC/STRK",
16617
+ description: /* @__PURE__ */ jsx3(Fragment2, {}),
16618
+ address: ContractAddr.from(
16619
+ "0x1248e385c23a929a015ec298a26560fa7745bbd6e41a886550e337b02714b1b"
16620
+ ),
16621
+ launchBlock: 1506147,
16622
+ // must be same order as poolKey token0 and token1
16623
+ depositTokens: [
16624
+ Global.getDefaultTokens().find((t) => t.symbol === "WBTC"),
16625
+ Global.getDefaultTokens().find((t) => t.symbol === "STRK")
16626
+ ],
16627
+ risk: highRisk
16362
16628
  }
16363
16629
  ];
16630
+ var EkuboCLVaultStrategies = [
16631
+ ...[lstStrategies[0]],
16632
+ ...RE7Strategies
16633
+ ];
16364
16634
  EkuboCLVaultStrategies.forEach((s) => {
16365
16635
  s.contractDetails = [
16366
16636
  {
16367
16637
  address: s.address,
16368
16638
  name: "Vault",
16369
16639
  sourceCodeUrl: "https://github.com/strkfarm/strkfarm-contracts/tree/main/src/strategies/cl_vault"
16370
- },
16371
- ...COMMON_CONTRACTS
16640
+ }
16641
+ // ...COMMON_CONTRACTS
16372
16642
  ];
16373
16643
  s.docs = "https://docs.troves.fi/p/ekubo-cl-vaults";
16374
16644
  s.description = /* @__PURE__ */ jsxs2("div", { children: [
@@ -16389,7 +16659,11 @@ EkuboCLVaultStrategies.forEach((s) => {
16389
16659
  /* @__PURE__ */ jsx3("h4", { style: { fontWeight: "bold" }, children: "Key points to note:" }),
16390
16660
  /* @__PURE__ */ jsxs2("div", { style: { display: "flex", flexDirection: "column", gap: "10px", color: "var(--chakra-colors-text_secondary)" }, children: [
16391
16661
  /* @__PURE__ */ jsx3("p", { style: {}, children: "1. During withdrawal, you may receive either or both tokens depending on market conditions and prevailing prices." }),
16392
- s.name.includes("xSTRK/STRK") && /* @__PURE__ */ jsx3("p", { style: {}, children: "2. Sometimes you might see a negative APY \u2014 this is usually not a big deal. It happens when xSTRK's price drops on DEXes, but things typically bounce back within a few days or a week." })
16662
+ s.additionalInfo.lstContract && /* @__PURE__ */ jsxs2("p", { style: {}, children: [
16663
+ "2. Sometimes you might see a negative APY \u2014 this is usually not a big deal. It happens when ",
16664
+ s.name.split(" ")[1].split("/")[0],
16665
+ "'s price drops on DEXes, but things typically bounce back within a few days or a week."
16666
+ ] })
16393
16667
  ] })
16394
16668
  ] })
16395
16669
  ] });
@@ -18339,7 +18613,7 @@ var endurProtocol = {
18339
18613
  name: "Endur",
18340
18614
  logo: "https://app.endur.fi/logo.png"
18341
18615
  };
18342
- var _riskFactor3 = [
18616
+ var _riskFactor2 = [
18343
18617
  { type: "Smart Contract Risk" /* SMART_CONTRACT_RISK */, value: 0.5, weight: 25, reason: "Audited by CSC" },
18344
18618
  { type: "Depeg Risk" /* DEPEG_RISK */, value: 0.25, weight: 25, reason: "Depending on prevailing market conditions and trading activity, xSTRK may lose its peg to the underlying asset." },
18345
18619
  { type: "Liquidation Risk" /* LIQUIDATION_RISK */, value: 0.1, weight: 10, reason: "Liquidation risk is low due to the nature of the Re7 Pool on Vesu" },
@@ -18414,9 +18688,9 @@ var SenseiStrategies = [
18414
18688
  protocols: [endurProtocol, vesuProtocol],
18415
18689
  maxTVL: new Web3Number("1500000", 18),
18416
18690
  risk: {
18417
- riskFactor: _riskFactor3,
18418
- netRisk: _riskFactor3.reduce((acc, curr) => acc + curr.value * curr.weight, 0) / _riskFactor3.reduce((acc, curr) => acc + curr.weight, 0),
18419
- notARisks: getNoRiskTags(_riskFactor3)
18691
+ riskFactor: _riskFactor2,
18692
+ netRisk: _riskFactor2.reduce((acc, curr) => acc + curr.value * curr.weight, 0) / _riskFactor2.reduce((acc, curr) => acc + curr.weight, 0),
18693
+ notARisks: getNoRiskTags(_riskFactor2)
18420
18694
  },
18421
18695
  additionalInfo: {
18422
18696
  mainToken: Global.getDefaultTokens().find((t) => t.symbol === "STRK"),
@@ -21171,7 +21445,7 @@ var VesuAdapter = class _VesuAdapter extends BaseAdapter {
21171
21445
  let pools = [];
21172
21446
  try {
21173
21447
  const data = await getAPIUsingHeadlessBrowser(
21174
- "https://api.vesu.xyz/pools"
21448
+ `${ENDPOINTS.VESU_BASE}/pools`
21175
21449
  );
21176
21450
  pools = data.data;
21177
21451
  for (const pool of vesu_pools_default.data) {
@@ -24030,7 +24304,7 @@ function getLooperSettings(token1Symbol, token2Symbol, vaultSettings, pool1, poo
24030
24304
  vaultSettings.leafAdapters.push(commonAdapter.getAvnuAdapter(STRKToken.address, USDCToken.address, "avnu_swap_rewards" /* AVNU_SWAP_REWARDS */).bind(commonAdapter));
24031
24305
  return vaultSettings;
24032
24306
  }
24033
- var _riskFactor4 = [
24307
+ var _riskFactor3 = [
24034
24308
  { type: "Smart Contract Risk" /* SMART_CONTRACT_RISK */, value: 0.5, weight: 25, reason: "Audited by Zellic" },
24035
24309
  { type: "Liquidation Risk" /* LIQUIDATION_RISK */, value: 1.5, weight: 50, reason: "Liquidation risk is mitigated by stable price feed on Starknet" },
24036
24310
  { type: "Technical Risk" /* TECHNICAL_RISK */, value: 1, weight: 50, reason: "Technical failures like risk monitoring failures" }
@@ -24234,9 +24508,9 @@ var UniversalStrategies = [
24234
24508
  depositTokens: [Global.getDefaultTokens().find((token) => token.symbol === "USDC")],
24235
24509
  additionalInfo: getLooperSettings("USDC", "ETH", usdcVaultSettings, VesuPools.Genesis, VesuPools.Genesis),
24236
24510
  risk: {
24237
- riskFactor: _riskFactor4,
24238
- netRisk: _riskFactor4.reduce((acc, curr) => acc + curr.value * curr.weight, 0) / _riskFactor4.reduce((acc, curr) => acc + curr.weight, 0),
24239
- notARisks: getNoRiskTags(_riskFactor4)
24511
+ riskFactor: _riskFactor3,
24512
+ netRisk: _riskFactor3.reduce((acc, curr) => acc + curr.value * curr.weight, 0) / _riskFactor3.reduce((acc, curr) => acc + curr.weight, 0),
24513
+ notARisks: getNoRiskTags(_riskFactor3)
24240
24514
  },
24241
24515
  protocols: [Protocols.VESU],
24242
24516
  maxTVL: Web3Number.fromWei(0, 6),
@@ -24253,9 +24527,9 @@ var UniversalStrategies = [
24253
24527
  depositTokens: [Global.getDefaultTokens().find((token) => token.symbol === "WBTC")],
24254
24528
  additionalInfo: getLooperSettings("WBTC", "ETH", wbtcVaultSettings, VesuPools.Genesis, VesuPools.Genesis),
24255
24529
  risk: {
24256
- riskFactor: _riskFactor4,
24257
- netRisk: _riskFactor4.reduce((acc, curr) => acc + curr.value * curr.weight, 0) / _riskFactor4.reduce((acc, curr) => acc + curr.weight, 0),
24258
- notARisks: getNoRiskTags(_riskFactor4)
24530
+ riskFactor: _riskFactor3,
24531
+ netRisk: _riskFactor3.reduce((acc, curr) => acc + curr.value * curr.weight, 0) / _riskFactor3.reduce((acc, curr) => acc + curr.weight, 0),
24532
+ notARisks: getNoRiskTags(_riskFactor3)
24259
24533
  },
24260
24534
  protocols: [Protocols.VESU],
24261
24535
  maxTVL: Web3Number.fromWei(0, 8),
@@ -24272,9 +24546,9 @@ var UniversalStrategies = [
24272
24546
  depositTokens: [Global.getDefaultTokens().find((token) => token.symbol === "ETH")],
24273
24547
  additionalInfo: getLooperSettings("ETH", "WBTC", ethVaultSettings, VesuPools.Genesis, VesuPools.Genesis),
24274
24548
  risk: {
24275
- riskFactor: _riskFactor4,
24276
- netRisk: _riskFactor4.reduce((acc, curr) => acc + curr.value * curr.weight, 0) / _riskFactor4.reduce((acc, curr) => acc + curr.weight, 0),
24277
- notARisks: getNoRiskTags(_riskFactor4)
24549
+ riskFactor: _riskFactor3,
24550
+ netRisk: _riskFactor3.reduce((acc, curr) => acc + curr.value * curr.weight, 0) / _riskFactor3.reduce((acc, curr) => acc + curr.weight, 0),
24551
+ notARisks: getNoRiskTags(_riskFactor3)
24278
24552
  },
24279
24553
  protocols: [Protocols.VESU],
24280
24554
  maxTVL: Web3Number.fromWei(0, 18),
@@ -24291,9 +24565,9 @@ var UniversalStrategies = [
24291
24565
  depositTokens: [Global.getDefaultTokens().find((token) => token.symbol === "STRK")],
24292
24566
  additionalInfo: getLooperSettings("STRK", "ETH", strkVaultSettings, VesuPools.Genesis, VesuPools.Genesis),
24293
24567
  risk: {
24294
- riskFactor: _riskFactor4,
24295
- netRisk: _riskFactor4.reduce((acc, curr) => acc + curr.value * curr.weight, 0) / _riskFactor4.reduce((acc, curr) => acc + curr.weight, 0),
24296
- notARisks: getNoRiskTags(_riskFactor4)
24568
+ riskFactor: _riskFactor3,
24569
+ netRisk: _riskFactor3.reduce((acc, curr) => acc + curr.value * curr.weight, 0) / _riskFactor3.reduce((acc, curr) => acc + curr.weight, 0),
24570
+ notARisks: getNoRiskTags(_riskFactor3)
24297
24571
  },
24298
24572
  protocols: [Protocols.VESU],
24299
24573
  maxTVL: Web3Number.fromWei(0, 18),
@@ -24310,9 +24584,9 @@ var UniversalStrategies = [
24310
24584
  depositTokens: [Global.getDefaultTokens().find((token) => token.symbol === "USDT")],
24311
24585
  additionalInfo: getLooperSettings("USDT", "ETH", usdtVaultSettings, VesuPools.Genesis, VesuPools.Genesis),
24312
24586
  risk: {
24313
- riskFactor: _riskFactor4,
24314
- netRisk: _riskFactor4.reduce((acc, curr) => acc + curr.value * curr.weight, 0) / _riskFactor4.reduce((acc, curr) => acc + curr.weight, 0),
24315
- notARisks: getNoRiskTags(_riskFactor4)
24587
+ riskFactor: _riskFactor3,
24588
+ netRisk: _riskFactor3.reduce((acc, curr) => acc + curr.value * curr.weight, 0) / _riskFactor3.reduce((acc, curr) => acc + curr.weight, 0),
24589
+ notARisks: getNoRiskTags(_riskFactor3)
24316
24590
  },
24317
24591
  protocols: [Protocols.VESU],
24318
24592
  maxTVL: Web3Number.fromWei(0, 6),