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