@strkfarm/sdk 1.1.5 → 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.js CHANGED
@@ -328,6 +328,7 @@ var defaultTokens = [{
328
328
  address: ContractAddr.from("0x0593e034dda23eea82d2ba9a30960ed42cf4a01502cc2351dc9b9881f9931a68"),
329
329
  decimals: 18,
330
330
  coingeckId: void 0,
331
+ priceProxySymbol: "WBTC",
331
332
  displayDecimals: 6,
332
333
  priceCheckAmount: 1e-4
333
334
  // 112000 * 0.0001 = $11.2
@@ -339,6 +340,40 @@ var defaultTokens = [{
339
340
  decimals: 8,
340
341
  coingeckId: void 0,
341
342
  displayDecimals: 6,
343
+ priceProxySymbol: "WBTC",
344
+ priceCheckAmount: 1e-4
345
+ // 112000 * 0.0001 = $11.2
346
+ }, {
347
+ name: "xWBTC",
348
+ symbol: "xWBTC",
349
+ logo: "https://assets.strkfarm.com/integrations/tokens/xwbtc.svg",
350
+ address: ContractAddr.from("0x6a567e68c805323525fe1649adb80b03cddf92c23d2629a6779f54192dffc13"),
351
+ decimals: 8,
352
+ coingeckId: void 0,
353
+ displayDecimals: 6,
354
+ priceProxySymbol: "WBTC",
355
+ priceCheckAmount: 1e-4
356
+ // 112000 * 0.0001 = $11.2
357
+ }, {
358
+ name: "xsBTC",
359
+ symbol: "xsBTC",
360
+ logo: "https://assets.strkfarm.com/integrations/tokens/xsbtc_solv.svg",
361
+ address: ContractAddr.from("0x580f3dc564a7b82f21d40d404b3842d490ae7205e6ac07b1b7af2b4a5183dc9"),
362
+ decimals: 18,
363
+ coingeckId: void 0,
364
+ displayDecimals: 6,
365
+ priceProxySymbol: "WBTC",
366
+ priceCheckAmount: 1e-4
367
+ // 112000 * 0.0001 = $11.2
368
+ }, {
369
+ name: "xtBTC",
370
+ symbol: "xtBTC",
371
+ logo: "https://assets.strkfarm.com/integrations/tokens/xtbtc.svg",
372
+ address: ContractAddr.from("0x43a35c1425a0125ef8c171f1a75c6f31ef8648edcc8324b55ce1917db3f9b91"),
373
+ decimals: 8,
374
+ coingeckId: void 0,
375
+ displayDecimals: 6,
376
+ priceProxySymbol: "WBTC",
342
377
  priceCheckAmount: 1e-4
343
378
  // 112000 * 0.0001 = $11.2
344
379
  }];
@@ -428,9 +463,11 @@ var PricerBase = class {
428
463
  // src/modules/pricer.ts
429
464
  var Pricer = class extends PricerBase {
430
465
  // e.g. ETH/USDC
431
- constructor(config, tokens2) {
466
+ constructor(config, tokens2, refreshInterval = 3e4, staleTime = 6e4) {
432
467
  super(config, tokens2);
433
468
  this.prices = {};
469
+ this.refreshInterval = 3e4;
470
+ this.staleTime = 6e4;
434
471
  // code populates this map during runtime to determine which method to use for a given token
435
472
  // The method set will be the first one to try after first attempt
436
473
  this.methodToUse = {};
@@ -439,6 +476,8 @@ var Pricer = class extends PricerBase {
439
476
  */
440
477
  this.PRICE_API = `https://api.coinbase.com/v2/prices/{{PRICER_KEY}}/buy`;
441
478
  this.EKUBO_API = "https://quoter-mainnet-api.ekubo.org/{{AMOUNT}}/{{TOKEN_ADDRESS}}/0x053c91253bc9682c04929ca02ed00b3e423f6710d2ee7e0d5ebb06f3ecf368a8";
479
+ this.refreshInterval = refreshInterval;
480
+ this.staleTime = staleTime;
442
481
  }
443
482
  isReady() {
444
483
  const allPricesExist = Object.keys(this.prices).length === this.tokens.length;
@@ -471,10 +510,10 @@ var Pricer = class extends PricerBase {
471
510
  this._loadPrices();
472
511
  setInterval(() => {
473
512
  this._loadPrices();
474
- }, 3e4);
513
+ }, this.refreshInterval);
475
514
  }
476
515
  isStale(timestamp, tokenName) {
477
- const STALE_TIME = 6e4;
516
+ const STALE_TIME = this.staleTime;
478
517
  return (/* @__PURE__ */ new Date()).getTime() - timestamp.getTime() > STALE_TIME;
479
518
  }
480
519
  assertNotStale(timestamp, tokenName) {
@@ -500,13 +539,25 @@ var Pricer = class extends PricerBase {
500
539
  onUpdate(token.symbol);
501
540
  return;
502
541
  }
503
- const price = await this._getPrice(token);
504
- this.prices[token.symbol] = {
505
- price,
506
- timestamp: /* @__PURE__ */ new Date()
507
- };
542
+ if (token.priceProxySymbol) {
543
+ const proxyToken = this.tokens.find((t) => t.symbol === token.priceProxySymbol);
544
+ if (!proxyToken) {
545
+ throw new FatalError(`Price proxy token ${token.priceProxySymbol} not found`);
546
+ }
547
+ const price = await this._getPrice(proxyToken);
548
+ this.prices[token.symbol] = {
549
+ price,
550
+ timestamp: /* @__PURE__ */ new Date()
551
+ };
552
+ } else {
553
+ const price = await this._getPrice(token);
554
+ this.prices[token.symbol] = {
555
+ price,
556
+ timestamp: /* @__PURE__ */ new Date()
557
+ };
558
+ }
508
559
  onUpdate(token.symbol);
509
- logger.verbose(`Fetched price of ${token.name} as ${price}`);
560
+ logger.verbose(`Fetched price of ${token.name} as ${this.prices[token.symbol].price}`);
510
561
  break;
511
562
  } catch (error) {
512
563
  if (retry < MAX_RETRIES) {
@@ -3946,6 +3997,18 @@ async function getAPIUsingHeadlessBrowser(url) {
3946
3997
 
3947
3998
  // src/modules/harvests.ts
3948
3999
  var import_starknet9 = require("starknet");
4000
+
4001
+ // src/strategies/constants.ts
4002
+ var COMMON_CONTRACTS = [{
4003
+ address: ContractAddr.from("0x0636a3f51cc37f5729e4da4b1de6a8549a28f3c0d5bf3b17f150971e451ff9c2"),
4004
+ name: "Access Controller",
4005
+ sourceCodeUrl: "https://github.com/strkfarm/strkfarm-contracts/blob/main/src/components/accessControl.cairo"
4006
+ }];
4007
+ var ENDPOINTS = {
4008
+ VESU_BASE: "https://cache-server-t2me.onrender.com/vesu"
4009
+ };
4010
+
4011
+ // src/modules/harvests.ts
3949
4012
  var Harvests = class _Harvests {
3950
4013
  constructor(config) {
3951
4014
  this.config = config;
@@ -4005,7 +4068,7 @@ var EkuboHarvests = class extends Harvests {
4005
4068
  var VESU_REWARDS_CONTRACT = ContractAddr.from("0x0387f3eb1d98632fbe3440a9f1385Aec9d87b6172491d3Dd81f1c35A7c61048F");
4006
4069
  var VesuHarvests = class _VesuHarvests extends Harvests {
4007
4070
  async getHarvests(addr) {
4008
- const result = await fetch(`https://api.vesu.xyz/users/${addr.address}/strk-rewards/calldata`);
4071
+ const result = await fetch(`${ENDPOINTS.VESU_BASE}/users/${addr.address}/strk-rewards/calldata`);
4009
4072
  const data = await result.json();
4010
4073
  const rewardsContract = VESU_REWARDS_CONTRACT;
4011
4074
  const cls = await this.config.provider.getClassAt(rewardsContract.address);
@@ -9483,13 +9546,6 @@ var vesu_pools_default = {
9483
9546
  ]
9484
9547
  };
9485
9548
 
9486
- // src/strategies/constants.ts
9487
- var COMMON_CONTRACTS = [{
9488
- address: ContractAddr.from("0x0636a3f51cc37f5729e4da4b1de6a8549a28f3c0d5bf3b17f150971e451ff9c2"),
9489
- name: "Access Controller",
9490
- sourceCodeUrl: "https://github.com/strkfarm/strkfarm-contracts/blob/main/src/components/accessControl.cairo"
9491
- }];
9492
-
9493
9549
  // src/strategies/vesu-rebalance.tsx
9494
9550
  var import_jsx_runtime2 = require("react/jsx-runtime");
9495
9551
  var VesuRebalance = class _VesuRebalance extends BaseStrategy {
@@ -9618,7 +9674,7 @@ var VesuRebalance = class _VesuRebalance extends BaseStrategy {
9618
9674
  };
9619
9675
  }
9620
9676
  static async getAllPossibleVerifiedPools(asset) {
9621
- const data = await getAPIUsingHeadlessBrowser("https://api.vesu.xyz/pools");
9677
+ const data = await getAPIUsingHeadlessBrowser(`${ENDPOINTS.VESU_BASE}/pools`);
9622
9678
  const verifiedPools = data.data.filter((d) => d.isVerified);
9623
9679
  const pools = verifiedPools.map((p) => {
9624
9680
  const hasMyAsset = p.assets.find((a) => asset.eqString(a.address));
@@ -9795,7 +9851,7 @@ var VesuRebalance = class _VesuRebalance extends BaseStrategy {
9795
9851
  let pools = [];
9796
9852
  try {
9797
9853
  const data = await getAPIUsingHeadlessBrowser(
9798
- "https://api.vesu.xyz/pools"
9854
+ `${ENDPOINTS.VESU_BASE}/pools`
9799
9855
  );
9800
9856
  pools = data.data;
9801
9857
  for (const pool of vesu_pools_default.data) {
@@ -16428,6 +16484,15 @@ var faqs2 = [
16428
16484
  ] })
16429
16485
  }
16430
16486
  ];
16487
+ function getLSTFAQs(lstSymbol) {
16488
+ return [
16489
+ ...faqs2,
16490
+ {
16491
+ question: "Why might I see a negative APY?",
16492
+ 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.`
16493
+ }
16494
+ ];
16495
+ }
16431
16496
  var xSTRKSTRK = {
16432
16497
  name: "Ekubo xSTRK/STRK",
16433
16498
  description: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_jsx_runtime3.Fragment, {}),
@@ -16466,13 +16531,7 @@ var xSTRKSTRK = {
16466
16531
  },
16467
16532
  quoteAsset: Global.getDefaultTokens().find((t) => t.symbol === "STRK")
16468
16533
  },
16469
- faqs: [
16470
- ...faqs2,
16471
- {
16472
- question: "Why might I see a negative APY?",
16473
- 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."
16474
- }
16475
- ],
16534
+ faqs: getLSTFAQs("xSTRK"),
16476
16535
  points: [{
16477
16536
  multiplier: 1,
16478
16537
  logo: "https://endur.fi/favicon.ico",
@@ -16481,6 +16540,78 @@ var xSTRKSTRK = {
16481
16540
  contractDetails: [],
16482
16541
  investmentSteps: []
16483
16542
  };
16543
+ var lstStrategies = [
16544
+ xSTRKSTRK,
16545
+ {
16546
+ ...xSTRKSTRK,
16547
+ name: "Ekubo xWBTC/WBTC",
16548
+ description: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_jsx_runtime3.Fragment, {}),
16549
+ address: ContractAddr.from(
16550
+ "0x2ea99b4971d3c277fa4a9b4beb7d4d7d169e683393a29eef263d5d57b4380a"
16551
+ ),
16552
+ launchBlock: 2338309,
16553
+ // must be same order as poolKey token0 and token1
16554
+ depositTokens: [
16555
+ Global.getDefaultTokens().find((t) => t.symbol === "WBTC"),
16556
+ Global.getDefaultTokens().find((t) => t.symbol === "xWBTC")
16557
+ ],
16558
+ additionalInfo: {
16559
+ ...xSTRKSTRK.additionalInfo,
16560
+ quoteAsset: Global.getDefaultTokens().find((t) => t.symbol === "WBTC"),
16561
+ lstContract: Global.getDefaultTokens().find((t) => t.symbol === "xWBTC").address
16562
+ },
16563
+ faqs: getLSTFAQs("xWBTC"),
16564
+ points: [],
16565
+ contractDetails: [],
16566
+ investmentSteps: []
16567
+ },
16568
+ {
16569
+ ...xSTRKSTRK,
16570
+ name: "Ekubo xtBTC/tBTC",
16571
+ description: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_jsx_runtime3.Fragment, {}),
16572
+ address: ContractAddr.from(
16573
+ "0x785dc3dfc4e80ef2690a99512481e3ed3a5266180adda5a47e856245d68a4af"
16574
+ ),
16575
+ launchBlock: 2344809,
16576
+ // must be same order as poolKey token0 and token1
16577
+ depositTokens: [
16578
+ Global.getDefaultTokens().find((t) => t.symbol === "xtBTC"),
16579
+ Global.getDefaultTokens().find((t) => t.symbol === "tBTC")
16580
+ ],
16581
+ additionalInfo: {
16582
+ ...xSTRKSTRK.additionalInfo,
16583
+ quoteAsset: Global.getDefaultTokens().find((t) => t.symbol === "tBTC"),
16584
+ lstContract: Global.getDefaultTokens().find((t) => t.symbol === "xtBTC").address
16585
+ },
16586
+ faqs: getLSTFAQs("xtBTC"),
16587
+ points: [],
16588
+ contractDetails: [],
16589
+ investmentSteps: []
16590
+ },
16591
+ {
16592
+ ...xSTRKSTRK,
16593
+ name: "Ekubo xsBTC/solvBTC",
16594
+ description: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_jsx_runtime3.Fragment, {}),
16595
+ address: ContractAddr.from(
16596
+ "0x3af1c7faa7c464cf2c494e988972ad1939f1103dbfb6e47e9bf0c47e49b14ef"
16597
+ ),
16598
+ launchBlock: 2344809,
16599
+ // must be same order as poolKey token0 and token1
16600
+ depositTokens: [
16601
+ Global.getDefaultTokens().find((t) => t.symbol === "xsBTC"),
16602
+ Global.getDefaultTokens().find((t) => t.symbol === "solvBTC")
16603
+ ],
16604
+ additionalInfo: {
16605
+ ...xSTRKSTRK.additionalInfo,
16606
+ quoteAsset: Global.getDefaultTokens().find((t) => t.symbol === "solvBTC"),
16607
+ lstContract: Global.getDefaultTokens().find((t) => t.symbol === "xsBTC").address
16608
+ },
16609
+ faqs: getLSTFAQs("xsBTC"),
16610
+ points: [],
16611
+ contractDetails: [],
16612
+ investmentSteps: []
16613
+ }
16614
+ ];
16484
16615
  var ETHUSDCRe7Strategy = {
16485
16616
  ...xSTRKSTRK,
16486
16617
  name: "Ekubo ETH/USDC",
@@ -16488,7 +16619,7 @@ var ETHUSDCRe7Strategy = {
16488
16619
  address: ContractAddr.from(
16489
16620
  "0x160d8fa4569ef6a12e6bf47cb943d7b5ebba8a41a69a14c1d943050ba5ff947"
16490
16621
  ),
16491
- launchBlock: 1501761,
16622
+ launchBlock: 1504232,
16492
16623
  // must be same order as poolKey token0 and token1
16493
16624
  depositTokens: [
16494
16625
  Global.getDefaultTokens().find((t) => t.symbol === "ETH"),
@@ -16529,7 +16660,7 @@ var RE7Strategies = [
16529
16660
  address: ContractAddr.from(
16530
16661
  "0x3a4f8debaf12af97bb911099bc011d63d6c208d4c5ba8e15d7f437785b0aaa2"
16531
16662
  ),
16532
- launchBlock: 1501761,
16663
+ launchBlock: 1506139,
16533
16664
  // must be same order as poolKey token0 and token1
16534
16665
  depositTokens: [
16535
16666
  Global.getDefaultTokens().find((t) => t.symbol === "USDC"),
@@ -16544,7 +16675,7 @@ var RE7Strategies = [
16544
16675
  address: ContractAddr.from(
16545
16676
  "0x351b36d0d9d8b40010658825adeeddb1397436cd41acd0ff6c6e23aaa8b5b30"
16546
16677
  ),
16547
- launchBlock: 1501762,
16678
+ launchBlock: 1504079,
16548
16679
  // must be same order as poolKey token0 and token1
16549
16680
  depositTokens: [
16550
16681
  Global.getDefaultTokens().find((t) => t.symbol === "STRK"),
@@ -16559,7 +16690,7 @@ var RE7Strategies = [
16559
16690
  address: ContractAddr.from(
16560
16691
  "0x4ce3024b0ee879009112d7b0e073f8a87153dd35b029347d4247ffe48d28f51"
16561
16692
  ),
16562
- launchBlock: 1501763,
16693
+ launchBlock: 1504149,
16563
16694
  // must be same order as poolKey token0 and token1
16564
16695
  depositTokens: [
16565
16696
  Global.getDefaultTokens().find((t) => t.symbol === "STRK"),
@@ -16574,7 +16705,7 @@ var RE7Strategies = [
16574
16705
  address: ContractAddr.from(
16575
16706
  "0x2bcaef2eb7706875a5fdc6853dd961a0590f850bc3a031c59887189b5e84ba1"
16576
16707
  ),
16577
- launchBlock: 1501764,
16708
+ launchBlock: 1506144,
16578
16709
  // must be same order as poolKey token0 and token1
16579
16710
  depositTokens: [
16580
16711
  Global.getDefaultTokens().find((t) => t.symbol === "WBTC"),
@@ -16604,7 +16735,7 @@ var RE7Strategies = [
16604
16735
  address: ContractAddr.from(
16605
16736
  "0x1c9232b8186d9317652f05055615f18a120c2ad9e5ee96c39e031c257fb945b"
16606
16737
  ),
16607
- launchBlock: 1501765,
16738
+ launchBlock: 1506145,
16608
16739
  // must be same order as poolKey token0 and token1
16609
16740
  depositTokens: [
16610
16741
  Global.getDefaultTokens().find((t) => t.symbol === "WBTC"),
@@ -16619,7 +16750,7 @@ var RE7Strategies = [
16619
16750
  address: ContractAddr.from(
16620
16751
  "0x1248e385c23a929a015ec298a26560fa7745bbd6e41a886550e337b02714b1b"
16621
16752
  ),
16622
- launchBlock: 1501766,
16753
+ launchBlock: 1506147,
16623
16754
  // must be same order as poolKey token0 and token1
16624
16755
  depositTokens: [
16625
16756
  Global.getDefaultTokens().find((t) => t.symbol === "WBTC"),
@@ -16629,7 +16760,7 @@ var RE7Strategies = [
16629
16760
  }
16630
16761
  ];
16631
16762
  var EkuboCLVaultStrategies = [
16632
- xSTRKSTRK,
16763
+ ...[lstStrategies[0]],
16633
16764
  ...RE7Strategies
16634
16765
  ];
16635
16766
  EkuboCLVaultStrategies.forEach((s) => {
@@ -16660,7 +16791,11 @@ EkuboCLVaultStrategies.forEach((s) => {
16660
16791
  /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("h4", { style: { fontWeight: "bold" }, children: "Key points to note:" }),
16661
16792
  /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("div", { style: { display: "flex", flexDirection: "column", gap: "10px", color: "var(--chakra-colors-text_secondary)" }, children: [
16662
16793
  /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("p", { style: {}, children: "1. During withdrawal, you may receive either or both tokens depending on market conditions and prevailing prices." }),
16663
- s.name.includes("xSTRK/STRK") && /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("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." })
16794
+ s.additionalInfo.lstContract && /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("p", { style: {}, children: [
16795
+ "2. Sometimes you might see a negative APY \u2014 this is usually not a big deal. It happens when ",
16796
+ s.name.split(" ")[1].split("/")[0],
16797
+ "'s price drops on DEXes, but things typically bounce back within a few days or a week."
16798
+ ] })
16664
16799
  ] })
16665
16800
  ] })
16666
16801
  ] });
@@ -21442,7 +21577,7 @@ var VesuAdapter = class _VesuAdapter extends BaseAdapter {
21442
21577
  let pools = [];
21443
21578
  try {
21444
21579
  const data = await getAPIUsingHeadlessBrowser(
21445
- "https://api.vesu.xyz/pools"
21580
+ `${ENDPOINTS.VESU_BASE}/pools`
21446
21581
  );
21447
21582
  pools = data.data;
21448
21583
  for (const pool of vesu_pools_default.data) {