@1delta/margin-fetcher 0.0.210 → 0.0.212

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -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({
@@ -26644,6 +26650,7 @@ var pufethFetcher = {
26644
26650
  // src/yields/intrinsic/fetchers/sky.ts
26645
26651
  var SUSDS_URL = "https://info-sky.blockanalitica.com/api/v1/overall/?format=json";
26646
26652
  var sUsds = "sUSDS::SUSDS";
26653
+ var stUsds = "Staked USDS::stUSDS";
26647
26654
  var susdsFetcher = {
26648
26655
  label: "SUSDS",
26649
26656
  fetch: async () => {
@@ -26651,8 +26658,12 @@ var susdsFetcher = {
26651
26658
  method: "GET",
26652
26659
  headers: { Accept: "application/json" }
26653
26660
  }).then((r) => r.json());
26661
+ const entry = res?.[0];
26662
+ const sUsdsApr = apyToApr(Number(entry?.sky_savings_rate_apy ?? 0)) * 100;
26663
+ const stUsdsApr = Number(entry?.stusds_rate ?? 0) * 100;
26654
26664
  return {
26655
- [sUsds]: apyToApr(Number(res?.[0]?.sky_savings_rate_apy ?? 0)) * 100
26665
+ [sUsds]: sUsdsApr,
26666
+ [stUsds]: stUsdsApr
26656
26667
  };
26657
26668
  }
26658
26669
  };
@@ -27365,6 +27376,19 @@ var capFetcher = {
27365
27376
  }
27366
27377
  };
27367
27378
 
27379
+ // src/yields/intrinsic/fetchers/infinifi.ts
27380
+ var INFINIFI_URL = "https://eth-api.infinifi.xyz/api/protocol/data";
27381
+ var siUSD = "Staked infiniFi USD::siUSD";
27382
+ var infinifiFetcher = {
27383
+ label: "InfiniFi",
27384
+ fetch: async () => {
27385
+ const res = await fetch(INFINIFI_URL).then((r) => r.json());
27386
+ const apy7d = res?.data?.stats?.staked?.average7dAPY;
27387
+ if (apy7d === void 0) return { [siUSD]: 0 };
27388
+ return { [siUSD]: apy7d * 100 };
27389
+ }
27390
+ };
27391
+
27368
27392
  // src/yields/intrinsic/index.ts
27369
27393
  async function fetchIntrinsicYields() {
27370
27394
  const wstethPromise = safeFetch(wstethFetcher.label, wstethFetcher.fetch);
@@ -27416,7 +27440,8 @@ async function fetchIntrinsicYields() {
27416
27440
  syzusdFetcher,
27417
27441
  susdfFetcher,
27418
27442
  midasFetcher,
27419
- capFetcher
27443
+ capFetcher,
27444
+ infinifiFetcher
27420
27445
  ];
27421
27446
  const results = await Promise.all([
27422
27447
  wstethPromise,
@@ -30491,7 +30516,8 @@ function parseAaveResults2(data, meta, context) {
30491
30516
  price: rawPriceNum,
30492
30517
  // Raw price (in base asset terms)
30493
30518
  priceUSD,
30494
- marketUid: createMarketUid(chainId, meta.fork, asset)
30519
+ marketUid: createMarketUid(chainId, meta.fork, asset),
30520
+ staticBase: meta.baseAssetOverride
30495
30521
  });
30496
30522
  } catch {
30497
30523
  continue;
@@ -30541,7 +30567,11 @@ function getMorphoMarketsForChain(chainId, marketOverrides) {
30541
30567
  loanAssetDecimals: override.loanAssetDecimals,
30542
30568
  collateralAssetDecimals: override.collateralAssetDecimals,
30543
30569
  fork: Lender.MORPHO_BLUE,
30544
- marketId: override.marketId ?? generateMarketId(override.oracle, override.loanAsset, override.collateralAsset)
30570
+ marketId: override.marketId ?? generateMarketId(
30571
+ override.oracle,
30572
+ override.loanAsset,
30573
+ override.collateralAsset
30574
+ )
30545
30575
  }));
30546
30576
  }
30547
30577
  function getMorphoCalls2(chainId, context) {
@@ -30585,11 +30615,19 @@ function parseMorphoResults2(data, meta, context) {
30585
30615
  );
30586
30616
  if (isNaN(priceDebtToCollateral) || priceDebtToCollateral === 0) continue;
30587
30617
  const loanOracleKey = tokenList?.[loanAsset]?.assetGroup ?? `${chainId}-${loanAsset}`;
30588
- const collateralOracleKey = tokenList?.[collateralAsset]?.assetGroup ?? `${chainId}-${collateralAsset}`;
30589
30618
  const loanAssetUSD = usdPrices[loanOracleKey] ?? usdPrices[loanAsset];
30590
- const collateralAssetUSD = usdPrices[collateralOracleKey] ?? usdPrices[collateralAsset];
30591
30619
  const lenderKey = generateMorphoLenderKey(market.marketId);
30592
30620
  if (loanAssetUSD) {
30621
+ entries.push({
30622
+ asset: loanAsset,
30623
+ price: 1,
30624
+ // Loan token = 1 in oracle's own denomination
30625
+ priceUSD: loanAssetUSD,
30626
+ marketUid: createMarketUid(chainId, lenderKey, loanAsset),
30627
+ targetLender: lenderKey,
30628
+ description: "Morpho loan asset",
30629
+ staticBase: loanAsset
30630
+ });
30593
30631
  const collateralPriceUSD = priceDebtToCollateral * loanAssetUSD;
30594
30632
  entries.push({
30595
30633
  asset: collateralAsset,
@@ -30597,18 +30635,8 @@ function parseMorphoResults2(data, meta, context) {
30597
30635
  // Raw: collateral price in loan asset terms
30598
30636
  priceUSD: collateralPriceUSD,
30599
30637
  marketUid: createMarketUid(chainId, lenderKey, collateralAsset),
30600
- targetLender: lenderKey
30601
- });
30602
- }
30603
- if (collateralAssetUSD) {
30604
- const loanPriceUSD = collateralAssetUSD / priceDebtToCollateral;
30605
- entries.push({
30606
- asset: loanAsset,
30607
- price: 1 / priceDebtToCollateral,
30608
- // Raw: loan price in collateral terms
30609
- priceUSD: loanPriceUSD,
30610
- marketUid: createMarketUid(chainId, lenderKey, loanAsset),
30611
- targetLender: lenderKey
30638
+ targetLender: lenderKey,
30639
+ staticBase: loanAsset
30612
30640
  });
30613
30641
  }
30614
30642
  }
@@ -30621,8 +30649,7 @@ var MORPHO_GRAPHQL_URL = "https://blue-api.morpho.org/graphql";
30621
30649
  var PRICE_QUERY = (first, skip, chainId) => `
30622
30650
  query GetMarketPrices {
30623
30651
  markets(first: ${first}, skip: ${skip}, where: {
30624
- chainId_in: [${chainId}],
30625
- whitelisted: true
30652
+ chainId_in: [${chainId}]${chainId != Chain.ETHEREUM_MAINNET ? `,whitelisted: true` : ""}
30626
30653
  },
30627
30654
  orderBy: SupplyAssetsUsd,
30628
30655
  orderDirection: Desc
@@ -30650,7 +30677,7 @@ query GetMarketPrices {
30650
30677
  async function fetchMorphoGraphQLPrices(chainId) {
30651
30678
  if (!morphoApiAvailable(chainId)) return null;
30652
30679
  try {
30653
- const pages = chainId === "1" ? [
30680
+ const pages = chainId === Chain.ETHEREUM_MAINNET ? [
30654
30681
  fetch(MORPHO_GRAPHQL_URL, {
30655
30682
  method: "POST",
30656
30683
  headers: { "Content-Type": "application/json" },
@@ -30679,14 +30706,19 @@ async function fetchMorphoGraphQLPrices(chainId) {
30679
30706
  for (const result of results) {
30680
30707
  const items = result?.data?.markets?.items;
30681
30708
  if (!Array.isArray(items)) {
30682
- console.warn(`[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
+ );
30683
30712
  return null;
30684
30713
  }
30685
30714
  allMarkets.push(...items);
30686
30715
  }
30687
30716
  return processMarketsToEntries(chainId, allMarkets, "morpho-gql");
30688
30717
  } catch (err) {
30689
- console.warn(`[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
+ );
30690
30722
  return null;
30691
30723
  }
30692
30724
  }
@@ -30697,8 +30729,7 @@ function processMarketsToEntries(chainId, allMarkets, source) {
30697
30729
  }
30698
30730
  const entries = [];
30699
30731
  for (const market of allMarkets) {
30700
- if (!market.collateralAsset?.address || !market.loanAsset?.address)
30701
- continue;
30732
+ if (!market.collateralAsset?.address || !market.loanAsset?.address) continue;
30702
30733
  const oracle = market.oracleAddress;
30703
30734
  const loanAsset = market.loanAsset.address.toLowerCase();
30704
30735
  const collateralAsset = market.collateralAsset.address.toLowerCase();
@@ -30712,53 +30743,35 @@ function processMarketsToEntries(chainId, allMarkets, source) {
30712
30743
  market.loanAsset.decimals,
30713
30744
  market.collateralAsset.decimals
30714
30745
  ) : 0;
30715
- if (loanPriceUSD != null && loanPriceUSD > 0) {
30716
- const collateralUSD = oracleRatio > 0 ? oracleRatio * loanPriceUSD : collateralPriceUSD ?? 0;
30717
- if (collateralUSD > 0) {
30718
- entries.push({
30719
- asset: collateralAsset,
30720
- price: oracleRatio,
30721
- // Raw: collateral price in loan asset terms
30722
- priceUSD: collateralUSD,
30723
- marketUid: createMarketUid(chainId, lenderKey, collateralAsset),
30724
- targetLender: lenderKey
30725
- });
30726
- }
30727
- } else if (collateralPriceUSD != null && collateralPriceUSD > 0) {
30746
+ const resolvedLoanUSD = loanPriceUSD != null && loanPriceUSD > 0 ? loanPriceUSD : collateralPriceUSD != null && collateralPriceUSD > 0 && oracleRatio > 0 ? collateralPriceUSD / oracleRatio : 0;
30747
+ const resolvedCollateralUSD = collateralPriceUSD != null && collateralPriceUSD > 0 ? collateralPriceUSD : loanPriceUSD != null && loanPriceUSD > 0 && oracleRatio > 0 ? oracleRatio * loanPriceUSD : 0;
30748
+ if (resolvedCollateralUSD > 0) {
30728
30749
  entries.push({
30729
30750
  asset: collateralAsset,
30730
30751
  price: oracleRatio,
30731
- // Raw oracle ratio
30732
- priceUSD: collateralPriceUSD,
30752
+ // Raw: collateral price in loan asset terms
30753
+ priceUSD: resolvedCollateralUSD,
30733
30754
  marketUid: createMarketUid(chainId, lenderKey, collateralAsset),
30734
- targetLender: lenderKey
30755
+ targetLender: lenderKey,
30756
+ staticBase: loanAsset
30735
30757
  });
30736
30758
  }
30737
- if (collateralPriceUSD != null && collateralPriceUSD > 0) {
30738
- const loanUSD = oracleRatio > 0 ? collateralPriceUSD / oracleRatio : loanPriceUSD ?? 0;
30739
- if (loanUSD > 0) {
30740
- entries.push({
30741
- asset: loanAsset,
30742
- price: oracleRatio > 0 ? 1 / oracleRatio : 0,
30743
- // Raw: loan price in collateral terms
30744
- priceUSD: loanUSD,
30745
- marketUid: createMarketUid(chainId, lenderKey, loanAsset),
30746
- targetLender: lenderKey
30747
- });
30748
- }
30749
- } else if (loanPriceUSD != null && loanPriceUSD > 0) {
30759
+ if (resolvedLoanUSD > 0) {
30750
30760
  entries.push({
30751
30761
  asset: loanAsset,
30752
30762
  price: oracleRatio > 0 ? 1 / oracleRatio : 0,
30753
- // Raw oracle ratio
30754
- priceUSD: loanPriceUSD,
30763
+ priceUSD: resolvedLoanUSD,
30755
30764
  marketUid: createMarketUid(chainId, lenderKey, loanAsset),
30756
- targetLender: lenderKey
30765
+ targetLender: lenderKey,
30766
+ description: "Morpho loan asset",
30767
+ staticBase: loanAsset
30757
30768
  });
30758
30769
  }
30759
30770
  }
30760
30771
  if (entries.length === 0) {
30761
- console.warn(`[${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
+ );
30762
30775
  return null;
30763
30776
  }
30764
30777
  return entries;
@@ -30868,27 +30881,37 @@ var USD_PRICED_OVERRIDES = {
30868
30881
  // BASE - prices already in USD
30869
30882
  };
30870
30883
  function getCompoundV3Calls(chainId) {
30871
- const oracles = compoundV3Oracles() ?? {};
30884
+ const oraclesData = compoundV3OraclesData() ?? {};
30872
30885
  const baseData = compoundV3BaseData() ?? {};
30873
30886
  const results = [];
30874
- for (const [lender, chainOracles] of Object.entries(oracles)) {
30887
+ for (const [lender, chainOracles] of Object.entries(oraclesData)) {
30875
30888
  const assetOracles = chainOracles[chainId];
30876
30889
  if (!assetOracles) continue;
30877
30890
  const skipBaseScaling = USD_PRICED_OVERRIDES[lender]?.has(chainId);
30878
30891
  const baseAsset = skipBaseScaling ? void 0 : baseData[lender]?.[chainId]?.baseAsset?.toLowerCase();
30892
+ const entries = Object.entries(assetOracles);
30893
+ const constantEntry = entries.find(
30894
+ ([, e]) => e.description?.toLowerCase().includes("constant price")
30895
+ );
30896
+ let staticBase;
30897
+ if (constantEntry && baseAsset) {
30898
+ staticBase = baseAsset;
30899
+ }
30879
30900
  const calls = [];
30880
30901
  const meta = [];
30881
- for (const [asset, oracleAddress] of Object.entries(assetOracles)) {
30902
+ for (const [asset, entry] of entries) {
30882
30903
  calls.push({
30883
- address: oracleAddress,
30904
+ address: entry.oracle,
30884
30905
  name: "latestRoundData",
30885
30906
  params: []
30886
30907
  });
30887
30908
  meta.push({
30888
30909
  asset,
30889
- oracle: oracleAddress,
30910
+ oracle: entry.oracle,
30890
30911
  baseAsset,
30891
- lender
30912
+ lender,
30913
+ description: entry.description,
30914
+ staticBase
30892
30915
  });
30893
30916
  }
30894
30917
  if (calls.length > 0) {
@@ -30929,7 +30952,9 @@ function parseCompoundV3Results(data, meta, context) {
30929
30952
  price: rawPrice,
30930
30953
  // Raw price (in base asset terms if applicable)
30931
30954
  priceUSD,
30932
- marketUid: createMarketUid(chainId, queryMeta.lender, queryMeta.asset)
30955
+ marketUid: createMarketUid(chainId, queryMeta.lender, queryMeta.asset),
30956
+ description: queryMeta.description,
30957
+ staticBase: queryMeta.staticBase
30933
30958
  });
30934
30959
  } catch {
30935
30960
  }
@@ -31861,6 +31886,7 @@ var FlashAbi = [
31861
31886
  }
31862
31887
  ];
31863
31888
  var DEFAULT_BATCH_SIZE = 4096;
31889
+ var isValidResult = (v) => typeof v === "bigint";
31864
31890
  var FLASHLOAN_ENABLED_MASK = BigInt(
31865
31891
  "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFFFFFFFFFF"
31866
31892
  );
@@ -31873,108 +31899,57 @@ async function fetchFlashLiquidityForChain(chain, multicallRetry, list = {}) {
31873
31899
  let aaveCalls = [];
31874
31900
  const aaves = getAavesForChain();
31875
31901
  const aaveProtocols = aaves[chain] ?? [];
31902
+ const allAaveUnderlyings = [];
31876
31903
  aaveProtocols.forEach((aaveFork) => {
31877
31904
  const underlyingsAndATokens = Object.entries(
31878
31905
  getAaveStyleProtocolTokenMap(chain, aaveFork)
31879
31906
  );
31880
31907
  const pool = getAaveTypePoolAddress(chain, aaveFork);
31881
- const tokenCalls = underlyingsAndATokens.map(([a, b]) => [
31882
- { name: "balanceOf" /* balanceOf */, address: a, args: [b.aToken] },
31883
- { name: "getConfiguration", address: pool, args: [a] }
31884
- ]).reduce((acc, b) => [...acc, ...b], []);
31885
- 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);
31886
31917
  callLengths[aaveFork] = tokenCalls.length * 2 + 1;
31887
- aaveCalls = [
31888
- ...aaveCalls,
31889
- ...tokenCalls,
31890
- { name: "FLASHLOAN_PREMIUM_TOTAL", address: pool }
31891
- ];
31918
+ aaveCalls.push(...tokenCalls, {
31919
+ name: "FLASHLOAN_PREMIUM_TOTAL",
31920
+ address: pool
31921
+ });
31892
31922
  });
31923
+ const lendingAssets = RELEVANT_LENDING_ASSETS()?.[chain] ?? [];
31924
+ const unifiedAssets = lodash.uniq([...allAaveUnderlyings, ...lendingAssets]);
31893
31925
  const morphoBs = RELEVANT_MORPHOB_FORKS()?.[chain] ?? [];
31894
- const otherAssets = RELEVANT_LENDING_ASSETS()?.[chain] ?? [];
31895
- let morphoCalls = [];
31896
- if (morphoBs && morphoBs.length > 0) {
31897
- morphoBs.forEach((bFork) => {
31898
- callLengths[bFork.pool] = otherAssets.length;
31899
- morphoCalls = [
31900
- ...morphoCalls,
31901
- ...otherAssets.map(
31902
- (address) => address === zeroAddress ? {
31926
+ const buildBalanceCalls = (forks) => {
31927
+ const result = [];
31928
+ for (const fork of forks) {
31929
+ callLengths[fork.pool] = unifiedAssets.length;
31930
+ for (const address of unifiedAssets) {
31931
+ result.push(
31932
+ address === zeroAddress ? {
31903
31933
  name: "getEthBalance" /* getEthBalance */,
31904
31934
  address: MULTICALL_ADDRESS[chain],
31905
- args: [bFork.address]
31935
+ params: [fork.address]
31906
31936
  } : {
31907
31937
  name: "balanceOf" /* balanceOf */,
31908
31938
  address,
31909
- args: [bFork.address]
31939
+ params: [fork.address]
31910
31940
  }
31911
- )
31912
- ];
31913
- });
31914
- }
31941
+ );
31942
+ }
31943
+ }
31944
+ return result;
31945
+ };
31946
+ const morphoCalls = buildBalanceCalls(morphoBs);
31915
31947
  const balancerV2s = RELEVANT_BALANCER_V2_FORKS[chain] ?? [];
31916
- let balancerV2Calls = [];
31917
- if (balancerV2s && balancerV2s.length > 0) {
31918
- balancerV2s.forEach((bFork) => {
31919
- callLengths[bFork.pool] = otherAssets.length;
31920
- balancerV2Calls = [
31921
- ...balancerV2Calls,
31922
- ...otherAssets.map(
31923
- (address) => address === zeroAddress ? {
31924
- name: "getEthBalance" /* getEthBalance */,
31925
- address: MULTICALL_ADDRESS[chain],
31926
- args: [bFork.address]
31927
- } : {
31928
- name: "balanceOf" /* balanceOf */,
31929
- address,
31930
- args: [bFork.address]
31931
- }
31932
- )
31933
- ];
31934
- });
31935
- }
31948
+ const balancerV2Calls = buildBalanceCalls(balancerV2s);
31936
31949
  const balancerV3s = RELEVANT_BALANCER_V3_FORKS[chain] ?? [];
31937
- let balancerV3Calls = [];
31938
- if (balancerV3s && balancerV3s.length > 0) {
31939
- balancerV3s.forEach((bFork) => {
31940
- callLengths[bFork.pool] = otherAssets.length;
31941
- balancerV3Calls = [
31942
- ...balancerV3Calls,
31943
- ...otherAssets.map(
31944
- (address) => address === zeroAddress ? {
31945
- name: "getEthBalance" /* getEthBalance */,
31946
- address: MULTICALL_ADDRESS[chain],
31947
- args: [bFork.address]
31948
- } : {
31949
- name: "balanceOf" /* balanceOf */,
31950
- address,
31951
- args: [bFork.address]
31952
- }
31953
- )
31954
- ];
31955
- });
31956
- }
31950
+ const balancerV3Calls = buildBalanceCalls(balancerV3s);
31957
31951
  const uniswapV4s = RELEVANT_UNISWAP_V4_FORKS[chain] ?? [];
31958
- let uniswapV4Calls = [];
31959
- if (uniswapV4s && uniswapV4s.length > 0) {
31960
- uniswapV4s.forEach((u4Fork) => {
31961
- callLengths[u4Fork.pool] = otherAssets.length;
31962
- uniswapV4Calls = [
31963
- ...uniswapV4Calls,
31964
- ...otherAssets.map(
31965
- (address) => address === zeroAddress ? {
31966
- name: "getEthBalance" /* getEthBalance */,
31967
- address: MULTICALL_ADDRESS[chain],
31968
- args: [u4Fork.address]
31969
- } : {
31970
- name: "balanceOf" /* balanceOf */,
31971
- address,
31972
- args: [u4Fork.address]
31973
- }
31974
- )
31975
- ];
31976
- });
31977
- }
31952
+ const uniswapV4Calls = buildBalanceCalls(uniswapV4s);
31978
31953
  const calls = [
31979
31954
  ...aaveCalls,
31980
31955
  ...balancerV2Calls,
@@ -31987,9 +31962,9 @@ async function fetchFlashLiquidityForChain(chain, multicallRetry, list = {}) {
31987
31962
  calls,
31988
31963
  abi: FlashAbi,
31989
31964
  batchSize: DEFAULT_BATCH_SIZE,
31990
- maxRetries: 3,
31965
+ maxRetries: 5,
31991
31966
  providerId: 0,
31992
- allowFailure: false
31967
+ allowFailure: true
31993
31968
  });
31994
31969
  let liquidity = {};
31995
31970
  let currentOffset = 0;
@@ -31998,10 +31973,12 @@ async function fetchFlashLiquidityForChain(chain, multicallRetry, list = {}) {
31998
31973
  const data = rawResults.slice(currentOffset, callLen + currentOffset);
31999
31974
  const fee = data[callLen - 1];
32000
31975
  currentOffset += callLen;
31976
+ if (typeof fee !== "bigint") return;
32001
31977
  aaveAssets[aave].forEach((asset, i) => {
32002
- const decimals = list[asset]?.decimals;
32003
31978
  const rawAmount = data[2 * i];
32004
31979
  const config = data[2 * i + 1];
31980
+ if (typeof rawAmount !== "bigint" || typeof config !== "bigint") return;
31981
+ const decimals = list[asset]?.decimals;
32005
31982
  const enabled = !AAVE_V3_LENDERS.includes(aave) || getFlashLoanEnabled(config);
32006
31983
  if (enabled && rawAmount > 0n && FLASH_LOAN_IDS[aave] !== void 0) {
32007
31984
  if (!liquidity[asset]) liquidity[asset] = [];
@@ -32019,13 +31996,13 @@ async function fetchFlashLiquidityForChain(chain, multicallRetry, list = {}) {
32019
31996
  });
32020
31997
  });
32021
31998
  balancerV2s.forEach((balancer) => {
32022
- const callLen = otherAssets.length;
31999
+ const callLen = unifiedAssets.length;
32023
32000
  const data = rawResults.slice(currentOffset, callLen + currentOffset);
32024
32001
  currentOffset += callLen;
32025
- otherAssets.forEach((asset, i) => {
32002
+ unifiedAssets.forEach((asset, i) => {
32026
32003
  const decimals = list[asset]?.decimals;
32027
32004
  const rawAmount = data[i];
32028
- if (rawAmount > 0n) {
32005
+ if (isValidResult(rawAmount) && rawAmount > 0n) {
32029
32006
  if (!liquidity[asset]) liquidity[asset] = [];
32030
32007
  liquidity[asset].push({
32031
32008
  id: FLASH_LOAN_IDS[balancer.pool],
@@ -32041,12 +32018,12 @@ async function fetchFlashLiquidityForChain(chain, multicallRetry, list = {}) {
32041
32018
  });
32042
32019
  });
32043
32020
  morphoBs.forEach((morpho) => {
32044
- const callLen = otherAssets.length;
32021
+ const callLen = unifiedAssets.length;
32045
32022
  const data = rawResults.slice(currentOffset, callLen + currentOffset);
32046
32023
  currentOffset += callLen;
32047
- otherAssets.forEach((asset, i) => {
32024
+ unifiedAssets.forEach((asset, i) => {
32048
32025
  const rawAmount = data[i];
32049
- if (rawAmount > 0n) {
32026
+ if (isValidResult(rawAmount) && rawAmount > 0n) {
32050
32027
  if (!liquidity[asset]) liquidity[asset] = [];
32051
32028
  const decimals = list[asset]?.decimals;
32052
32029
  liquidity[asset].push({
@@ -32063,13 +32040,13 @@ async function fetchFlashLiquidityForChain(chain, multicallRetry, list = {}) {
32063
32040
  });
32064
32041
  });
32065
32042
  balancerV3s.forEach((balancerV3) => {
32066
- const callLen = otherAssets.length;
32043
+ const callLen = unifiedAssets.length;
32067
32044
  const data = rawResults.slice(currentOffset, callLen + currentOffset);
32068
32045
  currentOffset += callLen;
32069
- otherAssets.forEach((asset, i) => {
32046
+ unifiedAssets.forEach((asset, i) => {
32070
32047
  const decimals = list[asset]?.decimals;
32071
32048
  const rawAmount = data[i];
32072
- if (rawAmount > 0n) {
32049
+ if (isValidResult(rawAmount) && rawAmount > 0n) {
32073
32050
  if (!liquidity[asset]) liquidity[asset] = [];
32074
32051
  liquidity[asset].push({
32075
32052
  id: FLASH_LOAN_IDS[balancerV3.pool],
@@ -32085,13 +32062,13 @@ async function fetchFlashLiquidityForChain(chain, multicallRetry, list = {}) {
32085
32062
  });
32086
32063
  });
32087
32064
  uniswapV4s.forEach((uniV4) => {
32088
- const callLen = otherAssets.length;
32065
+ const callLen = unifiedAssets.length;
32089
32066
  const data = rawResults.slice(currentOffset, callLen + currentOffset);
32090
32067
  currentOffset += callLen;
32091
- otherAssets.forEach((asset, i) => {
32068
+ unifiedAssets.forEach((asset, i) => {
32092
32069
  const decimals = list[asset]?.decimals;
32093
32070
  const rawAmount = data[i];
32094
- if (rawAmount > 0n) {
32071
+ if (isValidResult(rawAmount) && rawAmount > 0n) {
32095
32072
  if (!liquidity[asset]) liquidity[asset] = [];
32096
32073
  liquidity[asset].push({
32097
32074
  id: FLASH_LOAN_IDS[uniV4.pool],