@1delta/margin-fetcher 0.0.67 → 0.0.70

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
@@ -8287,9 +8287,9 @@ var getAaveV3ReservesDataConverter = (lender, chainId, prices, additionalYields,
8287
8287
  const resultReserves = {};
8288
8288
  const decimalsCeiling = data[expectedNumberOfCalls - 1];
8289
8289
  let eModeConfigs = {};
8290
- allModes.map((mode, index) => {
8290
+ allModes.forEach((mode, index) => {
8291
8291
  const rawCfg = emodeDataResult[index];
8292
- if (mode === 0 || rawCfg?.label !== "")
8292
+ if ((mode === 0 || rawCfg?.label !== "") && Number(rawCfg.ltv) !== 0) {
8293
8293
  eModeConfigs[mode] = {
8294
8294
  category: mode,
8295
8295
  label: rawCfg.label,
@@ -8297,6 +8297,7 @@ var getAaveV3ReservesDataConverter = (lender, chainId, prices, additionalYields,
8297
8297
  collateralFactor: rawCfg.liquidationThreshold / BPS,
8298
8298
  borrowFactor: 1
8299
8299
  };
8300
+ }
8300
8301
  });
8301
8302
  for (let i = 0; i < assetsToQuery.length; i++) {
8302
8303
  const asset = assetsToQuery[i];
@@ -8370,8 +8371,6 @@ var getAaveV3ReservesDataConverter = (lender, chainId, prices, additionalYields,
8370
8371
  hasStable: configData?.[7 /* stableBorrowRateEnabled */],
8371
8372
  isActive: configData?.[8 /* isActive */],
8372
8373
  isFrozen: configData?.[9 /* isFrozen */],
8373
- // eMode
8374
- eMode: eModeConfigs[eModeCategory],
8375
8374
  // caps
8376
8375
  borrowCap: Number(reserveCaps[0]?.toString()),
8377
8376
  supplyCap: Number(reserveCaps[1]?.toString()),
@@ -8395,23 +8394,32 @@ var getAaveV3ReservesDataConverter = (lender, chainId, prices, additionalYields,
8395
8394
  var populateEModes = (borrowCollateralFactor, collateralFactor, eModeCategory, eModeConfigs, allModes) => {
8396
8395
  let data = {};
8397
8396
  allModes.forEach((e) => {
8398
- data[e] = {
8399
- category: e,
8400
- borrowCollateralFactor,
8401
- collateralFactor,
8402
- borrowFactor: 1
8403
- };
8404
- if (e > 0) data[e].debtDisabled = true;
8405
- if (e > 0 && e === eModeCategory && eModeConfigs[e]) {
8397
+ if (e === 0)
8406
8398
  data[e] = {
8407
- ...data[e],
8399
+ label: "Disabled",
8408
8400
  category: e,
8409
- label: eModeConfigs[e]?.label ?? "Default",
8410
- borrowCollateralFactor: eModeConfigs[e]?.borrowCollateralFactor ?? 0,
8411
- collateralFactor: eModeConfigs[e]?.collateralFactor ?? 0,
8412
- borrowFactor: 1,
8413
- debtDisabled: false
8401
+ borrowCollateralFactor,
8402
+ collateralFactor,
8403
+ borrowFactor: 1
8414
8404
  };
8405
+ if (e > 0 && eModeConfigs[e]?.label && eModeConfigs[e]?.label !== "") {
8406
+ data[e] = {};
8407
+ data[e].label = eModeConfigs[e]?.label;
8408
+ data[e].debtDisabled = true;
8409
+ data[e].category = e;
8410
+ data[e].borrowFactor = 1;
8411
+ data[e].collateralFactor = collateralFactor;
8412
+ data[e].borrowCollateralFactor = borrowCollateralFactor;
8413
+ if (e > 0 && e === eModeCategory && eModeConfigs[e]) {
8414
+ data[e] = {
8415
+ ...data[e],
8416
+ category: e,
8417
+ borrowCollateralFactor: eModeConfigs[e]?.borrowCollateralFactor ?? 0,
8418
+ collateralFactor: eModeConfigs[e]?.collateralFactor ?? 0,
8419
+ borrowFactor: 1,
8420
+ debtDisabled: false
8421
+ };
8422
+ }
8415
8423
  }
8416
8424
  });
8417
8425
  return data;
@@ -8419,27 +8427,39 @@ var populateEModes = (borrowCollateralFactor, collateralFactor, eModeCategory, e
8419
8427
  var populateEModes32 = (borrowCollateralFactor, collateralFactor, collateralBitmap, debtBitmap, assetIndex, eModeConfigs, allModes) => {
8420
8428
  let data = {};
8421
8429
  allModes.forEach((e) => {
8422
- data[e] = {
8423
- category: e,
8424
- borrowCollateralFactor,
8425
- collateralFactor,
8426
- borrowFactor: 1
8427
- };
8428
- if (e > 0) data[e].debtDisabled = !!eModeConfigs[e];
8429
- if (e > 0 && eModeConfigs[e]) {
8430
+ if (e === 0)
8430
8431
  data[e] = {
8431
- ...data[e],
8432
+ label: "Disabled",
8432
8433
  category: e,
8433
- label: eModeConfigs[e]?.label ?? "Default",
8434
- borrowCollateralFactor: eModeConfigs[e]?.borrowCollateralFactor ?? 0,
8435
- collateralFactor: eModeConfigs[e]?.collateralFactor ?? 0,
8436
- borrowFactor: 1,
8437
- collateralDisabled: !isReserveEnabledOnBitmap(
8438
- collateralBitmap[e],
8439
- assetIndex
8440
- ),
8441
- debtDisabled: !isReserveEnabledOnBitmap(debtBitmap[e], assetIndex)
8434
+ borrowCollateralFactor,
8435
+ collateralFactor,
8436
+ borrowFactor: 1
8442
8437
  };
8438
+ if (e > 0) {
8439
+ if (eModeConfigs[e]?.label && eModeConfigs[e]?.label !== "") {
8440
+ data[e] = {};
8441
+ data[e].label = eModeConfigs[e]?.label ?? "Default";
8442
+ data[e].debtDisabled = true;
8443
+ data[e].category = e;
8444
+ data[e].borrowFactor = 1;
8445
+ data[e].collateralFactor = collateralFactor;
8446
+ data[e].borrowCollateralFactor = borrowCollateralFactor;
8447
+ data[e].debtDisabled = !!eModeConfigs[e];
8448
+ if (eModeConfigs[e]) {
8449
+ data[e] = {
8450
+ ...data[e],
8451
+ category: e,
8452
+ borrowCollateralFactor: eModeConfigs[e]?.borrowCollateralFactor ?? 0,
8453
+ collateralFactor: eModeConfigs[e]?.collateralFactor ?? 0,
8454
+ borrowFactor: 1,
8455
+ collateralDisabled: !isReserveEnabledOnBitmap(
8456
+ collateralBitmap[e],
8457
+ assetIndex
8458
+ ),
8459
+ debtDisabled: !isReserveEnabledOnBitmap(debtBitmap[e], assetIndex)
8460
+ };
8461
+ }
8462
+ }
8443
8463
  }
8444
8464
  });
8445
8465
  return data;
@@ -8559,9 +8579,9 @@ function parseAave32(chainId, lender, prices, additionalYields, tokenList) {
8559
8579
  let eModeConfigs = {};
8560
8580
  let collateralBitmap = {};
8561
8581
  let debtBitmap = {};
8562
- allModes.map((mode, index) => {
8582
+ allModes.forEach((mode, index) => {
8563
8583
  const rawCfg = emodeDataResult[3 * index];
8564
- if (rawCfg && (mode === 0 || rawCfg?.label !== ""))
8584
+ if (rawCfg && (mode === 0 || rawCfg?.label !== "")) {
8565
8585
  eModeConfigs[mode] = {
8566
8586
  category: mode,
8567
8587
  label: rawCfg.label,
@@ -8569,8 +8589,9 @@ function parseAave32(chainId, lender, prices, additionalYields, tokenList) {
8569
8589
  collateralFactor: rawCfg.liquidationThreshold / BPS,
8570
8590
  borrowFactor: 1
8571
8591
  };
8572
- debtBitmap[mode] = emodeDataResult[3 * index + 1];
8573
- collateralBitmap[mode] = emodeDataResult[3 * index + 2];
8592
+ debtBitmap[mode] = emodeDataResult[3 * index + 1];
8593
+ collateralBitmap[mode] = emodeDataResult[3 * index + 2];
8594
+ }
8574
8595
  });
8575
8596
  const lowerReservesList = reservesList?.map(
8576
8597
  (a) => a.toLowerCase()
@@ -8629,7 +8650,7 @@ function parseAave32(chainId, lender, prices, additionalYields, tokenList) {
8629
8650
  const activeEmodes = allModes.map(
8630
8651
  (mode) => isReserveEnabledOnBitmap(debtBitmap[mode], assetIndex) || isReserveEnabledOnBitmap(collateralBitmap[mode], assetIndex) ? mode : -1
8631
8652
  ).filter((m) => m !== void 0 && m > 0);
8632
- const eModeCategory = activeEmodes.length === 0 ? 0 : activeEmodes[0];
8653
+ activeEmodes.length === 0 ? 0 : activeEmodes[0];
8633
8654
  resultReserves[asset] = {
8634
8655
  ...resultReserves[asset],
8635
8656
  decimals: Number(
@@ -8652,8 +8673,6 @@ function parseAave32(chainId, lender, prices, additionalYields, tokenList) {
8652
8673
  hasStable: configData?.[7 /* stableBorrowRateEnabled */],
8653
8674
  isActive: configData?.[8 /* isActive */],
8654
8675
  isFrozen: configData?.[9 /* isFrozen */],
8655
- // eMode
8656
- eMode: eModeConfigs[eModeCategory],
8657
8676
  // caps
8658
8677
  borrowCap: Number(reserveCaps[0]?.toString()),
8659
8678
  supplyCap: Number(reserveCaps[1]?.toString()),
@@ -17738,6 +17757,108 @@ function getDistinctPairsByShortAsset(pairs) {
17738
17757
  return result;
17739
17758
  }
17740
17759
 
17760
+ // src/prices/pendle/fetchPendlePrices.ts
17761
+ var PENDLE_API_BASE = "https://api-v2.pendle.finance/core";
17762
+ var MARKETS_ENDPOINT = `${PENDLE_API_BASE}/v1/markets/all`;
17763
+ var PRICES_ENDPOINT = (types) => `${PENDLE_API_BASE}/v1/prices/assets${types ? `?type=${types.join(",")}` : ""}`;
17764
+ async function fetchPendleMarkets() {
17765
+ try {
17766
+ const response = await fetch(MARKETS_ENDPOINT);
17767
+ if (!response.ok) {
17768
+ throw new Error(`Failed to fetch all markets data: ${response.status}`);
17769
+ }
17770
+ const data = await response.json();
17771
+ const marketsByChain = {};
17772
+ if (data.markets) {
17773
+ for (const market of data.markets) {
17774
+ const chainId = market.chainId.toString();
17775
+ if (!marketsByChain[chainId]) {
17776
+ marketsByChain[chainId] = [];
17777
+ }
17778
+ marketsByChain[chainId].push(market);
17779
+ }
17780
+ }
17781
+ return marketsByChain;
17782
+ } catch (error) {
17783
+ console.error("Error fetching all markets data:", error);
17784
+ return {};
17785
+ }
17786
+ }
17787
+ async function fetchPendlePricesForAllChain(lists = {}, assetType = ["YT", "PT"]) {
17788
+ try {
17789
+ const data = await fetchPendlePricesRaw(assetType);
17790
+ let prices = {};
17791
+ Object.entries(data).forEach(([key, val]) => {
17792
+ const [chainId, address] = key.split("-");
17793
+ const assetKey = lists[chainId]?.list?.[address.toLowerCase()]?.assetGroup ?? key;
17794
+ prices[assetKey] = val;
17795
+ });
17796
+ return prices;
17797
+ } catch (error) {
17798
+ console.error(`Error fetching prices pendle prices:`, error);
17799
+ return {};
17800
+ }
17801
+ }
17802
+ async function fetchPendlePricesRaw(assetType = ["YT", "PT"]) {
17803
+ try {
17804
+ const response = await fetch(PRICES_ENDPOINT(assetType));
17805
+ const data = await response.json();
17806
+ return data.prices;
17807
+ } catch (error) {
17808
+ console.error(`Error fetching prices pendle prices:`, error);
17809
+ return {};
17810
+ }
17811
+ }
17812
+ async function fetchPendlePrices(lists = {}, assetType = ["YT", "PT"]) {
17813
+ try {
17814
+ const marketsResponse = await fetchPendleMarkets();
17815
+ if (!Object.keys(marketsResponse).length) {
17816
+ return {};
17817
+ }
17818
+ const allPrices = await fetchPendlePricesForAllChain(lists, assetType);
17819
+ return Object.fromEntries(
17820
+ Object.entries(allPrices).filter(([, price]) => !!price)
17821
+ );
17822
+ } catch (error) {
17823
+ console.error("Error in fetchPendlePrices:", error);
17824
+ return {};
17825
+ }
17826
+ }
17827
+ async function fetchPendleYields(lists = {}) {
17828
+ try {
17829
+ const marketsResponse = await fetchPendleMarkets();
17830
+ if (!Object.keys(marketsResponse).length) {
17831
+ return {};
17832
+ }
17833
+ const prices = await fetchPendlePricesRaw();
17834
+ let yields = {};
17835
+ const now = /* @__PURE__ */ new Date();
17836
+ Object.entries(marketsResponse).forEach(([chain, dataArr]) => {
17837
+ dataArr.forEach((market) => {
17838
+ const ptPrice = prices[market.pt];
17839
+ const ytPrice = prices[market.yt];
17840
+ if (ytPrice && ytPrice > 0) {
17841
+ const yearFraction = yearFractionToExpiry(market.expiry, now);
17842
+ const apr = ytPrice / ptPrice * 100 / yearFraction;
17843
+ const [chainId, address] = market.pt.split("-");
17844
+ const assetKey = lists[chainId]?.list?.[address.toLowerCase()]?.assetGroup ?? market.pt;
17845
+ yields[assetKey] = apr;
17846
+ }
17847
+ });
17848
+ });
17849
+ return yields;
17850
+ } catch (error) {
17851
+ console.error("Error in fetchPendlePrices:", error);
17852
+ return {};
17853
+ }
17854
+ }
17855
+ function yearFractionToExpiry(expiryISO, now = /* @__PURE__ */ new Date()) {
17856
+ const expiry = new Date(expiryISO);
17857
+ const diffMs = expiry.getTime() - now.getTime();
17858
+ const yearFraction = diffMs / (1e3 * 60 * 60 * 24 * 365.25);
17859
+ return yearFraction;
17860
+ }
17861
+
17741
17862
  // src/yields/yieldTypes.ts
17742
17863
  var addressToAssetYearn = {
17743
17864
  "0xe007ca01894c863d7898045ed5a3b4abf0b18f37": "vbETH yVault::yvvbETH",
@@ -17815,19 +17936,26 @@ var FeedData = {
17815
17936
  SSUPERUSD: "https://www.superreturn.ai/api/trpc/cmc.getUSDCPrice,rewardBackend.getYield,rewardBackend.getTvlChange?batch=1&input=%7B%220%22%3A%7B%22json%22%3Anull%2C%22meta%22%3A%7B%22values%22%3A%5B%22undefined%22%5D%7D%7D%2C%221%22%3A%7B%22json%22%3Anull%2C%22meta%22%3A%7B%22values%22%3A%5B%22undefined%22%5D%7D%7D%2C%222%22%3A%7B%22json%22%3Anull%2C%22meta%22%3A%7B%22values%22%3A%5B%22undefined%22%5D%7D%7D%7D",
17816
17937
  HBHYPE: "https://api.hyperbeat.org/api/v1/staking?address=0xCeaD893b162D38e714D82d06a7fe0b0dc3c38E0b"
17817
17938
  };
17818
- var LenderAPIs = {
17819
- MERIDIAN: "https://omnidex.bmaa3ajd1gjri.eu-west-2.cs.amazonlightsail.com/lending_yields"
17820
- };
17821
17939
  function averageDataLastN(arr, n = 7) {
17822
17940
  const last = arr.slice(-n);
17823
17941
  if (last.length === 0) return 0;
17824
17942
  return last.reduce((sum, x) => sum + x.data, 0) / last.length;
17825
17943
  }
17826
- function formatMeridianKey(k) {
17827
- const _k = k.toUpperCase();
17828
- if (_k === "USDT") return "USDT.E";
17829
- if (_k === "USDCE") return "USDC.E";
17830
- return _k;
17944
+ var getListUrl = (chainId) => `https://raw.githubusercontent.com/1delta-DAO/asset-lists/main/${chainId}.json`;
17945
+ async function getDeltaTokenList(chain) {
17946
+ const data = await fetch(getListUrl(chain));
17947
+ const list = (await data.json()).list;
17948
+ return list;
17949
+ }
17950
+ async function getListsMulti(chainIds) {
17951
+ const ps = chainIds.map(async (chainId) => await getDeltaTokenList(chainId));
17952
+ const lists = await Promise.all(ps);
17953
+ let res = {};
17954
+ for (let i = 0; i < chainIds.length; i++) {
17955
+ const chainId = chainIds[i];
17956
+ res[chainId] = { list: lists[i] };
17957
+ }
17958
+ return res;
17831
17959
  }
17832
17960
  var safeFetch = async (label, fn) => {
17833
17961
  try {
@@ -18126,19 +18254,18 @@ var fetchGeneralYields = async () => {
18126
18254
  return 0;
18127
18255
  }
18128
18256
  });
18129
- const meridianPromise = safeFetch("MERIDIAN", async () => {
18130
- const res = await fetch(LenderAPIs.MERIDIAN).then((r) => r.json());
18131
- const taikoData = res["taiko" /* TAIKO */];
18132
- return Object.assign(
18133
- {},
18134
- ...Object.keys(taikoData).map((key) => ({
18135
- [formatMeridianKey(key)]: {
18136
- deposit: taikoData[key].apy_reward,
18137
- borrow: taikoData[key].apy_reward_borrow
18138
- }
18139
- }))
18140
- );
18141
- });
18257
+ const pendlePromise = getListsMulti([
18258
+ Chain.PLASMA_MAINNET,
18259
+ Chain.ETHEREUM_MAINNET,
18260
+ Chain.BERACHAIN,
18261
+ Chain.MANTLE,
18262
+ Chain.BASE,
18263
+ Chain.OP_MAINNET,
18264
+ Chain.ARBITRUM_ONE,
18265
+ Chain.SONIC_MAINNET,
18266
+ Chain.HYPEREVM,
18267
+ Chain.BNB_SMART_CHAIN_MAINNET
18268
+ ]).then((x) => fetchPendleYields(x));
18142
18269
  const [
18143
18270
  wstethData,
18144
18271
  ezethData,
@@ -18148,7 +18275,7 @@ var fetchGeneralYields = async () => {
18148
18275
  methData,
18149
18276
  maticXdata,
18150
18277
  susdeData,
18151
- meridianData,
18278
+ // meridianData,
18152
18279
  savaxData,
18153
18280
  cbethData,
18154
18281
  rsethData,
@@ -18174,7 +18301,8 @@ var fetchGeneralYields = async () => {
18174
18301
  thBillData,
18175
18302
  yearnKatanaData,
18176
18303
  ssuperusdData,
18177
- hbhypeData
18304
+ hbhypeData,
18305
+ pendleData
18178
18306
  ] = await Promise.all([
18179
18307
  wstethPromise,
18180
18308
  ezethPromise,
@@ -18184,7 +18312,7 @@ var fetchGeneralYields = async () => {
18184
18312
  methPromise,
18185
18313
  maticxPromise,
18186
18314
  susdePromise,
18187
- meridianPromise,
18315
+ // meridianPromise,
18188
18316
  savaxPromise,
18189
18317
  cbethPromise,
18190
18318
  rsethPromise,
@@ -18210,7 +18338,8 @@ var fetchGeneralYields = async () => {
18210
18338
  thbillPromise,
18211
18339
  yearnKatanaPromise,
18212
18340
  ssuperusdPromise,
18213
- hbhypePromise
18341
+ hbhypePromise,
18342
+ pendlePromise
18214
18343
  ]);
18215
18344
  const data = {
18216
18345
  intrinsicYields: {
@@ -18250,12 +18379,13 @@ var fetchGeneralYields = async () => {
18250
18379
  ...rtokensData,
18251
18380
  ...hypeData,
18252
18381
  ...angleData,
18253
- ...yearnKatanaData
18382
+ ...yearnKatanaData,
18383
+ ...pendleData
18254
18384
  },
18255
18385
  lenderRewards: {
18256
- "167000": {
18257
- MERIDIAN: meridianData
18258
- }
18386
+ // '167000': {
18387
+ // MERIDIAN: meridianData,
18388
+ // },
18259
18389
  }
18260
18390
  };
18261
18391
  return data;
@@ -18307,6 +18437,7 @@ var RUSD = "0x09d4214c03d01f49544c0448dbe3a27f768f2b34";
18307
18437
  var USDF = "0xfa2b947eec368f42195f24f36d2af29f7c24cec2";
18308
18438
  var USUAL = "0xc4441c2be5d8fa8126822b9929ca0b81ea0de38e";
18309
18439
  var WOETH = "0xdcee70654261af21c44c093c300ed3bb97b78192";
18440
+ var DEUSD = "0x15700B564Ca08D9439C58cA5053166E8317aa138";
18310
18441
  var datasEthereum = [
18311
18442
  RETH,
18312
18443
  WBTC,
@@ -18351,7 +18482,8 @@ var datasEthereum = [
18351
18482
  RUSD,
18352
18483
  USDF,
18353
18484
  USUAL,
18354
- WOETH
18485
+ WOETH,
18486
+ DEUSD
18355
18487
  ].map((d) => prefixEthereum + d).join(",");
18356
18488
  var prefixAvalanche = "avax:";
18357
18489
  var WAVAX = "0xB31f66AA3C1e785363F0875A1B74E27b85FD66c7";
@@ -18528,7 +18660,8 @@ var SYMBOL_MAP = {
18528
18660
  wbera: "WBERA",
18529
18661
  wtlos: "WTLOS",
18530
18662
  xpl: "WXPL",
18531
- wglmr: "WGLMR"
18663
+ wglmr: "WGLMR",
18664
+ deusd: "Elixir deUSD::DEUSD"
18532
18665
  };
18533
18666
  async function fetchDefillamaData() {
18534
18667
  try {
@@ -19991,73 +20124,6 @@ var getChainLinkKeys = (chainId) => {
19991
20124
  }
19992
20125
  });
19993
20126
 
19994
- // src/prices/pendle/fetchPendlePrices.ts
19995
- var PENDLE_API_BASE = "https://api-v2.pendle.finance/core";
19996
- var MARKETS_ENDPOINT = `${PENDLE_API_BASE}/v1/markets/all`;
19997
- var PRICES_ENDPOINT = (types) => `${PENDLE_API_BASE}/v1/prices/assets${types ? `?type=${types.join(",")}` : ""}`;
19998
- var marketsCache = {};
19999
- var marketsCacheTimestamp = 0;
20000
- var MARKETS_CACHE_TTL = 5 * 60 * 1e3;
20001
- async function fetchPendleMarkets() {
20002
- if (Object.keys(marketsCache).length && marketsCacheTimestamp > Date.now() - MARKETS_CACHE_TTL) {
20003
- return marketsCache;
20004
- }
20005
- try {
20006
- const response = await fetch(MARKETS_ENDPOINT);
20007
- if (!response.ok) {
20008
- throw new Error(`Failed to fetch all markets data: ${response.status}`);
20009
- }
20010
- const data = await response.json();
20011
- const marketsByChain = {};
20012
- if (data.markets) {
20013
- for (const market of data.markets) {
20014
- const chainId = market.chainId.toString();
20015
- if (!marketsByChain[chainId]) {
20016
- marketsByChain[chainId] = [];
20017
- }
20018
- marketsByChain[chainId].push(market);
20019
- }
20020
- }
20021
- marketsCache = marketsByChain;
20022
- marketsCacheTimestamp = Date.now();
20023
- return marketsByChain;
20024
- } catch (error) {
20025
- console.error("Error fetching all markets data:", error);
20026
- return {};
20027
- }
20028
- }
20029
- async function fetchPendlePricesForAllChain(lists = {}, assetType = ["YT", "PT"]) {
20030
- try {
20031
- const response = await fetch(PRICES_ENDPOINT(assetType));
20032
- const data = await response.json();
20033
- let prices = {};
20034
- Object.entries(data.prices).forEach(([key, val]) => {
20035
- const [chainId, address] = key.split("-");
20036
- const assetKey = lists[chainId]?.list?.[address.toLowerCase()]?.assetGroup ?? key;
20037
- prices[assetKey] = val;
20038
- });
20039
- return prices;
20040
- } catch (error) {
20041
- console.error(`Error fetching prices pendle prices:`, error);
20042
- return {};
20043
- }
20044
- }
20045
- async function fetchPendlePrices(lists = {}) {
20046
- try {
20047
- const marketsResponse = await fetchPendleMarkets();
20048
- if (!Object.keys(marketsResponse).length) {
20049
- return {};
20050
- }
20051
- const allPrices = await fetchPendlePricesForAllChain(lists);
20052
- return Object.fromEntries(
20053
- Object.entries(allPrices).filter(([, price]) => !!price)
20054
- );
20055
- } catch (error) {
20056
- console.error("Error in fetchPendlePrices:", error);
20057
- return {};
20058
- }
20059
- }
20060
-
20061
20127
  // src/abis/oracle/ProxyOracle.ts
20062
20128
  var ProxyOracleAbi = [
20063
20129
  {
@@ -20182,6 +20248,7 @@ var fetchMainPrices = async (chainIds, rpcOverrides, lists = {}) => {
20182
20248
  const uniswapV3Calls = getUniswapV3Calls(chainId);
20183
20249
  const [api3Calls, api3Names] = getApi3Calls(chainId);
20184
20250
  const [rwaCalls, rwaNames] = getRWADynamicOracleCalls(chainId);
20251
+ const [cometCalls, cometNames] = getCometCalls(chainId);
20185
20252
  const allCalls = [
20186
20253
  ...chainlinkCalls,
20187
20254
  ...aaveCalls,
@@ -20189,6 +20256,7 @@ var fetchMainPrices = async (chainIds, rpcOverrides, lists = {}) => {
20189
20256
  ...uniswapV3Calls,
20190
20257
  ...api3Calls,
20191
20258
  ...rwaCalls,
20259
+ ...cometCalls,
20192
20260
  ...morphoCalls
20193
20261
  ];
20194
20262
  const abis = [
@@ -20198,7 +20266,8 @@ var fetchMainPrices = async (chainIds, rpcOverrides, lists = {}) => {
20198
20266
  ...AaveOracleAbi,
20199
20267
  ...Api3OracleAbi,
20200
20268
  ...RWADynamicOracleAbi,
20201
- ...ProxyOracleAbi
20269
+ ...ProxyOracleAbi,
20270
+ ...CometAbi
20202
20271
  ];
20203
20272
  const result = await multicallRetry(
20204
20273
  chainId,
@@ -20218,6 +20287,7 @@ var fetchMainPrices = async (chainIds, rpcOverrides, lists = {}) => {
20218
20287
  chainlink: { calls: chainlinkCalls, names: chainlinkNames },
20219
20288
  api3: { calls: api3Calls, names: api3Names },
20220
20289
  rwa: { calls: rwaCalls, names: rwaNames },
20290
+ comet: { calls: cometCalls, names: cometNames },
20221
20291
  morpho: { queries: morphoQueries },
20222
20292
  uniswapCalls,
20223
20293
  uniswapV3Calls,
@@ -20241,6 +20311,7 @@ var fetchMainPrices = async (chainIds, rpcOverrides, lists = {}) => {
20241
20311
  rwa,
20242
20312
  uniswapCalls,
20243
20313
  uniswapV3Calls,
20314
+ comet,
20244
20315
  aaveCalls
20245
20316
  }
20246
20317
  } of chainResults) {
@@ -20272,6 +20343,13 @@ var fetchMainPrices = async (chainIds, rpcOverrides, lists = {}) => {
20272
20343
  const rwaSlice = result.slice(offset, offset + rwa.calls.length);
20273
20344
  const rwaData = parseRWADynamicOracleResults(chainId, rwaSlice, rwa.names);
20274
20345
  offset += rwa.calls.length;
20346
+ const cometSlice = result.slice(offset, offset + comet.calls.length);
20347
+ const cometData = parseCometResults(
20348
+ chainId,
20349
+ cometSlice,
20350
+ comet.names
20351
+ );
20352
+ offset += comet.calls.length;
20275
20353
  allPrices = {
20276
20354
  ...allPrices,
20277
20355
  ...chainlinkData,
@@ -20279,7 +20357,8 @@ var fetchMainPrices = async (chainIds, rpcOverrides, lists = {}) => {
20279
20357
  ...uniswapData,
20280
20358
  ...uniswapV3Data,
20281
20359
  ...api3Data,
20282
- ...rwaData
20360
+ ...rwaData,
20361
+ ...cometData
20283
20362
  };
20284
20363
  }
20285
20364
  allPrices = { ...otherResults[0], ...allPrices, ...otherResults[1] };
@@ -20339,6 +20418,68 @@ var getUniswapV2Calls = (chainId) => {
20339
20418
  return [];
20340
20419
  }
20341
20420
  };
20421
+ var getCometCalls = (chainId) => {
20422
+ switch (chainId) {
20423
+ case Chain.ETHEREUM_MAINNET: {
20424
+ const names = [
20425
+ "Staked FRAX::SFRAX",
20426
+ //
20427
+ "Elixir deUSD::DEUSD",
20428
+ "Elixir Staked deUSD::SDEUSD"
20429
+ ];
20430
+ return [
20431
+ [
20432
+ {
20433
+ address: "0x3Afdc9BCA9213A35503b077a6072F3D0d5AB0840",
20434
+ // usdt comet
20435
+ name: "getPrice",
20436
+ params: [
20437
+ "0x8C74B2811D2F1aD65517ADB5C65773c1E520ed2f"
20438
+ // sfrax
20439
+ ]
20440
+ },
20441
+ {
20442
+ address: "0x3Afdc9BCA9213A35503b077a6072F3D0d5AB0840",
20443
+ name: "getPrice",
20444
+ params: [
20445
+ "0x471a6299C027Bd81ed4D66069dc510Bd0569f4F8"
20446
+ // deusd
20447
+ ]
20448
+ },
20449
+ {
20450
+ address: "0x3Afdc9BCA9213A35503b077a6072F3D0d5AB0840",
20451
+ name: "getPrice",
20452
+ params: [
20453
+ "0xE4829421ae79f2F44716cCbbb40751cd6Be3d483"
20454
+ // sdeusd
20455
+ ]
20456
+ }
20457
+ ],
20458
+ names
20459
+ ];
20460
+ }
20461
+ default:
20462
+ return [[], []];
20463
+ }
20464
+ };
20465
+ var parseCometResults = (chainId, data, names) => {
20466
+ switch (chainId) {
20467
+ case Chain.ETHEREUM_MAINNET: {
20468
+ const targetDecimals = [8, 8, 8];
20469
+ return Object.assign(
20470
+ {},
20471
+ ...data.map((entry, index) => {
20472
+ return {
20473
+ [names[index]]: Number(parseRawAmount(entry ?? "0", targetDecimals[index]))
20474
+ };
20475
+ })
20476
+ );
20477
+ }
20478
+ default: {
20479
+ return {};
20480
+ }
20481
+ }
20482
+ };
20342
20483
  var getUniswapV3Calls = (chainId) => {
20343
20484
  switch (chainId) {
20344
20485
  case Chain.HEMI_NETWORK:
@@ -20486,12 +20627,10 @@ var parseMorphoResults = (chainId, data, queries, donePrices = {}, list = {}) =>
20486
20627
  let prices = {};
20487
20628
  data.forEach((d, i) => {
20488
20629
  const details = queries[i];
20489
- const {
20490
- loanAsset,
20491
- collateralAsset,
20492
- loanAssetDecimals,
20493
- collateralAssetDecimals
20494
- } = details;
20630
+ const loanAsset = details?.loanAsset;
20631
+ const collateralAsset = details?.collateralAsset;
20632
+ const loanAssetDecimals = details?.loanAssetDecimals;
20633
+ const collateralAssetDecimals = details?.collateralAssetDecimals;
20495
20634
  const oracleId = list[loanAsset]?.assetGroup ?? chainId + "-" + loanAsset;
20496
20635
  const debtPrice = donePrices[oracleId] ?? prices[oracleId];
20497
20636
  const oracleIdCollateral = list[collateralAsset]?.assetGroup ?? chainId + "-" + collateralAsset;
@@ -20502,12 +20641,12 @@ var parseMorphoResults = (chainId, data, queries, donePrices = {}, list = {}) =>
20502
20641
  collateralAssetDecimals
20503
20642
  );
20504
20643
  if (debtPrice) {
20505
- if (!prices[oracleIdCollateral]) {
20644
+ if (!prices[oracleIdCollateral] && !donePrices[oracleIdCollateral]) {
20506
20645
  prices[oracleIdCollateral] = priceDebtToCollateral * debtPrice;
20507
20646
  }
20508
20647
  } else {
20509
20648
  if (collateralPrice) {
20510
- if (!prices[oracleId]) {
20649
+ if (!prices[oracleId] && !donePrices[oracleId]) {
20511
20650
  prices[oracleId] = collateralPrice / priceDebtToCollateral;
20512
20651
  }
20513
20652
  }