@1delta/margin-fetcher 0.0.210 → 0.0.212
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/flash-liquidity/fetchLiquidity.d.ts.map +1 -1
- package/dist/index.js +149 -172
- package/dist/index.js.map +1 -1
- package/dist/lending/margin/loop/ranges/getMaxAmountCollateralSwap.test.d.ts +2 -0
- package/dist/lending/margin/loop/ranges/getMaxAmountCollateralSwap.test.d.ts.map +1 -0
- package/dist/lending/user-data/compound-v3/userCallParse.d.ts +21 -0
- package/dist/lending/user-data/compound-v3/userCallParse.d.ts.map +1 -1
- package/dist/prices/oracle-prices/fetchers/aave.d.ts.map +1 -1
- package/dist/prices/oracle-prices/fetchers/compoundV3.d.ts.map +1 -1
- package/dist/prices/oracle-prices/fetchers/morpho.d.ts.map +1 -1
- package/dist/prices/oracle-prices/types.d.ts +8 -0
- package/dist/prices/oracle-prices/types.d.ts.map +1 -1
- package/dist/yields/intrinsic/fetchers/infinifi.d.ts +3 -0
- package/dist/yields/intrinsic/fetchers/infinifi.d.ts.map +1 -0
- package/dist/yields/intrinsic/fetchers/sky.d.ts.map +1 -1
- package/dist/yields/intrinsic/index.d.ts.map +1 -1
- package/package.json +5 -5
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fetchLiquidity.d.ts","sourceRoot":"","sources":["../../src/flash-liquidity/fetchLiquidity.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,sBAAsB,EAAE,SAAS,EAAE,MAAM,UAAU,CAAA;AAE5D,OAAO,EAAE,uBAAuB,EAAgB,MAAM,SAAS,CAAA;
|
|
1
|
+
{"version":3,"file":"fetchLiquidity.d.ts","sourceRoot":"","sources":["../../src/flash-liquidity/fetchLiquidity.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,sBAAsB,EAAE,SAAS,EAAE,MAAM,UAAU,CAAA;AAE5D,OAAO,EAAE,uBAAuB,EAAgB,MAAM,SAAS,CAAA;AAwB/D,wBAAsB,2BAA2B,CAC/C,KAAK,EAAE,MAAM,EACb,cAAc,EAAE,sBAAsB,EACtC,IAAI,GAAE,SAAc,oCA6PrB"}
|
package/dist/index.js
CHANGED
|
@@ -6264,7 +6264,7 @@ globalThis[GLOBAL_LENDER_DATA_KEY] = {
|
|
|
6264
6264
|
compoundV3Reserves: {},
|
|
6265
6265
|
aaveOracles: {},
|
|
6266
6266
|
compoundV2Oracles: {},
|
|
6267
|
-
|
|
6267
|
+
compoundV3OraclesData: {},
|
|
6268
6268
|
morphoOracles: {},
|
|
6269
6269
|
morphoTypeOracles: {},
|
|
6270
6270
|
morphoTypeMarkets: {},
|
|
@@ -6282,7 +6282,7 @@ var aaveTokens = () => getGlobalData2()?.aaveTokens;
|
|
|
6282
6282
|
var aavePools = () => getGlobalData2()?.aavePools;
|
|
6283
6283
|
var aaveOracles = () => getGlobalData2()?.aaveOracles;
|
|
6284
6284
|
var compoundV2Oracles = () => getGlobalData2()?.compoundV2Oracles;
|
|
6285
|
-
var
|
|
6285
|
+
var compoundV3OraclesData = () => getGlobalData2()?.compoundV3OraclesData;
|
|
6286
6286
|
var morphoTypeOracles = () => getGlobalData2()?.morphoTypeOracles;
|
|
6287
6287
|
var morphoTypeMarkets = () => getGlobalData2()?.morphoTypeMarkets;
|
|
6288
6288
|
var aaveReserves = () => getGlobalData2()?.aaveReserves;
|
|
@@ -7607,7 +7607,7 @@ var buildAaveV2StyleLenderReserveCall = (chainId, lender) => {
|
|
|
7607
7607
|
}
|
|
7608
7608
|
};
|
|
7609
7609
|
function range(n) {
|
|
7610
|
-
return Array.from({ length: n + 1 }, (
|
|
7610
|
+
return Array.from({ length: n + 1 }, (_3, i) => i);
|
|
7611
7611
|
}
|
|
7612
7612
|
var AAVE_V3_EMODES = (chain, lender) => {
|
|
7613
7613
|
if (chain === Chain.ETHEREUM_MAINNET) {
|
|
@@ -8847,7 +8847,7 @@ var getInitReservesDataConverter = (lender, chainId, prices, additionalYields, t
|
|
|
8847
8847
|
});
|
|
8848
8848
|
});
|
|
8849
8849
|
Object.entries(eModes).forEach(([modeId, data2]) => {
|
|
8850
|
-
Object.entries(result)?.forEach(([key,
|
|
8850
|
+
Object.entries(result)?.forEach(([key, _3]) => {
|
|
8851
8851
|
if (!result[key].config[modeId]) {
|
|
8852
8852
|
let mode = {
|
|
8853
8853
|
...data2,
|
|
@@ -18415,7 +18415,7 @@ function createCompoundV2Entry(i, data, key, assetsIn, vToken, meta, claimableRe
|
|
|
18415
18415
|
// src/lending/user-data/euler/userCallBuild.ts
|
|
18416
18416
|
Array.from(
|
|
18417
18417
|
{ length: 256 },
|
|
18418
|
-
(
|
|
18418
|
+
(_3, i) => i
|
|
18419
18419
|
);
|
|
18420
18420
|
var EULER_SUBGRAPH_BASE = "https://api.goldsky.com/api/public/project_cm4iagnemt1wp01xn4gh1agft/subgraphs";
|
|
18421
18421
|
var EULER_SUBGRAPH_URLS = {
|
|
@@ -18962,7 +18962,13 @@ var getCompoundV3UserDataConverter = (lender, chainId, account, metaMap) => {
|
|
|
18962
18962
|
const payload = {
|
|
18963
18963
|
lendingPositions: { ...result, ...resultBase },
|
|
18964
18964
|
chainId,
|
|
18965
|
-
rewards: COMP_ADDRESSES[chainId] ? [
|
|
18965
|
+
rewards: COMP_ADDRESSES[chainId] ? [
|
|
18966
|
+
{
|
|
18967
|
+
asset: COMP_ADDRESSES[chainId],
|
|
18968
|
+
totalRewards: compRewards,
|
|
18969
|
+
claimableRewards: compRewards
|
|
18970
|
+
}
|
|
18971
|
+
] : [],
|
|
18966
18972
|
account
|
|
18967
18973
|
};
|
|
18968
18974
|
const userData = createBaseTypeUserState(
|
|
@@ -25118,7 +25124,7 @@ function filterActiveLenders(summary) {
|
|
|
25118
25124
|
function fuseLenderData(userDataResult, summary) {
|
|
25119
25125
|
const entries = [];
|
|
25120
25126
|
for (const lenderSummary of summary.lenders) {
|
|
25121
|
-
const { lender, chainId, subAccounts:
|
|
25127
|
+
const { lender, chainId, subAccounts: _3, ...summaryFields } = lenderSummary;
|
|
25122
25128
|
const userData = userDataResult[chainId]?.[lender];
|
|
25123
25129
|
if (!userData) continue;
|
|
25124
25130
|
entries.push({
|
|
@@ -26644,6 +26650,7 @@ var pufethFetcher = {
|
|
|
26644
26650
|
// src/yields/intrinsic/fetchers/sky.ts
|
|
26645
26651
|
var SUSDS_URL = "https://info-sky.blockanalitica.com/api/v1/overall/?format=json";
|
|
26646
26652
|
var sUsds = "sUSDS::SUSDS";
|
|
26653
|
+
var stUsds = "Staked USDS::stUSDS";
|
|
26647
26654
|
var susdsFetcher = {
|
|
26648
26655
|
label: "SUSDS",
|
|
26649
26656
|
fetch: async () => {
|
|
@@ -26651,8 +26658,12 @@ var susdsFetcher = {
|
|
|
26651
26658
|
method: "GET",
|
|
26652
26659
|
headers: { Accept: "application/json" }
|
|
26653
26660
|
}).then((r) => r.json());
|
|
26661
|
+
const entry = res?.[0];
|
|
26662
|
+
const sUsdsApr = apyToApr(Number(entry?.sky_savings_rate_apy ?? 0)) * 100;
|
|
26663
|
+
const stUsdsApr = Number(entry?.stusds_rate ?? 0) * 100;
|
|
26654
26664
|
return {
|
|
26655
|
-
[sUsds]:
|
|
26665
|
+
[sUsds]: sUsdsApr,
|
|
26666
|
+
[stUsds]: stUsdsApr
|
|
26656
26667
|
};
|
|
26657
26668
|
}
|
|
26658
26669
|
};
|
|
@@ -27365,6 +27376,19 @@ var capFetcher = {
|
|
|
27365
27376
|
}
|
|
27366
27377
|
};
|
|
27367
27378
|
|
|
27379
|
+
// src/yields/intrinsic/fetchers/infinifi.ts
|
|
27380
|
+
var INFINIFI_URL = "https://eth-api.infinifi.xyz/api/protocol/data";
|
|
27381
|
+
var siUSD = "Staked infiniFi USD::siUSD";
|
|
27382
|
+
var infinifiFetcher = {
|
|
27383
|
+
label: "InfiniFi",
|
|
27384
|
+
fetch: async () => {
|
|
27385
|
+
const res = await fetch(INFINIFI_URL).then((r) => r.json());
|
|
27386
|
+
const apy7d = res?.data?.stats?.staked?.average7dAPY;
|
|
27387
|
+
if (apy7d === void 0) return { [siUSD]: 0 };
|
|
27388
|
+
return { [siUSD]: apy7d * 100 };
|
|
27389
|
+
}
|
|
27390
|
+
};
|
|
27391
|
+
|
|
27368
27392
|
// src/yields/intrinsic/index.ts
|
|
27369
27393
|
async function fetchIntrinsicYields() {
|
|
27370
27394
|
const wstethPromise = safeFetch(wstethFetcher.label, wstethFetcher.fetch);
|
|
@@ -27416,7 +27440,8 @@ async function fetchIntrinsicYields() {
|
|
|
27416
27440
|
syzusdFetcher,
|
|
27417
27441
|
susdfFetcher,
|
|
27418
27442
|
midasFetcher,
|
|
27419
|
-
capFetcher
|
|
27443
|
+
capFetcher,
|
|
27444
|
+
infinifiFetcher
|
|
27420
27445
|
];
|
|
27421
27446
|
const results = await Promise.all([
|
|
27422
27447
|
wstethPromise,
|
|
@@ -30491,7 +30516,8 @@ function parseAaveResults2(data, meta, context) {
|
|
|
30491
30516
|
price: rawPriceNum,
|
|
30492
30517
|
// Raw price (in base asset terms)
|
|
30493
30518
|
priceUSD,
|
|
30494
|
-
marketUid: createMarketUid(chainId, meta.fork, asset)
|
|
30519
|
+
marketUid: createMarketUid(chainId, meta.fork, asset),
|
|
30520
|
+
staticBase: meta.baseAssetOverride
|
|
30495
30521
|
});
|
|
30496
30522
|
} catch {
|
|
30497
30523
|
continue;
|
|
@@ -30541,7 +30567,11 @@ function getMorphoMarketsForChain(chainId, marketOverrides) {
|
|
|
30541
30567
|
loanAssetDecimals: override.loanAssetDecimals,
|
|
30542
30568
|
collateralAssetDecimals: override.collateralAssetDecimals,
|
|
30543
30569
|
fork: Lender.MORPHO_BLUE,
|
|
30544
|
-
marketId: override.marketId ?? generateMarketId(
|
|
30570
|
+
marketId: override.marketId ?? generateMarketId(
|
|
30571
|
+
override.oracle,
|
|
30572
|
+
override.loanAsset,
|
|
30573
|
+
override.collateralAsset
|
|
30574
|
+
)
|
|
30545
30575
|
}));
|
|
30546
30576
|
}
|
|
30547
30577
|
function getMorphoCalls2(chainId, context) {
|
|
@@ -30585,11 +30615,19 @@ function parseMorphoResults2(data, meta, context) {
|
|
|
30585
30615
|
);
|
|
30586
30616
|
if (isNaN(priceDebtToCollateral) || priceDebtToCollateral === 0) continue;
|
|
30587
30617
|
const loanOracleKey = tokenList?.[loanAsset]?.assetGroup ?? `${chainId}-${loanAsset}`;
|
|
30588
|
-
const collateralOracleKey = tokenList?.[collateralAsset]?.assetGroup ?? `${chainId}-${collateralAsset}`;
|
|
30589
30618
|
const loanAssetUSD = usdPrices[loanOracleKey] ?? usdPrices[loanAsset];
|
|
30590
|
-
const collateralAssetUSD = usdPrices[collateralOracleKey] ?? usdPrices[collateralAsset];
|
|
30591
30619
|
const lenderKey = generateMorphoLenderKey(market.marketId);
|
|
30592
30620
|
if (loanAssetUSD) {
|
|
30621
|
+
entries.push({
|
|
30622
|
+
asset: loanAsset,
|
|
30623
|
+
price: 1,
|
|
30624
|
+
// Loan token = 1 in oracle's own denomination
|
|
30625
|
+
priceUSD: loanAssetUSD,
|
|
30626
|
+
marketUid: createMarketUid(chainId, lenderKey, loanAsset),
|
|
30627
|
+
targetLender: lenderKey,
|
|
30628
|
+
description: "Morpho loan asset",
|
|
30629
|
+
staticBase: loanAsset
|
|
30630
|
+
});
|
|
30593
30631
|
const collateralPriceUSD = priceDebtToCollateral * loanAssetUSD;
|
|
30594
30632
|
entries.push({
|
|
30595
30633
|
asset: collateralAsset,
|
|
@@ -30597,18 +30635,8 @@ function parseMorphoResults2(data, meta, context) {
|
|
|
30597
30635
|
// Raw: collateral price in loan asset terms
|
|
30598
30636
|
priceUSD: collateralPriceUSD,
|
|
30599
30637
|
marketUid: createMarketUid(chainId, lenderKey, collateralAsset),
|
|
30600
|
-
targetLender: lenderKey
|
|
30601
|
-
|
|
30602
|
-
}
|
|
30603
|
-
if (collateralAssetUSD) {
|
|
30604
|
-
const loanPriceUSD = collateralAssetUSD / priceDebtToCollateral;
|
|
30605
|
-
entries.push({
|
|
30606
|
-
asset: loanAsset,
|
|
30607
|
-
price: 1 / priceDebtToCollateral,
|
|
30608
|
-
// Raw: loan price in collateral terms
|
|
30609
|
-
priceUSD: loanPriceUSD,
|
|
30610
|
-
marketUid: createMarketUid(chainId, lenderKey, loanAsset),
|
|
30611
|
-
targetLender: lenderKey
|
|
30638
|
+
targetLender: lenderKey,
|
|
30639
|
+
staticBase: loanAsset
|
|
30612
30640
|
});
|
|
30613
30641
|
}
|
|
30614
30642
|
}
|
|
@@ -30621,8 +30649,7 @@ var MORPHO_GRAPHQL_URL = "https://blue-api.morpho.org/graphql";
|
|
|
30621
30649
|
var PRICE_QUERY = (first, skip, chainId) => `
|
|
30622
30650
|
query GetMarketPrices {
|
|
30623
30651
|
markets(first: ${first}, skip: ${skip}, where: {
|
|
30624
|
-
chainId_in: [${chainId}]
|
|
30625
|
-
whitelisted: true
|
|
30652
|
+
chainId_in: [${chainId}]${chainId != Chain.ETHEREUM_MAINNET ? `,whitelisted: true` : ""}
|
|
30626
30653
|
},
|
|
30627
30654
|
orderBy: SupplyAssetsUsd,
|
|
30628
30655
|
orderDirection: Desc
|
|
@@ -30650,7 +30677,7 @@ query GetMarketPrices {
|
|
|
30650
30677
|
async function fetchMorphoGraphQLPrices(chainId) {
|
|
30651
30678
|
if (!morphoApiAvailable(chainId)) return null;
|
|
30652
30679
|
try {
|
|
30653
|
-
const pages = chainId ===
|
|
30680
|
+
const pages = chainId === Chain.ETHEREUM_MAINNET ? [
|
|
30654
30681
|
fetch(MORPHO_GRAPHQL_URL, {
|
|
30655
30682
|
method: "POST",
|
|
30656
30683
|
headers: { "Content-Type": "application/json" },
|
|
@@ -30679,14 +30706,19 @@ async function fetchMorphoGraphQLPrices(chainId) {
|
|
|
30679
30706
|
for (const result of results) {
|
|
30680
30707
|
const items = result?.data?.markets?.items;
|
|
30681
30708
|
if (!Array.isArray(items)) {
|
|
30682
|
-
console.warn(
|
|
30709
|
+
console.warn(
|
|
30710
|
+
`[morpho-gql] chain ${chainId}: unexpected API shape, items is not an array`
|
|
30711
|
+
);
|
|
30683
30712
|
return null;
|
|
30684
30713
|
}
|
|
30685
30714
|
allMarkets.push(...items);
|
|
30686
30715
|
}
|
|
30687
30716
|
return processMarketsToEntries(chainId, allMarkets, "morpho-gql");
|
|
30688
30717
|
} catch (err) {
|
|
30689
|
-
console.warn(
|
|
30718
|
+
console.warn(
|
|
30719
|
+
`[morpho-gql] chain ${chainId}: API error, falling back to on-chain`,
|
|
30720
|
+
err
|
|
30721
|
+
);
|
|
30690
30722
|
return null;
|
|
30691
30723
|
}
|
|
30692
30724
|
}
|
|
@@ -30697,8 +30729,7 @@ function processMarketsToEntries(chainId, allMarkets, source) {
|
|
|
30697
30729
|
}
|
|
30698
30730
|
const entries = [];
|
|
30699
30731
|
for (const market of allMarkets) {
|
|
30700
|
-
if (!market.collateralAsset?.address || !market.loanAsset?.address)
|
|
30701
|
-
continue;
|
|
30732
|
+
if (!market.collateralAsset?.address || !market.loanAsset?.address) continue;
|
|
30702
30733
|
const oracle = market.oracleAddress;
|
|
30703
30734
|
const loanAsset = market.loanAsset.address.toLowerCase();
|
|
30704
30735
|
const collateralAsset = market.collateralAsset.address.toLowerCase();
|
|
@@ -30712,53 +30743,35 @@ function processMarketsToEntries(chainId, allMarkets, source) {
|
|
|
30712
30743
|
market.loanAsset.decimals,
|
|
30713
30744
|
market.collateralAsset.decimals
|
|
30714
30745
|
) : 0;
|
|
30715
|
-
|
|
30716
|
-
|
|
30717
|
-
|
|
30718
|
-
entries.push({
|
|
30719
|
-
asset: collateralAsset,
|
|
30720
|
-
price: oracleRatio,
|
|
30721
|
-
// Raw: collateral price in loan asset terms
|
|
30722
|
-
priceUSD: collateralUSD,
|
|
30723
|
-
marketUid: createMarketUid(chainId, lenderKey, collateralAsset),
|
|
30724
|
-
targetLender: lenderKey
|
|
30725
|
-
});
|
|
30726
|
-
}
|
|
30727
|
-
} else if (collateralPriceUSD != null && collateralPriceUSD > 0) {
|
|
30746
|
+
const resolvedLoanUSD = loanPriceUSD != null && loanPriceUSD > 0 ? loanPriceUSD : collateralPriceUSD != null && collateralPriceUSD > 0 && oracleRatio > 0 ? collateralPriceUSD / oracleRatio : 0;
|
|
30747
|
+
const resolvedCollateralUSD = collateralPriceUSD != null && collateralPriceUSD > 0 ? collateralPriceUSD : loanPriceUSD != null && loanPriceUSD > 0 && oracleRatio > 0 ? oracleRatio * loanPriceUSD : 0;
|
|
30748
|
+
if (resolvedCollateralUSD > 0) {
|
|
30728
30749
|
entries.push({
|
|
30729
30750
|
asset: collateralAsset,
|
|
30730
30751
|
price: oracleRatio,
|
|
30731
|
-
// Raw
|
|
30732
|
-
priceUSD:
|
|
30752
|
+
// Raw: collateral price in loan asset terms
|
|
30753
|
+
priceUSD: resolvedCollateralUSD,
|
|
30733
30754
|
marketUid: createMarketUid(chainId, lenderKey, collateralAsset),
|
|
30734
|
-
targetLender: lenderKey
|
|
30755
|
+
targetLender: lenderKey,
|
|
30756
|
+
staticBase: loanAsset
|
|
30735
30757
|
});
|
|
30736
30758
|
}
|
|
30737
|
-
if (
|
|
30738
|
-
const loanUSD = oracleRatio > 0 ? collateralPriceUSD / oracleRatio : loanPriceUSD ?? 0;
|
|
30739
|
-
if (loanUSD > 0) {
|
|
30740
|
-
entries.push({
|
|
30741
|
-
asset: loanAsset,
|
|
30742
|
-
price: oracleRatio > 0 ? 1 / oracleRatio : 0,
|
|
30743
|
-
// Raw: loan price in collateral terms
|
|
30744
|
-
priceUSD: loanUSD,
|
|
30745
|
-
marketUid: createMarketUid(chainId, lenderKey, loanAsset),
|
|
30746
|
-
targetLender: lenderKey
|
|
30747
|
-
});
|
|
30748
|
-
}
|
|
30749
|
-
} else if (loanPriceUSD != null && loanPriceUSD > 0) {
|
|
30759
|
+
if (resolvedLoanUSD > 0) {
|
|
30750
30760
|
entries.push({
|
|
30751
30761
|
asset: loanAsset,
|
|
30752
30762
|
price: oracleRatio > 0 ? 1 / oracleRatio : 0,
|
|
30753
|
-
|
|
30754
|
-
priceUSD: loanPriceUSD,
|
|
30763
|
+
priceUSD: resolvedLoanUSD,
|
|
30755
30764
|
marketUid: createMarketUid(chainId, lenderKey, loanAsset),
|
|
30756
|
-
targetLender: lenderKey
|
|
30765
|
+
targetLender: lenderKey,
|
|
30766
|
+
description: "Morpho loan asset",
|
|
30767
|
+
staticBase: loanAsset
|
|
30757
30768
|
});
|
|
30758
30769
|
}
|
|
30759
30770
|
}
|
|
30760
30771
|
if (entries.length === 0) {
|
|
30761
|
-
console.warn(
|
|
30772
|
+
console.warn(
|
|
30773
|
+
`[${source}] chain ${chainId}: ${allMarkets.length} markets fetched but 0 price entries produced`
|
|
30774
|
+
);
|
|
30762
30775
|
return null;
|
|
30763
30776
|
}
|
|
30764
30777
|
return entries;
|
|
@@ -30868,27 +30881,37 @@ var USD_PRICED_OVERRIDES = {
|
|
|
30868
30881
|
// BASE - prices already in USD
|
|
30869
30882
|
};
|
|
30870
30883
|
function getCompoundV3Calls(chainId) {
|
|
30871
|
-
const
|
|
30884
|
+
const oraclesData = compoundV3OraclesData() ?? {};
|
|
30872
30885
|
const baseData = compoundV3BaseData() ?? {};
|
|
30873
30886
|
const results = [];
|
|
30874
|
-
for (const [lender, chainOracles] of Object.entries(
|
|
30887
|
+
for (const [lender, chainOracles] of Object.entries(oraclesData)) {
|
|
30875
30888
|
const assetOracles = chainOracles[chainId];
|
|
30876
30889
|
if (!assetOracles) continue;
|
|
30877
30890
|
const skipBaseScaling = USD_PRICED_OVERRIDES[lender]?.has(chainId);
|
|
30878
30891
|
const baseAsset = skipBaseScaling ? void 0 : baseData[lender]?.[chainId]?.baseAsset?.toLowerCase();
|
|
30892
|
+
const entries = Object.entries(assetOracles);
|
|
30893
|
+
const constantEntry = entries.find(
|
|
30894
|
+
([, e]) => e.description?.toLowerCase().includes("constant price")
|
|
30895
|
+
);
|
|
30896
|
+
let staticBase;
|
|
30897
|
+
if (constantEntry && baseAsset) {
|
|
30898
|
+
staticBase = baseAsset;
|
|
30899
|
+
}
|
|
30879
30900
|
const calls = [];
|
|
30880
30901
|
const meta = [];
|
|
30881
|
-
for (const [asset,
|
|
30902
|
+
for (const [asset, entry] of entries) {
|
|
30882
30903
|
calls.push({
|
|
30883
|
-
address:
|
|
30904
|
+
address: entry.oracle,
|
|
30884
30905
|
name: "latestRoundData",
|
|
30885
30906
|
params: []
|
|
30886
30907
|
});
|
|
30887
30908
|
meta.push({
|
|
30888
30909
|
asset,
|
|
30889
|
-
oracle:
|
|
30910
|
+
oracle: entry.oracle,
|
|
30890
30911
|
baseAsset,
|
|
30891
|
-
lender
|
|
30912
|
+
lender,
|
|
30913
|
+
description: entry.description,
|
|
30914
|
+
staticBase
|
|
30892
30915
|
});
|
|
30893
30916
|
}
|
|
30894
30917
|
if (calls.length > 0) {
|
|
@@ -30929,7 +30952,9 @@ function parseCompoundV3Results(data, meta, context) {
|
|
|
30929
30952
|
price: rawPrice,
|
|
30930
30953
|
// Raw price (in base asset terms if applicable)
|
|
30931
30954
|
priceUSD,
|
|
30932
|
-
marketUid: createMarketUid(chainId, queryMeta.lender, queryMeta.asset)
|
|
30955
|
+
marketUid: createMarketUid(chainId, queryMeta.lender, queryMeta.asset),
|
|
30956
|
+
description: queryMeta.description,
|
|
30957
|
+
staticBase: queryMeta.staticBase
|
|
30933
30958
|
});
|
|
30934
30959
|
} catch {
|
|
30935
30960
|
}
|
|
@@ -31861,6 +31886,7 @@ var FlashAbi = [
|
|
|
31861
31886
|
}
|
|
31862
31887
|
];
|
|
31863
31888
|
var DEFAULT_BATCH_SIZE = 4096;
|
|
31889
|
+
var isValidResult = (v) => typeof v === "bigint";
|
|
31864
31890
|
var FLASHLOAN_ENABLED_MASK = BigInt(
|
|
31865
31891
|
"0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFFFFFFFFFF"
|
|
31866
31892
|
);
|
|
@@ -31873,108 +31899,57 @@ async function fetchFlashLiquidityForChain(chain, multicallRetry, list = {}) {
|
|
|
31873
31899
|
let aaveCalls = [];
|
|
31874
31900
|
const aaves = getAavesForChain();
|
|
31875
31901
|
const aaveProtocols = aaves[chain] ?? [];
|
|
31902
|
+
const allAaveUnderlyings = [];
|
|
31876
31903
|
aaveProtocols.forEach((aaveFork) => {
|
|
31877
31904
|
const underlyingsAndATokens = Object.entries(
|
|
31878
31905
|
getAaveStyleProtocolTokenMap(chain, aaveFork)
|
|
31879
31906
|
);
|
|
31880
31907
|
const pool = getAaveTypePoolAddress(chain, aaveFork);
|
|
31881
|
-
const tokenCalls = underlyingsAndATokens.
|
|
31882
|
-
|
|
31883
|
-
|
|
31884
|
-
|
|
31885
|
-
|
|
31908
|
+
const tokenCalls = underlyingsAndATokens.flatMap(
|
|
31909
|
+
([a, b]) => [
|
|
31910
|
+
{ name: "balanceOf" /* balanceOf */, address: a, params: [b.aToken] },
|
|
31911
|
+
{ name: "getConfiguration", address: pool, params: [a] }
|
|
31912
|
+
]
|
|
31913
|
+
);
|
|
31914
|
+
const underlyings = underlyingsAndATokens.map((a) => a[0]);
|
|
31915
|
+
aaveAssets[aaveFork] = underlyings;
|
|
31916
|
+
allAaveUnderlyings.push(...underlyings);
|
|
31886
31917
|
callLengths[aaveFork] = tokenCalls.length * 2 + 1;
|
|
31887
|
-
aaveCalls
|
|
31888
|
-
|
|
31889
|
-
|
|
31890
|
-
|
|
31891
|
-
];
|
|
31918
|
+
aaveCalls.push(...tokenCalls, {
|
|
31919
|
+
name: "FLASHLOAN_PREMIUM_TOTAL",
|
|
31920
|
+
address: pool
|
|
31921
|
+
});
|
|
31892
31922
|
});
|
|
31923
|
+
const lendingAssets = RELEVANT_LENDING_ASSETS()?.[chain] ?? [];
|
|
31924
|
+
const unifiedAssets = lodash.uniq([...allAaveUnderlyings, ...lendingAssets]);
|
|
31893
31925
|
const morphoBs = RELEVANT_MORPHOB_FORKS()?.[chain] ?? [];
|
|
31894
|
-
const
|
|
31895
|
-
|
|
31896
|
-
|
|
31897
|
-
|
|
31898
|
-
|
|
31899
|
-
|
|
31900
|
-
|
|
31901
|
-
...otherAssets.map(
|
|
31902
|
-
(address) => address === zeroAddress ? {
|
|
31926
|
+
const buildBalanceCalls = (forks) => {
|
|
31927
|
+
const result = [];
|
|
31928
|
+
for (const fork of forks) {
|
|
31929
|
+
callLengths[fork.pool] = unifiedAssets.length;
|
|
31930
|
+
for (const address of unifiedAssets) {
|
|
31931
|
+
result.push(
|
|
31932
|
+
address === zeroAddress ? {
|
|
31903
31933
|
name: "getEthBalance" /* getEthBalance */,
|
|
31904
31934
|
address: MULTICALL_ADDRESS[chain],
|
|
31905
|
-
|
|
31935
|
+
params: [fork.address]
|
|
31906
31936
|
} : {
|
|
31907
31937
|
name: "balanceOf" /* balanceOf */,
|
|
31908
31938
|
address,
|
|
31909
|
-
|
|
31939
|
+
params: [fork.address]
|
|
31910
31940
|
}
|
|
31911
|
-
)
|
|
31912
|
-
|
|
31913
|
-
}
|
|
31914
|
-
|
|
31941
|
+
);
|
|
31942
|
+
}
|
|
31943
|
+
}
|
|
31944
|
+
return result;
|
|
31945
|
+
};
|
|
31946
|
+
const morphoCalls = buildBalanceCalls(morphoBs);
|
|
31915
31947
|
const balancerV2s = RELEVANT_BALANCER_V2_FORKS[chain] ?? [];
|
|
31916
|
-
|
|
31917
|
-
if (balancerV2s && balancerV2s.length > 0) {
|
|
31918
|
-
balancerV2s.forEach((bFork) => {
|
|
31919
|
-
callLengths[bFork.pool] = otherAssets.length;
|
|
31920
|
-
balancerV2Calls = [
|
|
31921
|
-
...balancerV2Calls,
|
|
31922
|
-
...otherAssets.map(
|
|
31923
|
-
(address) => address === zeroAddress ? {
|
|
31924
|
-
name: "getEthBalance" /* getEthBalance */,
|
|
31925
|
-
address: MULTICALL_ADDRESS[chain],
|
|
31926
|
-
args: [bFork.address]
|
|
31927
|
-
} : {
|
|
31928
|
-
name: "balanceOf" /* balanceOf */,
|
|
31929
|
-
address,
|
|
31930
|
-
args: [bFork.address]
|
|
31931
|
-
}
|
|
31932
|
-
)
|
|
31933
|
-
];
|
|
31934
|
-
});
|
|
31935
|
-
}
|
|
31948
|
+
const balancerV2Calls = buildBalanceCalls(balancerV2s);
|
|
31936
31949
|
const balancerV3s = RELEVANT_BALANCER_V3_FORKS[chain] ?? [];
|
|
31937
|
-
|
|
31938
|
-
if (balancerV3s && balancerV3s.length > 0) {
|
|
31939
|
-
balancerV3s.forEach((bFork) => {
|
|
31940
|
-
callLengths[bFork.pool] = otherAssets.length;
|
|
31941
|
-
balancerV3Calls = [
|
|
31942
|
-
...balancerV3Calls,
|
|
31943
|
-
...otherAssets.map(
|
|
31944
|
-
(address) => address === zeroAddress ? {
|
|
31945
|
-
name: "getEthBalance" /* getEthBalance */,
|
|
31946
|
-
address: MULTICALL_ADDRESS[chain],
|
|
31947
|
-
args: [bFork.address]
|
|
31948
|
-
} : {
|
|
31949
|
-
name: "balanceOf" /* balanceOf */,
|
|
31950
|
-
address,
|
|
31951
|
-
args: [bFork.address]
|
|
31952
|
-
}
|
|
31953
|
-
)
|
|
31954
|
-
];
|
|
31955
|
-
});
|
|
31956
|
-
}
|
|
31950
|
+
const balancerV3Calls = buildBalanceCalls(balancerV3s);
|
|
31957
31951
|
const uniswapV4s = RELEVANT_UNISWAP_V4_FORKS[chain] ?? [];
|
|
31958
|
-
|
|
31959
|
-
if (uniswapV4s && uniswapV4s.length > 0) {
|
|
31960
|
-
uniswapV4s.forEach((u4Fork) => {
|
|
31961
|
-
callLengths[u4Fork.pool] = otherAssets.length;
|
|
31962
|
-
uniswapV4Calls = [
|
|
31963
|
-
...uniswapV4Calls,
|
|
31964
|
-
...otherAssets.map(
|
|
31965
|
-
(address) => address === zeroAddress ? {
|
|
31966
|
-
name: "getEthBalance" /* getEthBalance */,
|
|
31967
|
-
address: MULTICALL_ADDRESS[chain],
|
|
31968
|
-
args: [u4Fork.address]
|
|
31969
|
-
} : {
|
|
31970
|
-
name: "balanceOf" /* balanceOf */,
|
|
31971
|
-
address,
|
|
31972
|
-
args: [u4Fork.address]
|
|
31973
|
-
}
|
|
31974
|
-
)
|
|
31975
|
-
];
|
|
31976
|
-
});
|
|
31977
|
-
}
|
|
31952
|
+
const uniswapV4Calls = buildBalanceCalls(uniswapV4s);
|
|
31978
31953
|
const calls = [
|
|
31979
31954
|
...aaveCalls,
|
|
31980
31955
|
...balancerV2Calls,
|
|
@@ -31987,9 +31962,9 @@ async function fetchFlashLiquidityForChain(chain, multicallRetry, list = {}) {
|
|
|
31987
31962
|
calls,
|
|
31988
31963
|
abi: FlashAbi,
|
|
31989
31964
|
batchSize: DEFAULT_BATCH_SIZE,
|
|
31990
|
-
maxRetries:
|
|
31965
|
+
maxRetries: 5,
|
|
31991
31966
|
providerId: 0,
|
|
31992
|
-
allowFailure:
|
|
31967
|
+
allowFailure: true
|
|
31993
31968
|
});
|
|
31994
31969
|
let liquidity = {};
|
|
31995
31970
|
let currentOffset = 0;
|
|
@@ -31998,10 +31973,12 @@ async function fetchFlashLiquidityForChain(chain, multicallRetry, list = {}) {
|
|
|
31998
31973
|
const data = rawResults.slice(currentOffset, callLen + currentOffset);
|
|
31999
31974
|
const fee = data[callLen - 1];
|
|
32000
31975
|
currentOffset += callLen;
|
|
31976
|
+
if (typeof fee !== "bigint") return;
|
|
32001
31977
|
aaveAssets[aave].forEach((asset, i) => {
|
|
32002
|
-
const decimals = list[asset]?.decimals;
|
|
32003
31978
|
const rawAmount = data[2 * i];
|
|
32004
31979
|
const config = data[2 * i + 1];
|
|
31980
|
+
if (typeof rawAmount !== "bigint" || typeof config !== "bigint") return;
|
|
31981
|
+
const decimals = list[asset]?.decimals;
|
|
32005
31982
|
const enabled = !AAVE_V3_LENDERS.includes(aave) || getFlashLoanEnabled(config);
|
|
32006
31983
|
if (enabled && rawAmount > 0n && FLASH_LOAN_IDS[aave] !== void 0) {
|
|
32007
31984
|
if (!liquidity[asset]) liquidity[asset] = [];
|
|
@@ -32019,13 +31996,13 @@ async function fetchFlashLiquidityForChain(chain, multicallRetry, list = {}) {
|
|
|
32019
31996
|
});
|
|
32020
31997
|
});
|
|
32021
31998
|
balancerV2s.forEach((balancer) => {
|
|
32022
|
-
const callLen =
|
|
31999
|
+
const callLen = unifiedAssets.length;
|
|
32023
32000
|
const data = rawResults.slice(currentOffset, callLen + currentOffset);
|
|
32024
32001
|
currentOffset += callLen;
|
|
32025
|
-
|
|
32002
|
+
unifiedAssets.forEach((asset, i) => {
|
|
32026
32003
|
const decimals = list[asset]?.decimals;
|
|
32027
32004
|
const rawAmount = data[i];
|
|
32028
|
-
if (rawAmount > 0n) {
|
|
32005
|
+
if (isValidResult(rawAmount) && rawAmount > 0n) {
|
|
32029
32006
|
if (!liquidity[asset]) liquidity[asset] = [];
|
|
32030
32007
|
liquidity[asset].push({
|
|
32031
32008
|
id: FLASH_LOAN_IDS[balancer.pool],
|
|
@@ -32041,12 +32018,12 @@ async function fetchFlashLiquidityForChain(chain, multicallRetry, list = {}) {
|
|
|
32041
32018
|
});
|
|
32042
32019
|
});
|
|
32043
32020
|
morphoBs.forEach((morpho) => {
|
|
32044
|
-
const callLen =
|
|
32021
|
+
const callLen = unifiedAssets.length;
|
|
32045
32022
|
const data = rawResults.slice(currentOffset, callLen + currentOffset);
|
|
32046
32023
|
currentOffset += callLen;
|
|
32047
|
-
|
|
32024
|
+
unifiedAssets.forEach((asset, i) => {
|
|
32048
32025
|
const rawAmount = data[i];
|
|
32049
|
-
if (rawAmount > 0n) {
|
|
32026
|
+
if (isValidResult(rawAmount) && rawAmount > 0n) {
|
|
32050
32027
|
if (!liquidity[asset]) liquidity[asset] = [];
|
|
32051
32028
|
const decimals = list[asset]?.decimals;
|
|
32052
32029
|
liquidity[asset].push({
|
|
@@ -32063,13 +32040,13 @@ async function fetchFlashLiquidityForChain(chain, multicallRetry, list = {}) {
|
|
|
32063
32040
|
});
|
|
32064
32041
|
});
|
|
32065
32042
|
balancerV3s.forEach((balancerV3) => {
|
|
32066
|
-
const callLen =
|
|
32043
|
+
const callLen = unifiedAssets.length;
|
|
32067
32044
|
const data = rawResults.slice(currentOffset, callLen + currentOffset);
|
|
32068
32045
|
currentOffset += callLen;
|
|
32069
|
-
|
|
32046
|
+
unifiedAssets.forEach((asset, i) => {
|
|
32070
32047
|
const decimals = list[asset]?.decimals;
|
|
32071
32048
|
const rawAmount = data[i];
|
|
32072
|
-
if (rawAmount > 0n) {
|
|
32049
|
+
if (isValidResult(rawAmount) && rawAmount > 0n) {
|
|
32073
32050
|
if (!liquidity[asset]) liquidity[asset] = [];
|
|
32074
32051
|
liquidity[asset].push({
|
|
32075
32052
|
id: FLASH_LOAN_IDS[balancerV3.pool],
|
|
@@ -32085,13 +32062,13 @@ async function fetchFlashLiquidityForChain(chain, multicallRetry, list = {}) {
|
|
|
32085
32062
|
});
|
|
32086
32063
|
});
|
|
32087
32064
|
uniswapV4s.forEach((uniV4) => {
|
|
32088
|
-
const callLen =
|
|
32065
|
+
const callLen = unifiedAssets.length;
|
|
32089
32066
|
const data = rawResults.slice(currentOffset, callLen + currentOffset);
|
|
32090
32067
|
currentOffset += callLen;
|
|
32091
|
-
|
|
32068
|
+
unifiedAssets.forEach((asset, i) => {
|
|
32092
32069
|
const decimals = list[asset]?.decimals;
|
|
32093
32070
|
const rawAmount = data[i];
|
|
32094
|
-
if (rawAmount > 0n) {
|
|
32071
|
+
if (isValidResult(rawAmount) && rawAmount > 0n) {
|
|
32095
32072
|
if (!liquidity[asset]) liquidity[asset] = [];
|
|
32096
32073
|
liquidity[asset].push({
|
|
32097
32074
|
id: FLASH_LOAN_IDS[uniV4.pool],
|