@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.
package/dist/index.mjs CHANGED
@@ -218,7 +218,7 @@ var defaultTokens = [{
218
218
  name: "WBTC",
219
219
  symbol: "WBTC",
220
220
  logo: "https://assets.troves.fi/integrations/tokens/wbtc.svg",
221
- address: ContractAddr.from("0x3fe2b97c1fd336e750087d68b9b867997fd64a2661ff3ca5a7c771641e8e7ac"),
221
+ address: ContractAddr.from("0x03fe2b97c1fd336e750087d68b9b867997fd64a2661ff3ca5a7c771641e8e7ac"),
222
222
  decimals: 8,
223
223
  coingeckId: void 0,
224
224
  displayDecimals: 6,
@@ -234,6 +234,61 @@ var defaultTokens = [{
234
234
  displayDecimals: 6,
235
235
  priceCheckAmount: 1e-4
236
236
  // 112000 * 0.0001 = $11.2
237
+ }, {
238
+ name: "solvBTC",
239
+ symbol: "solvBTC",
240
+ logo: "https://assets.strkfarm.com/integrations/tokens/solvbtc.svg",
241
+ address: ContractAddr.from("0x0593e034dda23eea82d2ba9a30960ed42cf4a01502cc2351dc9b9881f9931a68"),
242
+ decimals: 18,
243
+ coingeckId: void 0,
244
+ priceProxySymbol: "WBTC",
245
+ displayDecimals: 6,
246
+ priceCheckAmount: 1e-4
247
+ // 112000 * 0.0001 = $11.2
248
+ }, {
249
+ name: "LBTC",
250
+ symbol: "LBTC",
251
+ logo: "https://assets.strkfarm.com/integrations/tokens/lbtc.svg",
252
+ address: ContractAddr.from("0x036834a40984312f7f7de8d31e3f6305b325389eaeea5b1c0664b2fb936461a4"),
253
+ decimals: 8,
254
+ coingeckId: void 0,
255
+ displayDecimals: 6,
256
+ priceProxySymbol: "WBTC",
257
+ priceCheckAmount: 1e-4
258
+ // 112000 * 0.0001 = $11.2
259
+ }, {
260
+ name: "xWBTC",
261
+ symbol: "xWBTC",
262
+ logo: "https://assets.strkfarm.com/integrations/tokens/xwbtc.svg",
263
+ address: ContractAddr.from("0x6a567e68c805323525fe1649adb80b03cddf92c23d2629a6779f54192dffc13"),
264
+ decimals: 8,
265
+ coingeckId: void 0,
266
+ displayDecimals: 6,
267
+ priceProxySymbol: "WBTC",
268
+ priceCheckAmount: 1e-4
269
+ // 112000 * 0.0001 = $11.2
270
+ }, {
271
+ name: "xsBTC",
272
+ symbol: "xsBTC",
273
+ logo: "https://assets.strkfarm.com/integrations/tokens/xsbtc_solv.svg",
274
+ address: ContractAddr.from("0x580f3dc564a7b82f21d40d404b3842d490ae7205e6ac07b1b7af2b4a5183dc9"),
275
+ decimals: 18,
276
+ coingeckId: void 0,
277
+ displayDecimals: 6,
278
+ priceProxySymbol: "WBTC",
279
+ priceCheckAmount: 1e-4
280
+ // 112000 * 0.0001 = $11.2
281
+ }, {
282
+ name: "xtBTC",
283
+ symbol: "xtBTC",
284
+ logo: "https://assets.strkfarm.com/integrations/tokens/xtbtc.svg",
285
+ address: ContractAddr.from("0x43a35c1425a0125ef8c171f1a75c6f31ef8648edcc8324b55ce1917db3f9b91"),
286
+ decimals: 8,
287
+ coingeckId: void 0,
288
+ displayDecimals: 6,
289
+ priceProxySymbol: "WBTC",
290
+ priceCheckAmount: 1e-4
291
+ // 112000 * 0.0001 = $11.2
237
292
  }];
238
293
  var tokens = defaultTokens;
239
294
  var _Global = class _Global {
@@ -321,9 +376,11 @@ var PricerBase = class {
321
376
  // src/modules/pricer.ts
322
377
  var Pricer = class extends PricerBase {
323
378
  // e.g. ETH/USDC
324
- constructor(config, tokens2) {
379
+ constructor(config, tokens2, refreshInterval = 3e4, staleTime = 6e4) {
325
380
  super(config, tokens2);
326
381
  this.prices = {};
382
+ this.refreshInterval = 3e4;
383
+ this.staleTime = 6e4;
327
384
  // code populates this map during runtime to determine which method to use for a given token
328
385
  // The method set will be the first one to try after first attempt
329
386
  this.methodToUse = {};
@@ -332,6 +389,8 @@ var Pricer = class extends PricerBase {
332
389
  */
333
390
  this.PRICE_API = `https://api.coinbase.com/v2/prices/{{PRICER_KEY}}/buy`;
334
391
  this.EKUBO_API = "https://quoter-mainnet-api.ekubo.org/{{AMOUNT}}/{{TOKEN_ADDRESS}}/0x053c91253bc9682c04929ca02ed00b3e423f6710d2ee7e0d5ebb06f3ecf368a8";
392
+ this.refreshInterval = refreshInterval;
393
+ this.staleTime = staleTime;
335
394
  }
336
395
  isReady() {
337
396
  const allPricesExist = Object.keys(this.prices).length === this.tokens.length;
@@ -364,10 +423,10 @@ var Pricer = class extends PricerBase {
364
423
  this._loadPrices();
365
424
  setInterval(() => {
366
425
  this._loadPrices();
367
- }, 3e4);
426
+ }, this.refreshInterval);
368
427
  }
369
428
  isStale(timestamp, tokenName) {
370
- const STALE_TIME = 6e4;
429
+ const STALE_TIME = this.staleTime;
371
430
  return (/* @__PURE__ */ new Date()).getTime() - timestamp.getTime() > STALE_TIME;
372
431
  }
373
432
  assertNotStale(timestamp, tokenName) {
@@ -393,13 +452,25 @@ var Pricer = class extends PricerBase {
393
452
  onUpdate(token.symbol);
394
453
  return;
395
454
  }
396
- const price = await this._getPrice(token);
397
- this.prices[token.symbol] = {
398
- price,
399
- timestamp: /* @__PURE__ */ new Date()
400
- };
455
+ if (token.priceProxySymbol) {
456
+ const proxyToken = this.tokens.find((t) => t.symbol === token.priceProxySymbol);
457
+ if (!proxyToken) {
458
+ throw new FatalError(`Price proxy token ${token.priceProxySymbol} not found`);
459
+ }
460
+ const price = await this._getPrice(proxyToken);
461
+ this.prices[token.symbol] = {
462
+ price,
463
+ timestamp: /* @__PURE__ */ new Date()
464
+ };
465
+ } else {
466
+ const price = await this._getPrice(token);
467
+ this.prices[token.symbol] = {
468
+ price,
469
+ timestamp: /* @__PURE__ */ new Date()
470
+ };
471
+ }
401
472
  onUpdate(token.symbol);
402
- logger.verbose(`Fetched price of ${token.name} as ${price}`);
473
+ logger.verbose(`Fetched price of ${token.name} as ${this.prices[token.symbol].price}`);
403
474
  break;
404
475
  } catch (error) {
405
476
  if (retry < MAX_RETRIES) {
@@ -3839,6 +3910,18 @@ async function getAPIUsingHeadlessBrowser(url) {
3839
3910
 
3840
3911
  // src/modules/harvests.ts
3841
3912
  import { Contract as Contract4, num as num3 } from "starknet";
3913
+
3914
+ // src/strategies/constants.ts
3915
+ var COMMON_CONTRACTS = [{
3916
+ address: ContractAddr.from("0x0636a3f51cc37f5729e4da4b1de6a8549a28f3c0d5bf3b17f150971e451ff9c2"),
3917
+ name: "Access Controller",
3918
+ sourceCodeUrl: "https://github.com/strkfarm/strkfarm-contracts/blob/main/src/components/accessControl.cairo"
3919
+ }];
3920
+ var ENDPOINTS = {
3921
+ VESU_BASE: "https://cache-server-t2me.onrender.com/vesu"
3922
+ };
3923
+
3924
+ // src/modules/harvests.ts
3842
3925
  var Harvests = class _Harvests {
3843
3926
  constructor(config) {
3844
3927
  this.config = config;
@@ -3898,7 +3981,7 @@ var EkuboHarvests = class extends Harvests {
3898
3981
  var VESU_REWARDS_CONTRACT = ContractAddr.from("0x0387f3eb1d98632fbe3440a9f1385Aec9d87b6172491d3Dd81f1c35A7c61048F");
3899
3982
  var VesuHarvests = class _VesuHarvests extends Harvests {
3900
3983
  async getHarvests(addr) {
3901
- const result = await fetch(`https://api.vesu.xyz/users/${addr.address}/strk-rewards/calldata`);
3984
+ const result = await fetch(`${ENDPOINTS.VESU_BASE}/users/${addr.address}/strk-rewards/calldata`);
3902
3985
  const data = await result.json();
3903
3986
  const rewardsContract = VESU_REWARDS_CONTRACT;
3904
3987
  const cls = await this.config.provider.getClassAt(rewardsContract.address);
@@ -9376,13 +9459,6 @@ var vesu_pools_default = {
9376
9459
  ]
9377
9460
  };
9378
9461
 
9379
- // src/strategies/constants.ts
9380
- var COMMON_CONTRACTS = [{
9381
- address: ContractAddr.from("0x0636a3f51cc37f5729e4da4b1de6a8549a28f3c0d5bf3b17f150971e451ff9c2"),
9382
- name: "Access Controller",
9383
- sourceCodeUrl: "https://github.com/strkfarm/strkfarm-contracts/blob/main/src/components/accessControl.cairo"
9384
- }];
9385
-
9386
9462
  // src/strategies/vesu-rebalance.tsx
9387
9463
  import { jsx as jsx2, jsxs } from "react/jsx-runtime";
9388
9464
  var VesuRebalance = class _VesuRebalance extends BaseStrategy {
@@ -9511,7 +9587,7 @@ var VesuRebalance = class _VesuRebalance extends BaseStrategy {
9511
9587
  };
9512
9588
  }
9513
9589
  static async getAllPossibleVerifiedPools(asset) {
9514
- const data = await getAPIUsingHeadlessBrowser("https://api.vesu.xyz/pools");
9590
+ const data = await getAPIUsingHeadlessBrowser(`${ENDPOINTS.VESU_BASE}/pools`);
9515
9591
  const verifiedPools = data.data.filter((d) => d.isVerified);
9516
9592
  const pools = verifiedPools.map((p) => {
9517
9593
  const hasMyAsset = p.assets.find((a) => asset.eqString(a.address));
@@ -9688,7 +9764,7 @@ var VesuRebalance = class _VesuRebalance extends BaseStrategy {
9688
9764
  let pools = [];
9689
9765
  try {
9690
9766
  const data = await getAPIUsingHeadlessBrowser(
9691
- "https://api.vesu.xyz/pools"
9767
+ `${ENDPOINTS.VESU_BASE}/pools`
9692
9768
  );
9693
9769
  pools = data.data;
9694
9770
  for (const pool of vesu_pools_default.data) {
@@ -16265,14 +16341,31 @@ var _protocol2 = {
16265
16341
  name: "Ekubo",
16266
16342
  logo: "https://app.ekubo.org/favicon.ico"
16267
16343
  };
16268
- var _riskFactor2 = [
16269
- { type: "Smart Contract Risk" /* SMART_CONTRACT_RISK */, value: 0.5, weight: 34, reason: "Audited smart contracts" },
16270
- { type: "Impermanent Loss Risk" /* IMPERMANENT_LOSS */, value: 0.75, weight: 33, reason: "Low risk due to co-related assets" },
16271
- { type: "Market Risk" /* MARKET_RISK */, value: 0.75, weight: 33, reason: "Low risk due to co-related assets" }
16344
+ var _corelatedPoolRiskFactors = [
16345
+ { type: "Smart Contract Risk" /* SMART_CONTRACT_RISK */, value: 2 /* WELL_AUDITED */, weight: 34, reason: "Audited smart contracts" },
16346
+ { type: "Impermanent Loss Risk" /* IMPERMANENT_LOSS */, value: 1 /* HIGHLY_CORRELATED */, weight: 33, reason: "Low risk due to co-related assets" },
16347
+ { type: "Market Risk" /* MARKET_RISK */, value: 1 /* VERY_LOW_VOLATILITY */, weight: 33, reason: "Low risk due to co-related assets" }
16348
+ ];
16349
+ var mediumVolatilityPoolRiskFactors = [
16350
+ { type: "Smart Contract Risk" /* SMART_CONTRACT_RISK */, value: 2 /* WELL_AUDITED */, weight: 34, reason: "Audited smart contracts" },
16351
+ { type: "Impermanent Loss Risk" /* IMPERMANENT_LOSS */, value: 3 /* NON_CORRELATED */, weight: 33, reason: "Low risk due to co-related assets" },
16352
+ { type: "Market Risk" /* MARKET_RISK */, value: 3 /* MODERATE_VOLATILITY */, weight: 33, reason: "Low risk due to co-related assets" }
16272
16353
  ];
16273
- var _riskFactorStable = [
16274
- { type: "Smart Contract Risk" /* SMART_CONTRACT_RISK */, value: 0.5, weight: 25 }
16354
+ var highVolatilityPoolRiskFactors = [
16355
+ { type: "Smart Contract Risk" /* SMART_CONTRACT_RISK */, value: 2 /* WELL_AUDITED */, weight: 34, reason: "Audited smart contracts" },
16356
+ { type: "Impermanent Loss Risk" /* IMPERMANENT_LOSS */, value: 3 /* NON_CORRELATED */, weight: 33, reason: "Low risk due to co-related assets" },
16357
+ { type: "Market Risk" /* MARKET_RISK */, value: 4 /* HIGH_VOLATILITY */, weight: 33, reason: "Low risk due to co-related assets" }
16275
16358
  ];
16359
+ var mediumRisk = {
16360
+ riskFactor: mediumVolatilityPoolRiskFactors,
16361
+ netRisk: mediumVolatilityPoolRiskFactors.reduce((acc, curr) => acc + curr.value * curr.weight, 0) / mediumVolatilityPoolRiskFactors.reduce((acc, curr) => acc + curr.weight, 0),
16362
+ notARisks: getNoRiskTags(mediumVolatilityPoolRiskFactors)
16363
+ };
16364
+ var highRisk = {
16365
+ riskFactor: highVolatilityPoolRiskFactors,
16366
+ netRisk: highVolatilityPoolRiskFactors.reduce((acc, curr) => acc + curr.value * curr.weight, 0) / highVolatilityPoolRiskFactors.reduce((acc, curr) => acc + curr.weight, 0),
16367
+ notARisks: getNoRiskTags(highVolatilityPoolRiskFactors)
16368
+ };
16276
16369
  var AUDIT_URL2 = "https://assets.troves.fi/strkfarm/audit_report_vesu_and_ekubo_strats.pdf";
16277
16370
  var faqs2 = [
16278
16371
  {
@@ -16287,6 +16380,10 @@ var faqs2 = [
16287
16380
  question: "What happens during withdrawal?",
16288
16381
  answer: "During withdrawal, you may receive either or both tokens depending on market conditions and prevailing prices."
16289
16382
  },
16383
+ {
16384
+ question: "Are there any deposit/withdrawal fees?",
16385
+ 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."
16386
+ },
16290
16387
  {
16291
16388
  question: "Is the strategy audited?",
16292
16389
  answer: /* @__PURE__ */ jsxs2("div", { children: [
@@ -16304,6 +16401,15 @@ var faqs2 = [
16304
16401
  ] })
16305
16402
  }
16306
16403
  ];
16404
+ function getLSTFAQs(lstSymbol) {
16405
+ return [
16406
+ ...faqs2,
16407
+ {
16408
+ question: "Why might I see a negative APY?",
16409
+ 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.`
16410
+ }
16411
+ ];
16412
+ }
16307
16413
  var xSTRKSTRK = {
16308
16414
  name: "Ekubo xSTRK/STRK",
16309
16415
  description: /* @__PURE__ */ jsx3(Fragment2, {}),
@@ -16321,9 +16427,9 @@ var xSTRKSTRK = {
16321
16427
  auditUrl: AUDIT_URL2,
16322
16428
  maxTVL: Web3Number.fromWei("0", 18),
16323
16429
  risk: {
16324
- riskFactor: _riskFactor2,
16325
- netRisk: _riskFactor2.reduce((acc, curr) => acc + curr.value * curr.weight, 0) / _riskFactor2.reduce((acc, curr) => acc + curr.weight, 0),
16326
- notARisks: getNoRiskTags(_riskFactor2)
16430
+ riskFactor: _corelatedPoolRiskFactors,
16431
+ netRisk: _corelatedPoolRiskFactors.reduce((acc, curr) => acc + curr.value * curr.weight, 0) / _corelatedPoolRiskFactors.reduce((acc, curr) => acc + curr.weight, 0),
16432
+ notARisks: getNoRiskTags(_corelatedPoolRiskFactors)
16327
16433
  },
16328
16434
  apyMethodology: "APY based on 7-day historical performance, including fees and rewards.",
16329
16435
  additionalInfo: {
@@ -16339,15 +16445,10 @@ var xSTRKSTRK = {
16339
16445
  customShouldRebalance: async (currentPrice) => true,
16340
16446
  minWaitHours: 24,
16341
16447
  direction: "uponly"
16342
- }
16448
+ },
16449
+ quoteAsset: Global.getDefaultTokens().find((t) => t.symbol === "STRK")
16343
16450
  },
16344
- faqs: [
16345
- ...faqs2,
16346
- {
16347
- question: "Why might I see a negative APY?",
16348
- 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."
16349
- }
16350
- ],
16451
+ faqs: getLSTFAQs("xSTRK"),
16351
16452
  points: [{
16352
16453
  multiplier: 1,
16353
16454
  logo: "https://endur.fi/favicon.ico",
@@ -16356,68 +16457,237 @@ var xSTRKSTRK = {
16356
16457
  contractDetails: [],
16357
16458
  investmentSteps: []
16358
16459
  };
16359
- var EkuboCLVaultStrategies = [
16460
+ var lstStrategies = [
16360
16461
  xSTRKSTRK,
16361
16462
  {
16362
16463
  ...xSTRKSTRK,
16464
+ name: "Ekubo xWBTC/WBTC",
16465
+ description: /* @__PURE__ */ jsx3(Fragment2, {}),
16466
+ address: ContractAddr.from(
16467
+ "0x2ea99b4971d3c277fa4a9b4beb7d4d7d169e683393a29eef263d5d57b4380a"
16468
+ ),
16469
+ launchBlock: 2338309,
16470
+ // must be same order as poolKey token0 and token1
16471
+ depositTokens: [
16472
+ Global.getDefaultTokens().find((t) => t.symbol === "WBTC"),
16473
+ Global.getDefaultTokens().find((t) => t.symbol === "xWBTC")
16474
+ ],
16475
+ additionalInfo: {
16476
+ ...xSTRKSTRK.additionalInfo,
16477
+ quoteAsset: Global.getDefaultTokens().find((t) => t.symbol === "WBTC"),
16478
+ lstContract: Global.getDefaultTokens().find((t) => t.symbol === "xWBTC").address
16479
+ },
16480
+ faqs: getLSTFAQs("xWBTC"),
16481
+ points: [],
16482
+ contractDetails: [],
16483
+ investmentSteps: []
16484
+ },
16485
+ {
16486
+ ...xSTRKSTRK,
16487
+ name: "Ekubo xtBTC/tBTC",
16488
+ description: /* @__PURE__ */ jsx3(Fragment2, {}),
16489
+ address: ContractAddr.from(
16490
+ "0x785dc3dfc4e80ef2690a99512481e3ed3a5266180adda5a47e856245d68a4af"
16491
+ ),
16492
+ launchBlock: 2344809,
16493
+ // must be same order as poolKey token0 and token1
16494
+ depositTokens: [
16495
+ Global.getDefaultTokens().find((t) => t.symbol === "xtBTC"),
16496
+ Global.getDefaultTokens().find((t) => t.symbol === "tBTC")
16497
+ ],
16498
+ additionalInfo: {
16499
+ ...xSTRKSTRK.additionalInfo,
16500
+ quoteAsset: Global.getDefaultTokens().find((t) => t.symbol === "tBTC"),
16501
+ lstContract: Global.getDefaultTokens().find((t) => t.symbol === "xtBTC").address
16502
+ },
16503
+ faqs: getLSTFAQs("xtBTC"),
16504
+ points: [],
16505
+ contractDetails: [],
16506
+ investmentSteps: []
16507
+ },
16508
+ {
16509
+ ...xSTRKSTRK,
16510
+ name: "Ekubo xsBTC/solvBTC",
16511
+ description: /* @__PURE__ */ jsx3(Fragment2, {}),
16512
+ address: ContractAddr.from(
16513
+ "0x3af1c7faa7c464cf2c494e988972ad1939f1103dbfb6e47e9bf0c47e49b14ef"
16514
+ ),
16515
+ launchBlock: 2344809,
16516
+ // must be same order as poolKey token0 and token1
16517
+ depositTokens: [
16518
+ Global.getDefaultTokens().find((t) => t.symbol === "xsBTC"),
16519
+ Global.getDefaultTokens().find((t) => t.symbol === "solvBTC")
16520
+ ],
16521
+ additionalInfo: {
16522
+ ...xSTRKSTRK.additionalInfo,
16523
+ quoteAsset: Global.getDefaultTokens().find((t) => t.symbol === "solvBTC"),
16524
+ lstContract: Global.getDefaultTokens().find((t) => t.symbol === "xsBTC").address
16525
+ },
16526
+ faqs: getLSTFAQs("xsBTC"),
16527
+ points: [],
16528
+ contractDetails: [],
16529
+ investmentSteps: []
16530
+ }
16531
+ ];
16532
+ var ETHUSDCRe7Strategy = {
16533
+ ...xSTRKSTRK,
16534
+ name: "Ekubo ETH/USDC",
16535
+ description: /* @__PURE__ */ jsx3(Fragment2, {}),
16536
+ address: ContractAddr.from(
16537
+ "0x160d8fa4569ef6a12e6bf47cb943d7b5ebba8a41a69a14c1d943050ba5ff947"
16538
+ ),
16539
+ launchBlock: 1504232,
16540
+ // must be same order as poolKey token0 and token1
16541
+ depositTokens: [
16542
+ Global.getDefaultTokens().find((t) => t.symbol === "ETH"),
16543
+ Global.getDefaultTokens().find((t) => t.symbol === "USDC")
16544
+ ],
16545
+ additionalInfo: {
16546
+ newBounds: "Managed by Re7",
16547
+ truePrice: 1,
16548
+ feeBps: 1e3,
16549
+ rebalanceConditions: {
16550
+ customShouldRebalance: async (currentPrice) => currentPrice > 0.99 && currentPrice < 1.01,
16551
+ minWaitHours: 6,
16552
+ direction: "any"
16553
+ },
16554
+ quoteAsset: Global.getDefaultTokens().find((t) => t.symbol === "USDC")
16555
+ },
16556
+ faqs: [
16557
+ ...faqs2,
16558
+ {
16559
+ question: "Who is the curator of this strategy?",
16560
+ answer: /* @__PURE__ */ jsxs2("div", { children: [
16561
+ "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 ",
16562
+ /* @__PURE__ */ jsx3("a", { href: "https://www.re7labs.xyz", style: { textDecoration: "underline", marginLeft: "2px" }, target: "_blank", children: "here" }),
16563
+ "."
16564
+ ] })
16565
+ }
16566
+ ],
16567
+ risk: highRisk,
16568
+ points: [],
16569
+ curator: { name: "Re7 Labs", logo: "https://www.re7labs.xyz/favicon.ico" }
16570
+ };
16571
+ var RE7Strategies = [
16572
+ ETHUSDCRe7Strategy,
16573
+ {
16574
+ ...ETHUSDCRe7Strategy,
16363
16575
  name: "Ekubo USDC/USDT",
16364
16576
  description: /* @__PURE__ */ jsx3(Fragment2, {}),
16365
16577
  address: ContractAddr.from(
16366
- "0xd647ed735f0db52f2a5502b6e06ed21dc4284a43a36af4b60d3c80fbc56c91"
16578
+ "0x3a4f8debaf12af97bb911099bc011d63d6c208d4c5ba8e15d7f437785b0aaa2"
16367
16579
  ),
16368
- launchBlock: 1385576,
16580
+ launchBlock: 1506139,
16369
16581
  // must be same order as poolKey token0 and token1
16370
16582
  depositTokens: [
16371
16583
  Global.getDefaultTokens().find((t) => t.symbol === "USDC"),
16372
16584
  Global.getDefaultTokens().find((t) => t.symbol === "USDT")
16373
16585
  ],
16374
- additionalInfo: {
16375
- newBounds: {
16376
- lower: -1,
16377
- upper: 1
16378
- },
16379
- truePrice: 1,
16380
- feeBps: 1e3,
16381
- rebalanceConditions: {
16382
- customShouldRebalance: async (currentPrice) => currentPrice > 0.99 && currentPrice < 1.01,
16383
- minWaitHours: 6,
16384
- direction: "any"
16385
- }
16386
- }
16586
+ risk: xSTRKSTRK.risk
16387
16587
  },
16388
16588
  {
16389
- ...xSTRKSTRK,
16589
+ ...ETHUSDCRe7Strategy,
16390
16590
  name: "Ekubo STRK/USDC",
16391
16591
  description: /* @__PURE__ */ jsx3(Fragment2, {}),
16392
16592
  address: ContractAddr.from(
16393
- "0xb7bd37121041261446d8eedec618955a4490641034942da688e8cbddea7b23"
16593
+ "0x351b36d0d9d8b40010658825adeeddb1397436cd41acd0ff6c6e23aaa8b5b30"
16394
16594
  ),
16395
- launchBlock: 1492136,
16595
+ launchBlock: 1504079,
16396
16596
  // must be same order as poolKey token0 and token1
16397
16597
  depositTokens: [
16398
16598
  Global.getDefaultTokens().find((t) => t.symbol === "STRK"),
16399
16599
  Global.getDefaultTokens().find((t) => t.symbol === "USDC")
16400
16600
  ],
16401
- maxTVL: Web3Number.fromWei("0", 6),
16402
- additionalInfo: {
16403
- newBounds: "Managed by Re7",
16404
- feeBps: 1e3,
16405
- rebalanceConditions: {
16406
- customShouldRebalance: async (currentPrice) => true,
16407
- minWaitHours: 6,
16408
- direction: "any"
16409
- }
16410
- }
16601
+ risk: highRisk
16602
+ },
16603
+ {
16604
+ ...ETHUSDCRe7Strategy,
16605
+ name: "Ekubo STRK/ETH",
16606
+ description: /* @__PURE__ */ jsx3(Fragment2, {}),
16607
+ address: ContractAddr.from(
16608
+ "0x4ce3024b0ee879009112d7b0e073f8a87153dd35b029347d4247ffe48d28f51"
16609
+ ),
16610
+ launchBlock: 1504149,
16611
+ // must be same order as poolKey token0 and token1
16612
+ depositTokens: [
16613
+ Global.getDefaultTokens().find((t) => t.symbol === "STRK"),
16614
+ Global.getDefaultTokens().find((t) => t.symbol === "ETH")
16615
+ ],
16616
+ risk: highRisk
16617
+ },
16618
+ {
16619
+ ...ETHUSDCRe7Strategy,
16620
+ name: "Ekubo WBTC/USDC",
16621
+ description: /* @__PURE__ */ jsx3(Fragment2, {}),
16622
+ address: ContractAddr.from(
16623
+ "0x2bcaef2eb7706875a5fdc6853dd961a0590f850bc3a031c59887189b5e84ba1"
16624
+ ),
16625
+ launchBlock: 1506144,
16626
+ // must be same order as poolKey token0 and token1
16627
+ depositTokens: [
16628
+ Global.getDefaultTokens().find((t) => t.symbol === "WBTC"),
16629
+ Global.getDefaultTokens().find((t) => t.symbol === "USDC")
16630
+ ],
16631
+ risk: mediumRisk
16632
+ },
16633
+ {
16634
+ ...ETHUSDCRe7Strategy,
16635
+ name: "Ekubo tBTC/USDC",
16636
+ description: /* @__PURE__ */ jsx3(Fragment2, {}),
16637
+ address: ContractAddr.from(
16638
+ "0x4aad891a2d4432fba06b6558631bb13f6bbd7f6f33ab8c3111e344889ea4456"
16639
+ ),
16640
+ launchBlock: 1501764,
16641
+ // must be same order as poolKey token0 and token1
16642
+ depositTokens: [
16643
+ Global.getDefaultTokens().find((t) => t.symbol === "tBTC"),
16644
+ Global.getDefaultTokens().find((t) => t.symbol === "USDC")
16645
+ ],
16646
+ risk: mediumRisk
16647
+ },
16648
+ {
16649
+ ...ETHUSDCRe7Strategy,
16650
+ name: "Ekubo WBTC/ETH",
16651
+ description: /* @__PURE__ */ jsx3(Fragment2, {}),
16652
+ address: ContractAddr.from(
16653
+ "0x1c9232b8186d9317652f05055615f18a120c2ad9e5ee96c39e031c257fb945b"
16654
+ ),
16655
+ launchBlock: 1506145,
16656
+ // must be same order as poolKey token0 and token1
16657
+ depositTokens: [
16658
+ Global.getDefaultTokens().find((t) => t.symbol === "WBTC"),
16659
+ Global.getDefaultTokens().find((t) => t.symbol === "ETH")
16660
+ ],
16661
+ risk: mediumRisk
16662
+ },
16663
+ {
16664
+ ...ETHUSDCRe7Strategy,
16665
+ name: "Ekubo WBTC/STRK",
16666
+ description: /* @__PURE__ */ jsx3(Fragment2, {}),
16667
+ address: ContractAddr.from(
16668
+ "0x1248e385c23a929a015ec298a26560fa7745bbd6e41a886550e337b02714b1b"
16669
+ ),
16670
+ launchBlock: 1506147,
16671
+ // must be same order as poolKey token0 and token1
16672
+ depositTokens: [
16673
+ Global.getDefaultTokens().find((t) => t.symbol === "WBTC"),
16674
+ Global.getDefaultTokens().find((t) => t.symbol === "STRK")
16675
+ ],
16676
+ risk: highRisk
16411
16677
  }
16412
16678
  ];
16679
+ var EkuboCLVaultStrategies = [
16680
+ ...[lstStrategies[0]],
16681
+ ...RE7Strategies
16682
+ ];
16413
16683
  EkuboCLVaultStrategies.forEach((s) => {
16414
16684
  s.contractDetails = [
16415
16685
  {
16416
16686
  address: s.address,
16417
16687
  name: "Vault",
16418
16688
  sourceCodeUrl: "https://github.com/strkfarm/strkfarm-contracts/tree/main/src/strategies/cl_vault"
16419
- },
16420
- ...COMMON_CONTRACTS
16689
+ }
16690
+ // ...COMMON_CONTRACTS
16421
16691
  ];
16422
16692
  s.docs = "https://docs.troves.fi/p/ekubo-cl-vaults";
16423
16693
  s.description = /* @__PURE__ */ jsxs2("div", { children: [
@@ -16438,7 +16708,11 @@ EkuboCLVaultStrategies.forEach((s) => {
16438
16708
  /* @__PURE__ */ jsx3("h4", { style: { fontWeight: "bold" }, children: "Key points to note:" }),
16439
16709
  /* @__PURE__ */ jsxs2("div", { style: { display: "flex", flexDirection: "column", gap: "10px", color: "var(--chakra-colors-text_secondary)" }, children: [
16440
16710
  /* @__PURE__ */ jsx3("p", { style: {}, children: "1. During withdrawal, you may receive either or both tokens depending on market conditions and prevailing prices." }),
16441
- 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." })
16711
+ s.additionalInfo.lstContract && /* @__PURE__ */ jsxs2("p", { style: {}, children: [
16712
+ "2. Sometimes you might see a negative APY \u2014 this is usually not a big deal. It happens when ",
16713
+ s.name.split(" ")[1].split("/")[0],
16714
+ "'s price drops on DEXes, but things typically bounce back within a few days or a week."
16715
+ ] })
16442
16716
  ] })
16443
16717
  ] })
16444
16718
  ] });
@@ -18388,7 +18662,7 @@ var endurProtocol = {
18388
18662
  name: "Endur",
18389
18663
  logo: "https://app.endur.fi/logo.png"
18390
18664
  };
18391
- var _riskFactor3 = [
18665
+ var _riskFactor2 = [
18392
18666
  { type: "Smart Contract Risk" /* SMART_CONTRACT_RISK */, value: 0.5, weight: 25, reason: "Audited by CSC" },
18393
18667
  { 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." },
18394
18668
  { 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" },
@@ -18463,9 +18737,9 @@ var SenseiStrategies = [
18463
18737
  protocols: [endurProtocol, vesuProtocol],
18464
18738
  maxTVL: new Web3Number("1500000", 18),
18465
18739
  risk: {
18466
- riskFactor: _riskFactor3,
18467
- netRisk: _riskFactor3.reduce((acc, curr) => acc + curr.value * curr.weight, 0) / _riskFactor3.reduce((acc, curr) => acc + curr.weight, 0),
18468
- notARisks: getNoRiskTags(_riskFactor3)
18740
+ riskFactor: _riskFactor2,
18741
+ netRisk: _riskFactor2.reduce((acc, curr) => acc + curr.value * curr.weight, 0) / _riskFactor2.reduce((acc, curr) => acc + curr.weight, 0),
18742
+ notARisks: getNoRiskTags(_riskFactor2)
18469
18743
  },
18470
18744
  additionalInfo: {
18471
18745
  mainToken: Global.getDefaultTokens().find((t) => t.symbol === "STRK"),
@@ -21220,7 +21494,7 @@ var VesuAdapter = class _VesuAdapter extends BaseAdapter {
21220
21494
  let pools = [];
21221
21495
  try {
21222
21496
  const data = await getAPIUsingHeadlessBrowser(
21223
- "https://api.vesu.xyz/pools"
21497
+ `${ENDPOINTS.VESU_BASE}/pools`
21224
21498
  );
21225
21499
  pools = data.data;
21226
21500
  for (const pool of vesu_pools_default.data) {
@@ -24079,7 +24353,7 @@ function getLooperSettings(token1Symbol, token2Symbol, vaultSettings, pool1, poo
24079
24353
  vaultSettings.leafAdapters.push(commonAdapter.getAvnuAdapter(STRKToken.address, USDCToken.address, "avnu_swap_rewards" /* AVNU_SWAP_REWARDS */).bind(commonAdapter));
24080
24354
  return vaultSettings;
24081
24355
  }
24082
- var _riskFactor4 = [
24356
+ var _riskFactor3 = [
24083
24357
  { type: "Smart Contract Risk" /* SMART_CONTRACT_RISK */, value: 0.5, weight: 25, reason: "Audited by Zellic" },
24084
24358
  { type: "Liquidation Risk" /* LIQUIDATION_RISK */, value: 1.5, weight: 50, reason: "Liquidation risk is mitigated by stable price feed on Starknet" },
24085
24359
  { type: "Technical Risk" /* TECHNICAL_RISK */, value: 1, weight: 50, reason: "Technical failures like risk monitoring failures" }
@@ -24283,9 +24557,9 @@ var UniversalStrategies = [
24283
24557
  depositTokens: [Global.getDefaultTokens().find((token) => token.symbol === "USDC")],
24284
24558
  additionalInfo: getLooperSettings("USDC", "ETH", usdcVaultSettings, VesuPools.Genesis, VesuPools.Genesis),
24285
24559
  risk: {
24286
- riskFactor: _riskFactor4,
24287
- netRisk: _riskFactor4.reduce((acc, curr) => acc + curr.value * curr.weight, 0) / _riskFactor4.reduce((acc, curr) => acc + curr.weight, 0),
24288
- notARisks: getNoRiskTags(_riskFactor4)
24560
+ riskFactor: _riskFactor3,
24561
+ netRisk: _riskFactor3.reduce((acc, curr) => acc + curr.value * curr.weight, 0) / _riskFactor3.reduce((acc, curr) => acc + curr.weight, 0),
24562
+ notARisks: getNoRiskTags(_riskFactor3)
24289
24563
  },
24290
24564
  protocols: [Protocols.VESU],
24291
24565
  maxTVL: Web3Number.fromWei(0, 6),
@@ -24302,9 +24576,9 @@ var UniversalStrategies = [
24302
24576
  depositTokens: [Global.getDefaultTokens().find((token) => token.symbol === "WBTC")],
24303
24577
  additionalInfo: getLooperSettings("WBTC", "ETH", wbtcVaultSettings, VesuPools.Genesis, VesuPools.Genesis),
24304
24578
  risk: {
24305
- riskFactor: _riskFactor4,
24306
- netRisk: _riskFactor4.reduce((acc, curr) => acc + curr.value * curr.weight, 0) / _riskFactor4.reduce((acc, curr) => acc + curr.weight, 0),
24307
- notARisks: getNoRiskTags(_riskFactor4)
24579
+ riskFactor: _riskFactor3,
24580
+ netRisk: _riskFactor3.reduce((acc, curr) => acc + curr.value * curr.weight, 0) / _riskFactor3.reduce((acc, curr) => acc + curr.weight, 0),
24581
+ notARisks: getNoRiskTags(_riskFactor3)
24308
24582
  },
24309
24583
  protocols: [Protocols.VESU],
24310
24584
  maxTVL: Web3Number.fromWei(0, 8),
@@ -24321,9 +24595,9 @@ var UniversalStrategies = [
24321
24595
  depositTokens: [Global.getDefaultTokens().find((token) => token.symbol === "ETH")],
24322
24596
  additionalInfo: getLooperSettings("ETH", "WBTC", ethVaultSettings, VesuPools.Genesis, VesuPools.Genesis),
24323
24597
  risk: {
24324
- riskFactor: _riskFactor4,
24325
- netRisk: _riskFactor4.reduce((acc, curr) => acc + curr.value * curr.weight, 0) / _riskFactor4.reduce((acc, curr) => acc + curr.weight, 0),
24326
- notARisks: getNoRiskTags(_riskFactor4)
24598
+ riskFactor: _riskFactor3,
24599
+ netRisk: _riskFactor3.reduce((acc, curr) => acc + curr.value * curr.weight, 0) / _riskFactor3.reduce((acc, curr) => acc + curr.weight, 0),
24600
+ notARisks: getNoRiskTags(_riskFactor3)
24327
24601
  },
24328
24602
  protocols: [Protocols.VESU],
24329
24603
  maxTVL: Web3Number.fromWei(0, 18),
@@ -24340,9 +24614,9 @@ var UniversalStrategies = [
24340
24614
  depositTokens: [Global.getDefaultTokens().find((token) => token.symbol === "STRK")],
24341
24615
  additionalInfo: getLooperSettings("STRK", "ETH", strkVaultSettings, VesuPools.Genesis, VesuPools.Genesis),
24342
24616
  risk: {
24343
- riskFactor: _riskFactor4,
24344
- netRisk: _riskFactor4.reduce((acc, curr) => acc + curr.value * curr.weight, 0) / _riskFactor4.reduce((acc, curr) => acc + curr.weight, 0),
24345
- notARisks: getNoRiskTags(_riskFactor4)
24617
+ riskFactor: _riskFactor3,
24618
+ netRisk: _riskFactor3.reduce((acc, curr) => acc + curr.value * curr.weight, 0) / _riskFactor3.reduce((acc, curr) => acc + curr.weight, 0),
24619
+ notARisks: getNoRiskTags(_riskFactor3)
24346
24620
  },
24347
24621
  protocols: [Protocols.VESU],
24348
24622
  maxTVL: Web3Number.fromWei(0, 18),
@@ -24359,9 +24633,9 @@ var UniversalStrategies = [
24359
24633
  depositTokens: [Global.getDefaultTokens().find((token) => token.symbol === "USDT")],
24360
24634
  additionalInfo: getLooperSettings("USDT", "ETH", usdtVaultSettings, VesuPools.Genesis, VesuPools.Genesis),
24361
24635
  risk: {
24362
- riskFactor: _riskFactor4,
24363
- netRisk: _riskFactor4.reduce((acc, curr) => acc + curr.value * curr.weight, 0) / _riskFactor4.reduce((acc, curr) => acc + curr.weight, 0),
24364
- notARisks: getNoRiskTags(_riskFactor4)
24636
+ riskFactor: _riskFactor3,
24637
+ netRisk: _riskFactor3.reduce((acc, curr) => acc + curr.value * curr.weight, 0) / _riskFactor3.reduce((acc, curr) => acc + curr.weight, 0),
24638
+ notARisks: getNoRiskTags(_riskFactor3)
24365
24639
  },
24366
24640
  protocols: [Protocols.VESU],
24367
24641
  maxTVL: Web3Number.fromWei(0, 6),
@@ -24377,11 +24651,9 @@ var TelegramNotif = class {
24377
24651
  constructor(token, shouldPoll) {
24378
24652
  this.subscribers = [
24379
24653
  // '6820228303',
24380
- "1505578076",
24381
- "1356705582",
24382
- // langs
24383
- "1388729514",
24384
- // hwashere
24654
+ // '1505578076',
24655
+ // '1356705582', // langs
24656
+ // '1388729514', // hwashere
24385
24657
  "985902592"
24386
24658
  ];
24387
24659
  this.bot = new TelegramBot(token, { polling: shouldPoll });