@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.
@@ -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;AAsB/D,wBAAsB,2BAA2B,CAC/C,KAAK,EAAE,MAAM,EACb,cAAc,EAAE,sBAAsB,EACtC,IAAI,GAAE,SAAc,oCA8SrB"}
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
- compoundV3Oracles: {},
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 compoundV3Oracles = () => getGlobalData2()?.compoundV3Oracles;
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 }, (_2, i) => i);
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, _2]) => {
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
- (_2, i) => i
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] ? [{ asset: COMP_ADDRESSES[chainId], totalRewards: compRewards, claimableRewards: compRewards }] : [],
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: _2, ...summaryFields } = lenderSummary;
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
- var AAVE_LENDER_OVERRIDES = {
30394
- [Lender.KLAYBANK]: {
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 lenderOverride = AAVE_LENDER_OVERRIDES[lender]?.[chainId];
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(override.oracle, override.loanAsset, override.collateralAsset)
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 === "1" ? [
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(`[morpho-gql] chain ${chainId}: unexpected API shape, items is not an array`);
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(`[morpho-gql] chain ${chainId}: API error, falling back to on-chain`, err);
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
- if (loanPriceUSD != null && loanPriceUSD > 0) {
30735
- const collateralUSD = oracleRatio > 0 ? oracleRatio * loanPriceUSD : collateralPriceUSD ?? 0;
30736
- if (collateralUSD > 0) {
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 oracle ratio
30751
- priceUSD: collateralPriceUSD,
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 (collateralPriceUSD != null && collateralPriceUSD > 0) {
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
- // Raw oracle ratio
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(`[${source}] chain ${chainId}: ${allMarkets.length} markets fetched but 0 price entries produced`);
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 oracles = compoundV3Oracles() ?? {};
30861
+ const oraclesData = compoundV3OraclesData() ?? {};
30891
30862
  const baseData = compoundV3BaseData() ?? {};
30892
30863
  const results = [];
30893
- for (const [lender, chainOracles] of Object.entries(oracles)) {
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, oracleAddress] of Object.entries(assetOracles)) {
30875
+ for (const [asset, entry] of entries) {
30901
30876
  calls.push({
30902
- address: oracleAddress,
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: oracleAddress,
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.map(([a, b]) => [
31901
- { name: "balanceOf" /* balanceOf */, address: a, args: [b.aToken] },
31902
- { name: "getConfiguration", address: pool, args: [a] }
31903
- ]).reduce((acc, b) => [...acc, ...b], []);
31904
- aaveAssets[aaveFork] = underlyingsAndATokens.map((a) => a[0]);
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
- ...aaveCalls,
31908
- ...tokenCalls,
31909
- { name: "FLASHLOAN_PREMIUM_TOTAL", address: pool }
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 otherAssets = RELEVANT_LENDING_ASSETS()?.[chain] ?? [];
31914
- let morphoCalls = [];
31915
- if (morphoBs && morphoBs.length > 0) {
31916
- morphoBs.forEach((bFork) => {
31917
- callLengths[bFork.pool] = otherAssets.length;
31918
- morphoCalls = [
31919
- ...morphoCalls,
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
- args: [bFork.address]
31910
+ params: [fork.address]
31925
31911
  } : {
31926
31912
  name: "balanceOf" /* balanceOf */,
31927
31913
  address,
31928
- args: [bFork.address]
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
- let balancerV2Calls = [];
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
- let balancerV3Calls = [];
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
- let uniswapV4Calls = [];
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: 3,
31940
+ maxRetries: 5,
32010
31941
  providerId: 0,
32011
- allowFailure: false
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 = otherAssets.length;
31974
+ const callLen = unifiedAssets.length;
32042
31975
  const data = rawResults.slice(currentOffset, callLen + currentOffset);
32043
31976
  currentOffset += callLen;
32044
- otherAssets.forEach((asset, i) => {
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 = otherAssets.length;
31996
+ const callLen = unifiedAssets.length;
32064
31997
  const data = rawResults.slice(currentOffset, callLen + currentOffset);
32065
31998
  currentOffset += callLen;
32066
- otherAssets.forEach((asset, i) => {
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 = otherAssets.length;
32018
+ const callLen = unifiedAssets.length;
32086
32019
  const data = rawResults.slice(currentOffset, callLen + currentOffset);
32087
32020
  currentOffset += callLen;
32088
- otherAssets.forEach((asset, i) => {
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 = otherAssets.length;
32040
+ const callLen = unifiedAssets.length;
32108
32041
  const data = rawResults.slice(currentOffset, callLen + currentOffset);
32109
32042
  currentOffset += callLen;
32110
- otherAssets.forEach((asset, i) => {
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],