@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.
@@ -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,7 +6264,7 @@ 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: {},
@@ -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 compoundV3Oracles = () => getGlobalData2()?.compoundV3Oracles;
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 }, (_2, i) => i);
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, _2]) => {
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
- (_2, i) => i
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] ? [{ asset: COMP_ADDRESSES[chainId], totalRewards: compRewards, claimableRewards: compRewards }] : [],
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: _2, ...summaryFields } = lenderSummary;
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(override.oracle, override.loanAsset, override.collateralAsset)
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 === "1" ? [
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(`[morpho-gql] chain ${chainId}: unexpected API shape, items is not an array`);
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(`[morpho-gql] chain ${chainId}: API error, falling back to on-chain`, err);
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
- 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) {
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 oracle ratio
30751
- priceUSD: collateralPriceUSD,
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 (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) {
30759
+ if (resolvedLoanUSD > 0) {
30769
30760
  entries.push({
30770
30761
  asset: loanAsset,
30771
30762
  price: oracleRatio > 0 ? 1 / oracleRatio : 0,
30772
- // Raw oracle ratio
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(`[${source}] chain ${chainId}: ${allMarkets.length} markets fetched but 0 price entries produced`);
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 oracles = compoundV3Oracles() ?? {};
30884
+ const oraclesData = compoundV3OraclesData() ?? {};
30891
30885
  const baseData = compoundV3BaseData() ?? {};
30892
30886
  const results = [];
30893
- for (const [lender, chainOracles] of Object.entries(oracles)) {
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, oracleAddress] of Object.entries(assetOracles)) {
30902
+ for (const [asset, entry] of entries) {
30901
30903
  calls.push({
30902
- address: oracleAddress,
30904
+ address: entry.oracle,
30903
30905
  name: "latestRoundData",
30904
30906
  params: []
30905
30907
  });
30906
30908
  meta.push({
30907
30909
  asset,
30908
- oracle: oracleAddress,
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.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]);
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
- ...aaveCalls,
31908
- ...tokenCalls,
31909
- { name: "FLASHLOAN_PREMIUM_TOTAL", address: pool }
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 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 ? {
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
- args: [bFork.address]
31935
+ params: [fork.address]
31925
31936
  } : {
31926
31937
  name: "balanceOf" /* balanceOf */,
31927
31938
  address,
31928
- args: [bFork.address]
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
- 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
- }
31948
+ const balancerV2Calls = buildBalanceCalls(balancerV2s);
31955
31949
  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
- }
31950
+ const balancerV3Calls = buildBalanceCalls(balancerV3s);
31976
31951
  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
- }
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: 3,
31965
+ maxRetries: 5,
32010
31966
  providerId: 0,
32011
- allowFailure: false
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 = otherAssets.length;
31999
+ const callLen = unifiedAssets.length;
32042
32000
  const data = rawResults.slice(currentOffset, callLen + currentOffset);
32043
32001
  currentOffset += callLen;
32044
- otherAssets.forEach((asset, i) => {
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 = otherAssets.length;
32021
+ const callLen = unifiedAssets.length;
32064
32022
  const data = rawResults.slice(currentOffset, callLen + currentOffset);
32065
32023
  currentOffset += callLen;
32066
- otherAssets.forEach((asset, i) => {
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 = otherAssets.length;
32043
+ const callLen = unifiedAssets.length;
32086
32044
  const data = rawResults.slice(currentOffset, callLen + currentOffset);
32087
32045
  currentOffset += callLen;
32088
- otherAssets.forEach((asset, i) => {
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 = otherAssets.length;
32065
+ const callLen = unifiedAssets.length;
32108
32066
  const data = rawResults.slice(currentOffset, callLen + currentOffset);
32109
32067
  currentOffset += callLen;
32110
- otherAssets.forEach((asset, i) => {
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],