@1delta/margin-fetcher 0.0.152 → 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 (88) 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 +1382 -505
  10. package/dist/index.js.map +1 -1
  11. package/dist/lending/index.d.ts +1 -1
  12. package/dist/lending/index.d.ts.map +1 -1
  13. package/dist/lending/init/publicCallParse.d.ts +1 -2
  14. package/dist/lending/init/publicCallParse.d.ts.map +1 -1
  15. package/dist/lending/meta/index.d.ts +2 -0
  16. package/dist/lending/meta/index.d.ts.map +1 -1
  17. package/dist/lending/user-data/aave-v2-type/userCallBuild.d.ts +1 -2
  18. package/dist/lending/user-data/aave-v2-type/userCallBuild.d.ts.map +1 -1
  19. package/dist/lending/user-data/aave-v2-type/userCallParse.d.ts +2 -7
  20. package/dist/lending/user-data/aave-v2-type/userCallParse.d.ts.map +1 -1
  21. package/dist/lending/user-data/aave-v3-type/userCallBuild.d.ts +1 -2
  22. package/dist/lending/user-data/aave-v3-type/userCallBuild.d.ts.map +1 -1
  23. package/dist/lending/user-data/aave-v3-type/userCallParse.d.ts +2 -7
  24. package/dist/lending/user-data/aave-v3-type/userCallParse.d.ts.map +1 -1
  25. package/dist/lending/user-data/aave-v3-type/userCallParseYldr.d.ts +2 -7
  26. package/dist/lending/user-data/aave-v3-type/userCallParseYldr.d.ts.map +1 -1
  27. package/dist/lending/user-data/abis.d.ts +3307 -3307
  28. package/dist/lending/user-data/compound-v2/userCallBuild.d.ts +1 -2
  29. package/dist/lending/user-data/compound-v2/userCallBuild.d.ts.map +1 -1
  30. package/dist/lending/user-data/compound-v2/userCallParse.d.ts +2 -7
  31. package/dist/lending/user-data/compound-v2/userCallParse.d.ts.map +1 -1
  32. package/dist/lending/user-data/compound-v3/userCallBuild.d.ts +1 -2
  33. package/dist/lending/user-data/compound-v3/userCallBuild.d.ts.map +1 -1
  34. package/dist/lending/user-data/compound-v3/userCallParse.d.ts +2 -7
  35. package/dist/lending/user-data/compound-v3/userCallParse.d.ts.map +1 -1
  36. package/dist/lending/user-data/fetchUserData.d.ts +28 -15
  37. package/dist/lending/user-data/fetchUserData.d.ts.map +1 -1
  38. package/dist/lending/user-data/index.d.ts +1 -0
  39. package/dist/lending/user-data/index.d.ts.map +1 -1
  40. package/dist/lending/user-data/init/userCallParse.d.ts +2 -7
  41. package/dist/lending/user-data/init/userCallParse.d.ts.map +1 -1
  42. package/dist/lending/user-data/morpho/userCallParse.d.ts +7 -17
  43. package/dist/lending/user-data/morpho/userCallParse.d.ts.map +1 -1
  44. package/dist/lending/user-data/utils/createGeneralUserState.d.ts +3 -45
  45. package/dist/lending/user-data/utils/createGeneralUserState.d.ts.map +1 -1
  46. package/dist/lending/user-data/utils/createMultiAccountStyleUserState.d.ts +4 -11
  47. package/dist/lending/user-data/utils/createMultiAccountStyleUserState.d.ts.map +1 -1
  48. package/dist/lending/user-data/utils/index.d.ts +1 -0
  49. package/dist/lending/user-data/utils/index.d.ts.map +1 -1
  50. package/dist/lending/user-data/utils/types.d.ts +68 -0
  51. package/dist/lending/user-data/utils/types.d.ts.map +1 -0
  52. package/dist/prices/index.d.ts +1 -0
  53. package/dist/prices/index.d.ts.map +1 -1
  54. package/dist/prices/main-prices/fetchOracleData.d.ts.map +1 -1
  55. package/dist/prices/oracle-prices/fetchOraclePrices.d.ts +55 -0
  56. package/dist/prices/oracle-prices/fetchOraclePrices.d.ts.map +1 -0
  57. package/dist/prices/oracle-prices/fetchers/aave.d.ts +91 -0
  58. package/dist/prices/oracle-prices/fetchers/aave.d.ts.map +1 -0
  59. package/dist/prices/oracle-prices/fetchers/compoundV2.d.ts +66 -0
  60. package/dist/prices/oracle-prices/fetchers/compoundV2.d.ts.map +1 -0
  61. package/dist/prices/oracle-prices/fetchers/compoundV3.d.ts +85 -0
  62. package/dist/prices/oracle-prices/fetchers/compoundV3.d.ts.map +1 -0
  63. package/dist/prices/oracle-prices/fetchers/index.d.ts +6 -0
  64. package/dist/prices/oracle-prices/fetchers/index.d.ts.map +1 -0
  65. package/dist/prices/oracle-prices/fetchers/lista.d.ts +66 -0
  66. package/dist/prices/oracle-prices/fetchers/lista.d.ts.map +1 -0
  67. package/dist/prices/oracle-prices/fetchers/morpho.d.ts +69 -0
  68. package/dist/prices/oracle-prices/fetchers/morpho.d.ts.map +1 -0
  69. package/dist/prices/oracle-prices/index.d.ts +8 -0
  70. package/dist/prices/oracle-prices/index.d.ts.map +1 -0
  71. package/dist/prices/oracle-prices/types.d.ts +158 -0
  72. package/dist/prices/oracle-prices/types.d.ts.map +1 -0
  73. package/dist/types/lenderTypes.d.ts +5 -5
  74. package/dist/types/lenderTypes.d.ts.map +1 -1
  75. package/dist/utils/constants.d.ts +1 -0
  76. package/dist/utils/constants.d.ts.map +1 -1
  77. package/dist/utils/index.d.ts +2 -1
  78. package/dist/utils/index.d.ts.map +1 -1
  79. package/dist/utils/marketUid.d.ts +3 -0
  80. package/dist/utils/marketUid.d.ts.map +1 -0
  81. package/dist/utils/multicall.d.ts +11 -1
  82. package/dist/utils/multicall.d.ts.map +1 -1
  83. package/dist/utils/rpcCall.d.ts +65 -0
  84. package/dist/utils/rpcCall.d.ts.map +1 -0
  85. package/dist/utils/rpcParse.d.ts +19 -0
  86. package/dist/utils/rpcParse.d.ts.map +1 -0
  87. package/package.json +2 -2
  88. 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
  };
@@ -10766,9 +10782,14 @@ var apyToApr2 = (apy) => {
10766
10782
  return ((apy + 1) ** (1 / SECONDS_PER_YEAR2) - 1) * SECONDS_PER_YEAR2;
10767
10783
  };
10768
10784
 
10785
+ // src/lending/user-data/utils/types.ts
10786
+ function getMarketUidsFromMeta(meta) {
10787
+ return Object.keys(meta);
10788
+ }
10789
+
10769
10790
  // src/lending/user-data/utils/createGeneralUserState.ts
10770
10791
  function createBaseTypeUserState(payload, lenderData, totalDeposits24h = 0, totalDebt24h = 0) {
10771
- let assetKeys = Object.keys(payload.lendingPositions["0"] ?? {});
10792
+ let assetKeys = getMarketUidsFromMeta(lenderData);
10772
10793
  const { chainId, account } = payload;
10773
10794
  const mode = Number(payload.userEMode ?? 0);
10774
10795
  const isWhitelisted = !Boolean(payload?.notWhitelisted ?? false);
@@ -10786,17 +10807,19 @@ function createBaseTypeUserState(payload, lenderData, totalDeposits24h = 0, tota
10786
10807
  let collateralAllActive = 0;
10787
10808
  let rewardsPerAsset = {};
10788
10809
  for (let i = 0; i < assetKeys.length; i++) {
10789
- const asset = assetKeys[i];
10790
- if (!lenderData?.[asset]) continue;
10791
- 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];
10792
10814
  const {
10793
10815
  depositRate,
10794
- stakingYield,
10816
+ intrinsicYield,
10795
10817
  variableBorrowRate,
10796
10818
  stableBorrowRate,
10797
10819
  rewards,
10798
- collateralActive
10799
- } = lenderData[asset];
10820
+ flags,
10821
+ configs
10822
+ } = lenderData[marketUid];
10800
10823
  deposits += depositsUSD;
10801
10824
  debt += debtStableUSD;
10802
10825
  debt += debtUSD;
@@ -10812,76 +10835,75 @@ function createBaseTypeUserState(payload, lenderData, totalDeposits24h = 0, tota
10812
10835
  if (rewDebt > 0) rewardsPerAsset[key].borrowApr += rewDebt;
10813
10836
  }
10814
10837
  );
10815
- stakingDepositAccrual += (stakingYield ?? 0) * depositsUSD;
10816
- stakingBorrowAccrual += (stakingYield ?? 0) * (debtStableUSD + debtUSD);
10817
- if (collateralActive) {
10838
+ stakingDepositAccrual += (intrinsicYield ?? 0) * depositsUSD;
10839
+ stakingBorrowAccrual += (intrinsicYield ?? 0) * (debtStableUSD + debtUSD);
10840
+ if (flags?.collateralActive) {
10818
10841
  if (collateralEnabled) {
10819
- collateral += (lenderData[asset].config[mode]?.collateralFactor ?? 1) * depositsUSD;
10820
- borrowDiscountedCollateral += (lenderData[asset].config[mode]?.borrowCollateralFactor ?? 1) * depositsUSD;
10842
+ collateral += (configs[mode]?.collateralFactor ?? 1) * depositsUSD;
10843
+ borrowDiscountedCollateral += (configs[mode]?.borrowCollateralFactor ?? 1) * depositsUSD;
10821
10844
  }
10822
- borrowDiscountedCollateralAllActive += (lenderData[asset].config[mode]?.borrowCollateralFactor ?? 1) * depositsUSD;
10823
- collateralAllActive += (lenderData[asset].config[mode]?.collateralFactor ?? 1) * depositsUSD;
10845
+ borrowDiscountedCollateralAllActive += (configs[mode]?.borrowCollateralFactor ?? 1) * depositsUSD;
10846
+ collateralAllActive += (configs[mode]?.collateralFactor ?? 1) * depositsUSD;
10824
10847
  }
10825
10848
  depositInterest += depositRate * depositsUSD;
10826
10849
  borrowInterest += debtStableUSD * stableBorrowRate + debtUSD * variableBorrowRate;
10827
10850
  }
10828
10851
  const nav = deposits - debt;
10829
10852
  const balanceData2 = {
10830
- "0": {
10831
- borrowDiscountedCollateral,
10832
- borrowDiscountedCollateralAllActive,
10833
- collateral,
10834
- collateralAllActive,
10835
- deposits,
10836
- debt,
10837
- adjustedDebt: debt,
10838
- nav,
10839
- deposits24h: totalDeposits24h,
10840
- debt24h: totalDebt24h,
10841
- nav24h: totalDeposits24h - totalDebt24h,
10842
- ...payload.rewards ? { rewards: payload.rewards } : {}
10843
- }
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 } : {}
10844
10865
  };
10845
10866
  const aprData2 = {
10846
- "0": {
10847
- apr: safeDivide(depositInterest - borrowInterest, nav),
10848
- borrowApr: safeDivide(borrowInterest, debt),
10849
- depositApr: safeDivide(depositInterest, deposits),
10850
- rewards: divideAccrualsToAprs(rewardsPerAsset, nav, deposits, debt),
10851
- rewardApr: safeDivide(rewardDepositAccrual + rewardBorrowAccrual, nav),
10852
- rewardDepositApr: safeDivide(rewardDepositAccrual, deposits),
10853
- rewardBorrowApr: safeDivide(rewardBorrowAccrual, debt),
10854
- stakingApr: safeDivide(stakingDepositAccrual - stakingBorrowAccrual, nav),
10855
- stakingDepositApr: safeDivide(stakingDepositAccrual, deposits),
10856
- stakingBorrowApr: safeDivide(stakingBorrowAccrual, debt)
10857
- }
10858
- };
10859
- const userConfigs = {
10860
- "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)
10861
10877
  };
10878
+ const userConfig = { selectedMode: mode, id: account, isWhitelisted };
10862
10879
  return {
10863
10880
  account,
10864
10881
  chainId,
10865
- balanceData: balanceData2,
10866
- aprData: aprData2,
10867
- 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
+ ]
10868
10892
  };
10869
10893
  }
10870
10894
 
10871
10895
  // src/lending/user-data/utils/createMultiAccountStyleUserState.ts
10872
10896
  function createMultiAccountTypeUserState(payload, lenderData, histData) {
10873
10897
  const positionKeys = Object.keys(payload.lendingPositions ?? {});
10874
- let assetKeys = payload.assets;
10898
+ let marketUids = getMarketUidsFromMeta(lenderData);
10875
10899
  const { chainId, account } = payload;
10876
- let userConfigs = {};
10877
- let balanceData2 = {};
10878
- let aprData2 = {};
10900
+ let data = [];
10879
10901
  for (let j = 0; j < positionKeys.length; j++) {
10880
10902
  const posId = positionKeys[j];
10881
10903
  const position = payload.lendingPositions[posId];
10882
10904
  const { mode: posMode } = position;
10883
10905
  const mode = posMode ?? LENDER_MODE_NO_MODE;
10884
- userConfigs[posId] = {
10906
+ const userConfig = {
10885
10907
  id: posId,
10886
10908
  selectedMode: mode,
10887
10909
  isWhitelisted: true
@@ -10897,20 +10919,27 @@ function createMultiAccountTypeUserState(payload, lenderData, histData) {
10897
10919
  let collateral = 0;
10898
10920
  let borrowDiscountedCollateral = 0;
10899
10921
  let adjustedDebt = 0;
10900
- for (let i = 0; i < assetKeys.length; i++) {
10901
- const asset = assetKeys[i];
10902
- const { depositsUSD, debtUSD } = payload.lendingPositions[posId][asset];
10903
- if (!lenderData?.[asset]) continue;
10904
- 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];
10905
10934
  deposits += depositsUSD;
10906
10935
  debt += debtUSD;
10907
10936
  Object.entries(rewards ?? {}).map(([key, rewardData]) => {
10908
10937
  rewardDepositAccrual += rewardData.depositRate * depositsUSD;
10909
10938
  rewardBorrowAccrual += rewardData.variableBorrowRate * debtUSD + rewardData.stableBorrowRate * debtUSD;
10910
10939
  });
10911
- stakingDepositAccrual += (stakingYield ?? 0) * depositsUSD;
10912
- stakingBorrowAccrual += (stakingYield ?? 0) * debtUSD;
10913
- const config = lenderData[asset].config[mode];
10940
+ stakingDepositAccrual += (intrinsicYield ?? 0) * depositsUSD;
10941
+ stakingBorrowAccrual += (intrinsicYield ?? 0) * debtUSD;
10942
+ const config = configs?.[mode];
10914
10943
  collateral += (config?.collateralFactor ?? 1) * depositsUSD;
10915
10944
  borrowDiscountedCollateral += (config?.borrowCollateralFactor ?? 1) * depositsUSD;
10916
10945
  adjustedDebt += (config?.borrowFactor ?? 1) * debtUSD;
@@ -10918,7 +10947,7 @@ function createMultiAccountTypeUserState(payload, lenderData, histData) {
10918
10947
  borrowInterest += debtUSD * variableBorrowRate;
10919
10948
  }
10920
10949
  const nav = deposits - debt;
10921
- balanceData2[posId] = {
10950
+ const balanceData2 = {
10922
10951
  borrowDiscountedCollateral,
10923
10952
  borrowDiscountedCollateralAllActive: borrowDiscountedCollateral,
10924
10953
  collateral,
@@ -10931,7 +10960,7 @@ function createMultiAccountTypeUserState(payload, lenderData, histData) {
10931
10960
  debt24h: histData[posId]?.totalDebt24h,
10932
10961
  nav24h: histData[posId]?.totalDeposits24h - histData[posId]?.totalDebt24h
10933
10962
  };
10934
- aprData2[posId] = {
10963
+ const aprData2 = {
10935
10964
  apr: safeDivide(depositInterest - borrowInterest, nav),
10936
10965
  borrowApr: safeDivide(borrowInterest, debt),
10937
10966
  depositApr: safeDivide(depositInterest, deposits),
@@ -10940,15 +10969,24 @@ function createMultiAccountTypeUserState(payload, lenderData, histData) {
10940
10969
  rewardBorrowApr: safeDivide(rewardBorrowAccrual, debt),
10941
10970
  stakingApr: safeDivide(stakingDepositAccrual - stakingBorrowAccrual, nav),
10942
10971
  stakingDepositApr: safeDivide(stakingDepositAccrual, deposits),
10943
- stakingBorrowApr: safeDivide(stakingBorrowAccrual, debt)
10972
+ stakingBorrowApr: safeDivide(stakingBorrowAccrual, debt),
10973
+ rewards: {}
10944
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
+ });
10945
10985
  }
10946
10986
  return {
10947
10987
  account,
10948
10988
  chainId,
10949
- balanceData: balanceData2,
10950
- aprData: aprData2,
10951
- userConfigs
10989
+ data
10952
10990
  };
10953
10991
  }
10954
10992
 
@@ -13544,7 +13582,7 @@ var getAbi = (lender) => {
13544
13582
  if (isCompoundV2Type(lender)) return VenusLensAbi;
13545
13583
  return [];
13546
13584
  };
13547
- var getLenderPublicData = async (chainId, lenders, prices, additionalYields, multicallRetry2, tokenList = async () => {
13585
+ var getLenderPublicData = async (chainId, lenders, prices, additionalYields, multicallRetry3, tokenList = async () => {
13548
13586
  return {};
13549
13587
  }) => {
13550
13588
  let calls = [];
@@ -13555,7 +13593,7 @@ var getLenderPublicData = async (chainId, lenders, prices, additionalYields, mul
13555
13593
  calls = [...calls, ...mappedCalls];
13556
13594
  }
13557
13595
  const [rawResults, list] = await Promise.all([
13558
- multicallRetry2(
13596
+ multicallRetry3(
13559
13597
  chainId,
13560
13598
  calls.map((call) => call.call),
13561
13599
  calls.map((call) => call.abi)
@@ -13667,7 +13705,7 @@ function lenderCanUseApi(lender, chainId) {
13667
13705
  }
13668
13706
  return false;
13669
13707
  }
13670
- var getLenderPublicDataAll = async (chainId, lenders, prices, additionalYields, multicallRetry2, tokenList) => {
13708
+ var getLenderPublicDataAll = async (chainId, lenders, prices, additionalYields, multicallRetry3, tokenList) => {
13671
13709
  const lendersApi = lenders.filter((l) => lenderCanUseApi(l, chainId));
13672
13710
  const lendersOnChain = lenders.filter((l) => !lenderCanUseApi(l, chainId));
13673
13711
  const onChain = getLenderPublicData(
@@ -13675,7 +13713,7 @@ var getLenderPublicDataAll = async (chainId, lenders, prices, additionalYields,
13675
13713
  lendersOnChain,
13676
13714
  prices,
13677
13715
  additionalYields,
13678
- multicallRetry2,
13716
+ multicallRetry3,
13679
13717
  tokenList
13680
13718
  );
13681
13719
  const api = getLenderPublicDataViaApi(
@@ -13688,8 +13726,85 @@ var getLenderPublicDataAll = async (chainId, lenders, prices, additionalYields,
13688
13726
  const [onChainRes, apiRes] = await Promise.all([onChain, api]);
13689
13727
  return { ...onChainRes, ...apiRes };
13690
13728
  };
13691
- var { isArray } = lodash;
13729
+
13730
+ // src/utils/constants.ts
13692
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;
13693
13808
  var maxRetries = 3;
13694
13809
  var multicallViemAbiArray = async (chainId, abi, calls, getEvmClient2, retry = true, providerId = 0, retries = maxRetries, allowFailure = true, batchSize = MULTICALL_DEFAULT_BATCH_SIZE, logs = false) => {
13695
13810
  try {
@@ -13729,6 +13844,117 @@ var multicallViemAbiArray = async (chainId, abi, calls, getEvmClient2, retry = t
13729
13844
  );
13730
13845
  }
13731
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
+ }
13732
13958
  function organizeUserQueries(queries) {
13733
13959
  const morphos = queries.filter((q) => isMorphoType(q.lender));
13734
13960
  if (morphos.length === 0) return queries;
@@ -13765,10 +13991,12 @@ var getBaseAaveV2Calls = (chainId, account, lender, assetsToQuery) => {
13765
13991
  }
13766
13992
  ]);
13767
13993
  };
13768
- var buildAaveV2UserCall = (chainId, lender, account, assets) => {
13994
+ var buildAaveV2UserCall = (chainId, lender, account) => {
13769
13995
  switch (lender) {
13770
13996
  default: {
13771
- const assetsToQuery = getAaveAssets(chainId, lender);
13997
+ const assetsToQuery = getAaveAssets(chainId, lender).sort(
13998
+ (a, b) => a.toLowerCase().localeCompare(b.toLowerCase())
13999
+ );
13772
14000
  return getBaseAaveV2Calls(chainId, account, lender, assetsToQuery);
13773
14001
  }
13774
14002
  }
@@ -13784,8 +14012,10 @@ var getBaseAaveV3Calls = (chainId, account, lender, assetsToQuery) => {
13784
14012
  }
13785
14013
  ]);
13786
14014
  };
13787
- var buildAaveV3UserCall = (chainId, lender, account, assets) => {
13788
- 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
+ );
13789
14019
  const calls = [...getBaseAaveV3Calls(chainId, account, lender, assetsToQuery)];
13790
14020
  if (!isYLDR(lender)) {
13791
14021
  const callDataEmode = {
@@ -13818,10 +14048,12 @@ var buildInitUserCall = (chainId, lender, account) => {
13818
14048
  };
13819
14049
 
13820
14050
  // src/lending/user-data/compound-v3/userCallBuild.ts
13821
- var buildCompoundV3UserCall = (chainId, lender, account, assetsOverride) => {
14051
+ var buildCompoundV3UserCall = (chainId, lender, account) => {
13822
14052
  const baseAsset = getCompoundV3BaseAsset(lender, chainId)?.baseAsset;
13823
14053
  const cometContractAddress = getCompoundV3CometAddress(chainId, lender);
13824
- const assets = assetsOverride ?? getLenderAssets(chainId, lender);
14054
+ const assets = getLenderAssets(chainId, lender).sort(
14055
+ (a, b) => a.toLowerCase().localeCompare(b.toLowerCase())
14056
+ );
13825
14057
  const assetsNoBase = assets.filter((a) => a !== baseAsset);
13826
14058
  const baseCalls = [
13827
14059
  {
@@ -18243,10 +18475,12 @@ var getAbi2 = (lender) => {
18243
18475
  };
18244
18476
 
18245
18477
  // src/lending/user-data/aave-v2-type/userCallParse.ts
18246
- var getAaveV2UserDataConverter = (lender, chainId, account, prices, pricesHist, lenderData) => {
18478
+ var getAaveV2UserDataConverter = (lender, chainId, account, metaMap) => {
18247
18479
  switch (lender) {
18248
18480
  default: {
18249
- const assetsToQuery = Object.keys(lenderData);
18481
+ const assetsToQuery = getAaveAssets(chainId, lender).sort(
18482
+ (a, b) => a.toLowerCase().localeCompare(b.toLowerCase())
18483
+ );
18250
18484
  const expectedNumberOfCalls = assetsToQuery.length;
18251
18485
  return [
18252
18486
  (data) => {
@@ -18258,19 +18492,13 @@ var getAaveV2UserDataConverter = (lender, chainId, account, prices, pricesHist,
18258
18492
  let totalDeposits24h = 0;
18259
18493
  for (let i = 0; i < assetsToQuery.length; i++) {
18260
18494
  const asset = assetsToQuery[i];
18261
- const { dataForAsset, addedDebt, addedDeposits } = createAaveV2Entry(
18262
- i,
18263
- data,
18264
- chainId,
18265
- lenderData[asset].asset,
18266
- prices,
18267
- pricesHist,
18268
- 0
18269
- );
18495
+ const key = createMarketUid(chainId, lender, asset);
18496
+ const metaEntity = metaMap?.[key];
18497
+ const { dataForAsset, addedDebt, addedDeposits } = createAaveV2Entry(i, data, key, metaEntity, 0);
18270
18498
  if (!dataForAsset) continue;
18271
18499
  totalDebt24h += addedDebt;
18272
18500
  totalDeposits24h += addedDeposits;
18273
- lendingPositions[asset] = dataForAsset;
18501
+ lendingPositions[key] = dataForAsset;
18274
18502
  }
18275
18503
  const payload = {
18276
18504
  chainId,
@@ -18280,21 +18508,18 @@ var getAaveV2UserDataConverter = (lender, chainId, account, prices, pricesHist,
18280
18508
  };
18281
18509
  const userData = createBaseTypeUserState(
18282
18510
  payload,
18283
- lenderData,
18511
+ metaMap,
18284
18512
  totalDeposits24h,
18285
18513
  totalDebt24h
18286
18514
  );
18287
- return {
18288
- ...payload,
18289
- ...userData
18290
- };
18515
+ return userData;
18291
18516
  },
18292
18517
  expectedNumberOfCalls
18293
18518
  ];
18294
18519
  }
18295
18520
  }
18296
18521
  };
18297
- function createAaveV2Entry(i, data, chainId, asset, prices, pricesHist, claimableRewards) {
18522
+ function createAaveV2Entry(i, data, key, meta, claimableRewards) {
18298
18523
  const reserveData = data[i];
18299
18524
  const currentATokenBalanceRaw = reserveData[0 /* currentATokenBalance */]?.toString();
18300
18525
  const currentStableDebtRaw = reserveData[1 /* currentStableDebt */]?.toString();
@@ -18306,7 +18531,7 @@ function createAaveV2Entry(i, data, chainId, asset, prices, pricesHist, claimabl
18306
18531
  addedDebt: 0
18307
18532
  };
18308
18533
  }
18309
- const assetMeta = asset;
18534
+ const assetMeta = meta.asset;
18310
18535
  const decimals = assetMeta?.decimals ?? 18;
18311
18536
  const currentATokenBalance = Number(
18312
18537
  parseRawAmount(currentATokenBalanceRaw, decimals)
@@ -18317,12 +18542,11 @@ function createAaveV2Entry(i, data, chainId, asset, prices, pricesHist, claimabl
18317
18542
  const currentVariableDebt = Number(
18318
18543
  parseRawAmount(currentVariableDebtRaw, decimals)
18319
18544
  );
18320
- const key = toOracleKey(assetMeta?.assetGroup) ?? toGenericPriceKey(asset.address, chainId);
18321
- const price = prices[key] ?? 1;
18322
- const priceHist = pricesHist?.[key] ?? price;
18545
+ const price = meta?.price?.priceUsd ?? 1;
18546
+ const priceHist = meta?.price?.priceUsd24h ?? price;
18323
18547
  const dataForAsset = {
18324
- poolId: asset.address,
18325
- underlying: asset.address,
18548
+ poolId: key,
18549
+ underlying: assetMeta.address,
18326
18550
  deposits: currentATokenBalance,
18327
18551
  depositsRaw: currentATokenBalanceRaw,
18328
18552
  debtStable: currentStableDebt,
@@ -18344,8 +18568,10 @@ function createAaveV2Entry(i, data, chainId, asset, prices, pricesHist, claimabl
18344
18568
  }
18345
18569
 
18346
18570
  // src/lending/user-data/aave-v3-type/userCallParse.ts
18347
- var getAaveV3UserDataConverter = (lender, chainId, account, prices, pricesHist, lenderData) => {
18348
- 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
+ );
18349
18575
  const expectedNumberOfCalls = assetsToQuery.length + 1;
18350
18576
  return [
18351
18577
  (data) => {
@@ -18358,18 +18584,18 @@ var getAaveV3UserDataConverter = (lender, chainId, account, prices, pricesHist,
18358
18584
  let totalDeposits24h = 0;
18359
18585
  for (let i = 0; i < assetsToQuery.length; i++) {
18360
18586
  const asset = assetsToQuery[i];
18587
+ const key = createMarketUid(chainId, lender, asset);
18588
+ const metaEntity = metaMap?.[key];
18361
18589
  const { dataForAsset, addedDebt, addedDeposits } = createAaveV3Entry(
18362
18590
  i,
18363
18591
  data,
18364
- chainId,
18365
- lenderData[asset].asset,
18366
- prices,
18367
- pricesHist
18592
+ key,
18593
+ metaEntity
18368
18594
  );
18369
18595
  if (!dataForAsset) continue;
18370
18596
  totalDebt24h += addedDebt;
18371
18597
  totalDeposits24h += addedDeposits;
18372
- lendingPositions[asset] = dataForAsset;
18598
+ lendingPositions[key] = dataForAsset;
18373
18599
  }
18374
18600
  const payload = {
18375
18601
  chainId,
@@ -18380,19 +18606,16 @@ var getAaveV3UserDataConverter = (lender, chainId, account, prices, pricesHist,
18380
18606
  };
18381
18607
  const userData = createBaseTypeUserState(
18382
18608
  payload,
18383
- lenderData,
18609
+ metaMap,
18384
18610
  totalDeposits24h,
18385
18611
  totalDebt24h
18386
18612
  );
18387
- return {
18388
- ...payload,
18389
- ...userData
18390
- };
18613
+ return userData;
18391
18614
  },
18392
18615
  expectedNumberOfCalls
18393
18616
  ];
18394
18617
  };
18395
- function createAaveV3Entry(i, data, chainId, asset, prices, pricesHist) {
18618
+ function createAaveV3Entry(i, data, key, meta) {
18396
18619
  const reserveData = data[i];
18397
18620
  const currentATokenBalanceRaw = reserveData[0 /* currentATokenBalance */]?.toString();
18398
18621
  const currentStableDebtRaw = reserveData[1 /* currentStableDebt */]?.toString();
@@ -18404,17 +18627,16 @@ function createAaveV3Entry(i, data, chainId, asset, prices, pricesHist) {
18404
18627
  addedDebt: 0
18405
18628
  };
18406
18629
  }
18407
- const assetMeta = asset;
18630
+ const assetMeta = meta.asset;
18408
18631
  const decimals = assetMeta?.decimals ?? 18;
18409
18632
  const currentATokenBalance = parseRawAmount(currentATokenBalanceRaw, decimals);
18410
18633
  const currentStableDebt = parseRawAmount(currentStableDebtRaw, decimals);
18411
18634
  const currentVariableDebt = parseRawAmount(currentVariableDebtRaw, decimals);
18412
- const key = toOracleKey(assetMeta?.assetGroup) ?? toGenericPriceKey(asset.address, chainId);
18413
- const price = prices[key] ?? 1;
18414
- const priceHist = pricesHist?.[key] ?? price;
18635
+ const price = meta?.price?.priceUsd ?? 1;
18636
+ const priceHist = meta?.price?.priceUsd24h ?? price;
18415
18637
  const dataForAsset = {
18416
- poolId: asset.address,
18417
- underlying: asset.address,
18638
+ poolId: key,
18639
+ underlying: assetMeta.address,
18418
18640
  deposits: currentATokenBalance,
18419
18641
  depositsRaw: currentATokenBalanceRaw,
18420
18642
  debtStable: currentStableDebt,
@@ -18436,7 +18658,7 @@ function createAaveV3Entry(i, data, chainId, asset, prices, pricesHist) {
18436
18658
  }
18437
18659
 
18438
18660
  // src/lending/user-data/init/userCallParse.ts
18439
- var getInitUserDataConverter = (lender, chainId, account, prices, pricesHist, lenderData) => {
18661
+ var getInitUserDataConverter = (lender, chainId, account, metaMap) => {
18440
18662
  const validOwner = account.toLowerCase();
18441
18663
  const brokerAddress = getInitFlashAggregatorAddress(chainId) ?? "";
18442
18664
  const expectedNumberOfCalls = 1;
@@ -18449,8 +18671,8 @@ var getInitUserDataConverter = (lender, chainId, account, prices, pricesHist, le
18449
18671
  const indexes = data[0 /* posMeta */].map((e, i) => {
18450
18672
  return { e, i };
18451
18673
  }).filter((a) => a.e.owner.toLowerCase() === validOwner).map((a) => a.i);
18452
- const assets = Object.keys(lenderData);
18453
18674
  let histData = {};
18675
+ let allPools = {};
18454
18676
  const result = Object.assign(
18455
18677
  {},
18456
18678
  ...indexes.map((index) => {
@@ -18461,11 +18683,14 @@ var getInitUserDataConverter = (lender, chainId, account, prices, pricesHist, le
18461
18683
  {},
18462
18684
  ...data[1 /* collaterals */][index].map(
18463
18685
  (c) => {
18464
- const asset = c.underlying.toLowerCase();
18465
- 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;
18466
18691
  const depositsRaw = c.amount.toString();
18467
18692
  return {
18468
- [asset]: {
18693
+ [pool]: {
18469
18694
  deposits: parseRawAmount(depositsRaw, decimals),
18470
18695
  depositsRaw
18471
18696
  }
@@ -18477,10 +18702,13 @@ var getInitUserDataConverter = (lender, chainId, account, prices, pricesHist, le
18477
18702
  {},
18478
18703
  ...data[2 /* debts */][index].map(
18479
18704
  (c) => {
18480
- const asset = c.underlying.toLowerCase();
18481
- 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;
18482
18710
  return {
18483
- [asset]: {
18711
+ [pool]: {
18484
18712
  debt: parseRawAmount(c.amount.toString(), decimals)
18485
18713
  }
18486
18714
  };
@@ -18492,36 +18720,39 @@ var getInitUserDataConverter = (lender, chainId, account, prices, pricesHist, le
18492
18720
  mode,
18493
18721
  ...Object.assign(
18494
18722
  {},
18495
- ...assets.map((a) => {
18496
- const ams = toOracleKey(lenderData[a]?.asset?.assetGroup);
18497
- const price = prices[ams] ?? 1;
18498
- const priceHist = pricesHist?.[ams] ?? price;
18499
- if (!histData[id])
18500
- histData[id] = {
18501
- totalDebt24h: 0,
18502
- 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
+ }
18503
18753
  };
18504
- const debt = debtData[a]?.debt ?? 0;
18505
- const deposits = collatData[a]?.deposits ?? 0;
18506
- const depositsRaw = collatData[a]?.depositsRaw ?? "0";
18507
- histData[id].totalDebt24h += Number(debt) * priceHist;
18508
- histData[id].totalDeposits24h += Number(deposits) * priceHist;
18509
- return {
18510
- [a]: {
18511
- poolId: a,
18512
- underlying: a,
18513
- deposits,
18514
- depositsRaw,
18515
- debt,
18516
- debtStable: "0",
18517
- debtStableUSD: 0,
18518
- depositsUSD: price * Number(deposits),
18519
- debtUSD: price * Number(debt),
18520
- collateralEnabled: true,
18521
- isAllowed: entry.approved.toLowerCase() === brokerAddress.toLowerCase()
18522
- }
18523
- };
18524
- })
18754
+ }
18755
+ )
18525
18756
  )
18526
18757
  }
18527
18758
  };
@@ -18533,24 +18764,23 @@ var getInitUserDataConverter = (lender, chainId, account, prices, pricesHist, le
18533
18764
  account
18534
18765
  };
18535
18766
  const userState = createMultiAccountTypeUserState(
18536
- { ...payload, assets },
18537
- lenderData,
18767
+ payload,
18768
+ metaMap,
18538
18769
  histData
18539
18770
  );
18540
- return {
18541
- ...payload,
18542
- ...userState
18543
- };
18771
+ return userState;
18544
18772
  },
18545
18773
  expectedNumberOfCalls
18546
18774
  ];
18547
18775
  };
18548
18776
 
18549
18777
  // src/lending/user-data/compound-v3/userCallParse.ts
18550
- var getCompoundV3UserDataConverter = (lender, chainId, account, prices, pricesHist, lenderData) => {
18551
- const assetAddresses = Object.keys(lenderData);
18778
+ var getCompoundV3UserDataConverter = (lender, chainId, account, metaMap) => {
18552
18779
  const baseAsset = getCompoundV3BaseAsset(lender, chainId)?.baseAsset;
18553
- 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);
18554
18784
  const expectedNumberOfCalls = assetsNoBase.length + 2 + 1;
18555
18785
  return [
18556
18786
  (data) => {
@@ -18562,20 +18792,21 @@ var getCompoundV3UserDataConverter = (lender, chainId, account, prices, pricesHi
18562
18792
  let result = {};
18563
18793
  for (let i = 0; i < assetsNoBase.length; i++) {
18564
18794
  const asset = assetsNoBase[i];
18565
- const assetMeta = lenderData[asset].asset;
18795
+ const key2 = createMarketUid(chainId, lender, asset);
18796
+ const metaEntity2 = metaMap?.[key2];
18797
+ const assetMeta = metaEntity2.asset;
18566
18798
  const decimals = assetMeta?.decimals ?? 18;
18567
18799
  const depositsRaw2 = data[i][0]?.toString();
18568
18800
  if (depositsRaw2 === "0") continue;
18569
18801
  const deposits2 = parseRawAmount(depositsRaw2, decimals);
18570
- const key = toOracleKey(assetMeta?.assetGroup) ?? toGenericPriceKey(asset, chainId);
18571
- const price = prices[key] ?? 1;
18572
- const priceHist = pricesHist?.[key] ?? price;
18573
- totalDeposits24h += Number(deposits2) * priceHist;
18574
- result[asset] = {
18575
- 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,
18576
18807
  underlying: asset,
18577
18808
  deposits: deposits2,
18578
- depositsUSD: Number(deposits2) * price,
18809
+ depositsUSD: Number(deposits2) * price2,
18579
18810
  debtStableUSD: 0,
18580
18811
  debt: "0",
18581
18812
  debtStable: "0",
@@ -18588,23 +18819,24 @@ var getCompoundV3UserDataConverter = (lender, chainId, account, prices, pricesHi
18588
18819
  }
18589
18820
  const depositsRaw = data[assetsNoBase.length]?.toString();
18590
18821
  const debtRaw = data[assetsNoBase.length + 1]?.toString();
18591
- const baseMeta = lenderData[baseAsset].asset;
18822
+ const key = createMarketUid(chainId, lender, baseAsset);
18823
+ const metaEntity = metaMap?.[key];
18824
+ const baseMeta = metaEntity.asset;
18592
18825
  const baseDecimals = baseMeta.decimals ?? 18;
18593
18826
  const deposits = parseRawAmount(depositsRaw, baseDecimals);
18594
18827
  const debt = parseRawAmount(debtRaw, baseDecimals);
18595
- const oracleKeyBase = toOracleKey(baseMeta?.assetGroup) ?? toGenericPriceKey(baseMeta.baseAsset, chainId);
18596
- const priceBase = prices[oracleKeyBase];
18597
- const priceBaseHist = pricesHist?.[oracleKeyBase] ?? priceBase;
18598
- totalDebt24h += Number(debt) * priceBaseHist;
18599
- totalDeposits24h += Number(deposits) * priceBaseHist;
18600
- const resultBase = {
18601
- [baseAsset]: {
18602
- 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,
18603
18835
  underlying: baseAsset,
18604
18836
  deposits,
18605
18837
  debt,
18606
- depositsUSD: Number(deposits) * priceBase,
18607
- debtUSD: Number(debt) * priceBase,
18838
+ depositsUSD: Number(deposits) * price,
18839
+ debtUSD: Number(debt) * price,
18608
18840
  // populate values for totals
18609
18841
  debtStable: "0",
18610
18842
  debtStableUSD: 0,
@@ -18619,9 +18851,8 @@ var getCompoundV3UserDataConverter = (lender, chainId, account, prices, pricesHi
18619
18851
  parseRawAmount(earnedBalances?.owed?.toString(), 18)
18620
18852
  );
18621
18853
  const payload = {
18622
- lendingPositions: { [0]: { ...result, ...resultBase } },
18854
+ lendingPositions: { "0": { ...result, ...resultBase } },
18623
18855
  chainId,
18624
- baseAsset,
18625
18856
  rewards: {
18626
18857
  ["COMP"]: {
18627
18858
  totalRewards: compRewards,
@@ -18632,22 +18863,21 @@ var getCompoundV3UserDataConverter = (lender, chainId, account, prices, pricesHi
18632
18863
  };
18633
18864
  const userData = createBaseTypeUserState(
18634
18865
  payload,
18635
- lenderData,
18866
+ metaMap,
18636
18867
  totalDeposits24h,
18637
18868
  totalDebt24h
18638
18869
  );
18639
- return {
18640
- ...payload,
18641
- ...userData
18642
- };
18870
+ return userData;
18643
18871
  },
18644
18872
  expectedNumberOfCalls
18645
18873
  ];
18646
18874
  };
18647
18875
 
18648
18876
  // src/lending/user-data/aave-v3-type/userCallParseYldr.ts
18649
- var getYldrUserDataConverter = (lender, chainId, account, prices, pricesHist, lenderData) => {
18650
- 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
+ );
18651
18881
  const expectedNumberOfCalls = assetsToQuery.length;
18652
18882
  return [
18653
18883
  (data) => {
@@ -18659,18 +18889,18 @@ var getYldrUserDataConverter = (lender, chainId, account, prices, pricesHist, le
18659
18889
  let totalDeposits24h = 0;
18660
18890
  for (let i = 0; i < assetsToQuery.length; i++) {
18661
18891
  const asset = assetsToQuery[i];
18892
+ const key = createMarketUid(chainId, lender, asset);
18893
+ const metaEntity = metaMap?.[key];
18662
18894
  const { dataForAsset, addedDebt, addedDeposits } = createAaveV3Entry2(
18663
18895
  i,
18664
18896
  data,
18665
- chainId,
18666
- lenderData[asset].asset,
18667
- prices,
18668
- pricesHist
18897
+ key,
18898
+ metaEntity
18669
18899
  );
18670
18900
  if (!dataForAsset) continue;
18671
18901
  totalDebt24h += addedDebt;
18672
18902
  totalDeposits24h += addedDeposits;
18673
- lendingPositions[asset] = dataForAsset;
18903
+ lendingPositions[key] = dataForAsset;
18674
18904
  }
18675
18905
  const payload = {
18676
18906
  chainId,
@@ -18681,19 +18911,16 @@ var getYldrUserDataConverter = (lender, chainId, account, prices, pricesHist, le
18681
18911
  };
18682
18912
  const userData = createBaseTypeUserState(
18683
18913
  payload,
18684
- lenderData,
18914
+ metaMap,
18685
18915
  totalDeposits24h,
18686
18916
  totalDebt24h
18687
18917
  );
18688
- return {
18689
- ...payload,
18690
- ...userData
18691
- };
18918
+ return userData;
18692
18919
  },
18693
18920
  expectedNumberOfCalls
18694
18921
  ];
18695
18922
  };
18696
- function createAaveV3Entry2(i, data, chainId, asset, prices, pricesHist) {
18923
+ function createAaveV3Entry2(i, data, key, meta) {
18697
18924
  const reserveData = data[i];
18698
18925
  const currentATokenBalanceRaw = reserveData[0 /* currentYTokenBalance */]?.toString();
18699
18926
  const currentVariableDebtRaw = reserveData[1 /* currentVariableDebt */]?.toString();
@@ -18704,16 +18931,15 @@ function createAaveV3Entry2(i, data, chainId, asset, prices, pricesHist) {
18704
18931
  addedDebt: 0
18705
18932
  };
18706
18933
  }
18707
- const assetMeta = asset;
18934
+ const assetMeta = meta.asset;
18708
18935
  const decimals = assetMeta?.decimals ?? 18;
18709
18936
  const currentATokenBalance = parseRawAmount(currentATokenBalanceRaw, decimals);
18710
18937
  const currentVariableDebt = parseRawAmount(currentVariableDebtRaw, decimals);
18711
- const key = toOracleKey(assetMeta?.assetGroup) ?? toGenericPriceKey(asset.address, chainId);
18712
- const price = prices[key] ?? 1;
18713
- const priceHist = pricesHist?.[key] ?? price;
18938
+ const price = meta?.price?.priceUsd ?? 1;
18939
+ const priceHist = meta?.price?.priceUsd24h ?? price;
18714
18940
  const dataForAsset = {
18715
- poolId: asset.address,
18716
- underlying: asset.address,
18941
+ poolId: key,
18942
+ underlying: assetMeta.address,
18717
18943
  deposits: currentATokenBalance,
18718
18944
  depositsRaw: currentATokenBalanceRaw,
18719
18945
  debtStable: "0",
@@ -18817,65 +19043,66 @@ function decodePackedListaUserDataset(hex, marketsCount) {
18817
19043
 
18818
19044
  // src/lending/user-data/morpho/userCallParse.ts
18819
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
+ }
18820
19050
  var balanceData = {
18821
- "0": {
18822
- borrowDiscountedCollateral: 0,
18823
- borrowDiscountedCollateralAllActive: 0,
18824
- collateral: 0,
18825
- deposits: 0,
18826
- debt: 0,
18827
- adjustedDebt: 0,
18828
- nav: 0,
18829
- deposits24h: 0,
18830
- debt24h: 0,
18831
- nav24h: 0
18832
- }
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
18833
19061
  };
18834
19062
  var aprData = {
18835
- "0": {
18836
- apr: 0,
18837
- borrowApr: 0,
18838
- depositApr: 0,
18839
- rewards: 0,
18840
- rewardApr: 0,
18841
- rewardDepositApr: 0,
18842
- rewardBorrowApr: 0,
18843
- stakingApr: 0,
18844
- stakingDepositApr: 0,
18845
- stakingBorrowApr: 0
18846
- }
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
18847
19073
  };
18848
19074
  var userDataEmpty = (account, chainId, notWhitelisted = false) => {
18849
19075
  return {
18850
19076
  account,
18851
19077
  chainId,
18852
- balanceData,
18853
- aprData,
18854
- userConfigs: {
18855
- "0": { selectedMode: 0, id: account, notWhitelisted }
18856
- }
19078
+ data: [
19079
+ {
19080
+ health: null,
19081
+ accouintId: "0",
19082
+ balanceData,
19083
+ aprData,
19084
+ positions: [],
19085
+ userConfig: { selectedMode: 0, id: account, notWhitelisted }
19086
+ }
19087
+ ]
18857
19088
  };
18858
19089
  };
18859
- var getMorphoTypeUserDataConverterWithlens = (lender, chainId, account, markets, prices, pricesHist, lenderData) => {
19090
+ var getMorphoTypeUserDataConverterWithlens = (lender, chainId, account, markets, metaMap) => {
18860
19091
  return !isLista(lender) ? getMorphoUserDataConverterWithlens(
18861
19092
  lender,
18862
19093
  chainId,
18863
19094
  account,
18864
19095
  markets,
18865
- prices,
18866
- pricesHist,
18867
- lenderData
19096
+ metaMap
18868
19097
  ) : getListaUserDataConverterWithlens(
18869
19098
  lender,
18870
19099
  chainId,
18871
19100
  account,
18872
19101
  markets,
18873
- prices,
18874
- pricesHist,
18875
- lenderData
19102
+ metaMap
18876
19103
  );
18877
19104
  };
18878
- var getMorphoUserDataConverterWithlens = (lender, chainId, account, markets, prices, pricesHist, lenderData) => {
19105
+ var getMorphoUserDataConverterWithlens = (lender, chainId, account, markets, metaMap) => {
18879
19106
  const expectedNumberOfCalls = Math.ceil(markets.length / CHUNK_SIZE);
18880
19107
  return [
18881
19108
  (data) => {
@@ -18890,16 +19117,12 @@ var getMorphoUserDataConverterWithlens = (lender, chainId, account, markets, pri
18890
19117
  for (let i = 0; i < data.length; i++) {
18891
19118
  const balanceDatas = decodePackedMorphoUserDataset(data[i]);
18892
19119
  balanceDatas.forEach((balanceData2) => {
18893
- const markeId = markets[mapMarketToChunk(balanceData2.index, i)];
18894
- marketsHandled.push(markeId);
18895
- const market = lenderData[markeId]?.params?.market;
19120
+ const marketId = markets[mapMarketToChunk(balanceData2.index, i)];
19121
+ marketsHandled.push(marketId);
19122
+ const lenderKey = createLenderKey(lender, marketId);
18896
19123
  const { dataForMarket, addedDebt, addedDeposits } = createMorphoEntryFromMarketWithLens(
18897
19124
  balanceData2,
18898
- chainId,
18899
- market,
18900
- lenderData[markeId].data,
18901
- prices,
18902
- pricesHist
19125
+ metaMap?.[lenderKey]
18903
19126
  );
18904
19127
  const payload = {
18905
19128
  chainId,
@@ -18910,41 +19133,24 @@ var getMorphoUserDataConverterWithlens = (lender, chainId, account, markets, pri
18910
19133
  };
18911
19134
  const userData = createBaseTypeUserState(
18912
19135
  payload,
18913
- lenderData[markeId].data,
19136
+ metaMap?.[lenderKey],
18914
19137
  addedDeposits,
18915
19138
  addedDebt
18916
19139
  );
18917
- datas[market.lender] = {
18918
- ...payload,
18919
- ...userData,
18920
- id: market.id
18921
- };
19140
+ datas[lenderKey] = userData;
18922
19141
  });
18923
19142
  }
18924
19143
  for (const marketId of markets) {
18925
- const pubData = lenderData[marketId];
18926
19144
  if (marketsHandled.includes(marketId)) continue;
18927
- const payload = {
18928
- chainId,
18929
- account,
18930
- lendingPositions: { "0": {} },
18931
- rewards: {},
18932
- userEMode: 0
18933
- };
18934
19145
  const userData = userDataEmpty(account, chainId);
18935
- datas[marketId] = {
18936
- ...payload,
18937
- ...userData,
18938
- // @ts-ignore
18939
- id: pubData?.params?.market.id
18940
- };
19146
+ datas[marketId] = userData;
18941
19147
  }
18942
19148
  return datas;
18943
19149
  },
18944
19150
  expectedNumberOfCalls
18945
19151
  ];
18946
19152
  };
18947
- var getListaUserDataConverterWithlens = (lender, chainId, account, markets, prices, pricesHist, lenderData) => {
19153
+ var getListaUserDataConverterWithlens = (lender, chainId, account, markets, metaMap) => {
18948
19154
  const expectedNumberOfCalls = Math.ceil(markets.length / CHUNK_SIZE);
18949
19155
  return [
18950
19156
  (data) => {
@@ -18966,16 +19172,12 @@ var getListaUserDataConverterWithlens = (lender, chainId, account, markets, pric
18966
19172
  whitelistedFlags[markets[mapMarketToChunk(index, i)]] = flag;
18967
19173
  });
18968
19174
  balances.forEach((balanceData2) => {
18969
- const markeId = markets[mapMarketToChunk(balanceData2.index, i)];
18970
- marketsHandled.push(markeId);
18971
- const market = lenderData[markeId]?.params?.market;
19175
+ const marketId = markets[mapMarketToChunk(balanceData2.index, i)];
19176
+ marketsHandled.push(marketId);
19177
+ const lenderKey = createLenderKey(lender, marketId);
18972
19178
  const { dataForMarket, addedDebt, addedDeposits } = createMorphoEntryFromMarketWithLens(
18973
19179
  balanceData2,
18974
- chainId,
18975
- market,
18976
- lenderData[markeId].data,
18977
- prices,
18978
- pricesHist
19180
+ metaMap?.[lenderKey]
18979
19181
  );
18980
19182
  const payload = {
18981
19183
  chainId,
@@ -18983,55 +19185,46 @@ var getListaUserDataConverterWithlens = (lender, chainId, account, markets, pric
18983
19185
  lendingPositions: { "0": dataForMarket },
18984
19186
  rewards: {},
18985
19187
  userEMode: 0,
18986
- notWhitelisted: !whitelistedFlags[markeId]
19188
+ notWhitelisted: !whitelistedFlags[marketId]
18987
19189
  };
18988
19190
  const userData = createBaseTypeUserState(
18989
19191
  payload,
18990
- lenderData[markeId].data,
19192
+ metaMap?.[lenderKey],
18991
19193
  addedDeposits,
18992
19194
  addedDebt
18993
19195
  );
18994
- datas[market.lender] = {
19196
+ datas[lenderKey] = {
18995
19197
  ...payload,
18996
19198
  ...userData,
18997
- id: market.id
19199
+ id: marketId
18998
19200
  };
18999
19201
  });
19000
19202
  }
19001
19203
  for (const marketId of markets) {
19002
- const pubData = lenderData[marketId];
19003
19204
  if (marketsHandled.includes(marketId)) continue;
19004
- const payload = {
19005
- chainId,
19006
- account,
19007
- lendingPositions: { "0": {} },
19008
- rewards: {},
19009
- userEMode: 0,
19010
- notWhitelisted: !whitelistedFlags[marketId]
19011
- };
19012
19205
  const userData = userDataEmpty(
19013
19206
  account,
19014
19207
  chainId,
19015
19208
  !whitelistedFlags[marketId]
19016
19209
  );
19017
- datas[marketId] = {
19018
- ...payload,
19019
- ...userData,
19020
- // @ts-ignore
19021
- id: pubData?.params?.market.id
19022
- };
19210
+ datas[marketId] = userData;
19023
19211
  }
19024
19212
  return datas;
19025
19213
  },
19026
19214
  expectedNumberOfCalls
19027
19215
  ];
19028
19216
  };
19029
- function createMorphoEntryFromMarketWithLens(balanceInfo, chainId, market, lenderData, prices, pricesHist) {
19030
- const loanAddress = market.loanAddress.toLowerCase();
19031
- const loanMeta = lenderData[loanAddress].asset;
19032
- const loanKey = toOracleKey(loanMeta?.assetGroup) ?? toGenericPriceKey(loanAddress, chainId);
19033
- const priceLoan = prices[loanKey] ?? 1;
19034
- 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;
19035
19228
  const deposits = balanceInfo.supplyAssets;
19036
19229
  const borrow = balanceInfo.borrowAssets;
19037
19230
  const collateral = balanceInfo.collateral;
@@ -19041,18 +19234,15 @@ function createMorphoEntryFromMarketWithLens(balanceInfo, chainId, market, lende
19041
19234
  addedDeposits: 0,
19042
19235
  addedDebt: 0
19043
19236
  };
19044
- const collateralAddress = market.collateralAddress.toLowerCase();
19045
- const collateralAssetMeta = lenderData[collateralAddress].asset;
19237
+ const collateralAddress = collateralAssetMeta?.asset?.address?.toLowerCase();
19238
+ const collateralAsset = collateralAssetMeta?.asset;
19046
19239
  const loanDepositNumber = parseRawAmount(
19047
19240
  deposits.toString(),
19048
- market.loanDecimals ?? loanMeta?.decimals ?? 18
19241
+ loanAsset?.decimals ?? 18
19049
19242
  );
19050
- const decimals = market.collateralDecimals ?? collateralAssetMeta?.decimals ?? 18;
19243
+ const decimals = collateralAsset?.decimals ?? 18;
19051
19244
  const collateralDec = parseRawAmount(collateral.toString(), decimals);
19052
- const borrowDec = parseRawAmount(
19053
- borrow.toString(),
19054
- market.loanDecimals ?? loanMeta?.decimals ?? 18
19055
- );
19245
+ const borrowDec = parseRawAmount(borrow.toString(), loanAsset?.decimals ?? 18);
19056
19246
  const dataForLoanAsset = {
19057
19247
  poolId: loanAddress,
19058
19248
  underlying: loanAddress,
@@ -19067,9 +19257,8 @@ function createMorphoEntryFromMarketWithLens(balanceInfo, chainId, market, lende
19067
19257
  collateralEnabled: false,
19068
19258
  claimableRewards: 0
19069
19259
  };
19070
- const key = toOracleKey(collateralAssetMeta?.assetGroup) ?? toGenericPriceKey(collateralAddress, chainId);
19071
- const price = prices[key] ?? 1;
19072
- const priceHist = pricesHist?.[key] ?? price;
19260
+ const price = collateralAssetMeta?.price.priceUsd ?? 1;
19261
+ const priceHist = collateralAssetMeta?.price.priceUsd24h ?? price;
19073
19262
  const dataForCollateralAsset = {
19074
19263
  poolId: collateralAddress,
19075
19264
  underlying: collateralAddress,
@@ -19086,8 +19275,8 @@ function createMorphoEntryFromMarketWithLens(balanceInfo, chainId, market, lende
19086
19275
  };
19087
19276
  return {
19088
19277
  dataForMarket: {
19089
- [loanAddress]: dataForLoanAsset,
19090
- [collateralAddress]: dataForCollateralAsset
19278
+ [loanKey]: dataForLoanAsset,
19279
+ [collateralKey]: dataForCollateralAsset
19091
19280
  },
19092
19281
  addedDeposits: Number(loanDepositNumber) * priceHistLoan + Number(collateralDec) * priceHist,
19093
19282
  addedDebt: Number(borrowDec) * priceHistLoan
@@ -19095,17 +19284,19 @@ function createMorphoEntryFromMarketWithLens(balanceInfo, chainId, market, lende
19095
19284
  }
19096
19285
 
19097
19286
  // src/lending/user-data/compound-v2/userCallBuild.ts
19098
- var buildCompoundV2UserCall = (chainId, lender, account, assetsOverride) => {
19099
- 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
+ );
19100
19291
  const comptroller = getCompoundV2Comptroller(chainId, lender);
19101
- let calls = Object.values(collateralTokens).flatMap((tk) => [
19292
+ let calls = tokens.flatMap((tk) => [
19102
19293
  {
19103
- address: tk,
19294
+ address: tk.cToken,
19104
19295
  name: "balanceOfUnderlying",
19105
19296
  params: [account]
19106
19297
  },
19107
19298
  {
19108
- address: tk,
19299
+ address: tk.cToken,
19109
19300
  name: "borrowBalanceCurrent",
19110
19301
  params: [account]
19111
19302
  }
@@ -19122,12 +19313,13 @@ var buildCompoundV2UserCall = (chainId, lender, account, assetsOverride) => {
19122
19313
  };
19123
19314
 
19124
19315
  // src/lending/user-data/compound-v2/userCallParse.ts
19125
- var getCompoundV2UserDataConverter = (lender, chainId, account, prices, pricesHist, lenderData) => {
19316
+ var getCompoundV2UserDataConverter = (lender, chainId, account, metaMap) => {
19126
19317
  switch (lender) {
19127
19318
  default: {
19128
- const assetsToQuery = Object.keys(lenderData);
19129
- const vTokens = getCompoundV2CollateralTokens(chainId, lender);
19130
- 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;
19131
19323
  return [
19132
19324
  (data) => {
19133
19325
  if (data.length !== expectedNumberOfCalls) {
@@ -19137,22 +19329,22 @@ var getCompoundV2UserDataConverter = (lender, chainId, account, prices, pricesHi
19137
19329
  let totalDebt24h = 0;
19138
19330
  let totalDeposits24h = 0;
19139
19331
  const asstsIn = data[data.length - 1].map((a) => a.toLowerCase());
19140
- for (let i = 0; i < assetsToQuery.length; i++) {
19141
- 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);
19142
19335
  const { dataForAsset, addedDebt, addedDeposits } = createCompoundV2Entry(
19143
19336
  i,
19144
19337
  data,
19338
+ key,
19145
19339
  asstsIn,
19146
- vTokens[asset],
19147
- lenderData[asset].asset,
19148
- prices,
19149
- pricesHist,
19340
+ cToken,
19341
+ metaMap[key],
19150
19342
  0
19151
19343
  );
19152
19344
  if (!dataForAsset) continue;
19153
19345
  totalDebt24h += addedDebt;
19154
19346
  totalDeposits24h += addedDeposits;
19155
- lendingPositions[asset] = dataForAsset;
19347
+ lendingPositions[key] = dataForAsset;
19156
19348
  }
19157
19349
  const payload = {
19158
19350
  chainId,
@@ -19162,21 +19354,18 @@ var getCompoundV2UserDataConverter = (lender, chainId, account, prices, pricesHi
19162
19354
  };
19163
19355
  const userData = createBaseTypeUserState(
19164
19356
  payload,
19165
- lenderData,
19357
+ metaMap,
19166
19358
  totalDeposits24h,
19167
19359
  totalDebt24h
19168
19360
  );
19169
- return {
19170
- ...payload,
19171
- ...userData
19172
- };
19361
+ return userData;
19173
19362
  },
19174
19363
  expectedNumberOfCalls
19175
19364
  ];
19176
19365
  }
19177
19366
  }
19178
19367
  };
19179
- function createCompoundV2Entry(i, data, assetsIn, vToken, asset, prices, pricesHist, claimableRewards) {
19368
+ function createCompoundV2Entry(i, data, key, assetsIn, vToken, meta, claimableRewards) {
19180
19369
  const depositsRaw = data[2 * i].toString();
19181
19370
  const borrowsRaw = data[2 * i + 1].toString();
19182
19371
  const collateralEnabled = Boolean(assetsIn?.includes(vToken));
@@ -19187,16 +19376,15 @@ function createCompoundV2Entry(i, data, assetsIn, vToken, asset, prices, pricesH
19187
19376
  addedDebt: 0
19188
19377
  };
19189
19378
  }
19190
- const assetMeta = asset;
19379
+ const assetMeta = meta.asset;
19191
19380
  const decimals = assetMeta?.decimals ?? 18;
19192
19381
  const currentATokenBalance = Number(parseRawAmount(depositsRaw, decimals));
19193
19382
  const currentVariableDebt = Number(parseRawAmount(borrowsRaw, decimals));
19194
- const key = toOracleKey(assetMeta?.assetGroup) ?? toGenericPriceKey(asset.address, asset.chainId);
19195
- const price = prices[key] ?? 1;
19196
- const priceHist = pricesHist?.[key] ?? price;
19383
+ const price = meta?.price?.priceUsd ?? 1;
19384
+ const priceHist = meta?.price?.priceUsd24h ?? price;
19197
19385
  const dataForAsset = {
19198
- poolId: asset.address,
19199
- underlying: asset.address,
19386
+ poolId: key,
19387
+ underlying: assetMeta.address,
19200
19388
  deposits: currentATokenBalance,
19201
19389
  depositsRaw,
19202
19390
  debtStable: 0,
@@ -19315,84 +19503,48 @@ function unflattenLenderData(pools) {
19315
19503
  }
19316
19504
  return result;
19317
19505
  }
19318
- function buildUserCall(chainId, lender, account, params, assets) {
19319
- if (isAaveV2Type(lender))
19320
- return buildAaveV2UserCall(chainId, lender, account);
19321
- if (isAaveV3Type(lender))
19322
- 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);
19323
19509
  if (isInit(lender)) return buildInitUserCall(chainId, lender, account);
19324
19510
  if (isMorphoType(lender))
19325
19511
  return buildMorphoTypeUserCallWithLens(chainId, account, lender, params);
19326
19512
  if (isCompoundV3Type(lender))
19327
- return buildCompoundV3UserCall(chainId, lender, account, assets);
19513
+ return buildCompoundV3UserCall(chainId, lender, account);
19328
19514
  return buildCompoundV2UserCall(chainId, lender, account);
19329
19515
  }
19330
- function getUserDataConverter(lender, chainId, account, prices, pricesHist, lenderPublicState, params) {
19516
+ function getUserDataConverter(lender, chainId, account, params, meta) {
19331
19517
  if (isYLDR(lender))
19332
- return getYldrUserDataConverter(
19333
- lender,
19334
- chainId,
19335
- account,
19336
- prices,
19337
- pricesHist,
19338
- lenderPublicState?.data?.[lender]?.data
19339
- );
19518
+ return getYldrUserDataConverter(lender, chainId, account, meta?.[lender]);
19340
19519
  if (isAaveV2Type(lender))
19341
- return getAaveV2UserDataConverter(
19342
- lender,
19343
- chainId,
19344
- account,
19345
- prices,
19346
- pricesHist,
19347
- lenderPublicState?.data?.[lender]?.data
19348
- );
19520
+ return getAaveV2UserDataConverter(lender, chainId, account, meta?.[lender]);
19349
19521
  if (isAaveV3Type(lender))
19350
- return getAaveV3UserDataConverter(
19351
- lender,
19352
- chainId,
19353
- account,
19354
- prices,
19355
- pricesHist,
19356
- lenderPublicState?.data?.[lender]?.data
19357
- );
19522
+ return getAaveV3UserDataConverter(lender, chainId, account, meta?.[lender]);
19358
19523
  if (isInit(lender))
19359
- return getInitUserDataConverter(
19360
- lender,
19361
- chainId,
19362
- account,
19363
- prices,
19364
- pricesHist,
19365
- lenderPublicState?.data?.[lender]?.data
19366
- );
19524
+ return getInitUserDataConverter(lender, chainId, account, meta?.[lender]);
19367
19525
  if (isMorphoType(lender))
19368
19526
  return getMorphoTypeUserDataConverterWithlens(
19369
19527
  lender,
19370
19528
  chainId,
19371
19529
  account,
19372
19530
  params,
19373
- prices,
19374
- pricesHist,
19375
- lenderPublicState?.data
19531
+ meta
19376
19532
  );
19377
19533
  if (isCompoundV3Type(lender))
19378
19534
  return getCompoundV3UserDataConverter(
19379
19535
  lender,
19380
19536
  chainId,
19381
19537
  account,
19382
- prices,
19383
- pricesHist,
19384
- lenderPublicState?.data?.[lender]?.data
19538
+ meta?.[lender]
19385
19539
  );
19386
19540
  return getCompoundV2UserDataConverter(
19387
19541
  lender,
19388
19542
  chainId,
19389
19543
  account,
19390
- prices,
19391
- pricesHist,
19392
- lenderPublicState?.data?.[lender]?.data
19544
+ meta?.[lender]
19393
19545
  );
19394
19546
  }
19395
- 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) => {
19396
19548
  let calls = [];
19397
19549
  const queries = organizeUserQueries(queriesRaw);
19398
19550
  for (const query2 of queries) {
@@ -19401,8 +19553,7 @@ var getLenderUserDataResult = async (chainId, queriesRaw, getEvmClient2, allowFa
19401
19553
  chainId,
19402
19554
  query2.lender,
19403
19555
  query2.account,
19404
- query2.params,
19405
- query2.assets
19556
+ query2.params
19406
19557
  );
19407
19558
  const mappedCalls = callData.map((call) => ({ call, abi }));
19408
19559
  calls = [...calls, ...mappedCalls];
@@ -19420,37 +19571,62 @@ var getLenderUserDataResult = async (chainId, queriesRaw, getEvmClient2, allowFa
19420
19571
  logs
19421
19572
  );
19422
19573
  };
19423
- 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;
19424
19577
  const queries = organizeUserQueries(queriesRaw);
19425
- const lenderData = {};
19426
- let currentSlice = 0;
19427
19578
  for (const query2 of queries) {
19428
- const [converter, sliceLength] = getUserDataConverter(
19429
- query2.lender,
19579
+ const abi = getAbi2(query2.lender);
19580
+ const callData = buildUserCall(
19430
19581
  chainId,
19582
+ query2.lender,
19431
19583
  query2.account,
19432
- prices,
19433
- pricesHist,
19434
- lenderState[chainId],
19435
19584
  query2.params
19436
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;
19612
+ for (const query2 of queries) {
19613
+ const [converter, sliceLength] = getUserDataConverter(
19614
+ query2.lender,
19615
+ chainId,
19616
+ query2.account,
19617
+ query2.params,
19618
+ lenderState
19619
+ );
19437
19620
  try {
19438
19621
  const data = rawResults.slice(currentSlice, currentSlice + sliceLength);
19439
19622
  const convertedData = converter(data);
19440
19623
  if (convertedData) {
19441
19624
  if (isMultiMarket(query2.lender)) {
19442
19625
  Object.keys(convertedData).forEach((market) => {
19443
- lenderData[market] = {
19444
- ...lenderData[market],
19445
- // @ts-ignore
19446
- [query2.account.toLowerCase()]: convertedData[market]
19447
- };
19626
+ lenderData[market] = convertedData[market];
19448
19627
  });
19449
19628
  } else {
19450
- lenderData[query2.lender] = {
19451
- ...lenderData[query2.lender],
19452
- [query2.account.toLowerCase()]: convertedData
19453
- };
19629
+ lenderData[query2.lender] = convertedData;
19454
19630
  }
19455
19631
  }
19456
19632
  } catch (e) {
@@ -19465,7 +19641,7 @@ var DEFAULT_OPTIONS = {
19465
19641
  retries: 3,
19466
19642
  logs: false
19467
19643
  };
19468
- async function getLenderUserDataMulti(account, chainQueries, prices = {}, pricesHist = {}, lenderState) {
19644
+ async function getLenderUserDataMulti(account, chainQueries, lenderState) {
19469
19645
  const parsedLenderState = Array.isArray(lenderState) ? unflattenLenderData(lenderState) : lenderState;
19470
19646
  const cleanChainQueries = chainQueries.map(
19471
19647
  ({ chainId, queries, providerOptions }) => {
@@ -19507,8 +19683,6 @@ async function getLenderUserDataMulti(account, chainQueries, prices = {}, prices
19507
19683
  chainId,
19508
19684
  queries,
19509
19685
  data[i],
19510
- prices,
19511
- pricesHist,
19512
19686
  parsedLenderState
19513
19687
  );
19514
19688
  returndata[chainId] = dataForChain;
@@ -19527,7 +19701,9 @@ var aavePools2 = baseUrl + "/config/aave-pools.json";
19527
19701
  var aaveOracles2 = baseUrl + "/data/aave-oracles.json";
19528
19702
  var morphoTypeOracles2 = baseUrl + "/data/morpho-type-oracles.json";
19529
19703
  var compoundV2Pools2 = baseUrl + "/config/compound-v2-pools.json";
19704
+ var compoundV2Oracles2 = baseUrl + "/data/compound-v2-oracles.json";
19530
19705
  var compoundV3Pools2 = baseUrl + "/config/compound-v3-pools.json";
19706
+ var compoundV3Oracles2 = baseUrl + "/data/compound-v3-oracles.json";
19531
19707
  var morphoPools2 = baseUrl + "/config/morpho-pools.json";
19532
19708
  var morphoTypeMarkets2 = baseUrl + "/config/morpho-type-markets.json";
19533
19709
  var aaveReserves2 = baseUrl + "/data/aave-reserves.json";
@@ -19561,6 +19737,8 @@ async function fetchLenderMetaFromDirAndInitialize() {
19561
19737
  compoundV2TokenArrayOverride,
19562
19738
  compoundV3BaseDataOverride,
19563
19739
  aaveOraclesOverride,
19740
+ compoundV2OraclesOverride,
19741
+ compoundV3OraclesOverride,
19564
19742
  morphoTypeOraclesOverride,
19565
19743
  morphoTypeMarketsOverride,
19566
19744
  chainsOverride
@@ -19579,6 +19757,8 @@ async function fetchLenderMetaFromDirAndInitialize() {
19579
19757
  compoundV3ReservesOverride,
19580
19758
  compoundV2ReservesOverride,
19581
19759
  aaveOraclesOverride,
19760
+ compoundV2OraclesOverride,
19761
+ compoundV3OraclesOverride,
19582
19762
  morphoTypeOraclesOverride,
19583
19763
  morphoTypeMarketsOverride
19584
19764
  });
@@ -19600,6 +19780,8 @@ async function fetchLenderMetaFromDir() {
19600
19780
  compoundV2TokenArray2,
19601
19781
  compoundV3Base,
19602
19782
  aaveOracles2,
19783
+ compoundV2Oracles2,
19784
+ compoundV3Oracles2,
19603
19785
  morphoTypeOracles2,
19604
19786
  morphoTypeMarkets2,
19605
19787
  chains
@@ -19619,6 +19801,8 @@ async function fetchLenderMetaFromDir() {
19619
19801
  compoundV2TokenArrayOverride,
19620
19802
  compoundV3BaseDataOverride,
19621
19803
  aaveOraclesOverride,
19804
+ compoundV2OraclesOverride,
19805
+ compoundV3OraclesOverride,
19622
19806
  morphoTypeOraclesOverride,
19623
19807
  morphoTypeMarketsOverride,
19624
19808
  chainsOverride
@@ -19638,6 +19822,8 @@ async function fetchLenderMetaFromDir() {
19638
19822
  compoundV2TokenArrayOverride,
19639
19823
  compoundV3BaseDataOverride,
19640
19824
  aaveOraclesOverride,
19825
+ compoundV2OraclesOverride,
19826
+ compoundV3OraclesOverride,
19641
19827
  morphoTypeOraclesOverride,
19642
19828
  morphoTypeMarketsOverride,
19643
19829
  chainsOverride
@@ -22225,6 +22411,10 @@ var fetchMainPrices = async (chainIds, rpcOverrides, lists = {}, retries = 3, ba
22225
22411
  );
22226
22412
  if (chainId === Chain.SCROLL)
22227
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
+ );
22228
22418
  if (chainId === Chain.BNB_SMART_CHAIN_MAINNET)
22229
22419
  aaveForks = aaveForks?.filter((a) => a !== Lender.AVALON_USDX);
22230
22420
  if (chainId === Chain.MANTA_PACIFIC_MAINNET)
@@ -23489,6 +23679,665 @@ var parseRWADynamicOracleResults = (chainId, data, assetName) => {
23489
23679
  }
23490
23680
  }
23491
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
+ }
23492
24341
  var { uniq: uniq2 } = lodash;
23493
24342
  function createAssetArrayPerChain() {
23494
24343
  let assetsPerChain = {};
@@ -23618,83 +24467,6 @@ var FlashAbi = [
23618
24467
  type: "function"
23619
24468
  }
23620
24469
  ];
23621
-
23622
- // src/utils/constants.ts
23623
- var CELO_MULTICALL_ADDRESS = "0x633987602DE5C4F337e3DbF265303A1080324204";
23624
- var BNB_MULTICALL_ADDRESS = "0x963Df249eD09c358A4819E39d9Cd5736c3087184";
23625
- var MANTLE_MULTICALL_ADDRESS = "0x2A51f2F647E1883F88C992244dEd171238693107";
23626
- var ARBITRUM_ONE_MULTICALL_ADDRESS = "0xadF885960B47eA2CD9B55E6DAc6B42b7Cb2806dB";
23627
- var LINEA_MULTICALL_ADDRESS = "0xac1cE734566f390A94b00eb9bf561c2625BF44ea";
23628
- var AVALANCHE_MULTICALL_ADDRESS = "0x0139141Cd4Ee88dF3Cdb65881D411bAE271Ef0C2";
23629
- var BASE_MULTICALL_ADDRESS = "0x091e99cb1C49331a94dD62755D168E941AbD0693";
23630
- var BLAST_MULTICALL_ADDRESS = "0xdC7f370de7631cE9e2c2e1DCDA6B3B5744Cf4705";
23631
- var TAIKO_MULTICALL_ADDRESS = "0x8E24CfC19c6C00c524353CB8816f5f1c2F33c201";
23632
- var HEMI_MULTICALL_ADDRESS = "0x352A86168e6988A1aDF9A15Cb00017AAd3B67155";
23633
- var GNOSIS_MULTICALL_ADDRESS = "0x4dfa9a980efE4802E969AC33968E3d6E59B8a19e";
23634
- var MODE_MULTICALL_ADDRESS = "0xAB39cE30D98a59DFDa40A630b074170800bfF179";
23635
- var FANTOM_MULTICALL_ADDRESS = "0xDb51CffFf3B989d0cB6b58AbF173371b6F2d0D24";
23636
- var SCROLL_MULTICALL_ADDRESS = "0x3b615B1AC55bc34e51a81D3dea67467F32bcb8C2";
23637
- var SHAPE_MULTICALL_ADDRESS = "0x356A450B32f5030ae7083702b86FaFbBe7490411";
23638
- var SONIC_MULTICALL_ADDRESS = "0x5d6b0f5335ec95cD2aB7E52f2A0750dd86502435";
23639
- var INK_MULTICALL_ADDRESS = "0xA0fCec583AeE6176527C07B198e5561722332014";
23640
- var METIS_MULTICALL_ADDRESS = "0x7a59ddbB76521E8982Fa3A08598C9a83b14A6C07";
23641
- var IOTA_MULTICALL_ADDRESS = "0x9683D433621A83aA7dd290106e1da85251317F55";
23642
- var KAVA_MULTICALL_ADDRESS = "0x8B741B0D79BE80E135C880F7583d427B4D41F015";
23643
- var CORN_MULTICALL_ADDRESS = "0x5d6b0f5335ec95cD2aB7E52f2A0750dd86502435";
23644
- var SAGA_MULTICALL_ADDRESS = "0x743E03cceB4af2efA3CC76838f6E8B50B63F184c";
23645
- var CYBER_MULTICALL_ADDRESS = "0x906d6eB9CF8f64e100e44f8f491b833a8d40B530";
23646
- var METAL_MULTICALL_ADDRESS = "0x5d6b0f5335ec95cD2aB7E52f2A0750dd86502435";
23647
- var ZERO_MULTICALL_ADDRESS = "0x9CA4dcb2505fbf536F6c54AA0a77C79f4fBC35C0";
23648
- var BOB_MULTICALL_ADDRESS = "0x5d6b0f5335ec95cD2aB7E52f2A0750dd86502435";
23649
- var WORLDCHAIN_MULTICALL_ADDRESS = "0x0a22c04215c97E3F532F4eF30e0aD9458792dAB9";
23650
- var LISK_MULTICALL_ADDRESS = "0xE3dbcD53f4Ce1b06Ab200f4912BD35672e68f1FA";
23651
- var REDSTONE_MULTICALL_ADDRESS = "0xd57B52452a0FDfE3ff8e0A40Bd10D00D0bfe0723";
23652
- var MANTA_MULTICALL_ADDRESS = "0x52dFC0D9960F11A9Ca9FF616e791B91188446a60";
23653
- var ZORA_MULTICALL_ADDRESS = "0xA51c76bEE6746cB487a7e9312E43e2b8f4A37C15";
23654
- var CORE_MULTICALL_ADDRESS = "0xFe9F82D820757787895Da00B1dBD35c3B8b04894";
23655
- var MORPH_MULTICALL_ADDRESS = "0xAcD82113982479B25E7c1D09858F0130921Dbbca";
23656
- var TELOS_MULTICALL_ADDRESS = "0x5d6b0f5335ec95cD2aB7E52f2A0750dd86502435";
23657
- var MULTICALL_ADDRESS = {
23658
- [Chain.OP_MAINNET]: "0x1F98415757620B543A52E61c46B32eB19261F984",
23659
- [Chain.POLYGON_MAINNET]: "0x1F98415757620B543A52E61c46B32eB19261F984",
23660
- [Chain.ETHEREUM_MAINNET]: "0x1F98415757620B543A52E61c46B32eB19261F984",
23661
- [Chain.ARBITRUM_ONE]: ARBITRUM_ONE_MULTICALL_ADDRESS,
23662
- [Chain.BASE]: BASE_MULTICALL_ADDRESS,
23663
- [Chain.CELO_MAINNET]: CELO_MULTICALL_ADDRESS,
23664
- [Chain.BNB_SMART_CHAIN_MAINNET]: BNB_MULTICALL_ADDRESS,
23665
- [Chain.MANTLE]: MANTLE_MULTICALL_ADDRESS,
23666
- [Chain.BLAST]: BLAST_MULTICALL_ADDRESS,
23667
- [Chain.LINEA]: LINEA_MULTICALL_ADDRESS,
23668
- [Chain.AVALANCHE_C_CHAIN]: AVALANCHE_MULTICALL_ADDRESS,
23669
- [Chain.TAIKO_ALETHIA]: TAIKO_MULTICALL_ADDRESS,
23670
- [Chain.HEMI_NETWORK]: HEMI_MULTICALL_ADDRESS,
23671
- [Chain.GNOSIS]: GNOSIS_MULTICALL_ADDRESS,
23672
- [Chain.CORE_BLOCKCHAIN_MAINNET]: CORE_MULTICALL_ADDRESS,
23673
- [Chain.METIS_ANDROMEDA_MAINNET]: METIS_MULTICALL_ADDRESS,
23674
- [Chain.MODE]: MODE_MULTICALL_ADDRESS,
23675
- [Chain.INK]: INK_MULTICALL_ADDRESS,
23676
- [Chain.IOTA_EVM]: IOTA_MULTICALL_ADDRESS,
23677
- [Chain.CORN]: CORN_MULTICALL_ADDRESS,
23678
- [Chain.SONIC_MAINNET]: SONIC_MULTICALL_ADDRESS,
23679
- [Chain.FANTOM_OPERA]: FANTOM_MULTICALL_ADDRESS,
23680
- [Chain.SCROLL]: SCROLL_MULTICALL_ADDRESS,
23681
- [Chain.SHAPE]: SHAPE_MULTICALL_ADDRESS,
23682
- [Chain.CYBER_MAINNET]: CYBER_MULTICALL_ADDRESS,
23683
- [Chain.ZORA]: ZORA_MULTICALL_ADDRESS,
23684
- [Chain.MANTA_PACIFIC_MAINNET]: MANTA_MULTICALL_ADDRESS,
23685
- [Chain.REDSTONE]: REDSTONE_MULTICALL_ADDRESS,
23686
- [Chain.KAVA]: KAVA_MULTICALL_ADDRESS,
23687
- [Chain.METAL_L2]: METAL_MULTICALL_ADDRESS,
23688
- [Chain.LISK]: LISK_MULTICALL_ADDRESS,
23689
- [Chain.BOB]: BOB_MULTICALL_ADDRESS,
23690
- [Chain.ZERO_NETWORK]: ZERO_MULTICALL_ADDRESS,
23691
- [Chain.SAGA]: SAGA_MULTICALL_ADDRESS,
23692
- [Chain.MORPH]: MORPH_MULTICALL_ADDRESS,
23693
- [Chain.TELOS_EVM_MAINNET]: TELOS_MULTICALL_ADDRESS,
23694
- [Chain.WORLD_CHAIN]: WORLDCHAIN_MULTICALL_ADDRESS
23695
- };
23696
-
23697
- // src/flash-liquidity/fetchLiquidity.ts
23698
24470
  var DEFAULT_BATCH_SIZE = 4096;
23699
24471
  var FLASHLOAN_ENABLED_MASK = BigInt(
23700
24472
  "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFFFFFFFFFF"
@@ -23702,7 +24474,7 @@ var FLASHLOAN_ENABLED_MASK = BigInt(
23702
24474
  function getFlashLoanEnabled(data) {
23703
24475
  return (data & ~FLASHLOAN_ENABLED_MASK) !== BigInt(0);
23704
24476
  }
23705
- async function fetchFlashLiquidityForChain(chain, multicallRetry2, list = {}) {
24477
+ async function fetchFlashLiquidityForChain(chain, multicallRetry3, list = {}) {
23706
24478
  let callLengths = {};
23707
24479
  let aaveAssets = {};
23708
24480
  let aaveCalls = [];
@@ -23817,7 +24589,7 @@ async function fetchFlashLiquidityForChain(chain, multicallRetry2, list = {}) {
23817
24589
  ...balancerV3Calls,
23818
24590
  ...uniswapV4Calls
23819
24591
  ];
23820
- const rawResults = await multicallRetry2(
24592
+ const rawResults = await multicallRetry3(
23821
24593
  chain,
23822
24594
  calls,
23823
24595
  FlashAbi,
@@ -23958,6 +24730,111 @@ function attachPricesToFlashLiquidity(chainId, liq, prices, list = {}) {
23958
24730
  return liqCopy;
23959
24731
  }
23960
24732
 
23961
- 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 };
23962
24839
  //# sourceMappingURL=index.js.map
23963
24840
  //# sourceMappingURL=index.js.map