@1delta/margin-fetcher 0.0.211 → 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 +128 -170
- 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/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({
|
|
@@ -30510,7 +30516,8 @@ function parseAaveResults2(data, meta, context) {
|
|
|
30510
30516
|
price: rawPriceNum,
|
|
30511
30517
|
// Raw price (in base asset terms)
|
|
30512
30518
|
priceUSD,
|
|
30513
|
-
marketUid: createMarketUid(chainId, meta.fork, asset)
|
|
30519
|
+
marketUid: createMarketUid(chainId, meta.fork, asset),
|
|
30520
|
+
staticBase: meta.baseAssetOverride
|
|
30514
30521
|
});
|
|
30515
30522
|
} catch {
|
|
30516
30523
|
continue;
|
|
@@ -30560,7 +30567,11 @@ function getMorphoMarketsForChain(chainId, marketOverrides) {
|
|
|
30560
30567
|
loanAssetDecimals: override.loanAssetDecimals,
|
|
30561
30568
|
collateralAssetDecimals: override.collateralAssetDecimals,
|
|
30562
30569
|
fork: Lender.MORPHO_BLUE,
|
|
30563
|
-
marketId: override.marketId ?? generateMarketId(
|
|
30570
|
+
marketId: override.marketId ?? generateMarketId(
|
|
30571
|
+
override.oracle,
|
|
30572
|
+
override.loanAsset,
|
|
30573
|
+
override.collateralAsset
|
|
30574
|
+
)
|
|
30564
30575
|
}));
|
|
30565
30576
|
}
|
|
30566
30577
|
function getMorphoCalls2(chainId, context) {
|
|
@@ -30604,11 +30615,19 @@ function parseMorphoResults2(data, meta, context) {
|
|
|
30604
30615
|
);
|
|
30605
30616
|
if (isNaN(priceDebtToCollateral) || priceDebtToCollateral === 0) continue;
|
|
30606
30617
|
const loanOracleKey = tokenList?.[loanAsset]?.assetGroup ?? `${chainId}-${loanAsset}`;
|
|
30607
|
-
const collateralOracleKey = tokenList?.[collateralAsset]?.assetGroup ?? `${chainId}-${collateralAsset}`;
|
|
30608
30618
|
const loanAssetUSD = usdPrices[loanOracleKey] ?? usdPrices[loanAsset];
|
|
30609
|
-
const collateralAssetUSD = usdPrices[collateralOracleKey] ?? usdPrices[collateralAsset];
|
|
30610
30619
|
const lenderKey = generateMorphoLenderKey(market.marketId);
|
|
30611
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
|
+
});
|
|
30612
30631
|
const collateralPriceUSD = priceDebtToCollateral * loanAssetUSD;
|
|
30613
30632
|
entries.push({
|
|
30614
30633
|
asset: collateralAsset,
|
|
@@ -30616,18 +30635,8 @@ function parseMorphoResults2(data, meta, context) {
|
|
|
30616
30635
|
// Raw: collateral price in loan asset terms
|
|
30617
30636
|
priceUSD: collateralPriceUSD,
|
|
30618
30637
|
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
|
|
30638
|
+
targetLender: lenderKey,
|
|
30639
|
+
staticBase: loanAsset
|
|
30631
30640
|
});
|
|
30632
30641
|
}
|
|
30633
30642
|
}
|
|
@@ -30640,8 +30649,7 @@ var MORPHO_GRAPHQL_URL = "https://blue-api.morpho.org/graphql";
|
|
|
30640
30649
|
var PRICE_QUERY = (first, skip, chainId) => `
|
|
30641
30650
|
query GetMarketPrices {
|
|
30642
30651
|
markets(first: ${first}, skip: ${skip}, where: {
|
|
30643
|
-
chainId_in: [${chainId}]
|
|
30644
|
-
whitelisted: true
|
|
30652
|
+
chainId_in: [${chainId}]${chainId != Chain.ETHEREUM_MAINNET ? `,whitelisted: true` : ""}
|
|
30645
30653
|
},
|
|
30646
30654
|
orderBy: SupplyAssetsUsd,
|
|
30647
30655
|
orderDirection: Desc
|
|
@@ -30669,7 +30677,7 @@ query GetMarketPrices {
|
|
|
30669
30677
|
async function fetchMorphoGraphQLPrices(chainId) {
|
|
30670
30678
|
if (!morphoApiAvailable(chainId)) return null;
|
|
30671
30679
|
try {
|
|
30672
|
-
const pages = chainId ===
|
|
30680
|
+
const pages = chainId === Chain.ETHEREUM_MAINNET ? [
|
|
30673
30681
|
fetch(MORPHO_GRAPHQL_URL, {
|
|
30674
30682
|
method: "POST",
|
|
30675
30683
|
headers: { "Content-Type": "application/json" },
|
|
@@ -30698,14 +30706,19 @@ async function fetchMorphoGraphQLPrices(chainId) {
|
|
|
30698
30706
|
for (const result of results) {
|
|
30699
30707
|
const items = result?.data?.markets?.items;
|
|
30700
30708
|
if (!Array.isArray(items)) {
|
|
30701
|
-
console.warn(
|
|
30709
|
+
console.warn(
|
|
30710
|
+
`[morpho-gql] chain ${chainId}: unexpected API shape, items is not an array`
|
|
30711
|
+
);
|
|
30702
30712
|
return null;
|
|
30703
30713
|
}
|
|
30704
30714
|
allMarkets.push(...items);
|
|
30705
30715
|
}
|
|
30706
30716
|
return processMarketsToEntries(chainId, allMarkets, "morpho-gql");
|
|
30707
30717
|
} catch (err) {
|
|
30708
|
-
console.warn(
|
|
30718
|
+
console.warn(
|
|
30719
|
+
`[morpho-gql] chain ${chainId}: API error, falling back to on-chain`,
|
|
30720
|
+
err
|
|
30721
|
+
);
|
|
30709
30722
|
return null;
|
|
30710
30723
|
}
|
|
30711
30724
|
}
|
|
@@ -30716,8 +30729,7 @@ function processMarketsToEntries(chainId, allMarkets, source) {
|
|
|
30716
30729
|
}
|
|
30717
30730
|
const entries = [];
|
|
30718
30731
|
for (const market of allMarkets) {
|
|
30719
|
-
if (!market.collateralAsset?.address || !market.loanAsset?.address)
|
|
30720
|
-
continue;
|
|
30732
|
+
if (!market.collateralAsset?.address || !market.loanAsset?.address) continue;
|
|
30721
30733
|
const oracle = market.oracleAddress;
|
|
30722
30734
|
const loanAsset = market.loanAsset.address.toLowerCase();
|
|
30723
30735
|
const collateralAsset = market.collateralAsset.address.toLowerCase();
|
|
@@ -30731,53 +30743,35 @@ function processMarketsToEntries(chainId, allMarkets, source) {
|
|
|
30731
30743
|
market.loanAsset.decimals,
|
|
30732
30744
|
market.collateralAsset.decimals
|
|
30733
30745
|
) : 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) {
|
|
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) {
|
|
30747
30749
|
entries.push({
|
|
30748
30750
|
asset: collateralAsset,
|
|
30749
30751
|
price: oracleRatio,
|
|
30750
|
-
// Raw
|
|
30751
|
-
priceUSD:
|
|
30752
|
+
// Raw: collateral price in loan asset terms
|
|
30753
|
+
priceUSD: resolvedCollateralUSD,
|
|
30752
30754
|
marketUid: createMarketUid(chainId, lenderKey, collateralAsset),
|
|
30753
|
-
targetLender: lenderKey
|
|
30755
|
+
targetLender: lenderKey,
|
|
30756
|
+
staticBase: loanAsset
|
|
30754
30757
|
});
|
|
30755
30758
|
}
|
|
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) {
|
|
30759
|
+
if (resolvedLoanUSD > 0) {
|
|
30769
30760
|
entries.push({
|
|
30770
30761
|
asset: loanAsset,
|
|
30771
30762
|
price: oracleRatio > 0 ? 1 / oracleRatio : 0,
|
|
30772
|
-
|
|
30773
|
-
priceUSD: loanPriceUSD,
|
|
30763
|
+
priceUSD: resolvedLoanUSD,
|
|
30774
30764
|
marketUid: createMarketUid(chainId, lenderKey, loanAsset),
|
|
30775
|
-
targetLender: lenderKey
|
|
30765
|
+
targetLender: lenderKey,
|
|
30766
|
+
description: "Morpho loan asset",
|
|
30767
|
+
staticBase: loanAsset
|
|
30776
30768
|
});
|
|
30777
30769
|
}
|
|
30778
30770
|
}
|
|
30779
30771
|
if (entries.length === 0) {
|
|
30780
|
-
console.warn(
|
|
30772
|
+
console.warn(
|
|
30773
|
+
`[${source}] chain ${chainId}: ${allMarkets.length} markets fetched but 0 price entries produced`
|
|
30774
|
+
);
|
|
30781
30775
|
return null;
|
|
30782
30776
|
}
|
|
30783
30777
|
return entries;
|
|
@@ -30887,27 +30881,37 @@ var USD_PRICED_OVERRIDES = {
|
|
|
30887
30881
|
// BASE - prices already in USD
|
|
30888
30882
|
};
|
|
30889
30883
|
function getCompoundV3Calls(chainId) {
|
|
30890
|
-
const
|
|
30884
|
+
const oraclesData = compoundV3OraclesData() ?? {};
|
|
30891
30885
|
const baseData = compoundV3BaseData() ?? {};
|
|
30892
30886
|
const results = [];
|
|
30893
|
-
for (const [lender, chainOracles] of Object.entries(
|
|
30887
|
+
for (const [lender, chainOracles] of Object.entries(oraclesData)) {
|
|
30894
30888
|
const assetOracles = chainOracles[chainId];
|
|
30895
30889
|
if (!assetOracles) continue;
|
|
30896
30890
|
const skipBaseScaling = USD_PRICED_OVERRIDES[lender]?.has(chainId);
|
|
30897
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
|
+
}
|
|
30898
30900
|
const calls = [];
|
|
30899
30901
|
const meta = [];
|
|
30900
|
-
for (const [asset,
|
|
30902
|
+
for (const [asset, entry] of entries) {
|
|
30901
30903
|
calls.push({
|
|
30902
|
-
address:
|
|
30904
|
+
address: entry.oracle,
|
|
30903
30905
|
name: "latestRoundData",
|
|
30904
30906
|
params: []
|
|
30905
30907
|
});
|
|
30906
30908
|
meta.push({
|
|
30907
30909
|
asset,
|
|
30908
|
-
oracle:
|
|
30910
|
+
oracle: entry.oracle,
|
|
30909
30911
|
baseAsset,
|
|
30910
|
-
lender
|
|
30912
|
+
lender,
|
|
30913
|
+
description: entry.description,
|
|
30914
|
+
staticBase
|
|
30911
30915
|
});
|
|
30912
30916
|
}
|
|
30913
30917
|
if (calls.length > 0) {
|
|
@@ -30948,7 +30952,9 @@ function parseCompoundV3Results(data, meta, context) {
|
|
|
30948
30952
|
price: rawPrice,
|
|
30949
30953
|
// Raw price (in base asset terms if applicable)
|
|
30950
30954
|
priceUSD,
|
|
30951
|
-
marketUid: createMarketUid(chainId, queryMeta.lender, queryMeta.asset)
|
|
30955
|
+
marketUid: createMarketUid(chainId, queryMeta.lender, queryMeta.asset),
|
|
30956
|
+
description: queryMeta.description,
|
|
30957
|
+
staticBase: queryMeta.staticBase
|
|
30952
30958
|
});
|
|
30953
30959
|
} catch {
|
|
30954
30960
|
}
|
|
@@ -31880,6 +31886,7 @@ var FlashAbi = [
|
|
|
31880
31886
|
}
|
|
31881
31887
|
];
|
|
31882
31888
|
var DEFAULT_BATCH_SIZE = 4096;
|
|
31889
|
+
var isValidResult = (v) => typeof v === "bigint";
|
|
31883
31890
|
var FLASHLOAN_ENABLED_MASK = BigInt(
|
|
31884
31891
|
"0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFFFFFFFFFF"
|
|
31885
31892
|
);
|
|
@@ -31892,108 +31899,57 @@ async function fetchFlashLiquidityForChain(chain, multicallRetry, list = {}) {
|
|
|
31892
31899
|
let aaveCalls = [];
|
|
31893
31900
|
const aaves = getAavesForChain();
|
|
31894
31901
|
const aaveProtocols = aaves[chain] ?? [];
|
|
31902
|
+
const allAaveUnderlyings = [];
|
|
31895
31903
|
aaveProtocols.forEach((aaveFork) => {
|
|
31896
31904
|
const underlyingsAndATokens = Object.entries(
|
|
31897
31905
|
getAaveStyleProtocolTokenMap(chain, aaveFork)
|
|
31898
31906
|
);
|
|
31899
31907
|
const pool = getAaveTypePoolAddress(chain, aaveFork);
|
|
31900
|
-
const tokenCalls = underlyingsAndATokens.
|
|
31901
|
-
|
|
31902
|
-
|
|
31903
|
-
|
|
31904
|
-
|
|
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);
|
|
31905
31917
|
callLengths[aaveFork] = tokenCalls.length * 2 + 1;
|
|
31906
|
-
aaveCalls
|
|
31907
|
-
|
|
31908
|
-
|
|
31909
|
-
|
|
31910
|
-
];
|
|
31918
|
+
aaveCalls.push(...tokenCalls, {
|
|
31919
|
+
name: "FLASHLOAN_PREMIUM_TOTAL",
|
|
31920
|
+
address: pool
|
|
31921
|
+
});
|
|
31911
31922
|
});
|
|
31923
|
+
const lendingAssets = RELEVANT_LENDING_ASSETS()?.[chain] ?? [];
|
|
31924
|
+
const unifiedAssets = lodash.uniq([...allAaveUnderlyings, ...lendingAssets]);
|
|
31912
31925
|
const morphoBs = RELEVANT_MORPHOB_FORKS()?.[chain] ?? [];
|
|
31913
|
-
const
|
|
31914
|
-
|
|
31915
|
-
|
|
31916
|
-
|
|
31917
|
-
|
|
31918
|
-
|
|
31919
|
-
|
|
31920
|
-
...otherAssets.map(
|
|
31921
|
-
(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 ? {
|
|
31922
31933
|
name: "getEthBalance" /* getEthBalance */,
|
|
31923
31934
|
address: MULTICALL_ADDRESS[chain],
|
|
31924
|
-
|
|
31935
|
+
params: [fork.address]
|
|
31925
31936
|
} : {
|
|
31926
31937
|
name: "balanceOf" /* balanceOf */,
|
|
31927
31938
|
address,
|
|
31928
|
-
|
|
31939
|
+
params: [fork.address]
|
|
31929
31940
|
}
|
|
31930
|
-
)
|
|
31931
|
-
|
|
31932
|
-
}
|
|
31933
|
-
|
|
31941
|
+
);
|
|
31942
|
+
}
|
|
31943
|
+
}
|
|
31944
|
+
return result;
|
|
31945
|
+
};
|
|
31946
|
+
const morphoCalls = buildBalanceCalls(morphoBs);
|
|
31934
31947
|
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
|
-
}
|
|
31948
|
+
const balancerV2Calls = buildBalanceCalls(balancerV2s);
|
|
31955
31949
|
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
|
-
}
|
|
31950
|
+
const balancerV3Calls = buildBalanceCalls(balancerV3s);
|
|
31976
31951
|
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
|
-
}
|
|
31952
|
+
const uniswapV4Calls = buildBalanceCalls(uniswapV4s);
|
|
31997
31953
|
const calls = [
|
|
31998
31954
|
...aaveCalls,
|
|
31999
31955
|
...balancerV2Calls,
|
|
@@ -32006,9 +31962,9 @@ async function fetchFlashLiquidityForChain(chain, multicallRetry, list = {}) {
|
|
|
32006
31962
|
calls,
|
|
32007
31963
|
abi: FlashAbi,
|
|
32008
31964
|
batchSize: DEFAULT_BATCH_SIZE,
|
|
32009
|
-
maxRetries:
|
|
31965
|
+
maxRetries: 5,
|
|
32010
31966
|
providerId: 0,
|
|
32011
|
-
allowFailure:
|
|
31967
|
+
allowFailure: true
|
|
32012
31968
|
});
|
|
32013
31969
|
let liquidity = {};
|
|
32014
31970
|
let currentOffset = 0;
|
|
@@ -32017,10 +31973,12 @@ async function fetchFlashLiquidityForChain(chain, multicallRetry, list = {}) {
|
|
|
32017
31973
|
const data = rawResults.slice(currentOffset, callLen + currentOffset);
|
|
32018
31974
|
const fee = data[callLen - 1];
|
|
32019
31975
|
currentOffset += callLen;
|
|
31976
|
+
if (typeof fee !== "bigint") return;
|
|
32020
31977
|
aaveAssets[aave].forEach((asset, i) => {
|
|
32021
|
-
const decimals = list[asset]?.decimals;
|
|
32022
31978
|
const rawAmount = data[2 * i];
|
|
32023
31979
|
const config = data[2 * i + 1];
|
|
31980
|
+
if (typeof rawAmount !== "bigint" || typeof config !== "bigint") return;
|
|
31981
|
+
const decimals = list[asset]?.decimals;
|
|
32024
31982
|
const enabled = !AAVE_V3_LENDERS.includes(aave) || getFlashLoanEnabled(config);
|
|
32025
31983
|
if (enabled && rawAmount > 0n && FLASH_LOAN_IDS[aave] !== void 0) {
|
|
32026
31984
|
if (!liquidity[asset]) liquidity[asset] = [];
|
|
@@ -32038,13 +31996,13 @@ async function fetchFlashLiquidityForChain(chain, multicallRetry, list = {}) {
|
|
|
32038
31996
|
});
|
|
32039
31997
|
});
|
|
32040
31998
|
balancerV2s.forEach((balancer) => {
|
|
32041
|
-
const callLen =
|
|
31999
|
+
const callLen = unifiedAssets.length;
|
|
32042
32000
|
const data = rawResults.slice(currentOffset, callLen + currentOffset);
|
|
32043
32001
|
currentOffset += callLen;
|
|
32044
|
-
|
|
32002
|
+
unifiedAssets.forEach((asset, i) => {
|
|
32045
32003
|
const decimals = list[asset]?.decimals;
|
|
32046
32004
|
const rawAmount = data[i];
|
|
32047
|
-
if (rawAmount > 0n) {
|
|
32005
|
+
if (isValidResult(rawAmount) && rawAmount > 0n) {
|
|
32048
32006
|
if (!liquidity[asset]) liquidity[asset] = [];
|
|
32049
32007
|
liquidity[asset].push({
|
|
32050
32008
|
id: FLASH_LOAN_IDS[balancer.pool],
|
|
@@ -32060,12 +32018,12 @@ async function fetchFlashLiquidityForChain(chain, multicallRetry, list = {}) {
|
|
|
32060
32018
|
});
|
|
32061
32019
|
});
|
|
32062
32020
|
morphoBs.forEach((morpho) => {
|
|
32063
|
-
const callLen =
|
|
32021
|
+
const callLen = unifiedAssets.length;
|
|
32064
32022
|
const data = rawResults.slice(currentOffset, callLen + currentOffset);
|
|
32065
32023
|
currentOffset += callLen;
|
|
32066
|
-
|
|
32024
|
+
unifiedAssets.forEach((asset, i) => {
|
|
32067
32025
|
const rawAmount = data[i];
|
|
32068
|
-
if (rawAmount > 0n) {
|
|
32026
|
+
if (isValidResult(rawAmount) && rawAmount > 0n) {
|
|
32069
32027
|
if (!liquidity[asset]) liquidity[asset] = [];
|
|
32070
32028
|
const decimals = list[asset]?.decimals;
|
|
32071
32029
|
liquidity[asset].push({
|
|
@@ -32082,13 +32040,13 @@ async function fetchFlashLiquidityForChain(chain, multicallRetry, list = {}) {
|
|
|
32082
32040
|
});
|
|
32083
32041
|
});
|
|
32084
32042
|
balancerV3s.forEach((balancerV3) => {
|
|
32085
|
-
const callLen =
|
|
32043
|
+
const callLen = unifiedAssets.length;
|
|
32086
32044
|
const data = rawResults.slice(currentOffset, callLen + currentOffset);
|
|
32087
32045
|
currentOffset += callLen;
|
|
32088
|
-
|
|
32046
|
+
unifiedAssets.forEach((asset, i) => {
|
|
32089
32047
|
const decimals = list[asset]?.decimals;
|
|
32090
32048
|
const rawAmount = data[i];
|
|
32091
|
-
if (rawAmount > 0n) {
|
|
32049
|
+
if (isValidResult(rawAmount) && rawAmount > 0n) {
|
|
32092
32050
|
if (!liquidity[asset]) liquidity[asset] = [];
|
|
32093
32051
|
liquidity[asset].push({
|
|
32094
32052
|
id: FLASH_LOAN_IDS[balancerV3.pool],
|
|
@@ -32104,13 +32062,13 @@ async function fetchFlashLiquidityForChain(chain, multicallRetry, list = {}) {
|
|
|
32104
32062
|
});
|
|
32105
32063
|
});
|
|
32106
32064
|
uniswapV4s.forEach((uniV4) => {
|
|
32107
|
-
const callLen =
|
|
32065
|
+
const callLen = unifiedAssets.length;
|
|
32108
32066
|
const data = rawResults.slice(currentOffset, callLen + currentOffset);
|
|
32109
32067
|
currentOffset += callLen;
|
|
32110
|
-
|
|
32068
|
+
unifiedAssets.forEach((asset, i) => {
|
|
32111
32069
|
const decimals = list[asset]?.decimals;
|
|
32112
32070
|
const rawAmount = data[i];
|
|
32113
|
-
if (rawAmount > 0n) {
|
|
32071
|
+
if (isValidResult(rawAmount) && rawAmount > 0n) {
|
|
32114
32072
|
if (!liquidity[asset]) liquidity[asset] = [];
|
|
32115
32073
|
liquidity[asset].push({
|
|
32116
32074
|
id: FLASH_LOAN_IDS[uniV4.pool],
|