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