@1delta/margin-fetcher 0.0.211 → 0.0.213
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 +137 -204
- 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 +10 -0
- package/dist/prices/oracle-prices/types.d.ts.map +1 -1
- package/package.json +3 -3
- package/dist/lending/public-data/euler/fetcher/constants.d.ts +0 -27
- package/dist/lending/public-data/euler/fetcher/constants.d.ts.map +0 -1
|
@@ -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,10 +6264,11 @@ 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: {},
|
|
6271
|
+
aaveOraclesConfig: {},
|
|
6271
6272
|
aaveWethGateway: {},
|
|
6272
6273
|
morphoBundler3: {},
|
|
6273
6274
|
listaNativeProvider: {},
|
|
@@ -6282,7 +6283,7 @@ var aaveTokens = () => getGlobalData2()?.aaveTokens;
|
|
|
6282
6283
|
var aavePools = () => getGlobalData2()?.aavePools;
|
|
6283
6284
|
var aaveOracles = () => getGlobalData2()?.aaveOracles;
|
|
6284
6285
|
var compoundV2Oracles = () => getGlobalData2()?.compoundV2Oracles;
|
|
6285
|
-
var
|
|
6286
|
+
var compoundV3OraclesData = () => getGlobalData2()?.compoundV3OraclesData;
|
|
6286
6287
|
var morphoTypeOracles = () => getGlobalData2()?.morphoTypeOracles;
|
|
6287
6288
|
var morphoTypeMarkets = () => getGlobalData2()?.morphoTypeMarkets;
|
|
6288
6289
|
var aaveReserves = () => getGlobalData2()?.aaveReserves;
|
|
@@ -6295,6 +6296,7 @@ var compoundV2Pools = () => getGlobalData2()?.compoundV2Pools;
|
|
|
6295
6296
|
var compoundV2Tokens = () => getGlobalData2()?.compoundV2Tokens;
|
|
6296
6297
|
var compoundV2TokenArray = () => getGlobalData2()?.compoundV2TokenArray;
|
|
6297
6298
|
var initConfig = () => getGlobalData2()?.initConfig;
|
|
6299
|
+
var aaveOraclesConfig = () => getGlobalData2()?.aaveOraclesConfig;
|
|
6298
6300
|
var eulerConfigs = () => getGlobalData2()?.eulerConfigs;
|
|
6299
6301
|
var eulerVaults = () => getGlobalData2()?.eulerVaults;
|
|
6300
6302
|
var getListUrl = (chainId) => `https://raw.githubusercontent.com/1delta-DAO/token-lists/main/${chainId}.json`;
|
|
@@ -7607,7 +7609,7 @@ var buildAaveV2StyleLenderReserveCall = (chainId, lender) => {
|
|
|
7607
7609
|
}
|
|
7608
7610
|
};
|
|
7609
7611
|
function range(n) {
|
|
7610
|
-
return Array.from({ length: n + 1 }, (
|
|
7612
|
+
return Array.from({ length: n + 1 }, (_3, i) => i);
|
|
7611
7613
|
}
|
|
7612
7614
|
var AAVE_V3_EMODES = (chain, lender) => {
|
|
7613
7615
|
if (chain === Chain.ETHEREUM_MAINNET) {
|
|
@@ -8847,7 +8849,7 @@ var getInitReservesDataConverter = (lender, chainId, prices, additionalYields, t
|
|
|
8847
8849
|
});
|
|
8848
8850
|
});
|
|
8849
8851
|
Object.entries(eModes).forEach(([modeId, data2]) => {
|
|
8850
|
-
Object.entries(result)?.forEach(([key,
|
|
8852
|
+
Object.entries(result)?.forEach(([key, _3]) => {
|
|
8851
8853
|
if (!result[key].config[modeId]) {
|
|
8852
8854
|
let mode = {
|
|
8853
8855
|
...data2,
|
|
@@ -18415,7 +18417,7 @@ function createCompoundV2Entry(i, data, key, assetsIn, vToken, meta, claimableRe
|
|
|
18415
18417
|
// src/lending/user-data/euler/userCallBuild.ts
|
|
18416
18418
|
Array.from(
|
|
18417
18419
|
{ length: 256 },
|
|
18418
|
-
(
|
|
18420
|
+
(_3, i) => i
|
|
18419
18421
|
);
|
|
18420
18422
|
var EULER_SUBGRAPH_BASE = "https://api.goldsky.com/api/public/project_cm4iagnemt1wp01xn4gh1agft/subgraphs";
|
|
18421
18423
|
var EULER_SUBGRAPH_URLS = {
|
|
@@ -18962,7 +18964,13 @@ var getCompoundV3UserDataConverter = (lender, chainId, account, metaMap) => {
|
|
|
18962
18964
|
const payload = {
|
|
18963
18965
|
lendingPositions: { ...result, ...resultBase },
|
|
18964
18966
|
chainId,
|
|
18965
|
-
rewards: COMP_ADDRESSES[chainId] ? [
|
|
18967
|
+
rewards: COMP_ADDRESSES[chainId] ? [
|
|
18968
|
+
{
|
|
18969
|
+
asset: COMP_ADDRESSES[chainId],
|
|
18970
|
+
totalRewards: compRewards,
|
|
18971
|
+
claimableRewards: compRewards
|
|
18972
|
+
}
|
|
18973
|
+
] : [],
|
|
18966
18974
|
account
|
|
18967
18975
|
};
|
|
18968
18976
|
const userData = createBaseTypeUserState(
|
|
@@ -25118,7 +25126,7 @@ function filterActiveLenders(summary) {
|
|
|
25118
25126
|
function fuseLenderData(userDataResult, summary) {
|
|
25119
25127
|
const entries = [];
|
|
25120
25128
|
for (const lenderSummary of summary.lenders) {
|
|
25121
|
-
const { lender, chainId, subAccounts:
|
|
25129
|
+
const { lender, chainId, subAccounts: _3, ...summaryFields } = lenderSummary;
|
|
25122
25130
|
const userData = userDataResult[chainId]?.[lender];
|
|
25123
25131
|
if (!userData) continue;
|
|
25124
25132
|
entries.push({
|
|
@@ -30390,38 +30398,8 @@ var parseRWADynamicOracleResults = (chainId, data, assetName) => {
|
|
|
30390
30398
|
}
|
|
30391
30399
|
}
|
|
30392
30400
|
};
|
|
30393
|
-
|
|
30394
|
-
|
|
30395
|
-
[Chain.KAIA_MAINNET]: {
|
|
30396
|
-
// KLAYBANK on KAIA uses WKLAY as base asset
|
|
30397
|
-
baseAsset: "0x19aac5f612f524b754ca7e7c41cbfa2e981a4432",
|
|
30398
|
-
// BASE_CURRENCY_UNIT call reverts, oracle returns 18 decimals
|
|
30399
|
-
baseCurrencyUnit: 1000000000000000000n,
|
|
30400
|
-
// Use RHOMBUS oracle for WKLAY USD price
|
|
30401
|
-
baseAssetSource: Lender.AVALON
|
|
30402
|
-
}
|
|
30403
|
-
},
|
|
30404
|
-
[Lender.KLAP]: {
|
|
30405
|
-
[Chain.KAIA_MAINNET]: {
|
|
30406
|
-
// BASE_CURRENCY_UNIT call reverts, oracle returns 18 decimals (USD denominated)
|
|
30407
|
-
baseCurrencyUnit: 1000000000000000000n
|
|
30408
|
-
}
|
|
30409
|
-
},
|
|
30410
|
-
[Lender.MOLEND]: {
|
|
30411
|
-
[Chain.MODE]: {
|
|
30412
|
-
// BASE_CURRENCY_UNIT call reverts, oracle returns 18 decimals (USD denominated)
|
|
30413
|
-
baseCurrencyUnit: 100000000n
|
|
30414
|
-
}
|
|
30415
|
-
},
|
|
30416
|
-
[Lender.MOOLA]: {
|
|
30417
|
-
[Chain.CELO_MAINNET]: {
|
|
30418
|
-
baseAsset: "0x471ece3750da237f93b8e339c536989b8978a438",
|
|
30419
|
-
// BASE_CURRENCY_UNIT call reverts, oracle returns 18 decimals
|
|
30420
|
-
baseCurrencyUnit: 1000000000000000000n,
|
|
30421
|
-
baseAssetSource: Lender.AAVE_V3
|
|
30422
|
-
}
|
|
30423
|
-
}
|
|
30424
|
-
};
|
|
30401
|
+
|
|
30402
|
+
// src/prices/oracle-prices/fetchers/aave.ts
|
|
30425
30403
|
function getAaveLendersForChain(chainId) {
|
|
30426
30404
|
const oracles = aaveOracles() ?? {};
|
|
30427
30405
|
const reserves = aaveReserves() ?? {};
|
|
@@ -30455,7 +30433,8 @@ function getAaveCalls2(chainId) {
|
|
|
30455
30433
|
params: [asset]
|
|
30456
30434
|
});
|
|
30457
30435
|
}
|
|
30458
|
-
const
|
|
30436
|
+
const config = aaveOraclesConfig() ?? {};
|
|
30437
|
+
const lenderOverride = config[lender]?.[chainId];
|
|
30459
30438
|
results.push({
|
|
30460
30439
|
calls,
|
|
30461
30440
|
meta: {
|
|
@@ -30465,7 +30444,7 @@ function getAaveCalls2(chainId) {
|
|
|
30465
30444
|
baseCurrencyUnitIndex: 0,
|
|
30466
30445
|
assetCallCount: assets.length,
|
|
30467
30446
|
baseAssetOverride: lenderOverride?.baseAsset,
|
|
30468
|
-
baseCurrencyUnitOverride: lenderOverride?.baseCurrencyUnit,
|
|
30447
|
+
baseCurrencyUnitOverride: lenderOverride?.baseCurrencyUnit ? BigInt(lenderOverride.baseCurrencyUnit) : void 0,
|
|
30469
30448
|
baseAssetSource: lenderOverride?.baseAssetSource
|
|
30470
30449
|
},
|
|
30471
30450
|
lender
|
|
@@ -30505,12 +30484,15 @@ function parseAaveResults2(data, meta, context) {
|
|
|
30505
30484
|
);
|
|
30506
30485
|
if (isNaN(rawPriceNum) || rawPriceNum === 0) continue;
|
|
30507
30486
|
const priceUSD = rawPriceNum * baseAssetUSD;
|
|
30487
|
+
const isBaseAsset = meta.baseAssetOverride && asset.toLowerCase() === meta.baseAssetOverride.toLowerCase();
|
|
30508
30488
|
entries.push({
|
|
30509
30489
|
asset: asset.toLowerCase(),
|
|
30510
30490
|
price: rawPriceNum,
|
|
30511
30491
|
// Raw price (in base asset terms)
|
|
30512
30492
|
priceUSD,
|
|
30513
|
-
marketUid: createMarketUid(chainId, meta.fork, asset)
|
|
30493
|
+
marketUid: createMarketUid(chainId, meta.fork, asset),
|
|
30494
|
+
staticBase: isBaseAsset || void 0,
|
|
30495
|
+
baseAsset: meta.baseAssetOverride
|
|
30514
30496
|
});
|
|
30515
30497
|
} catch {
|
|
30516
30498
|
continue;
|
|
@@ -30560,7 +30542,11 @@ function getMorphoMarketsForChain(chainId, marketOverrides) {
|
|
|
30560
30542
|
loanAssetDecimals: override.loanAssetDecimals,
|
|
30561
30543
|
collateralAssetDecimals: override.collateralAssetDecimals,
|
|
30562
30544
|
fork: Lender.MORPHO_BLUE,
|
|
30563
|
-
marketId: override.marketId ?? generateMarketId(
|
|
30545
|
+
marketId: override.marketId ?? generateMarketId(
|
|
30546
|
+
override.oracle,
|
|
30547
|
+
override.loanAsset,
|
|
30548
|
+
override.collateralAsset
|
|
30549
|
+
)
|
|
30564
30550
|
}));
|
|
30565
30551
|
}
|
|
30566
30552
|
function getMorphoCalls2(chainId, context) {
|
|
@@ -30604,11 +30590,20 @@ function parseMorphoResults2(data, meta, context) {
|
|
|
30604
30590
|
);
|
|
30605
30591
|
if (isNaN(priceDebtToCollateral) || priceDebtToCollateral === 0) continue;
|
|
30606
30592
|
const loanOracleKey = tokenList?.[loanAsset]?.assetGroup ?? `${chainId}-${loanAsset}`;
|
|
30607
|
-
const collateralOracleKey = tokenList?.[collateralAsset]?.assetGroup ?? `${chainId}-${collateralAsset}`;
|
|
30608
30593
|
const loanAssetUSD = usdPrices[loanOracleKey] ?? usdPrices[loanAsset];
|
|
30609
|
-
const collateralAssetUSD = usdPrices[collateralOracleKey] ?? usdPrices[collateralAsset];
|
|
30610
30594
|
const lenderKey = generateMorphoLenderKey(market.marketId);
|
|
30611
30595
|
if (loanAssetUSD) {
|
|
30596
|
+
entries.push({
|
|
30597
|
+
asset: loanAsset,
|
|
30598
|
+
price: 1,
|
|
30599
|
+
// Loan token = 1 in oracle's own denomination
|
|
30600
|
+
priceUSD: loanAssetUSD,
|
|
30601
|
+
marketUid: createMarketUid(chainId, lenderKey, loanAsset),
|
|
30602
|
+
targetLender: lenderKey,
|
|
30603
|
+
description: "Morpho loan asset",
|
|
30604
|
+
staticBase: true,
|
|
30605
|
+
baseAsset: loanAsset
|
|
30606
|
+
});
|
|
30612
30607
|
const collateralPriceUSD = priceDebtToCollateral * loanAssetUSD;
|
|
30613
30608
|
entries.push({
|
|
30614
30609
|
asset: collateralAsset,
|
|
@@ -30616,18 +30611,8 @@ function parseMorphoResults2(data, meta, context) {
|
|
|
30616
30611
|
// Raw: collateral price in loan asset terms
|
|
30617
30612
|
priceUSD: collateralPriceUSD,
|
|
30618
30613
|
marketUid: createMarketUid(chainId, lenderKey, collateralAsset),
|
|
30619
|
-
targetLender: lenderKey
|
|
30620
|
-
|
|
30621
|
-
}
|
|
30622
|
-
if (collateralAssetUSD) {
|
|
30623
|
-
const loanPriceUSD = collateralAssetUSD / priceDebtToCollateral;
|
|
30624
|
-
entries.push({
|
|
30625
|
-
asset: loanAsset,
|
|
30626
|
-
price: 1 / priceDebtToCollateral,
|
|
30627
|
-
// Raw: loan price in collateral terms
|
|
30628
|
-
priceUSD: loanPriceUSD,
|
|
30629
|
-
marketUid: createMarketUid(chainId, lenderKey, loanAsset),
|
|
30630
|
-
targetLender: lenderKey
|
|
30614
|
+
targetLender: lenderKey,
|
|
30615
|
+
baseAsset: loanAsset
|
|
30631
30616
|
});
|
|
30632
30617
|
}
|
|
30633
30618
|
}
|
|
@@ -30640,8 +30625,7 @@ var MORPHO_GRAPHQL_URL = "https://blue-api.morpho.org/graphql";
|
|
|
30640
30625
|
var PRICE_QUERY = (first, skip, chainId) => `
|
|
30641
30626
|
query GetMarketPrices {
|
|
30642
30627
|
markets(first: ${first}, skip: ${skip}, where: {
|
|
30643
|
-
chainId_in: [${chainId}]
|
|
30644
|
-
whitelisted: true
|
|
30628
|
+
chainId_in: [${chainId}]${chainId != Chain.ETHEREUM_MAINNET ? `,whitelisted: true` : ""}
|
|
30645
30629
|
},
|
|
30646
30630
|
orderBy: SupplyAssetsUsd,
|
|
30647
30631
|
orderDirection: Desc
|
|
@@ -30669,7 +30653,7 @@ query GetMarketPrices {
|
|
|
30669
30653
|
async function fetchMorphoGraphQLPrices(chainId) {
|
|
30670
30654
|
if (!morphoApiAvailable(chainId)) return null;
|
|
30671
30655
|
try {
|
|
30672
|
-
const pages = chainId ===
|
|
30656
|
+
const pages = chainId === Chain.ETHEREUM_MAINNET ? [
|
|
30673
30657
|
fetch(MORPHO_GRAPHQL_URL, {
|
|
30674
30658
|
method: "POST",
|
|
30675
30659
|
headers: { "Content-Type": "application/json" },
|
|
@@ -30698,14 +30682,19 @@ async function fetchMorphoGraphQLPrices(chainId) {
|
|
|
30698
30682
|
for (const result of results) {
|
|
30699
30683
|
const items = result?.data?.markets?.items;
|
|
30700
30684
|
if (!Array.isArray(items)) {
|
|
30701
|
-
console.warn(
|
|
30685
|
+
console.warn(
|
|
30686
|
+
`[morpho-gql] chain ${chainId}: unexpected API shape, items is not an array`
|
|
30687
|
+
);
|
|
30702
30688
|
return null;
|
|
30703
30689
|
}
|
|
30704
30690
|
allMarkets.push(...items);
|
|
30705
30691
|
}
|
|
30706
30692
|
return processMarketsToEntries(chainId, allMarkets, "morpho-gql");
|
|
30707
30693
|
} catch (err) {
|
|
30708
|
-
console.warn(
|
|
30694
|
+
console.warn(
|
|
30695
|
+
`[morpho-gql] chain ${chainId}: API error, falling back to on-chain`,
|
|
30696
|
+
err
|
|
30697
|
+
);
|
|
30709
30698
|
return null;
|
|
30710
30699
|
}
|
|
30711
30700
|
}
|
|
@@ -30716,8 +30705,7 @@ function processMarketsToEntries(chainId, allMarkets, source) {
|
|
|
30716
30705
|
}
|
|
30717
30706
|
const entries = [];
|
|
30718
30707
|
for (const market of allMarkets) {
|
|
30719
|
-
if (!market.collateralAsset?.address || !market.loanAsset?.address)
|
|
30720
|
-
continue;
|
|
30708
|
+
if (!market.collateralAsset?.address || !market.loanAsset?.address) continue;
|
|
30721
30709
|
const oracle = market.oracleAddress;
|
|
30722
30710
|
const loanAsset = market.loanAsset.address.toLowerCase();
|
|
30723
30711
|
const collateralAsset = market.collateralAsset.address.toLowerCase();
|
|
@@ -30731,53 +30719,36 @@ function processMarketsToEntries(chainId, allMarkets, source) {
|
|
|
30731
30719
|
market.loanAsset.decimals,
|
|
30732
30720
|
market.collateralAsset.decimals
|
|
30733
30721
|
) : 0;
|
|
30734
|
-
|
|
30735
|
-
|
|
30736
|
-
|
|
30737
|
-
entries.push({
|
|
30738
|
-
asset: collateralAsset,
|
|
30739
|
-
price: oracleRatio,
|
|
30740
|
-
// Raw: collateral price in loan asset terms
|
|
30741
|
-
priceUSD: collateralUSD,
|
|
30742
|
-
marketUid: createMarketUid(chainId, lenderKey, collateralAsset),
|
|
30743
|
-
targetLender: lenderKey
|
|
30744
|
-
});
|
|
30745
|
-
}
|
|
30746
|
-
} else if (collateralPriceUSD != null && collateralPriceUSD > 0) {
|
|
30722
|
+
const resolvedLoanUSD = loanPriceUSD != null && loanPriceUSD > 0 ? loanPriceUSD : collateralPriceUSD != null && collateralPriceUSD > 0 && oracleRatio > 0 ? collateralPriceUSD / oracleRatio : 0;
|
|
30723
|
+
const resolvedCollateralUSD = collateralPriceUSD != null && collateralPriceUSD > 0 ? collateralPriceUSD : loanPriceUSD != null && loanPriceUSD > 0 && oracleRatio > 0 ? oracleRatio * loanPriceUSD : 0;
|
|
30724
|
+
if (resolvedCollateralUSD > 0) {
|
|
30747
30725
|
entries.push({
|
|
30748
30726
|
asset: collateralAsset,
|
|
30749
30727
|
price: oracleRatio,
|
|
30750
|
-
// Raw
|
|
30751
|
-
priceUSD:
|
|
30728
|
+
// Raw: collateral price in loan asset terms
|
|
30729
|
+
priceUSD: resolvedCollateralUSD,
|
|
30752
30730
|
marketUid: createMarketUid(chainId, lenderKey, collateralAsset),
|
|
30753
|
-
targetLender: lenderKey
|
|
30731
|
+
targetLender: lenderKey,
|
|
30732
|
+
baseAsset: loanAsset
|
|
30754
30733
|
});
|
|
30755
30734
|
}
|
|
30756
|
-
if (
|
|
30757
|
-
const loanUSD = oracleRatio > 0 ? collateralPriceUSD / oracleRatio : loanPriceUSD ?? 0;
|
|
30758
|
-
if (loanUSD > 0) {
|
|
30759
|
-
entries.push({
|
|
30760
|
-
asset: loanAsset,
|
|
30761
|
-
price: oracleRatio > 0 ? 1 / oracleRatio : 0,
|
|
30762
|
-
// Raw: loan price in collateral terms
|
|
30763
|
-
priceUSD: loanUSD,
|
|
30764
|
-
marketUid: createMarketUid(chainId, lenderKey, loanAsset),
|
|
30765
|
-
targetLender: lenderKey
|
|
30766
|
-
});
|
|
30767
|
-
}
|
|
30768
|
-
} else if (loanPriceUSD != null && loanPriceUSD > 0) {
|
|
30735
|
+
if (resolvedLoanUSD > 0) {
|
|
30769
30736
|
entries.push({
|
|
30770
30737
|
asset: loanAsset,
|
|
30771
30738
|
price: oracleRatio > 0 ? 1 / oracleRatio : 0,
|
|
30772
|
-
|
|
30773
|
-
priceUSD: loanPriceUSD,
|
|
30739
|
+
priceUSD: resolvedLoanUSD,
|
|
30774
30740
|
marketUid: createMarketUid(chainId, lenderKey, loanAsset),
|
|
30775
|
-
targetLender: lenderKey
|
|
30741
|
+
targetLender: lenderKey,
|
|
30742
|
+
description: "Morpho loan asset",
|
|
30743
|
+
staticBase: true,
|
|
30744
|
+
baseAsset: loanAsset
|
|
30776
30745
|
});
|
|
30777
30746
|
}
|
|
30778
30747
|
}
|
|
30779
30748
|
if (entries.length === 0) {
|
|
30780
|
-
console.warn(
|
|
30749
|
+
console.warn(
|
|
30750
|
+
`[${source}] chain ${chainId}: ${allMarkets.length} markets fetched but 0 price entries produced`
|
|
30751
|
+
);
|
|
30781
30752
|
return null;
|
|
30782
30753
|
}
|
|
30783
30754
|
return entries;
|
|
@@ -30887,27 +30858,34 @@ var USD_PRICED_OVERRIDES = {
|
|
|
30887
30858
|
// BASE - prices already in USD
|
|
30888
30859
|
};
|
|
30889
30860
|
function getCompoundV3Calls(chainId) {
|
|
30890
|
-
const
|
|
30861
|
+
const oraclesData = compoundV3OraclesData() ?? {};
|
|
30891
30862
|
const baseData = compoundV3BaseData() ?? {};
|
|
30892
30863
|
const results = [];
|
|
30893
|
-
for (const [lender, chainOracles] of Object.entries(
|
|
30864
|
+
for (const [lender, chainOracles] of Object.entries(oraclesData)) {
|
|
30894
30865
|
const assetOracles = chainOracles[chainId];
|
|
30895
30866
|
if (!assetOracles) continue;
|
|
30896
30867
|
const skipBaseScaling = USD_PRICED_OVERRIDES[lender]?.has(chainId);
|
|
30897
30868
|
const baseAsset = skipBaseScaling ? void 0 : baseData[lender]?.[chainId]?.baseAsset?.toLowerCase();
|
|
30869
|
+
const entries = Object.entries(assetOracles);
|
|
30870
|
+
const hasConstantFeed = entries.some(
|
|
30871
|
+
([, e]) => e.description?.toLowerCase().includes("constant price")
|
|
30872
|
+
);
|
|
30898
30873
|
const calls = [];
|
|
30899
30874
|
const meta = [];
|
|
30900
|
-
for (const [asset,
|
|
30875
|
+
for (const [asset, entry] of entries) {
|
|
30901
30876
|
calls.push({
|
|
30902
|
-
address:
|
|
30877
|
+
address: entry.oracle,
|
|
30903
30878
|
name: "latestRoundData",
|
|
30904
30879
|
params: []
|
|
30905
30880
|
});
|
|
30881
|
+
const isBaseAsset = hasConstantFeed && baseAsset && asset.toLowerCase() === baseAsset;
|
|
30906
30882
|
meta.push({
|
|
30907
30883
|
asset,
|
|
30908
|
-
oracle:
|
|
30884
|
+
oracle: entry.oracle,
|
|
30909
30885
|
baseAsset,
|
|
30910
|
-
lender
|
|
30886
|
+
lender,
|
|
30887
|
+
description: entry.description,
|
|
30888
|
+
staticBase: isBaseAsset || void 0
|
|
30911
30889
|
});
|
|
30912
30890
|
}
|
|
30913
30891
|
if (calls.length > 0) {
|
|
@@ -30948,7 +30926,10 @@ function parseCompoundV3Results(data, meta, context) {
|
|
|
30948
30926
|
price: rawPrice,
|
|
30949
30927
|
// Raw price (in base asset terms if applicable)
|
|
30950
30928
|
priceUSD,
|
|
30951
|
-
marketUid: createMarketUid(chainId, queryMeta.lender, queryMeta.asset)
|
|
30929
|
+
marketUid: createMarketUid(chainId, queryMeta.lender, queryMeta.asset),
|
|
30930
|
+
description: queryMeta.description,
|
|
30931
|
+
staticBase: queryMeta.staticBase || void 0,
|
|
30932
|
+
baseAsset: queryMeta.baseAsset
|
|
30952
30933
|
});
|
|
30953
30934
|
} catch {
|
|
30954
30935
|
}
|
|
@@ -31880,6 +31861,7 @@ var FlashAbi = [
|
|
|
31880
31861
|
}
|
|
31881
31862
|
];
|
|
31882
31863
|
var DEFAULT_BATCH_SIZE = 4096;
|
|
31864
|
+
var isValidResult = (v) => typeof v === "bigint";
|
|
31883
31865
|
var FLASHLOAN_ENABLED_MASK = BigInt(
|
|
31884
31866
|
"0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFFFFFFFFFF"
|
|
31885
31867
|
);
|
|
@@ -31892,108 +31874,57 @@ async function fetchFlashLiquidityForChain(chain, multicallRetry, list = {}) {
|
|
|
31892
31874
|
let aaveCalls = [];
|
|
31893
31875
|
const aaves = getAavesForChain();
|
|
31894
31876
|
const aaveProtocols = aaves[chain] ?? [];
|
|
31877
|
+
const allAaveUnderlyings = [];
|
|
31895
31878
|
aaveProtocols.forEach((aaveFork) => {
|
|
31896
31879
|
const underlyingsAndATokens = Object.entries(
|
|
31897
31880
|
getAaveStyleProtocolTokenMap(chain, aaveFork)
|
|
31898
31881
|
);
|
|
31899
31882
|
const pool = getAaveTypePoolAddress(chain, aaveFork);
|
|
31900
|
-
const tokenCalls = underlyingsAndATokens.
|
|
31901
|
-
|
|
31902
|
-
|
|
31903
|
-
|
|
31904
|
-
|
|
31883
|
+
const tokenCalls = underlyingsAndATokens.flatMap(
|
|
31884
|
+
([a, b]) => [
|
|
31885
|
+
{ name: "balanceOf" /* balanceOf */, address: a, params: [b.aToken] },
|
|
31886
|
+
{ name: "getConfiguration", address: pool, params: [a] }
|
|
31887
|
+
]
|
|
31888
|
+
);
|
|
31889
|
+
const underlyings = underlyingsAndATokens.map((a) => a[0]);
|
|
31890
|
+
aaveAssets[aaveFork] = underlyings;
|
|
31891
|
+
allAaveUnderlyings.push(...underlyings);
|
|
31905
31892
|
callLengths[aaveFork] = tokenCalls.length * 2 + 1;
|
|
31906
|
-
aaveCalls
|
|
31907
|
-
|
|
31908
|
-
|
|
31909
|
-
|
|
31910
|
-
];
|
|
31893
|
+
aaveCalls.push(...tokenCalls, {
|
|
31894
|
+
name: "FLASHLOAN_PREMIUM_TOTAL",
|
|
31895
|
+
address: pool
|
|
31896
|
+
});
|
|
31911
31897
|
});
|
|
31898
|
+
const lendingAssets = RELEVANT_LENDING_ASSETS()?.[chain] ?? [];
|
|
31899
|
+
const unifiedAssets = lodash.uniq([...allAaveUnderlyings, ...lendingAssets]);
|
|
31912
31900
|
const morphoBs = RELEVANT_MORPHOB_FORKS()?.[chain] ?? [];
|
|
31913
|
-
const
|
|
31914
|
-
|
|
31915
|
-
|
|
31916
|
-
|
|
31917
|
-
|
|
31918
|
-
|
|
31919
|
-
|
|
31920
|
-
...otherAssets.map(
|
|
31921
|
-
(address) => address === zeroAddress ? {
|
|
31901
|
+
const buildBalanceCalls = (forks) => {
|
|
31902
|
+
const result = [];
|
|
31903
|
+
for (const fork of forks) {
|
|
31904
|
+
callLengths[fork.pool] = unifiedAssets.length;
|
|
31905
|
+
for (const address of unifiedAssets) {
|
|
31906
|
+
result.push(
|
|
31907
|
+
address === zeroAddress ? {
|
|
31922
31908
|
name: "getEthBalance" /* getEthBalance */,
|
|
31923
31909
|
address: MULTICALL_ADDRESS[chain],
|
|
31924
|
-
|
|
31910
|
+
params: [fork.address]
|
|
31925
31911
|
} : {
|
|
31926
31912
|
name: "balanceOf" /* balanceOf */,
|
|
31927
31913
|
address,
|
|
31928
|
-
|
|
31914
|
+
params: [fork.address]
|
|
31929
31915
|
}
|
|
31930
|
-
)
|
|
31931
|
-
|
|
31932
|
-
}
|
|
31933
|
-
|
|
31916
|
+
);
|
|
31917
|
+
}
|
|
31918
|
+
}
|
|
31919
|
+
return result;
|
|
31920
|
+
};
|
|
31921
|
+
const morphoCalls = buildBalanceCalls(morphoBs);
|
|
31934
31922
|
const balancerV2s = RELEVANT_BALANCER_V2_FORKS[chain] ?? [];
|
|
31935
|
-
|
|
31936
|
-
if (balancerV2s && balancerV2s.length > 0) {
|
|
31937
|
-
balancerV2s.forEach((bFork) => {
|
|
31938
|
-
callLengths[bFork.pool] = otherAssets.length;
|
|
31939
|
-
balancerV2Calls = [
|
|
31940
|
-
...balancerV2Calls,
|
|
31941
|
-
...otherAssets.map(
|
|
31942
|
-
(address) => address === zeroAddress ? {
|
|
31943
|
-
name: "getEthBalance" /* getEthBalance */,
|
|
31944
|
-
address: MULTICALL_ADDRESS[chain],
|
|
31945
|
-
args: [bFork.address]
|
|
31946
|
-
} : {
|
|
31947
|
-
name: "balanceOf" /* balanceOf */,
|
|
31948
|
-
address,
|
|
31949
|
-
args: [bFork.address]
|
|
31950
|
-
}
|
|
31951
|
-
)
|
|
31952
|
-
];
|
|
31953
|
-
});
|
|
31954
|
-
}
|
|
31923
|
+
const balancerV2Calls = buildBalanceCalls(balancerV2s);
|
|
31955
31924
|
const balancerV3s = RELEVANT_BALANCER_V3_FORKS[chain] ?? [];
|
|
31956
|
-
|
|
31957
|
-
if (balancerV3s && balancerV3s.length > 0) {
|
|
31958
|
-
balancerV3s.forEach((bFork) => {
|
|
31959
|
-
callLengths[bFork.pool] = otherAssets.length;
|
|
31960
|
-
balancerV3Calls = [
|
|
31961
|
-
...balancerV3Calls,
|
|
31962
|
-
...otherAssets.map(
|
|
31963
|
-
(address) => address === zeroAddress ? {
|
|
31964
|
-
name: "getEthBalance" /* getEthBalance */,
|
|
31965
|
-
address: MULTICALL_ADDRESS[chain],
|
|
31966
|
-
args: [bFork.address]
|
|
31967
|
-
} : {
|
|
31968
|
-
name: "balanceOf" /* balanceOf */,
|
|
31969
|
-
address,
|
|
31970
|
-
args: [bFork.address]
|
|
31971
|
-
}
|
|
31972
|
-
)
|
|
31973
|
-
];
|
|
31974
|
-
});
|
|
31975
|
-
}
|
|
31925
|
+
const balancerV3Calls = buildBalanceCalls(balancerV3s);
|
|
31976
31926
|
const uniswapV4s = RELEVANT_UNISWAP_V4_FORKS[chain] ?? [];
|
|
31977
|
-
|
|
31978
|
-
if (uniswapV4s && uniswapV4s.length > 0) {
|
|
31979
|
-
uniswapV4s.forEach((u4Fork) => {
|
|
31980
|
-
callLengths[u4Fork.pool] = otherAssets.length;
|
|
31981
|
-
uniswapV4Calls = [
|
|
31982
|
-
...uniswapV4Calls,
|
|
31983
|
-
...otherAssets.map(
|
|
31984
|
-
(address) => address === zeroAddress ? {
|
|
31985
|
-
name: "getEthBalance" /* getEthBalance */,
|
|
31986
|
-
address: MULTICALL_ADDRESS[chain],
|
|
31987
|
-
args: [u4Fork.address]
|
|
31988
|
-
} : {
|
|
31989
|
-
name: "balanceOf" /* balanceOf */,
|
|
31990
|
-
address,
|
|
31991
|
-
args: [u4Fork.address]
|
|
31992
|
-
}
|
|
31993
|
-
)
|
|
31994
|
-
];
|
|
31995
|
-
});
|
|
31996
|
-
}
|
|
31927
|
+
const uniswapV4Calls = buildBalanceCalls(uniswapV4s);
|
|
31997
31928
|
const calls = [
|
|
31998
31929
|
...aaveCalls,
|
|
31999
31930
|
...balancerV2Calls,
|
|
@@ -32006,9 +31937,9 @@ async function fetchFlashLiquidityForChain(chain, multicallRetry, list = {}) {
|
|
|
32006
31937
|
calls,
|
|
32007
31938
|
abi: FlashAbi,
|
|
32008
31939
|
batchSize: DEFAULT_BATCH_SIZE,
|
|
32009
|
-
maxRetries:
|
|
31940
|
+
maxRetries: 5,
|
|
32010
31941
|
providerId: 0,
|
|
32011
|
-
allowFailure:
|
|
31942
|
+
allowFailure: true
|
|
32012
31943
|
});
|
|
32013
31944
|
let liquidity = {};
|
|
32014
31945
|
let currentOffset = 0;
|
|
@@ -32017,10 +31948,12 @@ async function fetchFlashLiquidityForChain(chain, multicallRetry, list = {}) {
|
|
|
32017
31948
|
const data = rawResults.slice(currentOffset, callLen + currentOffset);
|
|
32018
31949
|
const fee = data[callLen - 1];
|
|
32019
31950
|
currentOffset += callLen;
|
|
31951
|
+
if (typeof fee !== "bigint") return;
|
|
32020
31952
|
aaveAssets[aave].forEach((asset, i) => {
|
|
32021
|
-
const decimals = list[asset]?.decimals;
|
|
32022
31953
|
const rawAmount = data[2 * i];
|
|
32023
31954
|
const config = data[2 * i + 1];
|
|
31955
|
+
if (typeof rawAmount !== "bigint" || typeof config !== "bigint") return;
|
|
31956
|
+
const decimals = list[asset]?.decimals;
|
|
32024
31957
|
const enabled = !AAVE_V3_LENDERS.includes(aave) || getFlashLoanEnabled(config);
|
|
32025
31958
|
if (enabled && rawAmount > 0n && FLASH_LOAN_IDS[aave] !== void 0) {
|
|
32026
31959
|
if (!liquidity[asset]) liquidity[asset] = [];
|
|
@@ -32038,13 +31971,13 @@ async function fetchFlashLiquidityForChain(chain, multicallRetry, list = {}) {
|
|
|
32038
31971
|
});
|
|
32039
31972
|
});
|
|
32040
31973
|
balancerV2s.forEach((balancer) => {
|
|
32041
|
-
const callLen =
|
|
31974
|
+
const callLen = unifiedAssets.length;
|
|
32042
31975
|
const data = rawResults.slice(currentOffset, callLen + currentOffset);
|
|
32043
31976
|
currentOffset += callLen;
|
|
32044
|
-
|
|
31977
|
+
unifiedAssets.forEach((asset, i) => {
|
|
32045
31978
|
const decimals = list[asset]?.decimals;
|
|
32046
31979
|
const rawAmount = data[i];
|
|
32047
|
-
if (rawAmount > 0n) {
|
|
31980
|
+
if (isValidResult(rawAmount) && rawAmount > 0n) {
|
|
32048
31981
|
if (!liquidity[asset]) liquidity[asset] = [];
|
|
32049
31982
|
liquidity[asset].push({
|
|
32050
31983
|
id: FLASH_LOAN_IDS[balancer.pool],
|
|
@@ -32060,12 +31993,12 @@ async function fetchFlashLiquidityForChain(chain, multicallRetry, list = {}) {
|
|
|
32060
31993
|
});
|
|
32061
31994
|
});
|
|
32062
31995
|
morphoBs.forEach((morpho) => {
|
|
32063
|
-
const callLen =
|
|
31996
|
+
const callLen = unifiedAssets.length;
|
|
32064
31997
|
const data = rawResults.slice(currentOffset, callLen + currentOffset);
|
|
32065
31998
|
currentOffset += callLen;
|
|
32066
|
-
|
|
31999
|
+
unifiedAssets.forEach((asset, i) => {
|
|
32067
32000
|
const rawAmount = data[i];
|
|
32068
|
-
if (rawAmount > 0n) {
|
|
32001
|
+
if (isValidResult(rawAmount) && rawAmount > 0n) {
|
|
32069
32002
|
if (!liquidity[asset]) liquidity[asset] = [];
|
|
32070
32003
|
const decimals = list[asset]?.decimals;
|
|
32071
32004
|
liquidity[asset].push({
|
|
@@ -32082,13 +32015,13 @@ async function fetchFlashLiquidityForChain(chain, multicallRetry, list = {}) {
|
|
|
32082
32015
|
});
|
|
32083
32016
|
});
|
|
32084
32017
|
balancerV3s.forEach((balancerV3) => {
|
|
32085
|
-
const callLen =
|
|
32018
|
+
const callLen = unifiedAssets.length;
|
|
32086
32019
|
const data = rawResults.slice(currentOffset, callLen + currentOffset);
|
|
32087
32020
|
currentOffset += callLen;
|
|
32088
|
-
|
|
32021
|
+
unifiedAssets.forEach((asset, i) => {
|
|
32089
32022
|
const decimals = list[asset]?.decimals;
|
|
32090
32023
|
const rawAmount = data[i];
|
|
32091
|
-
if (rawAmount > 0n) {
|
|
32024
|
+
if (isValidResult(rawAmount) && rawAmount > 0n) {
|
|
32092
32025
|
if (!liquidity[asset]) liquidity[asset] = [];
|
|
32093
32026
|
liquidity[asset].push({
|
|
32094
32027
|
id: FLASH_LOAN_IDS[balancerV3.pool],
|
|
@@ -32104,13 +32037,13 @@ async function fetchFlashLiquidityForChain(chain, multicallRetry, list = {}) {
|
|
|
32104
32037
|
});
|
|
32105
32038
|
});
|
|
32106
32039
|
uniswapV4s.forEach((uniV4) => {
|
|
32107
|
-
const callLen =
|
|
32040
|
+
const callLen = unifiedAssets.length;
|
|
32108
32041
|
const data = rawResults.slice(currentOffset, callLen + currentOffset);
|
|
32109
32042
|
currentOffset += callLen;
|
|
32110
|
-
|
|
32043
|
+
unifiedAssets.forEach((asset, i) => {
|
|
32111
32044
|
const decimals = list[asset]?.decimals;
|
|
32112
32045
|
const rawAmount = data[i];
|
|
32113
|
-
if (rawAmount > 0n) {
|
|
32046
|
+
if (isValidResult(rawAmount) && rawAmount > 0n) {
|
|
32114
32047
|
if (!liquidity[asset]) liquidity[asset] = [];
|
|
32115
32048
|
liquidity[asset].push({
|
|
32116
32049
|
id: FLASH_LOAN_IDS[uniV4.pool],
|