@1delta/margin-fetcher 0.0.151 → 0.0.153

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.
Files changed (92) hide show
  1. package/dist/assets/index.d.ts +2 -2
  2. package/dist/assets/index.d.ts.map +1 -1
  3. package/dist/ccip-ZVV5L43W.js +5 -0
  4. package/dist/{ccip-4Z7OPIYF.js.map → ccip-ZVV5L43W.js.map} +1 -1
  5. package/dist/{chunk-GJEFCA2S.js → chunk-CEH73TVJ.js} +4 -4
  6. package/dist/{chunk-GJEFCA2S.js.map → chunk-CEH73TVJ.js.map} +1 -1
  7. package/dist/index.d.ts +6 -3
  8. package/dist/index.d.ts.map +1 -1
  9. package/dist/index.js +1400 -505
  10. package/dist/index.js.map +1 -1
  11. package/dist/lending/addresses/init.d.ts +1 -0
  12. package/dist/lending/addresses/init.d.ts.map +1 -1
  13. package/dist/lending/index.d.ts +1 -1
  14. package/dist/lending/index.d.ts.map +1 -1
  15. package/dist/lending/init/publicCallParse.d.ts +1 -2
  16. package/dist/lending/init/publicCallParse.d.ts.map +1 -1
  17. package/dist/lending/meta/index.d.ts +2 -0
  18. package/dist/lending/meta/index.d.ts.map +1 -1
  19. package/dist/lending/user-data/aave-v2-type/userCallBuild.d.ts +1 -2
  20. package/dist/lending/user-data/aave-v2-type/userCallBuild.d.ts.map +1 -1
  21. package/dist/lending/user-data/aave-v2-type/userCallParse.d.ts +2 -7
  22. package/dist/lending/user-data/aave-v2-type/userCallParse.d.ts.map +1 -1
  23. package/dist/lending/user-data/aave-v3-type/userCallBuild.d.ts +1 -2
  24. package/dist/lending/user-data/aave-v3-type/userCallBuild.d.ts.map +1 -1
  25. package/dist/lending/user-data/aave-v3-type/userCallParse.d.ts +2 -7
  26. package/dist/lending/user-data/aave-v3-type/userCallParse.d.ts.map +1 -1
  27. package/dist/lending/user-data/aave-v3-type/userCallParseYldr.d.ts +2 -7
  28. package/dist/lending/user-data/aave-v3-type/userCallParseYldr.d.ts.map +1 -1
  29. package/dist/lending/user-data/abis.d.ts +3307 -3307
  30. package/dist/lending/user-data/compound-v2/userCallBuild.d.ts +1 -2
  31. package/dist/lending/user-data/compound-v2/userCallBuild.d.ts.map +1 -1
  32. package/dist/lending/user-data/compound-v2/userCallParse.d.ts +2 -7
  33. package/dist/lending/user-data/compound-v2/userCallParse.d.ts.map +1 -1
  34. package/dist/lending/user-data/compound-v3/userCallBuild.d.ts +1 -2
  35. package/dist/lending/user-data/compound-v3/userCallBuild.d.ts.map +1 -1
  36. package/dist/lending/user-data/compound-v3/userCallParse.d.ts +2 -7
  37. package/dist/lending/user-data/compound-v3/userCallParse.d.ts.map +1 -1
  38. package/dist/lending/user-data/fetchUserData.d.ts +28 -15
  39. package/dist/lending/user-data/fetchUserData.d.ts.map +1 -1
  40. package/dist/lending/user-data/index.d.ts +1 -0
  41. package/dist/lending/user-data/index.d.ts.map +1 -1
  42. package/dist/lending/user-data/init/userCallParse.d.ts +2 -7
  43. package/dist/lending/user-data/init/userCallParse.d.ts.map +1 -1
  44. package/dist/lending/user-data/morpho/userCallParse.d.ts +7 -17
  45. package/dist/lending/user-data/morpho/userCallParse.d.ts.map +1 -1
  46. package/dist/lending/user-data/utils/createGeneralUserState.d.ts +3 -45
  47. package/dist/lending/user-data/utils/createGeneralUserState.d.ts.map +1 -1
  48. package/dist/lending/user-data/utils/createMultiAccountStyleUserState.d.ts +4 -11
  49. package/dist/lending/user-data/utils/createMultiAccountStyleUserState.d.ts.map +1 -1
  50. package/dist/lending/user-data/utils/index.d.ts +1 -0
  51. package/dist/lending/user-data/utils/index.d.ts.map +1 -1
  52. package/dist/lending/user-data/utils/types.d.ts +68 -0
  53. package/dist/lending/user-data/utils/types.d.ts.map +1 -0
  54. package/dist/prices/index.d.ts +1 -0
  55. package/dist/prices/index.d.ts.map +1 -1
  56. package/dist/prices/main-prices/fetchOracleData.d.ts.map +1 -1
  57. package/dist/prices/oracle-prices/fetchOraclePrices.d.ts +55 -0
  58. package/dist/prices/oracle-prices/fetchOraclePrices.d.ts.map +1 -0
  59. package/dist/prices/oracle-prices/fetchers/aave.d.ts +91 -0
  60. package/dist/prices/oracle-prices/fetchers/aave.d.ts.map +1 -0
  61. package/dist/prices/oracle-prices/fetchers/compoundV2.d.ts +66 -0
  62. package/dist/prices/oracle-prices/fetchers/compoundV2.d.ts.map +1 -0
  63. package/dist/prices/oracle-prices/fetchers/compoundV3.d.ts +85 -0
  64. package/dist/prices/oracle-prices/fetchers/compoundV3.d.ts.map +1 -0
  65. package/dist/prices/oracle-prices/fetchers/index.d.ts +6 -0
  66. package/dist/prices/oracle-prices/fetchers/index.d.ts.map +1 -0
  67. package/dist/prices/oracle-prices/fetchers/lista.d.ts +66 -0
  68. package/dist/prices/oracle-prices/fetchers/lista.d.ts.map +1 -0
  69. package/dist/prices/oracle-prices/fetchers/morpho.d.ts +69 -0
  70. package/dist/prices/oracle-prices/fetchers/morpho.d.ts.map +1 -0
  71. package/dist/prices/oracle-prices/index.d.ts +8 -0
  72. package/dist/prices/oracle-prices/index.d.ts.map +1 -0
  73. package/dist/prices/oracle-prices/types.d.ts +158 -0
  74. package/dist/prices/oracle-prices/types.d.ts.map +1 -0
  75. package/dist/types/lender/init-types.d.ts +5 -0
  76. package/dist/types/lender/init-types.d.ts.map +1 -1
  77. package/dist/types/lenderTypes.d.ts +5 -5
  78. package/dist/types/lenderTypes.d.ts.map +1 -1
  79. package/dist/utils/constants.d.ts +1 -0
  80. package/dist/utils/constants.d.ts.map +1 -1
  81. package/dist/utils/index.d.ts +2 -1
  82. package/dist/utils/index.d.ts.map +1 -1
  83. package/dist/utils/marketUid.d.ts +3 -0
  84. package/dist/utils/marketUid.d.ts.map +1 -0
  85. package/dist/utils/multicall.d.ts +11 -1
  86. package/dist/utils/multicall.d.ts.map +1 -1
  87. package/dist/utils/rpcCall.d.ts +65 -0
  88. package/dist/utils/rpcCall.d.ts.map +1 -0
  89. package/dist/utils/rpcParse.d.ts +19 -0
  90. package/dist/utils/rpcParse.d.ts.map +1 -0
  91. package/package.json +3 -3
  92. package/dist/ccip-4Z7OPIYF.js +0 -5
package/dist/index.js CHANGED
@@ -1,9 +1,9 @@
1
- import { formatEther, BaseError, formatUnits } from './chunk-GJEFCA2S.js';
1
+ import { formatEther, BaseError, encodeFunctionData, formatUnits, decodeFunctionResult, decodeAbiParameters } from './chunk-CEH73TVJ.js';
2
2
  import './chunk-BYTNVMX7.js';
3
3
  import './chunk-PR4QN5HX.js';
4
4
  import { Lender, AAVE_V3_LENDERS, AAVE_V2_LENDERS, AAVE_V32_LENDERS, COMPOUND_V2_LENDERS, VENUS_LENDERS } from '@1delta/lender-registry';
5
5
  import lodash from 'lodash';
6
- import { getEvmClientUniversal, multicallRetry } from '@1delta/providers';
6
+ import { getEvmChain, getEvmClientUniversal, multicallRetry } from '@1delta/providers';
7
7
  import { BALANCER_V2_FORKS, BALANCER_V3_FORKS, UNISWAP_V4_FORKS, FLASH_LOAN_IDS } from '@1delta/dex-registry';
8
8
 
9
9
  // src/abis/aave-v2/ProtocolDataProvider.ts
@@ -6256,11 +6256,14 @@ globalThis[GLOBAL_LENDER_DATA_KEY] = {
6256
6256
  compoundV3BaseData: {},
6257
6257
  compoundV2Pools: {},
6258
6258
  compoundV2Tokens: {},
6259
+ compoundV2TokenArray: {},
6259
6260
  initConfig: {},
6260
6261
  aaveReserves: {},
6261
6262
  compoundV2Reserves: {},
6262
6263
  compoundV3Reserves: {},
6263
6264
  aaveOracles: {},
6265
+ compoundV2Oracles: {},
6266
+ compoundV3Oracles: {},
6264
6267
  morphoOracles: {},
6265
6268
  morphoTypeOracles: {},
6266
6269
  morphoTypeMarkets: {}
@@ -6272,6 +6275,8 @@ function initializeLenderData({
6272
6275
  aaveTokensOverride,
6273
6276
  aavePoolsOverride,
6274
6277
  aaveOraclesOverride,
6278
+ compoundV2OraclesOverride,
6279
+ compoundV3OraclesOverride,
6275
6280
  compoundV3PoolsOverride,
6276
6281
  compoundV3BaseDataOverride,
6277
6282
  morphoPoolsOverride,
@@ -6289,6 +6294,8 @@ function initializeLenderData({
6289
6294
  const data = getGlobalData2();
6290
6295
  if (aaveTokensOverride) data.aaveTokens = aaveTokensOverride;
6291
6296
  if (aaveOraclesOverride) data.aaveOracles = aaveOraclesOverride;
6297
+ if (compoundV2OraclesOverride) data.compoundV2Oracles = compoundV2OraclesOverride;
6298
+ if (compoundV3OraclesOverride) data.compoundV3Oracles = compoundV3OraclesOverride;
6292
6299
  if (aavePoolsOverride) data.aavePools = aavePoolsOverride;
6293
6300
  if (compoundV3PoolsOverride) data.compoundV3Pools = compoundV3PoolsOverride;
6294
6301
  if (morphoPoolsOverride) data.morphoPools = morphoPoolsOverride;
@@ -6307,6 +6314,8 @@ function initializeLenderData({
6307
6314
  var aaveTokens = () => getGlobalData2()?.aaveTokens;
6308
6315
  var aavePools = () => getGlobalData2()?.aavePools;
6309
6316
  var aaveOracles = () => getGlobalData2()?.aaveOracles;
6317
+ var compoundV2Oracles = () => getGlobalData2()?.compoundV2Oracles;
6318
+ var compoundV3Oracles = () => getGlobalData2()?.compoundV3Oracles;
6310
6319
  var morphoTypeOracles = () => getGlobalData2()?.morphoTypeOracles;
6311
6320
  var morphoTypeMarkets = () => getGlobalData2()?.morphoTypeMarkets;
6312
6321
  var aaveReserves = () => getGlobalData2()?.aaveReserves;
@@ -6319,6 +6328,13 @@ var compoundV2Pools = () => getGlobalData2()?.compoundV2Pools;
6319
6328
  var compoundV2Tokens = () => getGlobalData2()?.compoundV2Tokens;
6320
6329
  var compoundV2TokenArray = () => getGlobalData2()?.compoundV2TokenArray;
6321
6330
  var initConfig = () => getGlobalData2()?.initConfig;
6331
+
6332
+ // src/utils/marketUid.ts
6333
+ function createMarketUid(chainId, lender, refAddress) {
6334
+ return `${lender}:${chainId}:${refAddress.toLowerCase()}`;
6335
+ }
6336
+
6337
+ // src/utils/index.ts
6322
6338
  var { uniq } = lodash;
6323
6339
  var COMPOUND_V3_KEY = "COMPOUND_V3";
6324
6340
  function isCompoundV3(lender) {
@@ -6440,7 +6456,7 @@ function getAaveTypePoolAddress(chainId, lender) {
6440
6456
  return aavePools()?.[lender]?.[chainId]?.pool;
6441
6457
  }
6442
6458
  var toOracleKey = (a) => {
6443
- return a;
6459
+ return a ?? "";
6444
6460
  };
6445
6461
  var toGenericPriceKey = (assetAddress, chainId) => {
6446
6462
  return chainId + "-" + assetAddress;
@@ -7581,7 +7597,7 @@ var AAVE_V3_EMODES = (chain, lender) => {
7581
7597
  if (lender === Lender.AAVE_V3) return range(12);
7582
7598
  }
7583
7599
  if (chain === Chain.PLASMA_MAINNET) {
7584
- if (lender === Lender.AAVE_V3) return range(12);
7600
+ if (lender === Lender.AAVE_V3) return range(17);
7585
7601
  }
7586
7602
  return [0, 1, 2, 3, 4, 5, 6];
7587
7603
  };
@@ -7740,6 +7756,20 @@ var addressesInitCore = {
7740
7756
  [Chain.MANTLE]: "0xDf75fF0452eDf4897B051A54b406eB384503Ac39"
7741
7757
  }
7742
7758
  };
7759
+ function getInitPools(chainId, lender) {
7760
+ const poolData = initConfig()?.[lender]?.[chainId]?.poolData;
7761
+ if (!poolData) return [];
7762
+ return Object.entries(poolData).map(([poolId, value]) => ({
7763
+ poolId,
7764
+ underlying: value.underlying
7765
+ }));
7766
+ }
7767
+ function getInitUnderlyingToPoolMap(chainId, lender) {
7768
+ return getInitPools(chainId, lender).reduce((map, { underlying, poolId }) => {
7769
+ map.set(underlying, poolId);
7770
+ return map;
7771
+ }, /* @__PURE__ */ new Map());
7772
+ }
7743
7773
 
7744
7774
  // src/lending/init/publicCallBuild.ts
7745
7775
  var INIT_MODES = [1, 2, 3, 4, 5, 6];
@@ -8614,6 +8644,7 @@ var INIT_EMODE_LABELS = {
8614
8644
  };
8615
8645
  var getInitReservesDataConverter = (lender, chainId, prices, additionalYields, tokenList = {}) => {
8616
8646
  const expectedNumberOfCalls = INIT_MODES.length;
8647
+ const underlyingToPoolMap = getInitUnderlyingToPoolMap(chainId, lender);
8617
8648
  return [
8618
8649
  (data) => {
8619
8650
  if (data.length !== expectedNumberOfCalls) {
@@ -8636,6 +8667,8 @@ var getInitReservesDataConverter = (lender, chainId, prices, additionalYields, t
8636
8667
  const oracleKey = toOracleKey(meta?.assetGroup) ?? toGenericPriceKey(asset, chainId);
8637
8668
  const price = prices[oracleKey];
8638
8669
  const liquidity = Number(totalDeposits) - Number(totalDebt);
8670
+ const poolId = underlyingToPoolMap.get(asset);
8671
+ const params = !!poolId ? { metadata: { poolId } } : void 0;
8639
8672
  return {
8640
8673
  [asset]: {
8641
8674
  poolId: asset,
@@ -8666,7 +8699,8 @@ var getInitReservesDataConverter = (lender, chainId, prices, additionalYields, t
8666
8699
  stakingYield: additionalYields.intrinsicYields[oracleKey] ?? 0,
8667
8700
  rewards: {},
8668
8701
  config: {},
8669
- borrowingEnabled: totalDebt !== "0"
8702
+ borrowingEnabled: totalDebt !== "0",
8703
+ params
8670
8704
  }
8671
8705
  };
8672
8706
  })
@@ -10748,9 +10782,14 @@ var apyToApr2 = (apy) => {
10748
10782
  return ((apy + 1) ** (1 / SECONDS_PER_YEAR2) - 1) * SECONDS_PER_YEAR2;
10749
10783
  };
10750
10784
 
10785
+ // src/lending/user-data/utils/types.ts
10786
+ function getMarketUidsFromMeta(meta) {
10787
+ return Object.keys(meta);
10788
+ }
10789
+
10751
10790
  // src/lending/user-data/utils/createGeneralUserState.ts
10752
10791
  function createBaseTypeUserState(payload, lenderData, totalDeposits24h = 0, totalDebt24h = 0) {
10753
- let assetKeys = Object.keys(payload.lendingPositions["0"] ?? {});
10792
+ let assetKeys = getMarketUidsFromMeta(lenderData);
10754
10793
  const { chainId, account } = payload;
10755
10794
  const mode = Number(payload.userEMode ?? 0);
10756
10795
  const isWhitelisted = !Boolean(payload?.notWhitelisted ?? false);
@@ -10768,17 +10807,19 @@ function createBaseTypeUserState(payload, lenderData, totalDeposits24h = 0, tota
10768
10807
  let collateralAllActive = 0;
10769
10808
  let rewardsPerAsset = {};
10770
10809
  for (let i = 0; i < assetKeys.length; i++) {
10771
- const asset = assetKeys[i];
10772
- if (!lenderData?.[asset]) continue;
10773
- const { depositsUSD, debtStableUSD, debtUSD, collateralEnabled } = payload.lendingPositions["0"][asset];
10810
+ const marketUid = assetKeys[i];
10811
+ if (!lenderData?.[marketUid] || !payload.lendingPositions["0"][marketUid])
10812
+ continue;
10813
+ const { depositsUSD, debtStableUSD, debtUSD, collateralEnabled } = payload.lendingPositions["0"][marketUid];
10774
10814
  const {
10775
10815
  depositRate,
10776
- stakingYield,
10816
+ intrinsicYield,
10777
10817
  variableBorrowRate,
10778
10818
  stableBorrowRate,
10779
10819
  rewards,
10780
- collateralActive
10781
- } = lenderData[asset];
10820
+ flags,
10821
+ configs
10822
+ } = lenderData[marketUid];
10782
10823
  deposits += depositsUSD;
10783
10824
  debt += debtStableUSD;
10784
10825
  debt += debtUSD;
@@ -10794,76 +10835,75 @@ function createBaseTypeUserState(payload, lenderData, totalDeposits24h = 0, tota
10794
10835
  if (rewDebt > 0) rewardsPerAsset[key].borrowApr += rewDebt;
10795
10836
  }
10796
10837
  );
10797
- stakingDepositAccrual += (stakingYield ?? 0) * depositsUSD;
10798
- stakingBorrowAccrual += (stakingYield ?? 0) * (debtStableUSD + debtUSD);
10799
- if (collateralActive) {
10838
+ stakingDepositAccrual += (intrinsicYield ?? 0) * depositsUSD;
10839
+ stakingBorrowAccrual += (intrinsicYield ?? 0) * (debtStableUSD + debtUSD);
10840
+ if (flags?.collateralActive) {
10800
10841
  if (collateralEnabled) {
10801
- collateral += (lenderData[asset].config[mode]?.collateralFactor ?? 1) * depositsUSD;
10802
- borrowDiscountedCollateral += (lenderData[asset].config[mode]?.borrowCollateralFactor ?? 1) * depositsUSD;
10842
+ collateral += (configs[mode]?.collateralFactor ?? 1) * depositsUSD;
10843
+ borrowDiscountedCollateral += (configs[mode]?.borrowCollateralFactor ?? 1) * depositsUSD;
10803
10844
  }
10804
- borrowDiscountedCollateralAllActive += (lenderData[asset].config[mode]?.borrowCollateralFactor ?? 1) * depositsUSD;
10805
- collateralAllActive += (lenderData[asset].config[mode]?.collateralFactor ?? 1) * depositsUSD;
10845
+ borrowDiscountedCollateralAllActive += (configs[mode]?.borrowCollateralFactor ?? 1) * depositsUSD;
10846
+ collateralAllActive += (configs[mode]?.collateralFactor ?? 1) * depositsUSD;
10806
10847
  }
10807
10848
  depositInterest += depositRate * depositsUSD;
10808
10849
  borrowInterest += debtStableUSD * stableBorrowRate + debtUSD * variableBorrowRate;
10809
10850
  }
10810
10851
  const nav = deposits - debt;
10811
10852
  const balanceData2 = {
10812
- "0": {
10813
- borrowDiscountedCollateral,
10814
- borrowDiscountedCollateralAllActive,
10815
- collateral,
10816
- collateralAllActive,
10817
- deposits,
10818
- debt,
10819
- adjustedDebt: debt,
10820
- nav,
10821
- deposits24h: totalDeposits24h,
10822
- debt24h: totalDebt24h,
10823
- nav24h: totalDeposits24h - totalDebt24h,
10824
- ...payload.rewards ? { rewards: payload.rewards } : {}
10825
- }
10853
+ borrowDiscountedCollateral,
10854
+ borrowDiscountedCollateralAllActive,
10855
+ collateral,
10856
+ collateralAllActive,
10857
+ deposits,
10858
+ debt,
10859
+ adjustedDebt: debt,
10860
+ nav,
10861
+ deposits24h: totalDeposits24h,
10862
+ debt24h: totalDebt24h,
10863
+ nav24h: totalDeposits24h - totalDebt24h,
10864
+ ...payload.rewards ? { rewards: payload.rewards } : {}
10826
10865
  };
10827
10866
  const aprData2 = {
10828
- "0": {
10829
- apr: safeDivide(depositInterest - borrowInterest, nav),
10830
- borrowApr: safeDivide(borrowInterest, debt),
10831
- depositApr: safeDivide(depositInterest, deposits),
10832
- rewards: divideAccrualsToAprs(rewardsPerAsset, nav, deposits, debt),
10833
- rewardApr: safeDivide(rewardDepositAccrual + rewardBorrowAccrual, nav),
10834
- rewardDepositApr: safeDivide(rewardDepositAccrual, deposits),
10835
- rewardBorrowApr: safeDivide(rewardBorrowAccrual, debt),
10836
- stakingApr: safeDivide(stakingDepositAccrual - stakingBorrowAccrual, nav),
10837
- stakingDepositApr: safeDivide(stakingDepositAccrual, deposits),
10838
- stakingBorrowApr: safeDivide(stakingBorrowAccrual, debt)
10839
- }
10840
- };
10841
- const userConfigs = {
10842
- "0": { selectedMode: mode, id: account, isWhitelisted }
10867
+ apr: safeDivide(depositInterest - borrowInterest, nav),
10868
+ borrowApr: safeDivide(borrowInterest, debt),
10869
+ depositApr: safeDivide(depositInterest, deposits),
10870
+ rewards: divideAccrualsToAprs(rewardsPerAsset, nav, deposits, debt),
10871
+ rewardApr: safeDivide(rewardDepositAccrual + rewardBorrowAccrual, nav),
10872
+ rewardDepositApr: safeDivide(rewardDepositAccrual, deposits),
10873
+ rewardBorrowApr: safeDivide(rewardBorrowAccrual, debt),
10874
+ stakingApr: safeDivide(stakingDepositAccrual - stakingBorrowAccrual, nav),
10875
+ stakingDepositApr: safeDivide(stakingDepositAccrual, deposits),
10876
+ stakingBorrowApr: safeDivide(stakingBorrowAccrual, debt)
10843
10877
  };
10878
+ const userConfig = { selectedMode: mode, id: account, isWhitelisted };
10844
10879
  return {
10845
10880
  account,
10846
10881
  chainId,
10847
- balanceData: balanceData2,
10848
- aprData: aprData2,
10849
- userConfigs
10882
+ data: [
10883
+ {
10884
+ health: balanceData2.adjustedDebt === 0 ? null : balanceData2.borrowDiscountedCollateral / balanceData2.adjustedDebt,
10885
+ accountId: "0",
10886
+ balanceData: balanceData2,
10887
+ aprData: aprData2,
10888
+ userConfig,
10889
+ positions: Object.values(payload.lendingPositions["0"])
10890
+ }
10891
+ ]
10850
10892
  };
10851
10893
  }
10852
10894
 
10853
10895
  // src/lending/user-data/utils/createMultiAccountStyleUserState.ts
10854
10896
  function createMultiAccountTypeUserState(payload, lenderData, histData) {
10855
10897
  const positionKeys = Object.keys(payload.lendingPositions ?? {});
10856
- let assetKeys = payload.assets;
10898
+ let marketUids = getMarketUidsFromMeta(lenderData);
10857
10899
  const { chainId, account } = payload;
10858
- let userConfigs = {};
10859
- let balanceData2 = {};
10860
- let aprData2 = {};
10900
+ let data = [];
10861
10901
  for (let j = 0; j < positionKeys.length; j++) {
10862
10902
  const posId = positionKeys[j];
10863
10903
  const position = payload.lendingPositions[posId];
10864
10904
  const { mode: posMode } = position;
10865
10905
  const mode = posMode ?? LENDER_MODE_NO_MODE;
10866
- userConfigs[posId] = {
10906
+ const userConfig = {
10867
10907
  id: posId,
10868
10908
  selectedMode: mode,
10869
10909
  isWhitelisted: true
@@ -10879,20 +10919,27 @@ function createMultiAccountTypeUserState(payload, lenderData, histData) {
10879
10919
  let collateral = 0;
10880
10920
  let borrowDiscountedCollateral = 0;
10881
10921
  let adjustedDebt = 0;
10882
- for (let i = 0; i < assetKeys.length; i++) {
10883
- const asset = assetKeys[i];
10884
- const { depositsUSD, debtUSD } = payload.lendingPositions[posId][asset];
10885
- if (!lenderData?.[asset]) continue;
10886
- const { depositRate, stakingYield, variableBorrowRate, rewards } = lenderData[asset];
10922
+ for (let i = 0; i < marketUids.length; i++) {
10923
+ const marketUid = marketUids[i];
10924
+ if (!lenderData?.[marketUid] || !payload.lendingPositions[posId][marketUid])
10925
+ continue;
10926
+ const { depositsUSD, debtUSD } = payload.lendingPositions[posId][marketUid];
10927
+ const {
10928
+ depositRate,
10929
+ intrinsicYield,
10930
+ variableBorrowRate,
10931
+ rewards,
10932
+ configs
10933
+ } = lenderData[marketUid];
10887
10934
  deposits += depositsUSD;
10888
10935
  debt += debtUSD;
10889
10936
  Object.entries(rewards ?? {}).map(([key, rewardData]) => {
10890
10937
  rewardDepositAccrual += rewardData.depositRate * depositsUSD;
10891
10938
  rewardBorrowAccrual += rewardData.variableBorrowRate * debtUSD + rewardData.stableBorrowRate * debtUSD;
10892
10939
  });
10893
- stakingDepositAccrual += (stakingYield ?? 0) * depositsUSD;
10894
- stakingBorrowAccrual += (stakingYield ?? 0) * debtUSD;
10895
- const config = lenderData[asset].config[mode];
10940
+ stakingDepositAccrual += (intrinsicYield ?? 0) * depositsUSD;
10941
+ stakingBorrowAccrual += (intrinsicYield ?? 0) * debtUSD;
10942
+ const config = configs?.[mode];
10896
10943
  collateral += (config?.collateralFactor ?? 1) * depositsUSD;
10897
10944
  borrowDiscountedCollateral += (config?.borrowCollateralFactor ?? 1) * depositsUSD;
10898
10945
  adjustedDebt += (config?.borrowFactor ?? 1) * debtUSD;
@@ -10900,7 +10947,7 @@ function createMultiAccountTypeUserState(payload, lenderData, histData) {
10900
10947
  borrowInterest += debtUSD * variableBorrowRate;
10901
10948
  }
10902
10949
  const nav = deposits - debt;
10903
- balanceData2[posId] = {
10950
+ const balanceData2 = {
10904
10951
  borrowDiscountedCollateral,
10905
10952
  borrowDiscountedCollateralAllActive: borrowDiscountedCollateral,
10906
10953
  collateral,
@@ -10913,7 +10960,7 @@ function createMultiAccountTypeUserState(payload, lenderData, histData) {
10913
10960
  debt24h: histData[posId]?.totalDebt24h,
10914
10961
  nav24h: histData[posId]?.totalDeposits24h - histData[posId]?.totalDebt24h
10915
10962
  };
10916
- aprData2[posId] = {
10963
+ const aprData2 = {
10917
10964
  apr: safeDivide(depositInterest - borrowInterest, nav),
10918
10965
  borrowApr: safeDivide(borrowInterest, debt),
10919
10966
  depositApr: safeDivide(depositInterest, deposits),
@@ -10922,15 +10969,24 @@ function createMultiAccountTypeUserState(payload, lenderData, histData) {
10922
10969
  rewardBorrowApr: safeDivide(rewardBorrowAccrual, debt),
10923
10970
  stakingApr: safeDivide(stakingDepositAccrual - stakingBorrowAccrual, nav),
10924
10971
  stakingDepositApr: safeDivide(stakingDepositAccrual, deposits),
10925
- stakingBorrowApr: safeDivide(stakingBorrowAccrual, debt)
10972
+ stakingBorrowApr: safeDivide(stakingBorrowAccrual, debt),
10973
+ rewards: {}
10926
10974
  };
10975
+ data.push({
10976
+ accountId: posId,
10977
+ health: balanceData2.adjustedDebt === 0 ? null : balanceData2.borrowDiscountedCollateral / balanceData2.adjustedDebt,
10978
+ userConfig,
10979
+ // aggregated balance data
10980
+ balanceData: balanceData2,
10981
+ // aggregated apr data
10982
+ aprData: aprData2,
10983
+ positions: Object.values(payload.lendingPositions[posId])
10984
+ });
10927
10985
  }
10928
10986
  return {
10929
10987
  account,
10930
10988
  chainId,
10931
- balanceData: balanceData2,
10932
- aprData: aprData2,
10933
- userConfigs
10989
+ data
10934
10990
  };
10935
10991
  }
10936
10992
 
@@ -13526,7 +13582,7 @@ var getAbi = (lender) => {
13526
13582
  if (isCompoundV2Type(lender)) return VenusLensAbi;
13527
13583
  return [];
13528
13584
  };
13529
- var getLenderPublicData = async (chainId, lenders, prices, additionalYields, multicallRetry2, tokenList = async () => {
13585
+ var getLenderPublicData = async (chainId, lenders, prices, additionalYields, multicallRetry3, tokenList = async () => {
13530
13586
  return {};
13531
13587
  }) => {
13532
13588
  let calls = [];
@@ -13537,7 +13593,7 @@ var getLenderPublicData = async (chainId, lenders, prices, additionalYields, mul
13537
13593
  calls = [...calls, ...mappedCalls];
13538
13594
  }
13539
13595
  const [rawResults, list] = await Promise.all([
13540
- multicallRetry2(
13596
+ multicallRetry3(
13541
13597
  chainId,
13542
13598
  calls.map((call) => call.call),
13543
13599
  calls.map((call) => call.abi)
@@ -13649,7 +13705,7 @@ function lenderCanUseApi(lender, chainId) {
13649
13705
  }
13650
13706
  return false;
13651
13707
  }
13652
- var getLenderPublicDataAll = async (chainId, lenders, prices, additionalYields, multicallRetry2, tokenList) => {
13708
+ var getLenderPublicDataAll = async (chainId, lenders, prices, additionalYields, multicallRetry3, tokenList) => {
13653
13709
  const lendersApi = lenders.filter((l) => lenderCanUseApi(l, chainId));
13654
13710
  const lendersOnChain = lenders.filter((l) => !lenderCanUseApi(l, chainId));
13655
13711
  const onChain = getLenderPublicData(
@@ -13657,7 +13713,7 @@ var getLenderPublicDataAll = async (chainId, lenders, prices, additionalYields,
13657
13713
  lendersOnChain,
13658
13714
  prices,
13659
13715
  additionalYields,
13660
- multicallRetry2,
13716
+ multicallRetry3,
13661
13717
  tokenList
13662
13718
  );
13663
13719
  const api = getLenderPublicDataViaApi(
@@ -13670,8 +13726,85 @@ var getLenderPublicDataAll = async (chainId, lenders, prices, additionalYields,
13670
13726
  const [onChainRes, apiRes] = await Promise.all([onChain, api]);
13671
13727
  return { ...onChainRes, ...apiRes };
13672
13728
  };
13673
- var { isArray } = lodash;
13729
+
13730
+ // src/utils/constants.ts
13674
13731
  var MULTICALL_DEFAULT_BATCH_SIZE = 4096;
13732
+ var CELO_MULTICALL_ADDRESS = "0x633987602DE5C4F337e3DbF265303A1080324204";
13733
+ var BNB_MULTICALL_ADDRESS = "0x963Df249eD09c358A4819E39d9Cd5736c3087184";
13734
+ var MANTLE_MULTICALL_ADDRESS = "0x2A51f2F647E1883F88C992244dEd171238693107";
13735
+ var ARBITRUM_ONE_MULTICALL_ADDRESS = "0xadF885960B47eA2CD9B55E6DAc6B42b7Cb2806dB";
13736
+ var LINEA_MULTICALL_ADDRESS = "0xac1cE734566f390A94b00eb9bf561c2625BF44ea";
13737
+ var AVALANCHE_MULTICALL_ADDRESS = "0x0139141Cd4Ee88dF3Cdb65881D411bAE271Ef0C2";
13738
+ var BASE_MULTICALL_ADDRESS = "0x091e99cb1C49331a94dD62755D168E941AbD0693";
13739
+ var BLAST_MULTICALL_ADDRESS = "0xdC7f370de7631cE9e2c2e1DCDA6B3B5744Cf4705";
13740
+ var TAIKO_MULTICALL_ADDRESS = "0x8E24CfC19c6C00c524353CB8816f5f1c2F33c201";
13741
+ var HEMI_MULTICALL_ADDRESS = "0x352A86168e6988A1aDF9A15Cb00017AAd3B67155";
13742
+ var GNOSIS_MULTICALL_ADDRESS = "0x4dfa9a980efE4802E969AC33968E3d6E59B8a19e";
13743
+ var MODE_MULTICALL_ADDRESS = "0xAB39cE30D98a59DFDa40A630b074170800bfF179";
13744
+ var FANTOM_MULTICALL_ADDRESS = "0xDb51CffFf3B989d0cB6b58AbF173371b6F2d0D24";
13745
+ var SCROLL_MULTICALL_ADDRESS = "0x3b615B1AC55bc34e51a81D3dea67467F32bcb8C2";
13746
+ var SHAPE_MULTICALL_ADDRESS = "0x356A450B32f5030ae7083702b86FaFbBe7490411";
13747
+ var SONIC_MULTICALL_ADDRESS = "0x5d6b0f5335ec95cD2aB7E52f2A0750dd86502435";
13748
+ var INK_MULTICALL_ADDRESS = "0xA0fCec583AeE6176527C07B198e5561722332014";
13749
+ var METIS_MULTICALL_ADDRESS = "0x7a59ddbB76521E8982Fa3A08598C9a83b14A6C07";
13750
+ var IOTA_MULTICALL_ADDRESS = "0x9683D433621A83aA7dd290106e1da85251317F55";
13751
+ var KAVA_MULTICALL_ADDRESS = "0x8B741B0D79BE80E135C880F7583d427B4D41F015";
13752
+ var CORN_MULTICALL_ADDRESS = "0x5d6b0f5335ec95cD2aB7E52f2A0750dd86502435";
13753
+ var SAGA_MULTICALL_ADDRESS = "0x743E03cceB4af2efA3CC76838f6E8B50B63F184c";
13754
+ var CYBER_MULTICALL_ADDRESS = "0x906d6eB9CF8f64e100e44f8f491b833a8d40B530";
13755
+ var METAL_MULTICALL_ADDRESS = "0x5d6b0f5335ec95cD2aB7E52f2A0750dd86502435";
13756
+ var ZERO_MULTICALL_ADDRESS = "0x9CA4dcb2505fbf536F6c54AA0a77C79f4fBC35C0";
13757
+ var BOB_MULTICALL_ADDRESS = "0x5d6b0f5335ec95cD2aB7E52f2A0750dd86502435";
13758
+ var WORLDCHAIN_MULTICALL_ADDRESS = "0x0a22c04215c97E3F532F4eF30e0aD9458792dAB9";
13759
+ var LISK_MULTICALL_ADDRESS = "0xE3dbcD53f4Ce1b06Ab200f4912BD35672e68f1FA";
13760
+ var REDSTONE_MULTICALL_ADDRESS = "0xd57B52452a0FDfE3ff8e0A40Bd10D00D0bfe0723";
13761
+ var MANTA_MULTICALL_ADDRESS = "0x52dFC0D9960F11A9Ca9FF616e791B91188446a60";
13762
+ var ZORA_MULTICALL_ADDRESS = "0xA51c76bEE6746cB487a7e9312E43e2b8f4A37C15";
13763
+ var CORE_MULTICALL_ADDRESS = "0xFe9F82D820757787895Da00B1dBD35c3B8b04894";
13764
+ var MORPH_MULTICALL_ADDRESS = "0xAcD82113982479B25E7c1D09858F0130921Dbbca";
13765
+ var TELOS_MULTICALL_ADDRESS = "0x5d6b0f5335ec95cD2aB7E52f2A0750dd86502435";
13766
+ var MULTICALL_ADDRESS = {
13767
+ [Chain.OP_MAINNET]: "0x1F98415757620B543A52E61c46B32eB19261F984",
13768
+ [Chain.POLYGON_MAINNET]: "0x1F98415757620B543A52E61c46B32eB19261F984",
13769
+ [Chain.ETHEREUM_MAINNET]: "0x1F98415757620B543A52E61c46B32eB19261F984",
13770
+ [Chain.ARBITRUM_ONE]: ARBITRUM_ONE_MULTICALL_ADDRESS,
13771
+ [Chain.BASE]: BASE_MULTICALL_ADDRESS,
13772
+ [Chain.CELO_MAINNET]: CELO_MULTICALL_ADDRESS,
13773
+ [Chain.BNB_SMART_CHAIN_MAINNET]: BNB_MULTICALL_ADDRESS,
13774
+ [Chain.MANTLE]: MANTLE_MULTICALL_ADDRESS,
13775
+ [Chain.BLAST]: BLAST_MULTICALL_ADDRESS,
13776
+ [Chain.LINEA]: LINEA_MULTICALL_ADDRESS,
13777
+ [Chain.AVALANCHE_C_CHAIN]: AVALANCHE_MULTICALL_ADDRESS,
13778
+ [Chain.TAIKO_ALETHIA]: TAIKO_MULTICALL_ADDRESS,
13779
+ [Chain.HEMI_NETWORK]: HEMI_MULTICALL_ADDRESS,
13780
+ [Chain.GNOSIS]: GNOSIS_MULTICALL_ADDRESS,
13781
+ [Chain.CORE_BLOCKCHAIN_MAINNET]: CORE_MULTICALL_ADDRESS,
13782
+ [Chain.METIS_ANDROMEDA_MAINNET]: METIS_MULTICALL_ADDRESS,
13783
+ [Chain.MODE]: MODE_MULTICALL_ADDRESS,
13784
+ [Chain.INK]: INK_MULTICALL_ADDRESS,
13785
+ [Chain.IOTA_EVM]: IOTA_MULTICALL_ADDRESS,
13786
+ [Chain.CORN]: CORN_MULTICALL_ADDRESS,
13787
+ [Chain.SONIC_MAINNET]: SONIC_MULTICALL_ADDRESS,
13788
+ [Chain.FANTOM_OPERA]: FANTOM_MULTICALL_ADDRESS,
13789
+ [Chain.SCROLL]: SCROLL_MULTICALL_ADDRESS,
13790
+ [Chain.SHAPE]: SHAPE_MULTICALL_ADDRESS,
13791
+ [Chain.CYBER_MAINNET]: CYBER_MULTICALL_ADDRESS,
13792
+ [Chain.ZORA]: ZORA_MULTICALL_ADDRESS,
13793
+ [Chain.MANTA_PACIFIC_MAINNET]: MANTA_MULTICALL_ADDRESS,
13794
+ [Chain.REDSTONE]: REDSTONE_MULTICALL_ADDRESS,
13795
+ [Chain.KAVA]: KAVA_MULTICALL_ADDRESS,
13796
+ [Chain.METAL_L2]: METAL_MULTICALL_ADDRESS,
13797
+ [Chain.LISK]: LISK_MULTICALL_ADDRESS,
13798
+ [Chain.BOB]: BOB_MULTICALL_ADDRESS,
13799
+ [Chain.ZERO_NETWORK]: ZERO_MULTICALL_ADDRESS,
13800
+ [Chain.SAGA]: SAGA_MULTICALL_ADDRESS,
13801
+ [Chain.MORPH]: MORPH_MULTICALL_ADDRESS,
13802
+ [Chain.TELOS_EVM_MAINNET]: TELOS_MULTICALL_ADDRESS,
13803
+ [Chain.WORLD_CHAIN]: WORLDCHAIN_MULTICALL_ADDRESS
13804
+ };
13805
+
13806
+ // src/utils/multicall.ts
13807
+ var { isArray } = lodash;
13675
13808
  var maxRetries = 3;
13676
13809
  var multicallViemAbiArray = async (chainId, abi, calls, getEvmClient2, retry = true, providerId = 0, retries = maxRetries, allowFailure = true, batchSize = MULTICALL_DEFAULT_BATCH_SIZE, logs = false) => {
13677
13810
  try {
@@ -13711,6 +13844,117 @@ var multicallViemAbiArray = async (chainId, abi, calls, getEvmClient2, retry = t
13711
13844
  );
13712
13845
  }
13713
13846
  };
13847
+ function prepareMulticallInputs(abi, calls) {
13848
+ const abiIsArray = isArray(abi[0]);
13849
+ return calls.map(({ address, name, params }, i) => ({
13850
+ address,
13851
+ functionName: name,
13852
+ params: params || [],
13853
+ abi: abiIsArray ? abi[i] : abi
13854
+ }));
13855
+ }
13856
+
13857
+ // src/utils/rpcCall.ts
13858
+ var multicall3Abi = [
13859
+ {
13860
+ type: "function",
13861
+ name: "aggregate3",
13862
+ stateMutability: "payable",
13863
+ inputs: [
13864
+ {
13865
+ name: "calls",
13866
+ type: "tuple[]",
13867
+ components: [
13868
+ { name: "target", type: "address" },
13869
+ { name: "allowFailure", type: "bool" },
13870
+ { name: "callData", type: "bytes" }
13871
+ ]
13872
+ }
13873
+ ],
13874
+ outputs: [
13875
+ {
13876
+ name: "returnData",
13877
+ type: "tuple[]",
13878
+ components: [
13879
+ { name: "success", type: "bool" },
13880
+ { name: "returnData", type: "bytes" }
13881
+ ]
13882
+ }
13883
+ ]
13884
+ }
13885
+ ];
13886
+ function createRawRpcCalls(preparedCalls, batchSize = MULTICALL_DEFAULT_BATCH_SIZE, blockTag = "latest") {
13887
+ const batches = [];
13888
+ for (let i = 0; i < preparedCalls.length; i += batchSize) {
13889
+ const batchCalls = preparedCalls.slice(i, i + batchSize);
13890
+ const rpcCalls = batchCalls.map((call, idx) => {
13891
+ const data = encodeFunctionData({
13892
+ abi: call.abi,
13893
+ functionName: call.functionName,
13894
+ args: call.params
13895
+ });
13896
+ return {
13897
+ jsonrpc: "2.0",
13898
+ id: i + idx + 1,
13899
+ method: "eth_call",
13900
+ params: [
13901
+ {
13902
+ to: call.address,
13903
+ data
13904
+ },
13905
+ blockTag
13906
+ ]
13907
+ };
13908
+ });
13909
+ batches.push({
13910
+ batchIndex: Math.floor(i / batchSize),
13911
+ calls: rpcCalls,
13912
+ callMetadata: batchCalls
13913
+ });
13914
+ }
13915
+ return batches;
13916
+ }
13917
+ function createMulticallRpcCall(preparedCalls, multicallAddress, batchSize = MULTICALL_DEFAULT_BATCH_SIZE, blockTag = "latest", allowFailure = true) {
13918
+ const batches = [];
13919
+ for (let i = 0; i < preparedCalls.length; i += batchSize) {
13920
+ const batchCalls = preparedCalls.slice(i, i + batchSize);
13921
+ const aggregate3Calls = batchCalls.map((call) => {
13922
+ const callData = encodeFunctionData({
13923
+ abi: call.abi,
13924
+ functionName: call.functionName,
13925
+ args: call.params
13926
+ });
13927
+ return {
13928
+ target: call.address,
13929
+ allowFailure,
13930
+ callData
13931
+ };
13932
+ });
13933
+ const multicallData = encodeFunctionData({
13934
+ abi: multicall3Abi,
13935
+ functionName: "aggregate3",
13936
+ args: [aggregate3Calls]
13937
+ });
13938
+ const rpcCall = {
13939
+ jsonrpc: "2.0",
13940
+ id: Math.floor(i / batchSize) + 1,
13941
+ method: "eth_call",
13942
+ params: [
13943
+ {
13944
+ to: multicallAddress,
13945
+ data: multicallData
13946
+ },
13947
+ blockTag
13948
+ ]
13949
+ };
13950
+ batches.push({
13951
+ batchIndex: Math.floor(i / batchSize),
13952
+ call: rpcCall,
13953
+ callMetadata: batchCalls
13954
+ });
13955
+ }
13956
+ return batches;
13957
+ }
13714
13958
  function organizeUserQueries(queries) {
13715
13959
  const morphos = queries.filter((q) => isMorphoType(q.lender));
13716
13960
  if (morphos.length === 0) return queries;
@@ -13747,10 +13991,12 @@ var getBaseAaveV2Calls = (chainId, account, lender, assetsToQuery) => {
13747
13991
  }
13748
13992
  ]);
13749
13993
  };
13750
- var buildAaveV2UserCall = (chainId, lender, account, assets) => {
13994
+ var buildAaveV2UserCall = (chainId, lender, account) => {
13751
13995
  switch (lender) {
13752
13996
  default: {
13753
- const assetsToQuery = getAaveAssets(chainId, lender);
13997
+ const assetsToQuery = getAaveAssets(chainId, lender).sort(
13998
+ (a, b) => a.toLowerCase().localeCompare(b.toLowerCase())
13999
+ );
13754
14000
  return getBaseAaveV2Calls(chainId, account, lender, assetsToQuery);
13755
14001
  }
13756
14002
  }
@@ -13766,8 +14012,10 @@ var getBaseAaveV3Calls = (chainId, account, lender, assetsToQuery) => {
13766
14012
  }
13767
14013
  ]);
13768
14014
  };
13769
- var buildAaveV3UserCall = (chainId, lender, account, assets) => {
13770
- const assetsToQuery = assets ?? getAaveAssets(chainId, lender);
14015
+ var buildAaveV3UserCall = (chainId, lender, account) => {
14016
+ const assetsToQuery = getAaveAssets(chainId, lender).sort(
14017
+ (a, b) => a.toLowerCase().localeCompare(b.toLowerCase())
14018
+ );
13771
14019
  const calls = [...getBaseAaveV3Calls(chainId, account, lender, assetsToQuery)];
13772
14020
  if (!isYLDR(lender)) {
13773
14021
  const callDataEmode = {
@@ -13800,10 +14048,12 @@ var buildInitUserCall = (chainId, lender, account) => {
13800
14048
  };
13801
14049
 
13802
14050
  // src/lending/user-data/compound-v3/userCallBuild.ts
13803
- var buildCompoundV3UserCall = (chainId, lender, account, assetsOverride) => {
14051
+ var buildCompoundV3UserCall = (chainId, lender, account) => {
13804
14052
  const baseAsset = getCompoundV3BaseAsset(lender, chainId)?.baseAsset;
13805
14053
  const cometContractAddress = getCompoundV3CometAddress(chainId, lender);
13806
- const assets = assetsOverride ?? getLenderAssets(chainId, lender);
14054
+ const assets = getLenderAssets(chainId, lender).sort(
14055
+ (a, b) => a.toLowerCase().localeCompare(b.toLowerCase())
14056
+ );
13807
14057
  const assetsNoBase = assets.filter((a) => a !== baseAsset);
13808
14058
  const baseCalls = [
13809
14059
  {
@@ -18225,10 +18475,12 @@ var getAbi2 = (lender) => {
18225
18475
  };
18226
18476
 
18227
18477
  // src/lending/user-data/aave-v2-type/userCallParse.ts
18228
- var getAaveV2UserDataConverter = (lender, chainId, account, prices, pricesHist, lenderData) => {
18478
+ var getAaveV2UserDataConverter = (lender, chainId, account, metaMap) => {
18229
18479
  switch (lender) {
18230
18480
  default: {
18231
- const assetsToQuery = Object.keys(lenderData);
18481
+ const assetsToQuery = getAaveAssets(chainId, lender).sort(
18482
+ (a, b) => a.toLowerCase().localeCompare(b.toLowerCase())
18483
+ );
18232
18484
  const expectedNumberOfCalls = assetsToQuery.length;
18233
18485
  return [
18234
18486
  (data) => {
@@ -18240,19 +18492,13 @@ var getAaveV2UserDataConverter = (lender, chainId, account, prices, pricesHist,
18240
18492
  let totalDeposits24h = 0;
18241
18493
  for (let i = 0; i < assetsToQuery.length; i++) {
18242
18494
  const asset = assetsToQuery[i];
18243
- const { dataForAsset, addedDebt, addedDeposits } = createAaveV2Entry(
18244
- i,
18245
- data,
18246
- chainId,
18247
- lenderData[asset].asset,
18248
- prices,
18249
- pricesHist,
18250
- 0
18251
- );
18495
+ const key = createMarketUid(chainId, lender, asset);
18496
+ const metaEntity = metaMap?.[key];
18497
+ const { dataForAsset, addedDebt, addedDeposits } = createAaveV2Entry(i, data, key, metaEntity, 0);
18252
18498
  if (!dataForAsset) continue;
18253
18499
  totalDebt24h += addedDebt;
18254
18500
  totalDeposits24h += addedDeposits;
18255
- lendingPositions[asset] = dataForAsset;
18501
+ lendingPositions[key] = dataForAsset;
18256
18502
  }
18257
18503
  const payload = {
18258
18504
  chainId,
@@ -18262,21 +18508,18 @@ var getAaveV2UserDataConverter = (lender, chainId, account, prices, pricesHist,
18262
18508
  };
18263
18509
  const userData = createBaseTypeUserState(
18264
18510
  payload,
18265
- lenderData,
18511
+ metaMap,
18266
18512
  totalDeposits24h,
18267
18513
  totalDebt24h
18268
18514
  );
18269
- return {
18270
- ...payload,
18271
- ...userData
18272
- };
18515
+ return userData;
18273
18516
  },
18274
18517
  expectedNumberOfCalls
18275
18518
  ];
18276
18519
  }
18277
18520
  }
18278
18521
  };
18279
- function createAaveV2Entry(i, data, chainId, asset, prices, pricesHist, claimableRewards) {
18522
+ function createAaveV2Entry(i, data, key, meta, claimableRewards) {
18280
18523
  const reserveData = data[i];
18281
18524
  const currentATokenBalanceRaw = reserveData[0 /* currentATokenBalance */]?.toString();
18282
18525
  const currentStableDebtRaw = reserveData[1 /* currentStableDebt */]?.toString();
@@ -18288,7 +18531,7 @@ function createAaveV2Entry(i, data, chainId, asset, prices, pricesHist, claimabl
18288
18531
  addedDebt: 0
18289
18532
  };
18290
18533
  }
18291
- const assetMeta = asset;
18534
+ const assetMeta = meta.asset;
18292
18535
  const decimals = assetMeta?.decimals ?? 18;
18293
18536
  const currentATokenBalance = Number(
18294
18537
  parseRawAmount(currentATokenBalanceRaw, decimals)
@@ -18299,12 +18542,11 @@ function createAaveV2Entry(i, data, chainId, asset, prices, pricesHist, claimabl
18299
18542
  const currentVariableDebt = Number(
18300
18543
  parseRawAmount(currentVariableDebtRaw, decimals)
18301
18544
  );
18302
- const key = toOracleKey(assetMeta?.assetGroup) ?? toGenericPriceKey(asset.address, chainId);
18303
- const price = prices[key] ?? 1;
18304
- const priceHist = pricesHist?.[key] ?? price;
18545
+ const price = meta?.price?.priceUsd ?? 1;
18546
+ const priceHist = meta?.price?.priceUsd24h ?? price;
18305
18547
  const dataForAsset = {
18306
- poolId: asset.address,
18307
- underlying: asset.address,
18548
+ poolId: key,
18549
+ underlying: assetMeta.address,
18308
18550
  deposits: currentATokenBalance,
18309
18551
  depositsRaw: currentATokenBalanceRaw,
18310
18552
  debtStable: currentStableDebt,
@@ -18326,8 +18568,10 @@ function createAaveV2Entry(i, data, chainId, asset, prices, pricesHist, claimabl
18326
18568
  }
18327
18569
 
18328
18570
  // src/lending/user-data/aave-v3-type/userCallParse.ts
18329
- var getAaveV3UserDataConverter = (lender, chainId, account, prices, pricesHist, lenderData) => {
18330
- const assetsToQuery = Object.keys(lenderData);
18571
+ var getAaveV3UserDataConverter = (lender, chainId, account, metaMap) => {
18572
+ const assetsToQuery = getAaveAssets(chainId, lender).sort(
18573
+ (a, b) => a.toLowerCase().localeCompare(b.toLowerCase())
18574
+ );
18331
18575
  const expectedNumberOfCalls = assetsToQuery.length + 1;
18332
18576
  return [
18333
18577
  (data) => {
@@ -18340,18 +18584,18 @@ var getAaveV3UserDataConverter = (lender, chainId, account, prices, pricesHist,
18340
18584
  let totalDeposits24h = 0;
18341
18585
  for (let i = 0; i < assetsToQuery.length; i++) {
18342
18586
  const asset = assetsToQuery[i];
18587
+ const key = createMarketUid(chainId, lender, asset);
18588
+ const metaEntity = metaMap?.[key];
18343
18589
  const { dataForAsset, addedDebt, addedDeposits } = createAaveV3Entry(
18344
18590
  i,
18345
18591
  data,
18346
- chainId,
18347
- lenderData[asset].asset,
18348
- prices,
18349
- pricesHist
18592
+ key,
18593
+ metaEntity
18350
18594
  );
18351
18595
  if (!dataForAsset) continue;
18352
18596
  totalDebt24h += addedDebt;
18353
18597
  totalDeposits24h += addedDeposits;
18354
- lendingPositions[asset] = dataForAsset;
18598
+ lendingPositions[key] = dataForAsset;
18355
18599
  }
18356
18600
  const payload = {
18357
18601
  chainId,
@@ -18362,19 +18606,16 @@ var getAaveV3UserDataConverter = (lender, chainId, account, prices, pricesHist,
18362
18606
  };
18363
18607
  const userData = createBaseTypeUserState(
18364
18608
  payload,
18365
- lenderData,
18609
+ metaMap,
18366
18610
  totalDeposits24h,
18367
18611
  totalDebt24h
18368
18612
  );
18369
- return {
18370
- ...payload,
18371
- ...userData
18372
- };
18613
+ return userData;
18373
18614
  },
18374
18615
  expectedNumberOfCalls
18375
18616
  ];
18376
18617
  };
18377
- function createAaveV3Entry(i, data, chainId, asset, prices, pricesHist) {
18618
+ function createAaveV3Entry(i, data, key, meta) {
18378
18619
  const reserveData = data[i];
18379
18620
  const currentATokenBalanceRaw = reserveData[0 /* currentATokenBalance */]?.toString();
18380
18621
  const currentStableDebtRaw = reserveData[1 /* currentStableDebt */]?.toString();
@@ -18386,17 +18627,16 @@ function createAaveV3Entry(i, data, chainId, asset, prices, pricesHist) {
18386
18627
  addedDebt: 0
18387
18628
  };
18388
18629
  }
18389
- const assetMeta = asset;
18630
+ const assetMeta = meta.asset;
18390
18631
  const decimals = assetMeta?.decimals ?? 18;
18391
18632
  const currentATokenBalance = parseRawAmount(currentATokenBalanceRaw, decimals);
18392
18633
  const currentStableDebt = parseRawAmount(currentStableDebtRaw, decimals);
18393
18634
  const currentVariableDebt = parseRawAmount(currentVariableDebtRaw, decimals);
18394
- const key = toOracleKey(assetMeta?.assetGroup) ?? toGenericPriceKey(asset.address, chainId);
18395
- const price = prices[key] ?? 1;
18396
- const priceHist = pricesHist?.[key] ?? price;
18635
+ const price = meta?.price?.priceUsd ?? 1;
18636
+ const priceHist = meta?.price?.priceUsd24h ?? price;
18397
18637
  const dataForAsset = {
18398
- poolId: asset.address,
18399
- underlying: asset.address,
18638
+ poolId: key,
18639
+ underlying: assetMeta.address,
18400
18640
  deposits: currentATokenBalance,
18401
18641
  depositsRaw: currentATokenBalanceRaw,
18402
18642
  debtStable: currentStableDebt,
@@ -18418,7 +18658,7 @@ function createAaveV3Entry(i, data, chainId, asset, prices, pricesHist) {
18418
18658
  }
18419
18659
 
18420
18660
  // src/lending/user-data/init/userCallParse.ts
18421
- var getInitUserDataConverter = (lender, chainId, account, prices, pricesHist, lenderData) => {
18661
+ var getInitUserDataConverter = (lender, chainId, account, metaMap) => {
18422
18662
  const validOwner = account.toLowerCase();
18423
18663
  const brokerAddress = getInitFlashAggregatorAddress(chainId) ?? "";
18424
18664
  const expectedNumberOfCalls = 1;
@@ -18431,8 +18671,8 @@ var getInitUserDataConverter = (lender, chainId, account, prices, pricesHist, le
18431
18671
  const indexes = data[0 /* posMeta */].map((e, i) => {
18432
18672
  return { e, i };
18433
18673
  }).filter((a) => a.e.owner.toLowerCase() === validOwner).map((a) => a.i);
18434
- const assets = Object.keys(lenderData);
18435
18674
  let histData = {};
18675
+ let allPools = {};
18436
18676
  const result = Object.assign(
18437
18677
  {},
18438
18678
  ...indexes.map((index) => {
@@ -18443,11 +18683,14 @@ var getInitUserDataConverter = (lender, chainId, account, prices, pricesHist, le
18443
18683
  {},
18444
18684
  ...data[1 /* collaterals */][index].map(
18445
18685
  (c) => {
18446
- const asset = c.underlying.toLowerCase();
18447
- const decimals = lenderData[asset].asset?.decimals ?? 18;
18686
+ const pool = c.pool.toLowerCase();
18687
+ allPools[pool] = c.underlying.toLowerCase();
18688
+ const key = createMarketUid(chainId, lender, pool);
18689
+ const metaEntity = metaMap?.[key];
18690
+ const decimals = metaEntity.asset?.decimals ?? 18;
18448
18691
  const depositsRaw = c.amount.toString();
18449
18692
  return {
18450
- [asset]: {
18693
+ [pool]: {
18451
18694
  deposits: parseRawAmount(depositsRaw, decimals),
18452
18695
  depositsRaw
18453
18696
  }
@@ -18459,10 +18702,13 @@ var getInitUserDataConverter = (lender, chainId, account, prices, pricesHist, le
18459
18702
  {},
18460
18703
  ...data[2 /* debts */][index].map(
18461
18704
  (c) => {
18462
- const asset = c.underlying.toLowerCase();
18463
- const decimals = lenderData[asset]?.asset?.decimals ?? 18;
18705
+ const pool = c.pool.toLowerCase();
18706
+ allPools[pool] = c.underlying.toLowerCase();
18707
+ const key = createMarketUid(chainId, lender, pool);
18708
+ const metaEntity = metaMap?.[key];
18709
+ const decimals = metaEntity.asset?.decimals ?? 18;
18464
18710
  return {
18465
- [asset]: {
18711
+ [pool]: {
18466
18712
  debt: parseRawAmount(c.amount.toString(), decimals)
18467
18713
  }
18468
18714
  };
@@ -18474,36 +18720,39 @@ var getInitUserDataConverter = (lender, chainId, account, prices, pricesHist, le
18474
18720
  mode,
18475
18721
  ...Object.assign(
18476
18722
  {},
18477
- ...assets.map((a) => {
18478
- const ams = toOracleKey(lenderData[a]?.asset?.assetGroup);
18479
- const price = prices[ams] ?? 1;
18480
- const priceHist = pricesHist?.[ams] ?? price;
18481
- if (!histData[id])
18482
- histData[id] = {
18483
- totalDebt24h: 0,
18484
- totalDeposits24h: 0
18723
+ ...Object.entries(allPools).map(
18724
+ ([pool, underlying]) => {
18725
+ const key = createMarketUid(chainId, lender, pool);
18726
+ const metaEntity = metaMap?.[key];
18727
+ const price = metaEntity?.price?.priceUsd ?? 1;
18728
+ const priceHist = metaEntity?.price?.priceUsd24h ?? price;
18729
+ if (!histData[id])
18730
+ histData[id] = {
18731
+ totalDebt24h: 0,
18732
+ totalDeposits24h: 0
18733
+ };
18734
+ const debt = debtData[pool]?.debt ?? 0;
18735
+ const deposits = collatData[pool]?.deposits ?? 0;
18736
+ const depositsRaw = collatData[pool]?.depositsRaw ?? "0";
18737
+ histData[id].totalDebt24h += Number(debt) * priceHist;
18738
+ histData[id].totalDeposits24h += Number(deposits) * priceHist;
18739
+ return {
18740
+ [key]: {
18741
+ poolId: key,
18742
+ underlying,
18743
+ deposits,
18744
+ depositsRaw,
18745
+ debt,
18746
+ debtStable: "0",
18747
+ debtStableUSD: 0,
18748
+ depositsUSD: price * Number(deposits),
18749
+ debtUSD: price * Number(debt),
18750
+ collateralEnabled: true,
18751
+ isAllowed: entry.approved.toLowerCase() === brokerAddress.toLowerCase()
18752
+ }
18485
18753
  };
18486
- const debt = debtData[a]?.debt ?? 0;
18487
- const deposits = collatData[a]?.deposits ?? 0;
18488
- const depositsRaw = collatData[a]?.depositsRaw ?? "0";
18489
- histData[id].totalDebt24h += Number(debt) * priceHist;
18490
- histData[id].totalDeposits24h += Number(deposits) * priceHist;
18491
- return {
18492
- [a]: {
18493
- poolId: a,
18494
- underlying: a,
18495
- deposits,
18496
- depositsRaw,
18497
- debt,
18498
- debtStable: "0",
18499
- debtStableUSD: 0,
18500
- depositsUSD: price * Number(deposits),
18501
- debtUSD: price * Number(debt),
18502
- collateralEnabled: true,
18503
- isAllowed: entry.approved.toLowerCase() === brokerAddress.toLowerCase()
18504
- }
18505
- };
18506
- })
18754
+ }
18755
+ )
18507
18756
  )
18508
18757
  }
18509
18758
  };
@@ -18515,24 +18764,23 @@ var getInitUserDataConverter = (lender, chainId, account, prices, pricesHist, le
18515
18764
  account
18516
18765
  };
18517
18766
  const userState = createMultiAccountTypeUserState(
18518
- { ...payload, assets },
18519
- lenderData,
18767
+ payload,
18768
+ metaMap,
18520
18769
  histData
18521
18770
  );
18522
- return {
18523
- ...payload,
18524
- ...userState
18525
- };
18771
+ return userState;
18526
18772
  },
18527
18773
  expectedNumberOfCalls
18528
18774
  ];
18529
18775
  };
18530
18776
 
18531
18777
  // src/lending/user-data/compound-v3/userCallParse.ts
18532
- var getCompoundV3UserDataConverter = (lender, chainId, account, prices, pricesHist, lenderData) => {
18533
- const assetAddresses = Object.keys(lenderData);
18778
+ var getCompoundV3UserDataConverter = (lender, chainId, account, metaMap) => {
18534
18779
  const baseAsset = getCompoundV3BaseAsset(lender, chainId)?.baseAsset;
18535
- const assetsNoBase = assetAddresses.filter((a) => a !== baseAsset);
18780
+ const assets = getLenderAssets(chainId, lender).sort(
18781
+ (a, b) => a.toLowerCase().localeCompare(b.toLowerCase())
18782
+ );
18783
+ const assetsNoBase = assets.filter((a) => a !== baseAsset);
18536
18784
  const expectedNumberOfCalls = assetsNoBase.length + 2 + 1;
18537
18785
  return [
18538
18786
  (data) => {
@@ -18544,20 +18792,21 @@ var getCompoundV3UserDataConverter = (lender, chainId, account, prices, pricesHi
18544
18792
  let result = {};
18545
18793
  for (let i = 0; i < assetsNoBase.length; i++) {
18546
18794
  const asset = assetsNoBase[i];
18547
- const assetMeta = lenderData[asset].asset;
18795
+ const key2 = createMarketUid(chainId, lender, asset);
18796
+ const metaEntity2 = metaMap?.[key2];
18797
+ const assetMeta = metaEntity2.asset;
18548
18798
  const decimals = assetMeta?.decimals ?? 18;
18549
18799
  const depositsRaw2 = data[i][0]?.toString();
18550
18800
  if (depositsRaw2 === "0") continue;
18551
18801
  const deposits2 = parseRawAmount(depositsRaw2, decimals);
18552
- const key = toOracleKey(assetMeta?.assetGroup) ?? toGenericPriceKey(asset, chainId);
18553
- const price = prices[key] ?? 1;
18554
- const priceHist = pricesHist?.[key] ?? price;
18555
- totalDeposits24h += Number(deposits2) * priceHist;
18556
- result[asset] = {
18557
- poolId: asset,
18802
+ const price2 = metaEntity2?.price?.priceUsd ?? 1;
18803
+ const priceHist2 = metaEntity2?.price?.priceUsd24h ?? price2;
18804
+ totalDeposits24h += Number(deposits2) * priceHist2;
18805
+ result[key2] = {
18806
+ poolId: key2,
18558
18807
  underlying: asset,
18559
18808
  deposits: deposits2,
18560
- depositsUSD: Number(deposits2) * price,
18809
+ depositsUSD: Number(deposits2) * price2,
18561
18810
  debtStableUSD: 0,
18562
18811
  debt: "0",
18563
18812
  debtStable: "0",
@@ -18570,23 +18819,24 @@ var getCompoundV3UserDataConverter = (lender, chainId, account, prices, pricesHi
18570
18819
  }
18571
18820
  const depositsRaw = data[assetsNoBase.length]?.toString();
18572
18821
  const debtRaw = data[assetsNoBase.length + 1]?.toString();
18573
- const baseMeta = lenderData[baseAsset].asset;
18822
+ const key = createMarketUid(chainId, lender, baseAsset);
18823
+ const metaEntity = metaMap?.[key];
18824
+ const baseMeta = metaEntity.asset;
18574
18825
  const baseDecimals = baseMeta.decimals ?? 18;
18575
18826
  const deposits = parseRawAmount(depositsRaw, baseDecimals);
18576
18827
  const debt = parseRawAmount(debtRaw, baseDecimals);
18577
- const oracleKeyBase = toOracleKey(baseMeta?.assetGroup) ?? toGenericPriceKey(baseMeta.baseAsset, chainId);
18578
- const priceBase = prices[oracleKeyBase];
18579
- const priceBaseHist = pricesHist?.[oracleKeyBase] ?? priceBase;
18580
- totalDebt24h += Number(debt) * priceBaseHist;
18581
- totalDeposits24h += Number(deposits) * priceBaseHist;
18582
- const resultBase = {
18583
- [baseAsset]: {
18584
- poolId: baseAsset,
18828
+ const price = metaEntity?.price?.priceUsd ?? 1;
18829
+ const priceHist = metaEntity?.price?.priceUsd24h ?? price;
18830
+ totalDebt24h += Number(debt) * priceHist;
18831
+ totalDeposits24h += Number(deposits) * priceHist;
18832
+ const resultBase = depositsRaw === "0" && debtRaw === "0" ? {} : {
18833
+ [key]: {
18834
+ poolId: key,
18585
18835
  underlying: baseAsset,
18586
18836
  deposits,
18587
18837
  debt,
18588
- depositsUSD: Number(deposits) * priceBase,
18589
- debtUSD: Number(debt) * priceBase,
18838
+ depositsUSD: Number(deposits) * price,
18839
+ debtUSD: Number(debt) * price,
18590
18840
  // populate values for totals
18591
18841
  debtStable: "0",
18592
18842
  debtStableUSD: 0,
@@ -18601,9 +18851,8 @@ var getCompoundV3UserDataConverter = (lender, chainId, account, prices, pricesHi
18601
18851
  parseRawAmount(earnedBalances?.owed?.toString(), 18)
18602
18852
  );
18603
18853
  const payload = {
18604
- lendingPositions: { [0]: { ...result, ...resultBase } },
18854
+ lendingPositions: { "0": { ...result, ...resultBase } },
18605
18855
  chainId,
18606
- baseAsset,
18607
18856
  rewards: {
18608
18857
  ["COMP"]: {
18609
18858
  totalRewards: compRewards,
@@ -18614,22 +18863,21 @@ var getCompoundV3UserDataConverter = (lender, chainId, account, prices, pricesHi
18614
18863
  };
18615
18864
  const userData = createBaseTypeUserState(
18616
18865
  payload,
18617
- lenderData,
18866
+ metaMap,
18618
18867
  totalDeposits24h,
18619
18868
  totalDebt24h
18620
18869
  );
18621
- return {
18622
- ...payload,
18623
- ...userData
18624
- };
18870
+ return userData;
18625
18871
  },
18626
18872
  expectedNumberOfCalls
18627
18873
  ];
18628
18874
  };
18629
18875
 
18630
18876
  // src/lending/user-data/aave-v3-type/userCallParseYldr.ts
18631
- var getYldrUserDataConverter = (lender, chainId, account, prices, pricesHist, lenderData) => {
18632
- const assetsToQuery = Object.keys(lenderData);
18877
+ var getYldrUserDataConverter = (lender, chainId, account, metaMap) => {
18878
+ const assetsToQuery = getAaveAssets(chainId, lender).sort(
18879
+ (a, b) => a.toLowerCase().localeCompare(b.toLowerCase())
18880
+ );
18633
18881
  const expectedNumberOfCalls = assetsToQuery.length;
18634
18882
  return [
18635
18883
  (data) => {
@@ -18641,18 +18889,18 @@ var getYldrUserDataConverter = (lender, chainId, account, prices, pricesHist, le
18641
18889
  let totalDeposits24h = 0;
18642
18890
  for (let i = 0; i < assetsToQuery.length; i++) {
18643
18891
  const asset = assetsToQuery[i];
18892
+ const key = createMarketUid(chainId, lender, asset);
18893
+ const metaEntity = metaMap?.[key];
18644
18894
  const { dataForAsset, addedDebt, addedDeposits } = createAaveV3Entry2(
18645
18895
  i,
18646
18896
  data,
18647
- chainId,
18648
- lenderData[asset].asset,
18649
- prices,
18650
- pricesHist
18897
+ key,
18898
+ metaEntity
18651
18899
  );
18652
18900
  if (!dataForAsset) continue;
18653
18901
  totalDebt24h += addedDebt;
18654
18902
  totalDeposits24h += addedDeposits;
18655
- lendingPositions[asset] = dataForAsset;
18903
+ lendingPositions[key] = dataForAsset;
18656
18904
  }
18657
18905
  const payload = {
18658
18906
  chainId,
@@ -18663,19 +18911,16 @@ var getYldrUserDataConverter = (lender, chainId, account, prices, pricesHist, le
18663
18911
  };
18664
18912
  const userData = createBaseTypeUserState(
18665
18913
  payload,
18666
- lenderData,
18914
+ metaMap,
18667
18915
  totalDeposits24h,
18668
18916
  totalDebt24h
18669
18917
  );
18670
- return {
18671
- ...payload,
18672
- ...userData
18673
- };
18918
+ return userData;
18674
18919
  },
18675
18920
  expectedNumberOfCalls
18676
18921
  ];
18677
18922
  };
18678
- function createAaveV3Entry2(i, data, chainId, asset, prices, pricesHist) {
18923
+ function createAaveV3Entry2(i, data, key, meta) {
18679
18924
  const reserveData = data[i];
18680
18925
  const currentATokenBalanceRaw = reserveData[0 /* currentYTokenBalance */]?.toString();
18681
18926
  const currentVariableDebtRaw = reserveData[1 /* currentVariableDebt */]?.toString();
@@ -18686,16 +18931,15 @@ function createAaveV3Entry2(i, data, chainId, asset, prices, pricesHist) {
18686
18931
  addedDebt: 0
18687
18932
  };
18688
18933
  }
18689
- const assetMeta = asset;
18934
+ const assetMeta = meta.asset;
18690
18935
  const decimals = assetMeta?.decimals ?? 18;
18691
18936
  const currentATokenBalance = parseRawAmount(currentATokenBalanceRaw, decimals);
18692
18937
  const currentVariableDebt = parseRawAmount(currentVariableDebtRaw, decimals);
18693
- const key = toOracleKey(assetMeta?.assetGroup) ?? toGenericPriceKey(asset.address, chainId);
18694
- const price = prices[key] ?? 1;
18695
- const priceHist = pricesHist?.[key] ?? price;
18938
+ const price = meta?.price?.priceUsd ?? 1;
18939
+ const priceHist = meta?.price?.priceUsd24h ?? price;
18696
18940
  const dataForAsset = {
18697
- poolId: asset.address,
18698
- underlying: asset.address,
18941
+ poolId: key,
18942
+ underlying: assetMeta.address,
18699
18943
  deposits: currentATokenBalance,
18700
18944
  depositsRaw: currentATokenBalanceRaw,
18701
18945
  debtStable: "0",
@@ -18799,65 +19043,66 @@ function decodePackedListaUserDataset(hex, marketsCount) {
18799
19043
 
18800
19044
  // src/lending/user-data/morpho/userCallParse.ts
18801
19045
  var CHUNK_SIZE = 100;
19046
+ function createLenderKey(lender, marketId) {
19047
+ if (marketId.startsWith(lender)) return marketId;
19048
+ return `${lender}_${marketId.replace("0x", "").toUpperCase()}`;
19049
+ }
18802
19050
  var balanceData = {
18803
- "0": {
18804
- borrowDiscountedCollateral: 0,
18805
- borrowDiscountedCollateralAllActive: 0,
18806
- collateral: 0,
18807
- deposits: 0,
18808
- debt: 0,
18809
- adjustedDebt: 0,
18810
- nav: 0,
18811
- deposits24h: 0,
18812
- debt24h: 0,
18813
- nav24h: 0
18814
- }
19051
+ borrowDiscountedCollateral: 0,
19052
+ borrowDiscountedCollateralAllActive: 0,
19053
+ collateral: 0,
19054
+ deposits: 0,
19055
+ debt: 0,
19056
+ adjustedDebt: 0,
19057
+ nav: 0,
19058
+ deposits24h: 0,
19059
+ debt24h: 0,
19060
+ nav24h: 0
18815
19061
  };
18816
19062
  var aprData = {
18817
- "0": {
18818
- apr: 0,
18819
- borrowApr: 0,
18820
- depositApr: 0,
18821
- rewards: 0,
18822
- rewardApr: 0,
18823
- rewardDepositApr: 0,
18824
- rewardBorrowApr: 0,
18825
- stakingApr: 0,
18826
- stakingDepositApr: 0,
18827
- stakingBorrowApr: 0
18828
- }
19063
+ apr: 0,
19064
+ borrowApr: 0,
19065
+ depositApr: 0,
19066
+ rewards: 0,
19067
+ rewardApr: 0,
19068
+ rewardDepositApr: 0,
19069
+ rewardBorrowApr: 0,
19070
+ stakingApr: 0,
19071
+ stakingDepositApr: 0,
19072
+ stakingBorrowApr: 0
18829
19073
  };
18830
19074
  var userDataEmpty = (account, chainId, notWhitelisted = false) => {
18831
19075
  return {
18832
19076
  account,
18833
19077
  chainId,
18834
- balanceData,
18835
- aprData,
18836
- userConfigs: {
18837
- "0": { selectedMode: 0, id: account, notWhitelisted }
18838
- }
19078
+ data: [
19079
+ {
19080
+ health: null,
19081
+ accouintId: "0",
19082
+ balanceData,
19083
+ aprData,
19084
+ positions: [],
19085
+ userConfig: { selectedMode: 0, id: account, notWhitelisted }
19086
+ }
19087
+ ]
18839
19088
  };
18840
19089
  };
18841
- var getMorphoTypeUserDataConverterWithlens = (lender, chainId, account, markets, prices, pricesHist, lenderData) => {
19090
+ var getMorphoTypeUserDataConverterWithlens = (lender, chainId, account, markets, metaMap) => {
18842
19091
  return !isLista(lender) ? getMorphoUserDataConverterWithlens(
18843
19092
  lender,
18844
19093
  chainId,
18845
19094
  account,
18846
19095
  markets,
18847
- prices,
18848
- pricesHist,
18849
- lenderData
19096
+ metaMap
18850
19097
  ) : getListaUserDataConverterWithlens(
18851
19098
  lender,
18852
19099
  chainId,
18853
19100
  account,
18854
19101
  markets,
18855
- prices,
18856
- pricesHist,
18857
- lenderData
19102
+ metaMap
18858
19103
  );
18859
19104
  };
18860
- var getMorphoUserDataConverterWithlens = (lender, chainId, account, markets, prices, pricesHist, lenderData) => {
19105
+ var getMorphoUserDataConverterWithlens = (lender, chainId, account, markets, metaMap) => {
18861
19106
  const expectedNumberOfCalls = Math.ceil(markets.length / CHUNK_SIZE);
18862
19107
  return [
18863
19108
  (data) => {
@@ -18872,16 +19117,12 @@ var getMorphoUserDataConverterWithlens = (lender, chainId, account, markets, pri
18872
19117
  for (let i = 0; i < data.length; i++) {
18873
19118
  const balanceDatas = decodePackedMorphoUserDataset(data[i]);
18874
19119
  balanceDatas.forEach((balanceData2) => {
18875
- const markeId = markets[mapMarketToChunk(balanceData2.index, i)];
18876
- marketsHandled.push(markeId);
18877
- const market = lenderData[markeId]?.params?.market;
19120
+ const marketId = markets[mapMarketToChunk(balanceData2.index, i)];
19121
+ marketsHandled.push(marketId);
19122
+ const lenderKey = createLenderKey(lender, marketId);
18878
19123
  const { dataForMarket, addedDebt, addedDeposits } = createMorphoEntryFromMarketWithLens(
18879
19124
  balanceData2,
18880
- chainId,
18881
- market,
18882
- lenderData[markeId].data,
18883
- prices,
18884
- pricesHist
19125
+ metaMap?.[lenderKey]
18885
19126
  );
18886
19127
  const payload = {
18887
19128
  chainId,
@@ -18892,41 +19133,24 @@ var getMorphoUserDataConverterWithlens = (lender, chainId, account, markets, pri
18892
19133
  };
18893
19134
  const userData = createBaseTypeUserState(
18894
19135
  payload,
18895
- lenderData[markeId].data,
19136
+ metaMap?.[lenderKey],
18896
19137
  addedDeposits,
18897
19138
  addedDebt
18898
19139
  );
18899
- datas[market.lender] = {
18900
- ...payload,
18901
- ...userData,
18902
- id: market.id
18903
- };
19140
+ datas[lenderKey] = userData;
18904
19141
  });
18905
19142
  }
18906
19143
  for (const marketId of markets) {
18907
- const pubData = lenderData[marketId];
18908
19144
  if (marketsHandled.includes(marketId)) continue;
18909
- const payload = {
18910
- chainId,
18911
- account,
18912
- lendingPositions: { "0": {} },
18913
- rewards: {},
18914
- userEMode: 0
18915
- };
18916
19145
  const userData = userDataEmpty(account, chainId);
18917
- datas[marketId] = {
18918
- ...payload,
18919
- ...userData,
18920
- // @ts-ignore
18921
- id: pubData?.params?.market.id
18922
- };
19146
+ datas[marketId] = userData;
18923
19147
  }
18924
19148
  return datas;
18925
19149
  },
18926
19150
  expectedNumberOfCalls
18927
19151
  ];
18928
19152
  };
18929
- var getListaUserDataConverterWithlens = (lender, chainId, account, markets, prices, pricesHist, lenderData) => {
19153
+ var getListaUserDataConverterWithlens = (lender, chainId, account, markets, metaMap) => {
18930
19154
  const expectedNumberOfCalls = Math.ceil(markets.length / CHUNK_SIZE);
18931
19155
  return [
18932
19156
  (data) => {
@@ -18948,16 +19172,12 @@ var getListaUserDataConverterWithlens = (lender, chainId, account, markets, pric
18948
19172
  whitelistedFlags[markets[mapMarketToChunk(index, i)]] = flag;
18949
19173
  });
18950
19174
  balances.forEach((balanceData2) => {
18951
- const markeId = markets[mapMarketToChunk(balanceData2.index, i)];
18952
- marketsHandled.push(markeId);
18953
- const market = lenderData[markeId]?.params?.market;
19175
+ const marketId = markets[mapMarketToChunk(balanceData2.index, i)];
19176
+ marketsHandled.push(marketId);
19177
+ const lenderKey = createLenderKey(lender, marketId);
18954
19178
  const { dataForMarket, addedDebt, addedDeposits } = createMorphoEntryFromMarketWithLens(
18955
19179
  balanceData2,
18956
- chainId,
18957
- market,
18958
- lenderData[markeId].data,
18959
- prices,
18960
- pricesHist
19180
+ metaMap?.[lenderKey]
18961
19181
  );
18962
19182
  const payload = {
18963
19183
  chainId,
@@ -18965,55 +19185,46 @@ var getListaUserDataConverterWithlens = (lender, chainId, account, markets, pric
18965
19185
  lendingPositions: { "0": dataForMarket },
18966
19186
  rewards: {},
18967
19187
  userEMode: 0,
18968
- notWhitelisted: !whitelistedFlags[markeId]
19188
+ notWhitelisted: !whitelistedFlags[marketId]
18969
19189
  };
18970
19190
  const userData = createBaseTypeUserState(
18971
19191
  payload,
18972
- lenderData[markeId].data,
19192
+ metaMap?.[lenderKey],
18973
19193
  addedDeposits,
18974
19194
  addedDebt
18975
19195
  );
18976
- datas[market.lender] = {
19196
+ datas[lenderKey] = {
18977
19197
  ...payload,
18978
19198
  ...userData,
18979
- id: market.id
19199
+ id: marketId
18980
19200
  };
18981
19201
  });
18982
19202
  }
18983
19203
  for (const marketId of markets) {
18984
- const pubData = lenderData[marketId];
18985
19204
  if (marketsHandled.includes(marketId)) continue;
18986
- const payload = {
18987
- chainId,
18988
- account,
18989
- lendingPositions: { "0": {} },
18990
- rewards: {},
18991
- userEMode: 0,
18992
- notWhitelisted: !whitelistedFlags[marketId]
18993
- };
18994
19205
  const userData = userDataEmpty(
18995
19206
  account,
18996
19207
  chainId,
18997
19208
  !whitelistedFlags[marketId]
18998
19209
  );
18999
- datas[marketId] = {
19000
- ...payload,
19001
- ...userData,
19002
- // @ts-ignore
19003
- id: pubData?.params?.market.id
19004
- };
19210
+ datas[marketId] = userData;
19005
19211
  }
19006
19212
  return datas;
19007
19213
  },
19008
19214
  expectedNumberOfCalls
19009
19215
  ];
19010
19216
  };
19011
- function createMorphoEntryFromMarketWithLens(balanceInfo, chainId, market, lenderData, prices, pricesHist) {
19012
- const loanAddress = market.loanAddress.toLowerCase();
19013
- const loanMeta = lenderData[loanAddress].asset;
19014
- const loanKey = toOracleKey(loanMeta?.assetGroup) ?? toGenericPriceKey(loanAddress, chainId);
19015
- const priceLoan = prices[loanKey] ?? 1;
19016
- const priceHistLoan = pricesHist?.[loanKey] ?? priceLoan;
19217
+ function createMorphoEntryFromMarketWithLens(balanceInfo, metaMap) {
19218
+ const morphoPair = metaMap;
19219
+ const _assets = Object.entries(
19220
+ morphoPair ?? {}
19221
+ );
19222
+ const [loanKey, loanAssetMeta] = _assets[0][1].flags?.borrowingEnabled ? _assets[0] : _assets[1];
19223
+ const [collateralKey, collateralAssetMeta] = !_assets[0][1].flags?.borrowingEnabled ? _assets[0] : _assets[1];
19224
+ const loanAddress = loanAssetMeta?.asset?.address?.toLowerCase();
19225
+ const loanAsset = loanAssetMeta?.asset;
19226
+ const priceLoan = loanAssetMeta?.price?.priceUsd ?? 1;
19227
+ const priceHistLoan = loanAssetMeta?.price?.priceUsd24h ?? priceLoan;
19017
19228
  const deposits = balanceInfo.supplyAssets;
19018
19229
  const borrow = balanceInfo.borrowAssets;
19019
19230
  const collateral = balanceInfo.collateral;
@@ -19023,18 +19234,15 @@ function createMorphoEntryFromMarketWithLens(balanceInfo, chainId, market, lende
19023
19234
  addedDeposits: 0,
19024
19235
  addedDebt: 0
19025
19236
  };
19026
- const collateralAddress = market.collateralAddress.toLowerCase();
19027
- const collateralAssetMeta = lenderData[collateralAddress].asset;
19237
+ const collateralAddress = collateralAssetMeta?.asset?.address?.toLowerCase();
19238
+ const collateralAsset = collateralAssetMeta?.asset;
19028
19239
  const loanDepositNumber = parseRawAmount(
19029
19240
  deposits.toString(),
19030
- market.loanDecimals ?? loanMeta?.decimals ?? 18
19241
+ loanAsset?.decimals ?? 18
19031
19242
  );
19032
- const decimals = market.collateralDecimals ?? collateralAssetMeta?.decimals ?? 18;
19243
+ const decimals = collateralAsset?.decimals ?? 18;
19033
19244
  const collateralDec = parseRawAmount(collateral.toString(), decimals);
19034
- const borrowDec = parseRawAmount(
19035
- borrow.toString(),
19036
- market.loanDecimals ?? loanMeta?.decimals ?? 18
19037
- );
19245
+ const borrowDec = parseRawAmount(borrow.toString(), loanAsset?.decimals ?? 18);
19038
19246
  const dataForLoanAsset = {
19039
19247
  poolId: loanAddress,
19040
19248
  underlying: loanAddress,
@@ -19049,9 +19257,8 @@ function createMorphoEntryFromMarketWithLens(balanceInfo, chainId, market, lende
19049
19257
  collateralEnabled: false,
19050
19258
  claimableRewards: 0
19051
19259
  };
19052
- const key = toOracleKey(collateralAssetMeta?.assetGroup) ?? toGenericPriceKey(collateralAddress, chainId);
19053
- const price = prices[key] ?? 1;
19054
- const priceHist = pricesHist?.[key] ?? price;
19260
+ const price = collateralAssetMeta?.price.priceUsd ?? 1;
19261
+ const priceHist = collateralAssetMeta?.price.priceUsd24h ?? price;
19055
19262
  const dataForCollateralAsset = {
19056
19263
  poolId: collateralAddress,
19057
19264
  underlying: collateralAddress,
@@ -19068,8 +19275,8 @@ function createMorphoEntryFromMarketWithLens(balanceInfo, chainId, market, lende
19068
19275
  };
19069
19276
  return {
19070
19277
  dataForMarket: {
19071
- [loanAddress]: dataForLoanAsset,
19072
- [collateralAddress]: dataForCollateralAsset
19278
+ [loanKey]: dataForLoanAsset,
19279
+ [collateralKey]: dataForCollateralAsset
19073
19280
  },
19074
19281
  addedDeposits: Number(loanDepositNumber) * priceHistLoan + Number(collateralDec) * priceHist,
19075
19282
  addedDebt: Number(borrowDec) * priceHistLoan
@@ -19077,17 +19284,19 @@ function createMorphoEntryFromMarketWithLens(balanceInfo, chainId, market, lende
19077
19284
  }
19078
19285
 
19079
19286
  // src/lending/user-data/compound-v2/userCallBuild.ts
19080
- var buildCompoundV2UserCall = (chainId, lender, account, assetsOverride) => {
19081
- const collateralTokens = getCompoundV2CollateralTokens(chainId, lender);
19287
+ var buildCompoundV2UserCall = (chainId, lender, account) => {
19288
+ const tokens = getCompoundV2Tokens(chainId, lender).sort(
19289
+ (a, b) => a.cToken.toLowerCase().localeCompare(b.cToken.toLowerCase())
19290
+ );
19082
19291
  const comptroller = getCompoundV2Comptroller(chainId, lender);
19083
- let calls = Object.values(collateralTokens).flatMap((tk) => [
19292
+ let calls = tokens.flatMap((tk) => [
19084
19293
  {
19085
- address: tk,
19294
+ address: tk.cToken,
19086
19295
  name: "balanceOfUnderlying",
19087
19296
  params: [account]
19088
19297
  },
19089
19298
  {
19090
- address: tk,
19299
+ address: tk.cToken,
19091
19300
  name: "borrowBalanceCurrent",
19092
19301
  params: [account]
19093
19302
  }
@@ -19104,12 +19313,13 @@ var buildCompoundV2UserCall = (chainId, lender, account, assetsOverride) => {
19104
19313
  };
19105
19314
 
19106
19315
  // src/lending/user-data/compound-v2/userCallParse.ts
19107
- var getCompoundV2UserDataConverter = (lender, chainId, account, prices, pricesHist, lenderData) => {
19316
+ var getCompoundV2UserDataConverter = (lender, chainId, account, metaMap) => {
19108
19317
  switch (lender) {
19109
19318
  default: {
19110
- const assetsToQuery = Object.keys(lenderData);
19111
- const vTokens = getCompoundV2CollateralTokens(chainId, lender);
19112
- const expectedNumberOfCalls = assetsToQuery.length * 2 + 1;
19319
+ const tokens = getCompoundV2Tokens(chainId, lender).sort(
19320
+ (a, b) => a.cToken.toLowerCase().localeCompare(b.cToken.toLowerCase())
19321
+ );
19322
+ const expectedNumberOfCalls = tokens.length * 2 + 1;
19113
19323
  return [
19114
19324
  (data) => {
19115
19325
  if (data.length !== expectedNumberOfCalls) {
@@ -19119,22 +19329,22 @@ var getCompoundV2UserDataConverter = (lender, chainId, account, prices, pricesHi
19119
19329
  let totalDebt24h = 0;
19120
19330
  let totalDeposits24h = 0;
19121
19331
  const asstsIn = data[data.length - 1].map((a) => a.toLowerCase());
19122
- for (let i = 0; i < assetsToQuery.length; i++) {
19123
- const asset = assetsToQuery[i];
19332
+ for (let i = 0; i < tokens.length; i++) {
19333
+ const { cToken } = tokens[i];
19334
+ const key = createMarketUid(chainId, lender, cToken);
19124
19335
  const { dataForAsset, addedDebt, addedDeposits } = createCompoundV2Entry(
19125
19336
  i,
19126
19337
  data,
19338
+ key,
19127
19339
  asstsIn,
19128
- vTokens[asset],
19129
- lenderData[asset].asset,
19130
- prices,
19131
- pricesHist,
19340
+ cToken,
19341
+ metaMap[key],
19132
19342
  0
19133
19343
  );
19134
19344
  if (!dataForAsset) continue;
19135
19345
  totalDebt24h += addedDebt;
19136
19346
  totalDeposits24h += addedDeposits;
19137
- lendingPositions[asset] = dataForAsset;
19347
+ lendingPositions[key] = dataForAsset;
19138
19348
  }
19139
19349
  const payload = {
19140
19350
  chainId,
@@ -19144,21 +19354,18 @@ var getCompoundV2UserDataConverter = (lender, chainId, account, prices, pricesHi
19144
19354
  };
19145
19355
  const userData = createBaseTypeUserState(
19146
19356
  payload,
19147
- lenderData,
19357
+ metaMap,
19148
19358
  totalDeposits24h,
19149
19359
  totalDebt24h
19150
19360
  );
19151
- return {
19152
- ...payload,
19153
- ...userData
19154
- };
19361
+ return userData;
19155
19362
  },
19156
19363
  expectedNumberOfCalls
19157
19364
  ];
19158
19365
  }
19159
19366
  }
19160
19367
  };
19161
- function createCompoundV2Entry(i, data, assetsIn, vToken, asset, prices, pricesHist, claimableRewards) {
19368
+ function createCompoundV2Entry(i, data, key, assetsIn, vToken, meta, claimableRewards) {
19162
19369
  const depositsRaw = data[2 * i].toString();
19163
19370
  const borrowsRaw = data[2 * i + 1].toString();
19164
19371
  const collateralEnabled = Boolean(assetsIn?.includes(vToken));
@@ -19169,16 +19376,15 @@ function createCompoundV2Entry(i, data, assetsIn, vToken, asset, prices, pricesH
19169
19376
  addedDebt: 0
19170
19377
  };
19171
19378
  }
19172
- const assetMeta = asset;
19379
+ const assetMeta = meta.asset;
19173
19380
  const decimals = assetMeta?.decimals ?? 18;
19174
19381
  const currentATokenBalance = Number(parseRawAmount(depositsRaw, decimals));
19175
19382
  const currentVariableDebt = Number(parseRawAmount(borrowsRaw, decimals));
19176
- const key = toOracleKey(assetMeta?.assetGroup) ?? toGenericPriceKey(asset.address, asset.chainId);
19177
- const price = prices[key] ?? 1;
19178
- const priceHist = pricesHist?.[key] ?? price;
19383
+ const price = meta?.price?.priceUsd ?? 1;
19384
+ const priceHist = meta?.price?.priceUsd24h ?? price;
19179
19385
  const dataForAsset = {
19180
- poolId: asset.address,
19181
- underlying: asset.address,
19386
+ poolId: key,
19387
+ underlying: assetMeta.address,
19182
19388
  deposits: currentATokenBalance,
19183
19389
  depositsRaw,
19184
19390
  debtStable: 0,
@@ -19297,84 +19503,48 @@ function unflattenLenderData(pools) {
19297
19503
  }
19298
19504
  return result;
19299
19505
  }
19300
- function buildUserCall(chainId, lender, account, params, assets) {
19301
- if (isAaveV2Type(lender))
19302
- return buildAaveV2UserCall(chainId, lender, account);
19303
- if (isAaveV3Type(lender))
19304
- return buildAaveV3UserCall(chainId, lender, account, assets);
19506
+ function buildUserCall(chainId, lender, account, params) {
19507
+ if (isAaveV2Type(lender)) return buildAaveV2UserCall(chainId, lender, account);
19508
+ if (isAaveV3Type(lender)) return buildAaveV3UserCall(chainId, lender, account);
19305
19509
  if (isInit(lender)) return buildInitUserCall(chainId, lender, account);
19306
19510
  if (isMorphoType(lender))
19307
19511
  return buildMorphoTypeUserCallWithLens(chainId, account, lender, params);
19308
19512
  if (isCompoundV3Type(lender))
19309
- return buildCompoundV3UserCall(chainId, lender, account, assets);
19513
+ return buildCompoundV3UserCall(chainId, lender, account);
19310
19514
  return buildCompoundV2UserCall(chainId, lender, account);
19311
19515
  }
19312
- function getUserDataConverter(lender, chainId, account, prices, pricesHist, lenderPublicState, params) {
19516
+ function getUserDataConverter(lender, chainId, account, params, meta) {
19313
19517
  if (isYLDR(lender))
19314
- return getYldrUserDataConverter(
19315
- lender,
19316
- chainId,
19317
- account,
19318
- prices,
19319
- pricesHist,
19320
- lenderPublicState?.data?.[lender]?.data
19321
- );
19518
+ return getYldrUserDataConverter(lender, chainId, account, meta?.[lender]);
19322
19519
  if (isAaveV2Type(lender))
19323
- return getAaveV2UserDataConverter(
19324
- lender,
19325
- chainId,
19326
- account,
19327
- prices,
19328
- pricesHist,
19329
- lenderPublicState?.data?.[lender]?.data
19330
- );
19520
+ return getAaveV2UserDataConverter(lender, chainId, account, meta?.[lender]);
19331
19521
  if (isAaveV3Type(lender))
19332
- return getAaveV3UserDataConverter(
19333
- lender,
19334
- chainId,
19335
- account,
19336
- prices,
19337
- pricesHist,
19338
- lenderPublicState?.data?.[lender]?.data
19339
- );
19522
+ return getAaveV3UserDataConverter(lender, chainId, account, meta?.[lender]);
19340
19523
  if (isInit(lender))
19341
- return getInitUserDataConverter(
19342
- lender,
19343
- chainId,
19344
- account,
19345
- prices,
19346
- pricesHist,
19347
- lenderPublicState?.data?.[lender]?.data
19348
- );
19524
+ return getInitUserDataConverter(lender, chainId, account, meta?.[lender]);
19349
19525
  if (isMorphoType(lender))
19350
19526
  return getMorphoTypeUserDataConverterWithlens(
19351
19527
  lender,
19352
19528
  chainId,
19353
19529
  account,
19354
19530
  params,
19355
- prices,
19356
- pricesHist,
19357
- lenderPublicState?.data
19531
+ meta
19358
19532
  );
19359
19533
  if (isCompoundV3Type(lender))
19360
19534
  return getCompoundV3UserDataConverter(
19361
19535
  lender,
19362
19536
  chainId,
19363
19537
  account,
19364
- prices,
19365
- pricesHist,
19366
- lenderPublicState?.data?.[lender]?.data
19538
+ meta?.[lender]
19367
19539
  );
19368
19540
  return getCompoundV2UserDataConverter(
19369
19541
  lender,
19370
19542
  chainId,
19371
19543
  account,
19372
- prices,
19373
- pricesHist,
19374
- lenderPublicState?.data?.[lender]?.data
19544
+ meta?.[lender]
19375
19545
  );
19376
19546
  }
19377
- var getLenderUserDataResult = async (chainId, queriesRaw, getEvmClient2, allowFailure = true, batchSize = MULTICALL_DEFAULT_BATCH_SIZE, retries = 3, logs = false) => {
19547
+ var getLenderUserDataResult = async (chainId, queriesRaw, getEvmClient2, allowFailure = true, batchSize = MULTICALL_DEFAULT_BATCH_SIZE, retries = 3, logs = false, meta) => {
19378
19548
  let calls = [];
19379
19549
  const queries = organizeUserQueries(queriesRaw);
19380
19550
  for (const query2 of queries) {
@@ -19383,8 +19553,7 @@ var getLenderUserDataResult = async (chainId, queriesRaw, getEvmClient2, allowFa
19383
19553
  chainId,
19384
19554
  query2.lender,
19385
19555
  query2.account,
19386
- query2.params,
19387
- query2.assets
19556
+ query2.params
19388
19557
  );
19389
19558
  const mappedCalls = callData.map((call) => ({ call, abi }));
19390
19559
  calls = [...calls, ...mappedCalls];
@@ -19402,19 +19571,51 @@ var getLenderUserDataResult = async (chainId, queriesRaw, getEvmClient2, allowFa
19402
19571
  logs
19403
19572
  );
19404
19573
  };
19405
- var convertLenderUserDataResult = (chainId, queriesRaw, rawResults, prices, pricesHist, lenderState) => {
19574
+ var prepareLenderUserDataRpcCalls = (chainId, queriesRaw, batchSize = MULTICALL_DEFAULT_BATCH_SIZE, blockTag = "latest", meta, allowFailure = true) => {
19575
+ let calls = [];
19576
+ const multicallAddress = getEvmChain(chainId).contracts?.multicall3?.address;
19406
19577
  const queries = organizeUserQueries(queriesRaw);
19407
- const lenderData = {};
19408
- let currentSlice = 0;
19578
+ for (const query2 of queries) {
19579
+ const abi = getAbi2(query2.lender);
19580
+ const callData = buildUserCall(
19581
+ chainId,
19582
+ query2.lender,
19583
+ query2.account,
19584
+ query2.params
19585
+ );
19586
+ const mappedCalls = callData.map((call) => ({ call, abi }));
19587
+ calls = [...calls, ...mappedCalls];
19588
+ }
19589
+ const preparedCalls = prepareMulticallInputs(
19590
+ calls.map((c) => c.abi),
19591
+ calls.map((c) => c.call)
19592
+ );
19593
+ const batches = createMulticallRpcCall(
19594
+ preparedCalls,
19595
+ multicallAddress,
19596
+ batchSize,
19597
+ blockTag,
19598
+ allowFailure
19599
+ );
19600
+ const rpcCalls = batches.map((batch) => batch.call);
19601
+ return {
19602
+ batches,
19603
+ preparedCalls,
19604
+ queries,
19605
+ rpcCalls
19606
+ };
19607
+ };
19608
+ var convertLenderUserDataResult = (chainId, queriesRaw, rawResults, lenderState) => {
19609
+ const queries = organizeUserQueries(queriesRaw);
19610
+ const lenderData = {};
19611
+ let currentSlice = 0;
19409
19612
  for (const query2 of queries) {
19410
19613
  const [converter, sliceLength] = getUserDataConverter(
19411
19614
  query2.lender,
19412
19615
  chainId,
19413
19616
  query2.account,
19414
- prices,
19415
- pricesHist,
19416
- lenderState[chainId],
19417
- query2.params
19617
+ query2.params,
19618
+ lenderState
19418
19619
  );
19419
19620
  try {
19420
19621
  const data = rawResults.slice(currentSlice, currentSlice + sliceLength);
@@ -19422,17 +19623,10 @@ var convertLenderUserDataResult = (chainId, queriesRaw, rawResults, prices, pric
19422
19623
  if (convertedData) {
19423
19624
  if (isMultiMarket(query2.lender)) {
19424
19625
  Object.keys(convertedData).forEach((market) => {
19425
- lenderData[market] = {
19426
- ...lenderData[market],
19427
- // @ts-ignore
19428
- [query2.account.toLowerCase()]: convertedData[market]
19429
- };
19626
+ lenderData[market] = convertedData[market];
19430
19627
  });
19431
19628
  } else {
19432
- lenderData[query2.lender] = {
19433
- ...lenderData[query2.lender],
19434
- [query2.account.toLowerCase()]: convertedData
19435
- };
19629
+ lenderData[query2.lender] = convertedData;
19436
19630
  }
19437
19631
  }
19438
19632
  } catch (e) {
@@ -19447,7 +19641,7 @@ var DEFAULT_OPTIONS = {
19447
19641
  retries: 3,
19448
19642
  logs: false
19449
19643
  };
19450
- async function getLenderUserDataMulti(account, chainQueries, prices = {}, pricesHist = {}, lenderState) {
19644
+ async function getLenderUserDataMulti(account, chainQueries, lenderState) {
19451
19645
  const parsedLenderState = Array.isArray(lenderState) ? unflattenLenderData(lenderState) : lenderState;
19452
19646
  const cleanChainQueries = chainQueries.map(
19453
19647
  ({ chainId, queries, providerOptions }) => {
@@ -19489,8 +19683,6 @@ async function getLenderUserDataMulti(account, chainQueries, prices = {}, prices
19489
19683
  chainId,
19490
19684
  queries,
19491
19685
  data[i],
19492
- prices,
19493
- pricesHist,
19494
19686
  parsedLenderState
19495
19687
  );
19496
19688
  returndata[chainId] = dataForChain;
@@ -19509,7 +19701,9 @@ var aavePools2 = baseUrl + "/config/aave-pools.json";
19509
19701
  var aaveOracles2 = baseUrl + "/data/aave-oracles.json";
19510
19702
  var morphoTypeOracles2 = baseUrl + "/data/morpho-type-oracles.json";
19511
19703
  var compoundV2Pools2 = baseUrl + "/config/compound-v2-pools.json";
19704
+ var compoundV2Oracles2 = baseUrl + "/data/compound-v2-oracles.json";
19512
19705
  var compoundV3Pools2 = baseUrl + "/config/compound-v3-pools.json";
19706
+ var compoundV3Oracles2 = baseUrl + "/data/compound-v3-oracles.json";
19513
19707
  var morphoPools2 = baseUrl + "/config/morpho-pools.json";
19514
19708
  var morphoTypeMarkets2 = baseUrl + "/config/morpho-type-markets.json";
19515
19709
  var aaveReserves2 = baseUrl + "/data/aave-reserves.json";
@@ -19543,6 +19737,8 @@ async function fetchLenderMetaFromDirAndInitialize() {
19543
19737
  compoundV2TokenArrayOverride,
19544
19738
  compoundV3BaseDataOverride,
19545
19739
  aaveOraclesOverride,
19740
+ compoundV2OraclesOverride,
19741
+ compoundV3OraclesOverride,
19546
19742
  morphoTypeOraclesOverride,
19547
19743
  morphoTypeMarketsOverride,
19548
19744
  chainsOverride
@@ -19561,6 +19757,8 @@ async function fetchLenderMetaFromDirAndInitialize() {
19561
19757
  compoundV3ReservesOverride,
19562
19758
  compoundV2ReservesOverride,
19563
19759
  aaveOraclesOverride,
19760
+ compoundV2OraclesOverride,
19761
+ compoundV3OraclesOverride,
19564
19762
  morphoTypeOraclesOverride,
19565
19763
  morphoTypeMarketsOverride
19566
19764
  });
@@ -19582,6 +19780,8 @@ async function fetchLenderMetaFromDir() {
19582
19780
  compoundV2TokenArray2,
19583
19781
  compoundV3Base,
19584
19782
  aaveOracles2,
19783
+ compoundV2Oracles2,
19784
+ compoundV3Oracles2,
19585
19785
  morphoTypeOracles2,
19586
19786
  morphoTypeMarkets2,
19587
19787
  chains
@@ -19601,6 +19801,8 @@ async function fetchLenderMetaFromDir() {
19601
19801
  compoundV2TokenArrayOverride,
19602
19802
  compoundV3BaseDataOverride,
19603
19803
  aaveOraclesOverride,
19804
+ compoundV2OraclesOverride,
19805
+ compoundV3OraclesOverride,
19604
19806
  morphoTypeOraclesOverride,
19605
19807
  morphoTypeMarketsOverride,
19606
19808
  chainsOverride
@@ -19620,6 +19822,8 @@ async function fetchLenderMetaFromDir() {
19620
19822
  compoundV2TokenArrayOverride,
19621
19823
  compoundV3BaseDataOverride,
19622
19824
  aaveOraclesOverride,
19825
+ compoundV2OraclesOverride,
19826
+ compoundV3OraclesOverride,
19623
19827
  morphoTypeOraclesOverride,
19624
19828
  morphoTypeMarketsOverride,
19625
19829
  chainsOverride
@@ -22207,6 +22411,10 @@ var fetchMainPrices = async (chainIds, rpcOverrides, lists = {}, retries = 3, ba
22207
22411
  );
22208
22412
  if (chainId === Chain.SCROLL)
22209
22413
  aaveForks = aaveForks?.filter((a) => a !== Lender.LORE);
22414
+ if (chainId === Chain.TAIKO_ALETHIA)
22415
+ aaveForks = aaveForks?.filter(
22416
+ (a) => a !== Lender.TAKOTAKO && a !== Lender.TAKOTAKO_ETH
22417
+ );
22210
22418
  if (chainId === Chain.BNB_SMART_CHAIN_MAINNET)
22211
22419
  aaveForks = aaveForks?.filter((a) => a !== Lender.AVALON_USDX);
22212
22420
  if (chainId === Chain.MANTA_PACIFIC_MAINNET)
@@ -23471,6 +23679,665 @@ var parseRWADynamicOracleResults = (chainId, data, assetName) => {
23471
23679
  }
23472
23680
  }
23473
23681
  };
23682
+ var AAVE_LENDER_OVERRIDES = {
23683
+ [Lender.KLAYBANK]: {
23684
+ [Chain.KAIA_MAINNET]: {
23685
+ // KLAYBANK on KAIA uses WKLAY as base asset
23686
+ baseAsset: "0x19aac5f612f524b754ca7e7c41cbfa2e981a4432",
23687
+ // BASE_CURRENCY_UNIT call reverts, oracle returns 18 decimals
23688
+ baseCurrencyUnit: 1000000000000000000n,
23689
+ // Use RHOMBUS oracle for WKLAY USD price
23690
+ baseAssetSource: Lender.AVALON
23691
+ }
23692
+ },
23693
+ [Lender.KLAP]: {
23694
+ [Chain.KAIA_MAINNET]: {
23695
+ // BASE_CURRENCY_UNIT call reverts, oracle returns 18 decimals (USD denominated)
23696
+ baseCurrencyUnit: 1000000000000000000n
23697
+ }
23698
+ }
23699
+ };
23700
+ function getAaveLendersForChain(chainId) {
23701
+ const oracles = aaveOracles() ?? {};
23702
+ const reserves = aaveReserves() ?? {};
23703
+ const lenders = [];
23704
+ for (const [lender, chains2] of Object.entries(oracles)) {
23705
+ if (chains2[chainId] && reserves[lender]?.[chainId]?.length > 0) {
23706
+ lenders.push(lender);
23707
+ }
23708
+ }
23709
+ return lenders;
23710
+ }
23711
+ function getAaveCalls2(chainId) {
23712
+ const lenders = getAaveLendersForChain(chainId);
23713
+ const oracles = aaveOracles() ?? {};
23714
+ const reserves = aaveReserves() ?? {};
23715
+ const results = [];
23716
+ for (const lender of lenders) {
23717
+ const oracle = oracles[lender]?.[chainId];
23718
+ const assets = reserves[lender]?.[chainId] ?? [];
23719
+ if (!oracle || assets.length === 0) continue;
23720
+ const calls = [];
23721
+ calls.push({
23722
+ address: oracle,
23723
+ name: "BASE_CURRENCY_UNIT",
23724
+ params: []
23725
+ });
23726
+ for (const asset of assets) {
23727
+ calls.push({
23728
+ address: oracle,
23729
+ name: "getAssetPrice",
23730
+ params: [asset]
23731
+ });
23732
+ }
23733
+ const lenderOverride = AAVE_LENDER_OVERRIDES[lender]?.[chainId];
23734
+ results.push({
23735
+ calls,
23736
+ meta: {
23737
+ oracle,
23738
+ assets,
23739
+ fork: lender,
23740
+ baseCurrencyUnitIndex: 0,
23741
+ assetCallCount: assets.length,
23742
+ baseAssetOverride: lenderOverride?.baseAsset,
23743
+ baseCurrencyUnitOverride: lenderOverride?.baseCurrencyUnit,
23744
+ baseAssetSource: lenderOverride?.baseAssetSource
23745
+ },
23746
+ lender
23747
+ });
23748
+ }
23749
+ return results;
23750
+ }
23751
+ function parseAaveResults2(data, meta, context) {
23752
+ const { chainId, usdPrices, tokenList } = context;
23753
+ const entries = [];
23754
+ if (data.length === 0) return entries;
23755
+ let baseCurrencyUnitValue = data[meta.baseCurrencyUnitIndex];
23756
+ if (!baseCurrencyUnitValue || baseCurrencyUnitValue === "0x") {
23757
+ if (meta.baseCurrencyUnitOverride) {
23758
+ baseCurrencyUnitValue = meta.baseCurrencyUnitOverride;
23759
+ } else {
23760
+ return entries;
23761
+ }
23762
+ }
23763
+ let decimals;
23764
+ try {
23765
+ const baseCurrencyUnitBigInt = BigInt(baseCurrencyUnitValue.toString());
23766
+ decimals = Math.round(Math.log10(Number(baseCurrencyUnitBigInt)));
23767
+ } catch {
23768
+ return entries;
23769
+ }
23770
+ let baseAssetUSD = 1;
23771
+ if (meta.baseAssetOverride) {
23772
+ const baseAssetLc = meta.baseAssetOverride.toLowerCase();
23773
+ const baseOracleKey = tokenList?.[baseAssetLc]?.assetGroup ?? `${chainId}-${baseAssetLc}`;
23774
+ baseAssetUSD = usdPrices[baseOracleKey] ?? usdPrices[baseAssetLc] ?? 1;
23775
+ }
23776
+ for (let i = 0; i < meta.assetCallCount; i++) {
23777
+ const priceIndex = meta.baseCurrencyUnitIndex + 1 + i;
23778
+ const rawPrice = data[priceIndex];
23779
+ const asset = meta.assets[i];
23780
+ if (rawPrice === void 0 || rawPrice === "0x" || !asset) continue;
23781
+ try {
23782
+ const rawPriceNum = Number(
23783
+ formatUnits(BigInt(rawPrice.toString()), decimals)
23784
+ );
23785
+ if (isNaN(rawPriceNum) || rawPriceNum === 0) continue;
23786
+ const priceUSD = rawPriceNum * baseAssetUSD;
23787
+ entries.push({
23788
+ asset: asset.toLowerCase(),
23789
+ price: rawPriceNum,
23790
+ // Raw price (in base asset terms)
23791
+ priceUSD
23792
+ });
23793
+ } catch {
23794
+ continue;
23795
+ }
23796
+ }
23797
+ return entries;
23798
+ }
23799
+ function getAaveAbi() {
23800
+ return AaveOracleAbi;
23801
+ }
23802
+ var aaveFetcher = {
23803
+ getCalls: getAaveCalls2,
23804
+ parse: parseAaveResults2,
23805
+ getAbi: getAaveAbi
23806
+ };
23807
+ function generateMarketId(oracle) {
23808
+ return oracle.replace(/^0x/i, "").toUpperCase();
23809
+ }
23810
+ function generateMorphoLenderKey(marketId) {
23811
+ return `${Lender.MORPHO_BLUE}_${marketId}`;
23812
+ }
23813
+ function getMorphoMarketsForChain(chainId, marketOverrides) {
23814
+ const oracles = morphoTypeOracles() ?? {};
23815
+ const chainOracles = oracles[chainId] ?? {};
23816
+ const queries = [];
23817
+ for (const [fork, markets] of Object.entries(chainOracles)) {
23818
+ if (fork !== Lender.MORPHO_BLUE) continue;
23819
+ for (const market of markets) {
23820
+ const marketId = generateMarketId(market.oracle);
23821
+ queries.push({
23822
+ oracle: market.oracle,
23823
+ loanAsset: market.loanAsset,
23824
+ collateralAsset: market.collateralAsset,
23825
+ loanAssetDecimals: market.loanAssetDecimals,
23826
+ collateralAssetDecimals: market.collateralAssetDecimals,
23827
+ fork,
23828
+ marketId
23829
+ });
23830
+ }
23831
+ }
23832
+ const chainOverrides = marketOverrides?.[chainId] ?? [];
23833
+ for (const override of chainOverrides) {
23834
+ const marketId = override.marketId ?? generateMarketId(override.oracle);
23835
+ queries.push({
23836
+ oracle: override.oracle,
23837
+ loanAsset: override.loanAsset,
23838
+ collateralAsset: override.collateralAsset,
23839
+ loanAssetDecimals: override.loanAssetDecimals,
23840
+ collateralAssetDecimals: override.collateralAssetDecimals,
23841
+ fork: Lender.MORPHO_BLUE,
23842
+ marketId
23843
+ });
23844
+ }
23845
+ return queries;
23846
+ }
23847
+ function getMorphoCalls2(chainId, context) {
23848
+ const queries = getMorphoMarketsForChain(chainId, context?.marketOverrides);
23849
+ if (queries.length === 0) return [];
23850
+ return queries.map((query2) => {
23851
+ const call = {
23852
+ address: query2.oracle,
23853
+ name: "price",
23854
+ params: []
23855
+ };
23856
+ return {
23857
+ calls: [call],
23858
+ meta: query2,
23859
+ lender: generateMorphoLenderKey(query2.marketId)
23860
+ };
23861
+ });
23862
+ }
23863
+ function parseMorphoResults2(data, meta, context) {
23864
+ const { chainId, usdPrices, tokenList } = context;
23865
+ const entries = [];
23866
+ const rawPrice = data[0];
23867
+ if (!rawPrice || rawPrice === void 0 || rawPrice === "0x") return entries;
23868
+ const loanAsset = meta.loanAsset.toLowerCase();
23869
+ const collateralAsset = meta.collateralAsset.toLowerCase();
23870
+ const loanAssetDecimals = meta.loanAssetDecimals ?? tokenList?.[loanAsset]?.decimals ?? 18;
23871
+ const collateralAssetDecimals = meta.collateralAssetDecimals ?? tokenList?.[collateralAsset]?.decimals ?? 18;
23872
+ const priceDebtToCollateral = formatMorphoPrice(
23873
+ rawPrice.toString(),
23874
+ loanAssetDecimals,
23875
+ collateralAssetDecimals
23876
+ );
23877
+ if (isNaN(priceDebtToCollateral) || priceDebtToCollateral === 0) return entries;
23878
+ const loanOracleKey = tokenList?.[loanAsset]?.assetGroup ?? `${chainId}-${loanAsset}`;
23879
+ const collateralOracleKey = tokenList?.[collateralAsset]?.assetGroup ?? `${chainId}-${collateralAsset}`;
23880
+ const loanAssetUSD = usdPrices[loanOracleKey] ?? usdPrices[loanAsset];
23881
+ const collateralAssetUSD = usdPrices[collateralOracleKey] ?? usdPrices[collateralAsset];
23882
+ if (loanAssetUSD) {
23883
+ const collateralPriceUSD = priceDebtToCollateral * loanAssetUSD;
23884
+ entries.push({
23885
+ asset: collateralAsset,
23886
+ price: priceDebtToCollateral,
23887
+ // Raw: collateral price in loan asset terms
23888
+ priceUSD: collateralPriceUSD
23889
+ });
23890
+ }
23891
+ if (collateralAssetUSD) {
23892
+ const loanPriceUSD = collateralAssetUSD / priceDebtToCollateral;
23893
+ entries.push({
23894
+ asset: loanAsset,
23895
+ price: 1 / priceDebtToCollateral,
23896
+ // Raw: loan price in collateral terms
23897
+ priceUSD: loanPriceUSD
23898
+ });
23899
+ }
23900
+ return entries;
23901
+ }
23902
+ function getMorphoAbi() {
23903
+ return ProxyOracleAbi;
23904
+ }
23905
+ var morphoFetcher = {
23906
+ getCalls: getMorphoCalls2,
23907
+ parse: parseMorphoResults2,
23908
+ getAbi: getMorphoAbi
23909
+ };
23910
+
23911
+ // src/prices/oracle-prices/fetchers/compoundV2.ts
23912
+ var CompoundV2OracleAbi = [
23913
+ {
23914
+ inputs: [{ internalType: "address", name: "cToken", type: "address" }],
23915
+ name: "getUnderlyingPrice",
23916
+ outputs: [{ internalType: "uint256", name: "", type: "uint256" }],
23917
+ stateMutability: "view",
23918
+ type: "function"
23919
+ }
23920
+ ];
23921
+ function getCompoundV2Calls2(chainId) {
23922
+ const oracles = compoundV2Oracles() ?? {};
23923
+ const tokenArrays = compoundV2TokenArray() ?? {};
23924
+ const results = [];
23925
+ for (const [lender, chainOracles] of Object.entries(oracles)) {
23926
+ const oracleAddress = chainOracles[chainId];
23927
+ const tokens = tokenArrays[lender]?.[chainId] ?? [];
23928
+ if (!oracleAddress || tokens.length === 0) continue;
23929
+ const calls = [];
23930
+ const meta = [];
23931
+ for (const token of tokens) {
23932
+ calls.push({
23933
+ address: oracleAddress,
23934
+ name: "getUnderlyingPrice",
23935
+ params: [token.cToken]
23936
+ });
23937
+ meta.push({
23938
+ cToken: token.cToken,
23939
+ underlying: token.underlying,
23940
+ lender
23941
+ });
23942
+ }
23943
+ if (calls.length > 0) {
23944
+ results.push({
23945
+ calls,
23946
+ meta,
23947
+ lender
23948
+ });
23949
+ }
23950
+ }
23951
+ return results;
23952
+ }
23953
+ function parseCompoundV2Results2(data, meta, context) {
23954
+ const { tokenList } = context;
23955
+ const entries = [];
23956
+ data.forEach((rawResult, index) => {
23957
+ const queryMeta = meta[index];
23958
+ if (!queryMeta || rawResult === void 0 || rawResult === "0x") return;
23959
+ try {
23960
+ const underlyingLc = queryMeta.underlying.toLowerCase();
23961
+ const underlyingDecimals = tokenList?.[underlyingLc]?.decimals ?? 18;
23962
+ const scalingDecimals = 36 - underlyingDecimals;
23963
+ const priceUSD = Number(formatUnits(BigInt(rawResult.toString()), scalingDecimals));
23964
+ if (isNaN(priceUSD) || priceUSD === 0) return;
23965
+ entries.push({
23966
+ asset: underlyingLc,
23967
+ price: priceUSD,
23968
+ // For Compound V2, raw price is already USD denominated
23969
+ priceUSD
23970
+ });
23971
+ } catch {
23972
+ }
23973
+ });
23974
+ return entries;
23975
+ }
23976
+ function getCompoundV2Abi() {
23977
+ return CompoundV2OracleAbi;
23978
+ }
23979
+ var compoundV2Fetcher = {
23980
+ getCalls: getCompoundV2Calls2,
23981
+ parse: parseCompoundV2Results2,
23982
+ getAbi: getCompoundV2Abi
23983
+ };
23984
+
23985
+ // src/prices/oracle-prices/fetchers/compoundV3.ts
23986
+ var ChainlinkAggregatorAbi = [
23987
+ {
23988
+ inputs: [],
23989
+ name: "latestRoundData",
23990
+ outputs: [
23991
+ { internalType: "uint80", name: "roundId", type: "uint80" },
23992
+ { internalType: "int256", name: "answer", type: "int256" },
23993
+ { internalType: "uint256", name: "startedAt", type: "uint256" },
23994
+ { internalType: "uint256", name: "updatedAt", type: "uint256" },
23995
+ { internalType: "uint80", name: "answeredInRound", type: "uint80" }
23996
+ ],
23997
+ stateMutability: "view",
23998
+ type: "function"
23999
+ }
24000
+ ];
24001
+ var ANSWER_INDEX = 1;
24002
+ var CHAINLINK_DECIMALS = 8;
24003
+ function getCompoundV3Calls(chainId) {
24004
+ const oracles = compoundV3Oracles() ?? {};
24005
+ const baseData = compoundV3BaseData() ?? {};
24006
+ const results = [];
24007
+ for (const [lender, chainOracles] of Object.entries(oracles)) {
24008
+ const assetOracles = chainOracles[chainId];
24009
+ if (!assetOracles) continue;
24010
+ const baseAsset = baseData[lender]?.[chainId]?.baseAsset?.toLowerCase();
24011
+ const calls = [];
24012
+ const meta = [];
24013
+ for (const [asset, oracleAddress] of Object.entries(assetOracles)) {
24014
+ calls.push({
24015
+ address: oracleAddress,
24016
+ name: "latestRoundData",
24017
+ params: []
24018
+ });
24019
+ meta.push({
24020
+ asset,
24021
+ oracle: oracleAddress,
24022
+ baseAsset
24023
+ });
24024
+ }
24025
+ if (calls.length > 0) {
24026
+ results.push({
24027
+ calls,
24028
+ meta,
24029
+ lender
24030
+ });
24031
+ }
24032
+ }
24033
+ return results;
24034
+ }
24035
+ function parseCompoundV3Results(data, meta, context) {
24036
+ const { chainId, usdPrices, tokenList } = context;
24037
+ const entries = [];
24038
+ data.forEach((rawResult, index) => {
24039
+ const queryMeta = meta[index];
24040
+ if (!queryMeta || rawResult === void 0 || rawResult === "0x") return;
24041
+ try {
24042
+ const answer = Array.isArray(rawResult) ? rawResult[ANSWER_INDEX] : rawResult;
24043
+ if (!answer) return;
24044
+ const rawPrice = Number(formatUnits(BigInt(answer.toString()), CHAINLINK_DECIMALS));
24045
+ if (isNaN(rawPrice) || rawPrice === 0) return;
24046
+ const assetLc = queryMeta.asset.toLowerCase();
24047
+ let priceUSD = rawPrice;
24048
+ if (queryMeta.baseAsset) {
24049
+ const baseAssetLc = queryMeta.baseAsset.toLowerCase();
24050
+ const baseOracleKey = tokenList?.[baseAssetLc]?.assetGroup ?? `${chainId}-${baseAssetLc}`;
24051
+ const baseAssetUSD = usdPrices[baseOracleKey] ?? usdPrices[baseAssetLc];
24052
+ if (baseAssetUSD) {
24053
+ priceUSD = rawPrice * baseAssetUSD;
24054
+ }
24055
+ }
24056
+ entries.push({
24057
+ asset: assetLc,
24058
+ price: rawPrice,
24059
+ // Raw price (in base asset terms if applicable)
24060
+ priceUSD
24061
+ });
24062
+ } catch {
24063
+ }
24064
+ });
24065
+ return entries;
24066
+ }
24067
+ function getCompoundV3Abi() {
24068
+ return ChainlinkAggregatorAbi;
24069
+ }
24070
+ var compoundV3Fetcher = {
24071
+ getCalls: getCompoundV3Calls,
24072
+ parse: parseCompoundV3Results,
24073
+ getAbi: getCompoundV3Abi
24074
+ };
24075
+ var LISTA_DECIMALS = 8;
24076
+ function generateMarketId2(oracle) {
24077
+ return oracle.replace(/^0x/i, "").toUpperCase();
24078
+ }
24079
+ function generateListaLenderKey(marketId) {
24080
+ return `${Lender.LISTA_DAO}_${marketId}`;
24081
+ }
24082
+ function getListaMarketsForChain(chainId, marketOverrides) {
24083
+ const oracles = morphoTypeOracles() ?? {};
24084
+ const chainOracles = oracles[chainId] ?? {};
24085
+ const markets = [];
24086
+ const processedMarketIds = /* @__PURE__ */ new Set();
24087
+ for (const [fork, marketList] of Object.entries(chainOracles)) {
24088
+ if (fork !== Lender.LISTA_DAO) continue;
24089
+ for (const market of marketList) {
24090
+ const marketId = generateMarketId2(market.oracle);
24091
+ if (processedMarketIds.has(marketId)) continue;
24092
+ processedMarketIds.add(marketId);
24093
+ markets.push({
24094
+ oracle: market.oracle,
24095
+ collateralAsset: market.collateralAsset,
24096
+ loanAsset: market.loanAsset,
24097
+ marketId
24098
+ });
24099
+ }
24100
+ }
24101
+ const chainOverrides = marketOverrides?.[chainId] ?? [];
24102
+ for (const override of chainOverrides) {
24103
+ const marketId = override.marketId ?? generateMarketId2(override.oracle);
24104
+ if (processedMarketIds.has(marketId)) continue;
24105
+ processedMarketIds.add(marketId);
24106
+ markets.push({
24107
+ oracle: override.oracle,
24108
+ collateralAsset: override.collateralAsset,
24109
+ loanAsset: override.loanAsset,
24110
+ marketId
24111
+ });
24112
+ }
24113
+ return markets;
24114
+ }
24115
+ function getListaCalls(chainId, context) {
24116
+ const markets = getListaMarketsForChain(chainId, context?.marketOverrides);
24117
+ if (markets.length === 0) return [];
24118
+ return markets.map((market) => {
24119
+ const calls = [
24120
+ // Call for collateral asset
24121
+ {
24122
+ address: market.oracle,
24123
+ name: "peek",
24124
+ params: [market.collateralAsset]
24125
+ },
24126
+ // Call for loan asset
24127
+ {
24128
+ address: market.oracle,
24129
+ name: "peek",
24130
+ params: [market.loanAsset]
24131
+ }
24132
+ ];
24133
+ const meta = [
24134
+ {
24135
+ oracle: market.oracle,
24136
+ asset: market.collateralAsset,
24137
+ marketId: market.marketId
24138
+ },
24139
+ {
24140
+ oracle: market.oracle,
24141
+ asset: market.loanAsset,
24142
+ marketId: market.marketId
24143
+ }
24144
+ ];
24145
+ return {
24146
+ calls,
24147
+ meta,
24148
+ lender: generateListaLenderKey(market.marketId)
24149
+ };
24150
+ });
24151
+ }
24152
+ function parseListaResults2(data, meta, _context) {
24153
+ const entries = [];
24154
+ const processedAssets = /* @__PURE__ */ new Set();
24155
+ data.forEach((rawPrice, index) => {
24156
+ const query2 = meta[index];
24157
+ if (!query2 || rawPrice === void 0 || rawPrice === "0x") return;
24158
+ const asset = query2.asset.toLowerCase();
24159
+ if (processedAssets.has(asset)) return;
24160
+ try {
24161
+ const priceUSD = Number(formatUnits(BigInt(rawPrice.toString()), LISTA_DECIMALS));
24162
+ if (isNaN(priceUSD) || priceUSD === 0) return;
24163
+ entries.push({
24164
+ asset,
24165
+ price: priceUSD,
24166
+ // Raw price is already in USD
24167
+ priceUSD
24168
+ });
24169
+ processedAssets.add(asset);
24170
+ } catch {
24171
+ }
24172
+ });
24173
+ return entries;
24174
+ }
24175
+ function getListaAbi() {
24176
+ return ProxyOracleAbi;
24177
+ }
24178
+ var listaFetcher = {
24179
+ getCalls: getListaCalls,
24180
+ parse: parseListaResults2,
24181
+ getAbi: getListaAbi
24182
+ };
24183
+
24184
+ // src/prices/oracle-prices/fetchOraclePrices.ts
24185
+ async function fetchOraclePrices(chainIds, rpcOverrides, lists = {}, retries = 3, batchSize = void 0, allowFailure = true, basePrices = {}, morphoMarketOverrides, listaMarketOverrides) {
24186
+ const result = {};
24187
+ const combinedAbi = [
24188
+ ...AaveOracleAbi,
24189
+ ...ProxyOracleAbi,
24190
+ ...CompoundV2OracleAbi,
24191
+ ...ChainlinkAggregatorAbi
24192
+ ];
24193
+ const chainPromises = chainIds.map(async (chainId) => {
24194
+ const chainResult = {};
24195
+ const tokenList = lists[chainId] ?? {};
24196
+ const aaveResults = aaveFetcher.getCalls(chainId);
24197
+ const compoundV2Results = compoundV2Fetcher.getCalls(chainId);
24198
+ const compoundV3Results = compoundV3Fetcher.getCalls(chainId);
24199
+ const listaResults = listaFetcher.getCalls(chainId, {
24200
+ marketOverrides: listaMarketOverrides
24201
+ });
24202
+ const morphoResults = morphoFetcher.getCalls(chainId, {
24203
+ marketOverrides: morphoMarketOverrides
24204
+ });
24205
+ const allCalls = [];
24206
+ const fetcherTracker = [];
24207
+ for (const fr of aaveResults) {
24208
+ fetcherTracker.push({
24209
+ lender: fr.lender,
24210
+ meta: fr.meta,
24211
+ offset: allCalls.length,
24212
+ count: fr.calls.length,
24213
+ parse: aaveFetcher.parse
24214
+ });
24215
+ allCalls.push(...fr.calls);
24216
+ }
24217
+ for (const fr of compoundV2Results) {
24218
+ fetcherTracker.push({
24219
+ lender: fr.lender,
24220
+ meta: fr.meta,
24221
+ offset: allCalls.length,
24222
+ count: fr.calls.length,
24223
+ parse: compoundV2Fetcher.parse
24224
+ });
24225
+ allCalls.push(...fr.calls);
24226
+ }
24227
+ for (const fr of compoundV3Results) {
24228
+ fetcherTracker.push({
24229
+ lender: fr.lender,
24230
+ meta: fr.meta,
24231
+ offset: allCalls.length,
24232
+ count: fr.calls.length,
24233
+ parse: compoundV3Fetcher.parse
24234
+ });
24235
+ allCalls.push(...fr.calls);
24236
+ }
24237
+ for (const fr of listaResults) {
24238
+ fetcherTracker.push({
24239
+ lender: fr.lender,
24240
+ meta: fr.meta,
24241
+ offset: allCalls.length,
24242
+ count: fr.calls.length,
24243
+ parse: listaFetcher.parse
24244
+ });
24245
+ allCalls.push(...fr.calls);
24246
+ }
24247
+ for (const fr of morphoResults) {
24248
+ fetcherTracker.push({
24249
+ lender: fr.lender,
24250
+ meta: fr.meta,
24251
+ offset: allCalls.length,
24252
+ count: fr.calls.length,
24253
+ parse: morphoFetcher.parse
24254
+ });
24255
+ allCalls.push(...fr.calls);
24256
+ }
24257
+ if (allCalls.length === 0) {
24258
+ return { chainId, data: chainResult };
24259
+ }
24260
+ const multicallResult = await multicallRetry(
24261
+ chainId,
24262
+ allCalls,
24263
+ combinedAbi,
24264
+ batchSize,
24265
+ retries,
24266
+ 0,
24267
+ allowFailure,
24268
+ rpcOverrides
24269
+ );
24270
+ const usdPrices = { ...basePrices };
24271
+ const parseTracker = (tracker) => {
24272
+ const dataSlice = multicallResult.slice(
24273
+ tracker.offset,
24274
+ tracker.offset + tracker.count
24275
+ );
24276
+ const context = {
24277
+ chainId,
24278
+ usdPrices,
24279
+ tokenList
24280
+ };
24281
+ const entries = tracker.parse(dataSlice, tracker.meta, context);
24282
+ if (!chainResult[tracker.lender]) {
24283
+ chainResult[tracker.lender] = [];
24284
+ }
24285
+ chainResult[tracker.lender].push(...entries);
24286
+ for (const entry of entries) {
24287
+ const oracleKey = tokenList[entry.asset]?.assetGroup ?? `${chainId}-${entry.asset}`;
24288
+ usdPrices[oracleKey] = entry.priceUSD;
24289
+ usdPrices[entry.asset] = entry.priceUSD;
24290
+ }
24291
+ };
24292
+ const nonMorphoTrackers = fetcherTracker.filter(
24293
+ (t) => t.parse !== morphoFetcher.parse
24294
+ );
24295
+ const aaveSourceTrackers = nonMorphoTrackers.filter(
24296
+ (t) => t.parse === aaveFetcher.parse && !t.meta.baseAssetSource
24297
+ );
24298
+ const aaveDependentTrackers = nonMorphoTrackers.filter(
24299
+ (t) => t.parse === aaveFetcher.parse && t.meta.baseAssetSource
24300
+ );
24301
+ const otherTrackers = nonMorphoTrackers.filter(
24302
+ (t) => t.parse !== aaveFetcher.parse
24303
+ );
24304
+ for (const tracker of aaveSourceTrackers) {
24305
+ parseTracker(tracker);
24306
+ }
24307
+ for (const tracker of otherTrackers) {
24308
+ parseTracker(tracker);
24309
+ }
24310
+ for (const tracker of aaveDependentTrackers) {
24311
+ parseTracker(tracker);
24312
+ }
24313
+ const morphoTrackers = fetcherTracker.filter(
24314
+ (t) => t.parse === morphoFetcher.parse
24315
+ );
24316
+ for (const tracker of morphoTrackers) {
24317
+ parseTracker(tracker);
24318
+ }
24319
+ return { chainId, data: chainResult };
24320
+ });
24321
+ const chainResults = await Promise.all(chainPromises);
24322
+ for (const { chainId, data } of chainResults) {
24323
+ result[chainId] = data;
24324
+ }
24325
+ return result;
24326
+ }
24327
+ function flattenToUSDPriceMap(structuredPrices, lists = {}) {
24328
+ const flatPrices = {};
24329
+ for (const [chainId, lenders] of Object.entries(structuredPrices)) {
24330
+ const tokenList = lists[chainId] ?? {};
24331
+ for (const [_lender, entries] of Object.entries(lenders)) {
24332
+ for (const entry of entries) {
24333
+ const oracleKey = tokenList[entry.asset]?.assetGroup ?? `${chainId}-${entry.asset}`;
24334
+ flatPrices[oracleKey] = entry.priceUSD;
24335
+ flatPrices[entry.asset] = entry.priceUSD;
24336
+ }
24337
+ }
24338
+ }
24339
+ return flatPrices;
24340
+ }
23474
24341
  var { uniq: uniq2 } = lodash;
23475
24342
  function createAssetArrayPerChain() {
23476
24343
  let assetsPerChain = {};
@@ -23600,83 +24467,6 @@ var FlashAbi = [
23600
24467
  type: "function"
23601
24468
  }
23602
24469
  ];
23603
-
23604
- // src/utils/constants.ts
23605
- var CELO_MULTICALL_ADDRESS = "0x633987602DE5C4F337e3DbF265303A1080324204";
23606
- var BNB_MULTICALL_ADDRESS = "0x963Df249eD09c358A4819E39d9Cd5736c3087184";
23607
- var MANTLE_MULTICALL_ADDRESS = "0x2A51f2F647E1883F88C992244dEd171238693107";
23608
- var ARBITRUM_ONE_MULTICALL_ADDRESS = "0xadF885960B47eA2CD9B55E6DAc6B42b7Cb2806dB";
23609
- var LINEA_MULTICALL_ADDRESS = "0xac1cE734566f390A94b00eb9bf561c2625BF44ea";
23610
- var AVALANCHE_MULTICALL_ADDRESS = "0x0139141Cd4Ee88dF3Cdb65881D411bAE271Ef0C2";
23611
- var BASE_MULTICALL_ADDRESS = "0x091e99cb1C49331a94dD62755D168E941AbD0693";
23612
- var BLAST_MULTICALL_ADDRESS = "0xdC7f370de7631cE9e2c2e1DCDA6B3B5744Cf4705";
23613
- var TAIKO_MULTICALL_ADDRESS = "0x8E24CfC19c6C00c524353CB8816f5f1c2F33c201";
23614
- var HEMI_MULTICALL_ADDRESS = "0x352A86168e6988A1aDF9A15Cb00017AAd3B67155";
23615
- var GNOSIS_MULTICALL_ADDRESS = "0x4dfa9a980efE4802E969AC33968E3d6E59B8a19e";
23616
- var MODE_MULTICALL_ADDRESS = "0xAB39cE30D98a59DFDa40A630b074170800bfF179";
23617
- var FANTOM_MULTICALL_ADDRESS = "0xDb51CffFf3B989d0cB6b58AbF173371b6F2d0D24";
23618
- var SCROLL_MULTICALL_ADDRESS = "0x3b615B1AC55bc34e51a81D3dea67467F32bcb8C2";
23619
- var SHAPE_MULTICALL_ADDRESS = "0x356A450B32f5030ae7083702b86FaFbBe7490411";
23620
- var SONIC_MULTICALL_ADDRESS = "0x5d6b0f5335ec95cD2aB7E52f2A0750dd86502435";
23621
- var INK_MULTICALL_ADDRESS = "0xA0fCec583AeE6176527C07B198e5561722332014";
23622
- var METIS_MULTICALL_ADDRESS = "0x7a59ddbB76521E8982Fa3A08598C9a83b14A6C07";
23623
- var IOTA_MULTICALL_ADDRESS = "0x9683D433621A83aA7dd290106e1da85251317F55";
23624
- var KAVA_MULTICALL_ADDRESS = "0x8B741B0D79BE80E135C880F7583d427B4D41F015";
23625
- var CORN_MULTICALL_ADDRESS = "0x5d6b0f5335ec95cD2aB7E52f2A0750dd86502435";
23626
- var SAGA_MULTICALL_ADDRESS = "0x743E03cceB4af2efA3CC76838f6E8B50B63F184c";
23627
- var CYBER_MULTICALL_ADDRESS = "0x906d6eB9CF8f64e100e44f8f491b833a8d40B530";
23628
- var METAL_MULTICALL_ADDRESS = "0x5d6b0f5335ec95cD2aB7E52f2A0750dd86502435";
23629
- var ZERO_MULTICALL_ADDRESS = "0x9CA4dcb2505fbf536F6c54AA0a77C79f4fBC35C0";
23630
- var BOB_MULTICALL_ADDRESS = "0x5d6b0f5335ec95cD2aB7E52f2A0750dd86502435";
23631
- var WORLDCHAIN_MULTICALL_ADDRESS = "0x0a22c04215c97E3F532F4eF30e0aD9458792dAB9";
23632
- var LISK_MULTICALL_ADDRESS = "0xE3dbcD53f4Ce1b06Ab200f4912BD35672e68f1FA";
23633
- var REDSTONE_MULTICALL_ADDRESS = "0xd57B52452a0FDfE3ff8e0A40Bd10D00D0bfe0723";
23634
- var MANTA_MULTICALL_ADDRESS = "0x52dFC0D9960F11A9Ca9FF616e791B91188446a60";
23635
- var ZORA_MULTICALL_ADDRESS = "0xA51c76bEE6746cB487a7e9312E43e2b8f4A37C15";
23636
- var CORE_MULTICALL_ADDRESS = "0xFe9F82D820757787895Da00B1dBD35c3B8b04894";
23637
- var MORPH_MULTICALL_ADDRESS = "0xAcD82113982479B25E7c1D09858F0130921Dbbca";
23638
- var TELOS_MULTICALL_ADDRESS = "0x5d6b0f5335ec95cD2aB7E52f2A0750dd86502435";
23639
- var MULTICALL_ADDRESS = {
23640
- [Chain.OP_MAINNET]: "0x1F98415757620B543A52E61c46B32eB19261F984",
23641
- [Chain.POLYGON_MAINNET]: "0x1F98415757620B543A52E61c46B32eB19261F984",
23642
- [Chain.ETHEREUM_MAINNET]: "0x1F98415757620B543A52E61c46B32eB19261F984",
23643
- [Chain.ARBITRUM_ONE]: ARBITRUM_ONE_MULTICALL_ADDRESS,
23644
- [Chain.BASE]: BASE_MULTICALL_ADDRESS,
23645
- [Chain.CELO_MAINNET]: CELO_MULTICALL_ADDRESS,
23646
- [Chain.BNB_SMART_CHAIN_MAINNET]: BNB_MULTICALL_ADDRESS,
23647
- [Chain.MANTLE]: MANTLE_MULTICALL_ADDRESS,
23648
- [Chain.BLAST]: BLAST_MULTICALL_ADDRESS,
23649
- [Chain.LINEA]: LINEA_MULTICALL_ADDRESS,
23650
- [Chain.AVALANCHE_C_CHAIN]: AVALANCHE_MULTICALL_ADDRESS,
23651
- [Chain.TAIKO_ALETHIA]: TAIKO_MULTICALL_ADDRESS,
23652
- [Chain.HEMI_NETWORK]: HEMI_MULTICALL_ADDRESS,
23653
- [Chain.GNOSIS]: GNOSIS_MULTICALL_ADDRESS,
23654
- [Chain.CORE_BLOCKCHAIN_MAINNET]: CORE_MULTICALL_ADDRESS,
23655
- [Chain.METIS_ANDROMEDA_MAINNET]: METIS_MULTICALL_ADDRESS,
23656
- [Chain.MODE]: MODE_MULTICALL_ADDRESS,
23657
- [Chain.INK]: INK_MULTICALL_ADDRESS,
23658
- [Chain.IOTA_EVM]: IOTA_MULTICALL_ADDRESS,
23659
- [Chain.CORN]: CORN_MULTICALL_ADDRESS,
23660
- [Chain.SONIC_MAINNET]: SONIC_MULTICALL_ADDRESS,
23661
- [Chain.FANTOM_OPERA]: FANTOM_MULTICALL_ADDRESS,
23662
- [Chain.SCROLL]: SCROLL_MULTICALL_ADDRESS,
23663
- [Chain.SHAPE]: SHAPE_MULTICALL_ADDRESS,
23664
- [Chain.CYBER_MAINNET]: CYBER_MULTICALL_ADDRESS,
23665
- [Chain.ZORA]: ZORA_MULTICALL_ADDRESS,
23666
- [Chain.MANTA_PACIFIC_MAINNET]: MANTA_MULTICALL_ADDRESS,
23667
- [Chain.REDSTONE]: REDSTONE_MULTICALL_ADDRESS,
23668
- [Chain.KAVA]: KAVA_MULTICALL_ADDRESS,
23669
- [Chain.METAL_L2]: METAL_MULTICALL_ADDRESS,
23670
- [Chain.LISK]: LISK_MULTICALL_ADDRESS,
23671
- [Chain.BOB]: BOB_MULTICALL_ADDRESS,
23672
- [Chain.ZERO_NETWORK]: ZERO_MULTICALL_ADDRESS,
23673
- [Chain.SAGA]: SAGA_MULTICALL_ADDRESS,
23674
- [Chain.MORPH]: MORPH_MULTICALL_ADDRESS,
23675
- [Chain.TELOS_EVM_MAINNET]: TELOS_MULTICALL_ADDRESS,
23676
- [Chain.WORLD_CHAIN]: WORLDCHAIN_MULTICALL_ADDRESS
23677
- };
23678
-
23679
- // src/flash-liquidity/fetchLiquidity.ts
23680
24470
  var DEFAULT_BATCH_SIZE = 4096;
23681
24471
  var FLASHLOAN_ENABLED_MASK = BigInt(
23682
24472
  "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFFFFFFFFFF"
@@ -23684,7 +24474,7 @@ var FLASHLOAN_ENABLED_MASK = BigInt(
23684
24474
  function getFlashLoanEnabled(data) {
23685
24475
  return (data & ~FLASHLOAN_ENABLED_MASK) !== BigInt(0);
23686
24476
  }
23687
- async function fetchFlashLiquidityForChain(chain, multicallRetry2, list = {}) {
24477
+ async function fetchFlashLiquidityForChain(chain, multicallRetry3, list = {}) {
23688
24478
  let callLengths = {};
23689
24479
  let aaveAssets = {};
23690
24480
  let aaveCalls = [];
@@ -23799,7 +24589,7 @@ async function fetchFlashLiquidityForChain(chain, multicallRetry2, list = {}) {
23799
24589
  ...balancerV3Calls,
23800
24590
  ...uniswapV4Calls
23801
24591
  ];
23802
- const rawResults = await multicallRetry2(
24592
+ const rawResults = await multicallRetry3(
23803
24593
  chain,
23804
24594
  calls,
23805
24595
  FlashAbi,
@@ -23940,6 +24730,111 @@ function attachPricesToFlashLiquidity(chainId, liq, prices, list = {}) {
23940
24730
  return liqCopy;
23941
24731
  }
23942
24732
 
23943
- export { MORPHO_LENS, MorphoLensAbi, attachPricesToFlashLiquidity, buildMorphoTypeCall, buildMorphoTypeUserCallWithLens, convertLenderUserDataResult, decodeListaMarkets, decodeMarkets, decodePackedListaUserDataset, decodePackedMorphoUserDataset, fetchDefillamaData, fetchDefillamaHistData, fetchFlashLiquidityForChain, fetchGeneralYields, fetchLenderMetaFromDir, fetchLenderMetaFromDirAndInitialize, fetchMainPrices, fetchPendlePrices, filterLendersByProtocol, generateLendingPairs, generateLendingPools, getAavesForChain, getLenderAssets, getLenderPublicData, getLenderPublicDataAll, getLenderPublicDataViaApi, getLenderUserDataMulti, getLenderUserDataResult, getLendersForChain, getMorphoTypeMarketConverter, getTopPairs, inititalizeAllData, isAaveType, isAaveV2Type, isAaveV32Type, isAaveV3Type, isCompoundV3, isCompoundV3Type, isInit, isMorphoType, isMultiMarket, isYLDR, normalizeToBytes, unflattenLenderData };
24733
+ // src/utils/rpcParse.ts
24734
+ function parseRawRpcResponses(responses, callMetadata, allowFailure = true) {
24735
+ const sortedResponses = [...responses].sort((a, b) => a.id - b.id);
24736
+ return sortedResponses.map((response, idx) => {
24737
+ const metadata = callMetadata[idx];
24738
+ if (response.error || !response.result) {
24739
+ if (!allowFailure) {
24740
+ throw new Error(
24741
+ `RPC call failed for ${metadata.functionName}: ${response.error?.message || "No result"}`
24742
+ );
24743
+ }
24744
+ return "0x";
24745
+ }
24746
+ try {
24747
+ const decoded = decodeFunctionResult({
24748
+ abi: metadata.abi,
24749
+ functionName: metadata.functionName,
24750
+ data: response.result
24751
+ });
24752
+ return decoded;
24753
+ } catch (error) {
24754
+ if (!allowFailure) {
24755
+ throw new Error(
24756
+ `Failed to decode result for ${metadata.functionName}: ${error}`
24757
+ );
24758
+ }
24759
+ return "0x";
24760
+ }
24761
+ });
24762
+ }
24763
+ function parseRawRpcBatchResponses(batches, batchResponses, allowFailure = true) {
24764
+ const allResults = [];
24765
+ batches.forEach((batch, batchIdx) => {
24766
+ const responses = batchResponses[batchIdx];
24767
+ const parsed = parseRawRpcResponses(
24768
+ responses,
24769
+ batch.callMetadata,
24770
+ allowFailure
24771
+ );
24772
+ allResults.push(...parsed);
24773
+ });
24774
+ return allResults;
24775
+ }
24776
+ function parseMulticallRpcResponses(responses, batches, allowFailure = true) {
24777
+ const allResults = [];
24778
+ const sortedResponses = [...responses].sort((a, b) => a.id - b.id);
24779
+ sortedResponses.forEach((response, batchIdx) => {
24780
+ const batch = batches[batchIdx];
24781
+ if (response.error || !response.result) {
24782
+ if (!allowFailure) {
24783
+ throw new Error(
24784
+ `Multicall RPC failed: ${response.error?.message || "No result"}`
24785
+ );
24786
+ }
24787
+ batch.callMetadata.forEach(() => allResults.push("0x"));
24788
+ return;
24789
+ }
24790
+ try {
24791
+ const decoded = decodeAbiParameters(
24792
+ [
24793
+ {
24794
+ type: "tuple[]",
24795
+ components: [
24796
+ { name: "success", type: "bool" },
24797
+ { name: "returnData", type: "bytes" }
24798
+ ]
24799
+ }
24800
+ ],
24801
+ response.result
24802
+ )[0];
24803
+ decoded.forEach((result, idx) => {
24804
+ const metadata = batch.callMetadata[idx];
24805
+ if (!result.success || result.returnData === "0x") {
24806
+ if (!allowFailure) {
24807
+ throw new Error(`Call failed for ${metadata.functionName}`);
24808
+ }
24809
+ allResults.push("0x");
24810
+ return;
24811
+ }
24812
+ try {
24813
+ const decodedResult = decodeFunctionResult({
24814
+ abi: metadata.abi,
24815
+ functionName: metadata.functionName,
24816
+ data: result.returnData
24817
+ });
24818
+ allResults.push(decodedResult);
24819
+ } catch (error) {
24820
+ if (!allowFailure) {
24821
+ throw new Error(
24822
+ `Failed to decode result for ${metadata.functionName}: ${error}`
24823
+ );
24824
+ }
24825
+ allResults.push("0x");
24826
+ }
24827
+ });
24828
+ } catch (error) {
24829
+ if (!allowFailure) {
24830
+ throw new Error(`Failed to decode multicall response: ${error}`);
24831
+ }
24832
+ batch.callMetadata.forEach(() => allResults.push("0x"));
24833
+ }
24834
+ });
24835
+ return allResults;
24836
+ }
24837
+
24838
+ export { MORPHO_LENS, MorphoLensAbi, attachPricesToFlashLiquidity, buildMorphoTypeCall, buildMorphoTypeUserCallWithLens, convertLenderUserDataResult, createMarketUid, createMulticallRpcCall, createRawRpcCalls, decodeListaMarkets, decodeMarkets, decodePackedListaUserDataset, decodePackedMorphoUserDataset, fetchDefillamaData, fetchDefillamaHistData, fetchFlashLiquidityForChain, fetchGeneralYields, fetchLenderMetaFromDir, fetchLenderMetaFromDirAndInitialize, fetchMainPrices, fetchOraclePrices, fetchPendlePrices, filterLendersByProtocol, flattenToUSDPriceMap, generateLendingPairs, generateLendingPools, getAavesForChain, getLenderAssets, getLenderPublicData, getLenderPublicDataAll, getLenderPublicDataViaApi, getLenderUserDataMulti, getLenderUserDataResult, getLendersForChain, getMorphoTypeMarketConverter, getTopPairs, inititalizeAllData, isAaveType, isAaveV2Type, isAaveV32Type, isAaveV3Type, isCompoundV3, isCompoundV3Type, isInit, isMorphoType, isMultiMarket, isYLDR, multicall3Abi, normalizeToBytes, parseMulticallRpcResponses, parseRawRpcBatchResponses, parseRawRpcResponses, prepareLenderUserDataRpcCalls, prepareMulticallInputs, unflattenLenderData };
23944
24839
  //# sourceMappingURL=index.js.map
23945
24840
  //# sourceMappingURL=index.js.map