@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 +290 -151
- package/dist/index.js.map +1 -1
- package/dist/lending/aave-v3-type/publicCallParse.d.ts.map +1 -1
- package/dist/lending-pairs/index.d.ts +1 -1
- package/dist/lending-pairs/index.d.ts.map +1 -1
- package/dist/prices/defillama/index.d.ts.map +1 -1
- package/dist/prices/main-prices/fetchOracleData.d.ts.map +1 -1
- package/dist/prices/pendle/fetchPendlePrices.d.ts +35 -0
- package/dist/prices/pendle/fetchPendlePrices.d.ts.map +1 -1
- package/dist/yields/index.d.ts.map +1 -1
- package/package.json +1 -1
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.
|
|
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
|
-
|
|
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
|
-
|
|
8399
|
+
label: "Disabled",
|
|
8408
8400
|
category: e,
|
|
8409
|
-
|
|
8410
|
-
|
|
8411
|
-
|
|
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
|
-
|
|
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
|
-
|
|
8432
|
+
label: "Disabled",
|
|
8432
8433
|
category: e,
|
|
8433
|
-
|
|
8434
|
-
|
|
8435
|
-
|
|
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.
|
|
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
|
-
|
|
8573
|
-
|
|
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
|
-
|
|
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
|
-
|
|
17827
|
-
|
|
17828
|
-
|
|
17829
|
-
|
|
17830
|
-
return
|
|
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
|
|
18130
|
-
|
|
18131
|
-
|
|
18132
|
-
|
|
18133
|
-
|
|
18134
|
-
|
|
18135
|
-
|
|
18136
|
-
|
|
18137
|
-
|
|
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
|
-
|
|
18257
|
-
|
|
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
|
-
|
|
20491
|
-
|
|
20492
|
-
|
|
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
|
}
|