@1delta/margin-fetcher 0.0.169 → 0.0.171
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/abis/euler/accountLens.d.ts +191 -0
- package/dist/abis/euler/accountLens.d.ts.map +1 -0
- package/dist/abis/euler/eVault.d.ts +206 -0
- package/dist/abis/euler/eVault.d.ts.map +1 -0
- package/dist/abis/euler/evc.d.ts +81 -0
- package/dist/abis/euler/evc.d.ts.map +1 -0
- package/dist/abis/euler/genericFactory.d.ts +26 -0
- package/dist/abis/euler/genericFactory.d.ts.map +1 -0
- package/dist/abis/euler/index.d.ts +7 -0
- package/dist/abis/euler/index.d.ts.map +1 -0
- package/dist/abis/euler/payments.d.ts +140 -0
- package/dist/abis/euler/payments.d.ts.map +1 -0
- package/dist/abis/euler/swapper.d.ts +143 -0
- package/dist/abis/euler/swapper.d.ts.map +1 -0
- package/dist/abis/euler/vaultLens.d.ts +336 -0
- package/dist/abis/euler/vaultLens.d.ts.map +1 -0
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1359 -163
- 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/margin/base/borrow.d.ts +1 -1
- package/dist/lending/margin/base/deposit.d.ts +1 -1
- package/dist/lending/margin/base/repay.d.ts +1 -1
- package/dist/lending/margin/base/standard/borrow.d.ts +1 -1
- package/dist/lending/margin/base/standard/deposit.d.ts +1 -1
- package/dist/lending/margin/base/standard/repay.d.ts +1 -1
- package/dist/lending/margin/base/standard/withdraw.d.ts +1 -1
- package/dist/lending/margin/base/utils.d.ts +1 -1
- package/dist/lending/margin/base/withdraw.d.ts +1 -1
- package/dist/lending/margin/base/yield/getRewardYieldChange.d.ts +0 -4
- package/dist/lending/margin/base/yield/getRewardYieldChange.d.ts.map +1 -1
- package/dist/lending/margin/e-mode/index.d.ts.map +1 -1
- package/dist/lending/margin/loop/types.d.ts +3 -3
- package/dist/lending/margin/loop/types.d.ts.map +1 -1
- package/dist/lending/margin/loop/utils.d.ts +4 -0
- package/dist/lending/margin/loop/utils.d.ts.map +1 -1
- package/dist/lending/public-data/aave-v2-type/publicCallBuild.d.ts.map +1 -1
- package/dist/lending/public-data/aave-v2-type/publicCallParse.d.ts.map +1 -1
- package/dist/lending/public-data/compound-v2/convert/benqi.d.ts +1 -1
- package/dist/lending/public-data/compound-v2/convert/standard.d.ts +1 -1
- package/dist/lending/public-data/compound-v2/convert/sumer.d.ts +1 -1
- package/dist/lending/public-data/compound-v2/convert/takara.d.ts +1 -1
- package/dist/lending/public-data/compound-v2/convert/tectonic.d.ts +1 -1
- package/dist/lending/public-data/compound-v3/publicCallParse.d.ts.map +1 -1
- package/dist/lending/public-data/euler/fetcher/cluster.d.ts +21 -0
- package/dist/lending/public-data/euler/fetcher/cluster.d.ts.map +1 -0
- package/dist/lending/public-data/euler/fetcher/constants.d.ts +29 -0
- package/dist/lending/public-data/euler/fetcher/constants.d.ts.map +1 -0
- package/dist/lending/public-data/euler/fetcher/normalize.d.ts +171 -0
- package/dist/lending/public-data/euler/fetcher/normalize.d.ts.map +1 -0
- package/dist/lending/public-data/euler/fetcher/types.d.ts +113 -0
- package/dist/lending/public-data/euler/fetcher/types.d.ts.map +1 -0
- package/dist/lending/public-data/euler/publicCallBuild.d.ts +335 -0
- package/dist/lending/public-data/euler/publicCallBuild.d.ts.map +1 -0
- package/dist/lending/public-data/euler/publicCallParse.d.ts +9 -0
- package/dist/lending/public-data/euler/publicCallParse.d.ts.map +1 -0
- package/dist/lending/public-data/fetchLender.d.ts.map +1 -1
- package/dist/lending/public-data/morpho/convertPublic.d.ts.map +1 -1
- package/dist/lending/public-data/morpho/fetchPublic.d.ts.map +1 -1
- package/dist/lending/public-data/morpho/getMarketsFromChain.d.ts.map +1 -1
- package/dist/lending/user-data/abis.d.ts +1 -10437
- package/dist/lending/user-data/abis.d.ts.map +1 -1
- package/dist/lending/user-data/euler/userCallBuild.d.ts +22 -0
- package/dist/lending/user-data/euler/userCallBuild.d.ts.map +1 -0
- package/dist/lending/user-data/euler/userCallParse.d.ts +10 -0
- package/dist/lending/user-data/euler/userCallParse.d.ts.map +1 -0
- package/dist/lending/user-data/fetch-balances/parse.d.ts.map +1 -1
- package/dist/lending/user-data/fetch-balances/prepare.d.ts.map +1 -1
- package/dist/lending/user-data/fetch-balances/types.d.ts +3 -1
- package/dist/lending/user-data/fetch-balances/types.d.ts.map +1 -1
- package/dist/lending/user-data/index.d.ts +1 -1
- package/dist/lending/user-data/index.d.ts.map +1 -1
- package/dist/lending/user-data/init/userCallParse.d.ts.map +1 -1
- package/dist/lending/user-data/utils/createEulerMultiAccountTypeUserState.d.ts +51 -0
- package/dist/lending/user-data/utils/createEulerMultiAccountTypeUserState.d.ts.map +1 -0
- package/dist/lending/user-data/utils/createGeneralUserState.d.ts.map +1 -1
- package/dist/lending/user-data/utils/createSumerUserState.d.ts.map +1 -1
- package/dist/lending/user-data/utils/getBalanceForMarketUid.d.ts +5 -0
- package/dist/lending/user-data/utils/getBalanceForMarketUid.d.ts.map +1 -0
- 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 +2 -1
- package/dist/lending/user-data/utils/types.d.ts.map +1 -1
- package/dist/lending/user-data/with-permissions/e2e.d.ts.map +1 -1
- package/dist/lending/user-data/with-permissions/prepare.d.ts.map +1 -1
- package/dist/lending/user-data/with-permissions/types.d.ts +1 -1
- package/dist/lending/user-data/with-permissions/types.d.ts.map +1 -1
- package/dist/lending-pairs/computeLendingPairs.d.ts.map +1 -1
- package/dist/prices/oracle-prices/fetchOraclePrices.d.ts.map +1 -1
- package/dist/prices/oracle-prices/fetchers/euler.d.ts +363 -0
- package/dist/prices/oracle-prices/fetchers/euler.d.ts.map +1 -0
- package/dist/prices/oracle-prices/fetchers/index.d.ts +1 -0
- package/dist/prices/oracle-prices/fetchers/index.d.ts.map +1 -1
- package/dist/prices/pendle/fetchPendlePrices.d.ts.map +1 -1
- package/dist/types/apiReturnType.d.ts +6 -2
- package/dist/types/apiReturnType.d.ts.map +1 -1
- package/dist/types/lender/aave-v2-types.d.ts +2 -2
- package/dist/types/lender/aave-v2-types.d.ts.map +1 -1
- package/dist/types/lender/aave-v3-types.d.ts +5 -1
- package/dist/types/lender/aave-v3-types.d.ts.map +1 -1
- package/dist/types/lender/compound-v2-types.d.ts +2 -2
- package/dist/types/lender/compound-v2-types.d.ts.map +1 -1
- package/dist/types/lender/compound-v3-types.d.ts +2 -2
- package/dist/types/lender/compound-v3-types.d.ts.map +1 -1
- package/dist/types/lender/init-types.d.ts +2 -2
- package/dist/types/lender/init-types.d.ts.map +1 -1
- package/dist/types/lender/morpho-types.d.ts +7 -6
- package/dist/types/lender/morpho-types.d.ts.map +1 -1
- package/dist/types/lenderTypes.d.ts +4 -4
- package/dist/types/lenderTypes.d.ts.map +1 -1
- package/dist/utils/index.d.ts +2 -1
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/yields/intrinsic/fetchers/usdx.d.ts +1 -0
- package/dist/yields/intrinsic/fetchers/usdx.d.ts.map +1 -1
- package/package.json +7 -7
package/dist/index.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { parseAbi, formatEther, BaseError, encodeFunctionData, formatUnits, decodeFunctionResult, decodeAbiParameters, AbiEncodingLengthMismatchError, concatHex, isAddress, InvalidAddressError, pad, stringToHex, boolToHex, integerRegex, numberToHex, bytesRegex, BytesSizeMismatchError, arrayRegex, UnsupportedPackedAbiType } from './chunk-ZVIJSUIM.js';
|
|
2
2
|
import './chunk-BYTNVMX7.js';
|
|
3
3
|
import './chunk-PR4QN5HX.js';
|
|
4
|
-
import { Lender, isAaveType, isCompoundV3, isMultiMarket, isInit, isCompoundV2Type, isVenusType, isMorphoType, isSumerType, AAVE_V3_LENDERS, AAVE_V2_LENDERS, isAaveV2Type, isAaveV32Type, isAaveV3Type, isYLDR, isCompoundV3Type, isTectonicType, isBenqiType, isLista } from '@1delta/lender-registry';
|
|
4
|
+
import { Lender, isAaveType, isCompoundV3, isMultiMarket, isInit, isCompoundV2Type, isVenusType, isMorphoType, isSumerType, AAVE_V3_LENDERS, AAVE_V2_LENDERS, isAaveV2Type, isAaveV32Type, isAaveV3Type, isEulerType, isYLDR, isCompoundV3Type, isTectonicType, isBenqiType, isLista } from '@1delta/lender-registry';
|
|
5
5
|
export { isAaveType, isAaveV2Type, isAaveV32Type, isAaveV3Type, isCompoundV3, isCompoundV3Type, isInit, isMorphoType, isMultiMarket, isYLDR } from '@1delta/lender-registry';
|
|
6
6
|
import lodash from 'lodash';
|
|
7
7
|
import { getEvmChain, multicallRetry, getEvmClient, getEvmClientUniversal } from '@1delta/providers';
|
|
@@ -6271,7 +6271,9 @@ globalThis[GLOBAL_LENDER_DATA_KEY] = {
|
|
|
6271
6271
|
aaveWethGateway: {},
|
|
6272
6272
|
morphoBundler3: {},
|
|
6273
6273
|
listaNativeProvider: {},
|
|
6274
|
-
compoundV3Bulker: {}
|
|
6274
|
+
compoundV3Bulker: {},
|
|
6275
|
+
eulerConfigs: {},
|
|
6276
|
+
eulerVaults: {}
|
|
6275
6277
|
};
|
|
6276
6278
|
function getGlobalData2() {
|
|
6277
6279
|
return globalThis[GLOBAL_LENDER_DATA_KEY];
|
|
@@ -6293,6 +6295,8 @@ var compoundV2Pools = () => getGlobalData2()?.compoundV2Pools;
|
|
|
6293
6295
|
var compoundV2Tokens = () => getGlobalData2()?.compoundV2Tokens;
|
|
6294
6296
|
var compoundV2TokenArray = () => getGlobalData2()?.compoundV2TokenArray;
|
|
6295
6297
|
var initConfig = () => getGlobalData2()?.initConfig;
|
|
6298
|
+
var eulerConfigs = () => getGlobalData2()?.eulerConfigs;
|
|
6299
|
+
var eulerVaults = () => getGlobalData2()?.eulerVaults;
|
|
6296
6300
|
var getListUrl = (chainId) => `https://raw.githubusercontent.com/1delta-DAO/token-lists/main/${chainId}.json`;
|
|
6297
6301
|
async function fetchTokenList(chainId) {
|
|
6298
6302
|
const data = await fetch(getListUrl(chainId));
|
|
@@ -7441,6 +7445,9 @@ var ENABLED_COMPOUNDS = [
|
|
|
7441
7445
|
var DISABLED_COMPOUNDS = {
|
|
7442
7446
|
[Chain.ETHEREUM_MAINNET]: [Lender.CREAM_FINANCE]
|
|
7443
7447
|
};
|
|
7448
|
+
var ENABLED_EULER_V2_CHAINS = [
|
|
7449
|
+
Chain.BNB_SMART_CHAIN_MAINNET
|
|
7450
|
+
];
|
|
7444
7451
|
var getLendersForChain = (c) => {
|
|
7445
7452
|
let lenders = [];
|
|
7446
7453
|
Object.entries(aavePools() ?? {}).forEach(([l, data]) => {
|
|
@@ -7462,6 +7469,11 @@ var getLendersForChain = (c) => {
|
|
|
7462
7469
|
if (!DISABLED_COMPOUNDS[c]?.includes(l) && chains.includes(c) && ENABLED_COMPOUNDS.includes(l))
|
|
7463
7470
|
lenders.push(l);
|
|
7464
7471
|
});
|
|
7472
|
+
if (ENABLED_EULER_V2_CHAINS.includes(c)) {
|
|
7473
|
+
Object.entries(eulerVaults() ?? {}).forEach(([l, data]) => {
|
|
7474
|
+
if (data[c]?.length > 0) lenders.push(l);
|
|
7475
|
+
});
|
|
7476
|
+
}
|
|
7465
7477
|
return lenders;
|
|
7466
7478
|
};
|
|
7467
7479
|
var filterLendersByProtocol = (allLenders, protocolList) => {
|
|
@@ -8108,13 +8120,14 @@ var getAaveV2ReservesDataConverter = (lender, chainId, prices, additionalYields,
|
|
|
8108
8120
|
),
|
|
8109
8121
|
intrinsicYield: additionalYields?.intrinsicYields[oracleKey] ?? 0,
|
|
8110
8122
|
// rewards
|
|
8111
|
-
rewards: lender === Lender.MERIDIAN && chainId === Chain.TAIKO_ALETHIA && additionalYields?.lenderRewards ?
|
|
8112
|
-
|
|
8123
|
+
rewards: lender === Lender.MERIDIAN && chainId === Chain.TAIKO_ALETHIA && additionalYields?.lenderRewards ? [
|
|
8124
|
+
{
|
|
8125
|
+
asset: "0xa9d23408b9ba935c230493c40c73824df71a0975",
|
|
8113
8126
|
depositRate: additionalYields?.lenderRewards[Lender.MERIDIAN]?.[asset]?.deposit ?? 0,
|
|
8114
8127
|
variableBorrowRate: additionalYields?.lenderRewards[Lender.MERIDIAN]?.[asset]?.borrow ?? 0,
|
|
8115
8128
|
stableBorrowRate: 0
|
|
8116
8129
|
}
|
|
8117
|
-
|
|
8130
|
+
] : [],
|
|
8118
8131
|
decimals: Number(
|
|
8119
8132
|
configData?.[0 /* decimals */]
|
|
8120
8133
|
),
|
|
@@ -8266,9 +8279,9 @@ var getAaveV3ReservesDataConverter = (lender, chainId, prices, additionalYields,
|
|
|
8266
8279
|
stableBorrowRate: formatAaveRawApyToApr(
|
|
8267
8280
|
reserveData?.[7 /* stableBorrowRate */]?.toString()
|
|
8268
8281
|
),
|
|
8269
|
-
intrinsicYield: additionalYields
|
|
8282
|
+
intrinsicYield: additionalYields?.intrinsicYields?.[toOracleKey(assetMeta?.assetGroup)] ?? 0,
|
|
8270
8283
|
// rewards
|
|
8271
|
-
rewards:
|
|
8284
|
+
rewards: []
|
|
8272
8285
|
};
|
|
8273
8286
|
const eModeCategory = Number(reserveEMode?.toString());
|
|
8274
8287
|
resultReserves[marketUid] = {
|
|
@@ -8468,9 +8481,9 @@ function parseYLDRCall(chainId, lender, additionalYields, prices, tokenList) {
|
|
|
8468
8481
|
reserveData?.[4 /* variableBorrowRate */]?.toString()
|
|
8469
8482
|
),
|
|
8470
8483
|
stableBorrowRate: 0,
|
|
8471
|
-
intrinsicYield: additionalYields
|
|
8484
|
+
intrinsicYield: additionalYields?.intrinsicYields?.[oracleKey] ?? 0,
|
|
8472
8485
|
// rewards
|
|
8473
|
-
rewards:
|
|
8486
|
+
rewards: [],
|
|
8474
8487
|
decimals: Number(
|
|
8475
8488
|
configData?.[0 /* decimals */]
|
|
8476
8489
|
),
|
|
@@ -8607,9 +8620,9 @@ function parseAave32(chainId, lender, prices, additionalYields, tokenList) {
|
|
|
8607
8620
|
stableBorrowRate: formatAaveRawApyToApr(
|
|
8608
8621
|
reserveData?.[7 /* stableBorrowRate */]?.toString()
|
|
8609
8622
|
),
|
|
8610
|
-
intrinsicYield: additionalYields
|
|
8623
|
+
intrinsicYield: additionalYields?.intrinsicYields?.[toOracleKey(assetMeta?.assetGroup)] ?? 0,
|
|
8611
8624
|
// rewards
|
|
8612
|
-
rewards:
|
|
8625
|
+
rewards: []
|
|
8613
8626
|
};
|
|
8614
8627
|
const assetIndex = lowerReservesList.indexOf(asset);
|
|
8615
8628
|
const usageAsCollateralEnabled = configData?.[5 /* usageAsCollateralEnabled */];
|
|
@@ -8737,8 +8750,8 @@ var getInitReservesDataConverter = (lender, chainId, prices, additionalYields, t
|
|
|
8737
8750
|
),
|
|
8738
8751
|
stableBorrowRate: 0,
|
|
8739
8752
|
collateralActive: true,
|
|
8740
|
-
intrinsicYield: additionalYields
|
|
8741
|
-
rewards:
|
|
8753
|
+
intrinsicYield: additionalYields?.intrinsicYields?.[oracleKey] ?? 0,
|
|
8754
|
+
rewards: [],
|
|
8742
8755
|
config: {},
|
|
8743
8756
|
borrowingEnabled: totalDebt !== "0",
|
|
8744
8757
|
params
|
|
@@ -8795,6 +8808,16 @@ var getInitReservesDataConverter = (lender, chainId, prices, additionalYields, t
|
|
|
8795
8808
|
var COMET_RISK_DECIMALS = 18;
|
|
8796
8809
|
var SECONDS_PER_DAY = 3600 * 24;
|
|
8797
8810
|
var DAYS_IN_YEAR = 365;
|
|
8811
|
+
var COMP_ADDRESSES = {
|
|
8812
|
+
"1": "0xc00e94cb662c3520282e6f5717214004a7f26888",
|
|
8813
|
+
"10": "0x7e7d4467112689329f7e06571ed0e8cbad4910ee",
|
|
8814
|
+
"130": "0xdf78e4f0a8279942ca68046476919a90f2288656",
|
|
8815
|
+
"137": "0x8505b9d2254a7ae468c0e9dd10ccea3a837aef5c",
|
|
8816
|
+
"5000": "0x52b7d8851d6ccbc6342ba0855be65f7b82a3f17f",
|
|
8817
|
+
"8453": "0x9e1028f5f1d5ede59748ffcee5532509976840e0",
|
|
8818
|
+
"42161": "0x354a6da3fcde098f8389cad84b0182725c6c91de",
|
|
8819
|
+
"534352": "0x643e160a3c3e2b7eae198f0beb1bfd2441450e86"
|
|
8820
|
+
};
|
|
8798
8821
|
var getCompoundV3ReservesDataConverter = (lender, chainId, prices, additionalYields, tokenList = {}) => {
|
|
8799
8822
|
const assetsToQuery = getCompoundV3Assets(chainId, lender);
|
|
8800
8823
|
const baseAssetData = getCompoundV3BaseAsset(lender, chainId);
|
|
@@ -8849,7 +8872,7 @@ var getCompoundV3ReservesDataConverter = (lender, chainId, prices, additionalYie
|
|
|
8849
8872
|
variableBorrowRate: 0,
|
|
8850
8873
|
stableBorrowRate: 0,
|
|
8851
8874
|
depositRate: 0,
|
|
8852
|
-
intrinsicYield: additionalYields
|
|
8875
|
+
intrinsicYield: additionalYields?.intrinsicYields?.[oracleKey] ?? 0,
|
|
8853
8876
|
utilization: 0,
|
|
8854
8877
|
// debt and liquidity are zero
|
|
8855
8878
|
totalDebt: 0,
|
|
@@ -8860,7 +8883,7 @@ var getCompoundV3ReservesDataConverter = (lender, chainId, prices, additionalYie
|
|
|
8860
8883
|
totalDeposits: totals,
|
|
8861
8884
|
totalDepositsUSD: totalUsd,
|
|
8862
8885
|
// rewards
|
|
8863
|
-
rewards:
|
|
8886
|
+
rewards: [],
|
|
8864
8887
|
collateralActive: true,
|
|
8865
8888
|
isActive: true,
|
|
8866
8889
|
isFrozen: false,
|
|
@@ -8887,7 +8910,11 @@ var getCompoundV3ReservesDataConverter = (lender, chainId, prices, additionalYie
|
|
|
8887
8910
|
const price = prices[oracleKeyBase] ?? 1;
|
|
8888
8911
|
const liquidity = Number(resultsSupply) - Number(resultsBorrow);
|
|
8889
8912
|
const compPrice = prices["COMP"];
|
|
8890
|
-
const baseMarketUid = createMarketUid(
|
|
8913
|
+
const baseMarketUid = createMarketUid(
|
|
8914
|
+
chainId,
|
|
8915
|
+
lender,
|
|
8916
|
+
baseAssetData.baseAsset
|
|
8917
|
+
);
|
|
8891
8918
|
const baseData = {
|
|
8892
8919
|
[baseAssetData.baseAsset]: {
|
|
8893
8920
|
marketUid: baseMarketUid,
|
|
@@ -8924,19 +8951,20 @@ var getCompoundV3ReservesDataConverter = (lender, chainId, prices, additionalYie
|
|
|
8924
8951
|
totalDeposits: resultsSupply,
|
|
8925
8952
|
totalDebtUSD: Number(resultsBorrow) * price,
|
|
8926
8953
|
totalDepositsUSD: Number(resultsSupply) * price,
|
|
8927
|
-
// rewards
|
|
8928
|
-
rewards:
|
|
8929
|
-
|
|
8954
|
+
// rewards - only populate if COMP exists on this chain
|
|
8955
|
+
rewards: COMP_ADDRESSES[chainId] ? [
|
|
8956
|
+
{
|
|
8957
|
+
asset: COMP_ADDRESSES[chainId],
|
|
8930
8958
|
depositRate: compPrice * compToSuppliersPerDay / Number(resultsSupply) * DAYS_IN_YEAR * 100 / price,
|
|
8931
8959
|
variableBorrowRate: compPrice * compToBorrowersPerDay / Number(resultsBorrow) * DAYS_IN_YEAR * 100 / price,
|
|
8932
8960
|
stableBorrowRate: 0
|
|
8933
8961
|
}
|
|
8934
|
-
|
|
8962
|
+
] : [],
|
|
8935
8963
|
borrowingEnabled: true,
|
|
8936
8964
|
collateralActive: false,
|
|
8937
8965
|
isActive: true,
|
|
8938
8966
|
isFrozen: false,
|
|
8939
|
-
intrinsicYield: additionalYields
|
|
8967
|
+
intrinsicYield: additionalYields?.intrinsicYields?.[oracleKeyBase] ?? 0
|
|
8940
8968
|
}
|
|
8941
8969
|
};
|
|
8942
8970
|
return { data: { ...result, ...baseData }, chainId };
|
|
@@ -10846,7 +10874,7 @@ function getMarketUidsFromMeta(meta) {
|
|
|
10846
10874
|
function createBaseTypeUserState(payload, lenderData, totalDeposits24h = 0, totalDebt24h = 0) {
|
|
10847
10875
|
let assetKeys = getMarketUidsFromMeta(lenderData);
|
|
10848
10876
|
const { chainId, account } = payload;
|
|
10849
|
-
const mode =
|
|
10877
|
+
const mode = String(payload.userEMode ?? 0);
|
|
10850
10878
|
const isWhitelisted = !Boolean(payload?.notWhitelisted ?? false);
|
|
10851
10879
|
let depositInterest = 0;
|
|
10852
10880
|
let borrowInterest = 0;
|
|
@@ -10880,32 +10908,32 @@ function createBaseTypeUserState(payload, lenderData, totalDeposits24h = 0, tota
|
|
|
10880
10908
|
flags,
|
|
10881
10909
|
configs
|
|
10882
10910
|
} = lenderData[marketUid];
|
|
10911
|
+
const userConfigForAsset = configs[mode];
|
|
10883
10912
|
deposits += depositsUSD;
|
|
10884
10913
|
debt += debtStableUSD;
|
|
10885
10914
|
debt += debtUSD;
|
|
10886
10915
|
oracleDebt += debtStableUSDOracle;
|
|
10887
10916
|
oracleDebt += debtUSDOracle;
|
|
10888
|
-
|
|
10889
|
-
|
|
10890
|
-
|
|
10891
|
-
|
|
10892
|
-
|
|
10893
|
-
|
|
10894
|
-
|
|
10895
|
-
|
|
10896
|
-
|
|
10897
|
-
|
|
10898
|
-
|
|
10899
|
-
);
|
|
10917
|
+
(rewards ?? []).forEach((rewardData) => {
|
|
10918
|
+
const key = rewardData.asset;
|
|
10919
|
+
rewardDepositAccrual += rewardData.depositRate * depositsUSD;
|
|
10920
|
+
rewardBorrowAccrual += rewardData.variableBorrowRate * debtUSD + (rewardData.stableBorrowRate ?? 0) * debtStableUSD;
|
|
10921
|
+
const rewDepo = rewardData.depositRate * depositsUSD;
|
|
10922
|
+
const rewDebt = rewardData.variableBorrowRate * debtUSD + (rewardData.stableBorrowRate ?? 0) * (debtStableUSD ?? 0);
|
|
10923
|
+
if (!rewardsPerAsset[key])
|
|
10924
|
+
rewardsPerAsset[key] = { depositApr: 0, borrowApr: 0 };
|
|
10925
|
+
if (rewDepo > 0) rewardsPerAsset[key].depositApr += rewDepo;
|
|
10926
|
+
if (rewDebt > 0) rewardsPerAsset[key].borrowApr += rewDebt;
|
|
10927
|
+
});
|
|
10900
10928
|
stakingDepositAccrual += (intrinsicYield ?? 0) * depositsUSD;
|
|
10901
10929
|
stakingBorrowAccrual += (intrinsicYield ?? 0) * (debtStableUSD + debtUSD);
|
|
10902
|
-
if (flags?.collateralActive) {
|
|
10930
|
+
if (flags?.collateralActive || userConfigForAsset && !userConfigForAsset.collateralDisabled) {
|
|
10903
10931
|
if (collateralEnabled) {
|
|
10904
|
-
collateral += (
|
|
10905
|
-
borrowDiscountedCollateral += (
|
|
10932
|
+
collateral += (userConfigForAsset?.collateralFactor ?? 1) * depositsUSDOracle;
|
|
10933
|
+
borrowDiscountedCollateral += (userConfigForAsset?.borrowCollateralFactor ?? 1) * depositsUSDOracle;
|
|
10906
10934
|
}
|
|
10907
|
-
borrowDiscountedCollateralAllActive += (
|
|
10908
|
-
collateralAllActive += (
|
|
10935
|
+
borrowDiscountedCollateralAllActive += (userConfigForAsset?.borrowCollateralFactor ?? 1) * depositsUSDOracle;
|
|
10936
|
+
collateralAllActive += (userConfigForAsset?.collateralFactor ?? 1) * depositsUSDOracle;
|
|
10909
10937
|
}
|
|
10910
10938
|
depositInterest += depositRate * depositsUSD;
|
|
10911
10939
|
borrowInterest += debtStableUSD * stableBorrowRate + debtUSD * variableBorrowRate;
|
|
@@ -11016,6 +11044,15 @@ function createBaseTypeUserState(payload, lenderData, totalDeposits24h = 0, tota
|
|
|
11016
11044
|
};
|
|
11017
11045
|
}
|
|
11018
11046
|
|
|
11047
|
+
// src/lending/user-data/utils/getBalanceForMarketUid.ts
|
|
11048
|
+
function getBalanceForMarketUid(lender, marketUid, balances, subAccount) {
|
|
11049
|
+
const accountPositions = balances?.[lender]?.data;
|
|
11050
|
+
if (!accountPositions) return void 0;
|
|
11051
|
+
if (accountPositions.length === 1)
|
|
11052
|
+
return accountPositions[0].positions.find((a) => a.marketUid === marketUid);
|
|
11053
|
+
return accountPositions.find((p) => p.accountId === subAccount)?.positions.find((a) => a.marketUid === marketUid);
|
|
11054
|
+
}
|
|
11055
|
+
|
|
11019
11056
|
// src/lending/margin/base/utils.ts
|
|
11020
11057
|
var EMPTY_BALANCE = {
|
|
11021
11058
|
rewards: void 0,
|
|
@@ -11142,13 +11179,13 @@ function getIntrinsicYieldRepay(amountUSD, cashFlowDeposits, cashFlowDebt, depos
|
|
|
11142
11179
|
// src/lending/margin/base/yield/getRewardYieldChange.ts
|
|
11143
11180
|
function getRewardYieldDeposit(amountUSD, cashFlowDeposits, cashFlowDebt, deposits, debt, yieldParams) {
|
|
11144
11181
|
const rewards = yieldParams?.rewards;
|
|
11145
|
-
if (!rewards) return {};
|
|
11182
|
+
if (!Array.isArray(rewards) || rewards.length === 0) return {};
|
|
11146
11183
|
const data = {};
|
|
11147
|
-
for (const
|
|
11148
|
-
const _flowOut = amountUSD * (
|
|
11184
|
+
for (const reward of rewards) {
|
|
11185
|
+
const _flowOut = amountUSD * (reward.depositRate ?? 0);
|
|
11149
11186
|
const totalCashFlowDeposits = cashFlowDeposits + _flowOut;
|
|
11150
11187
|
const newCollat = deposits + amountUSD;
|
|
11151
|
-
data[
|
|
11188
|
+
data[reward.asset] = {
|
|
11152
11189
|
borrowApr: Math.abs(debt) < 0.01 ? 0 : cashFlowDebt / debt,
|
|
11153
11190
|
depositApr: totalCashFlowDeposits / newCollat,
|
|
11154
11191
|
apr: (cashFlowDeposits + cashFlowDebt + _flowOut) / (newCollat - debt)
|
|
@@ -11158,13 +11195,13 @@ function getRewardYieldDeposit(amountUSD, cashFlowDeposits, cashFlowDebt, deposi
|
|
|
11158
11195
|
}
|
|
11159
11196
|
function getRewardYieldBorrow(amountUSD, irMode, cashFlowDeposits, cashFlowDebt, deposits, debt, yieldParams) {
|
|
11160
11197
|
const rewards = yieldParams?.rewards;
|
|
11161
|
-
if (!rewards) return {};
|
|
11198
|
+
if (!Array.isArray(rewards) || rewards.length === 0) return {};
|
|
11162
11199
|
const data = {};
|
|
11163
|
-
for (const
|
|
11164
|
-
const _flowIn = amountUSD * ((irMode === 1 ?
|
|
11200
|
+
for (const reward of rewards) {
|
|
11201
|
+
const _flowIn = amountUSD * ((irMode === 1 ? reward.stableBorrowRate : reward.variableBorrowRate) ?? 0);
|
|
11165
11202
|
const totalCashFlowDebt = cashFlowDebt + _flowIn;
|
|
11166
11203
|
const newDebt = debt + amountUSD;
|
|
11167
|
-
data[
|
|
11204
|
+
data[reward.asset] = {
|
|
11168
11205
|
borrowApr: totalCashFlowDebt / newDebt,
|
|
11169
11206
|
depositApr: Math.abs(deposits) < 0.01 ? 0 : cashFlowDeposits / deposits,
|
|
11170
11207
|
apr: (cashFlowDeposits + cashFlowDebt + _flowIn) / (deposits - newDebt)
|
|
@@ -11174,13 +11211,13 @@ function getRewardYieldBorrow(amountUSD, irMode, cashFlowDeposits, cashFlowDebt,
|
|
|
11174
11211
|
}
|
|
11175
11212
|
function getRewardYieldWithdraw(amountUSD, cashFlowDeposits, cashFlowDebt, deposits, debt, yieldParams) {
|
|
11176
11213
|
const rewards = yieldParams?.rewards;
|
|
11177
|
-
if (!rewards) return {};
|
|
11214
|
+
if (!Array.isArray(rewards) || rewards.length === 0) return {};
|
|
11178
11215
|
const data = {};
|
|
11179
|
-
for (const
|
|
11180
|
-
const _flowIn = amountUSD * (
|
|
11216
|
+
for (const reward of rewards) {
|
|
11217
|
+
const _flowIn = amountUSD * (reward.depositRate ?? 0);
|
|
11181
11218
|
const totalCashFlowDeposits = cashFlowDeposits - _flowIn;
|
|
11182
11219
|
const newCollat = deposits - amountUSD;
|
|
11183
|
-
data[
|
|
11220
|
+
data[reward.asset] = {
|
|
11184
11221
|
borrowApr: Math.abs(debt) < 0.01 ? 0 : cashFlowDebt / debt,
|
|
11185
11222
|
depositApr: totalCashFlowDeposits / newCollat,
|
|
11186
11223
|
apr: (cashFlowDeposits + cashFlowDebt - _flowIn) / (newCollat - debt)
|
|
@@ -11190,13 +11227,13 @@ function getRewardYieldWithdraw(amountUSD, cashFlowDeposits, cashFlowDebt, depos
|
|
|
11190
11227
|
}
|
|
11191
11228
|
function getRewardYieldRepay(amountUSD, irMode, cashFlowDeposits, cashFlowDebt, deposits, debt, yieldParams) {
|
|
11192
11229
|
const rewards = yieldParams?.rewards;
|
|
11193
|
-
if (!rewards) return {};
|
|
11230
|
+
if (!Array.isArray(rewards) || rewards.length === 0) return {};
|
|
11194
11231
|
const data = {};
|
|
11195
|
-
for (const
|
|
11196
|
-
const _flowOut = amountUSD * ((irMode === 1 ?
|
|
11232
|
+
for (const reward of rewards) {
|
|
11233
|
+
const _flowOut = amountUSD * ((irMode === 1 ? reward.stableBorrowRate : reward.variableBorrowRate) ?? 0);
|
|
11197
11234
|
const totalCashFlowDebt = cashFlowDebt - _flowOut;
|
|
11198
11235
|
const newDebt = debt - amountUSD;
|
|
11199
|
-
data[
|
|
11236
|
+
data[reward.asset] = {
|
|
11200
11237
|
borrowApr: Math.abs(newDebt) < 0.01 ? 0 : totalCashFlowDebt / newDebt,
|
|
11201
11238
|
depositApr: Math.abs(deposits) < 0.01 ? 0 : cashFlowDeposits / deposits,
|
|
11202
11239
|
apr: (cashFlowDeposits + cashFlowDebt - _flowOut) / (deposits - newDebt)
|
|
@@ -11601,18 +11638,17 @@ function createSumerUserState(payload, lenderData, totalDeposits24h = 0, totalDe
|
|
|
11601
11638
|
debt += debtUSD;
|
|
11602
11639
|
oracleDebt += debtStableUSDOracle;
|
|
11603
11640
|
oracleDebt += debtUSDOracle;
|
|
11604
|
-
|
|
11605
|
-
|
|
11606
|
-
|
|
11607
|
-
|
|
11608
|
-
|
|
11609
|
-
|
|
11610
|
-
|
|
11611
|
-
|
|
11612
|
-
|
|
11613
|
-
|
|
11614
|
-
|
|
11615
|
-
);
|
|
11641
|
+
(rewards ?? []).forEach((rewardData) => {
|
|
11642
|
+
const key = rewardData.asset;
|
|
11643
|
+
rewardDepositAccrual += rewardData.depositRate * depositsUSD;
|
|
11644
|
+
rewardBorrowAccrual += rewardData.variableBorrowRate * debtUSD + (rewardData.stableBorrowRate ?? 0) * debtStableUSD;
|
|
11645
|
+
const rewDepo = rewardData.depositRate * depositsUSD;
|
|
11646
|
+
const rewDebt = rewardData.variableBorrowRate * debtUSD + (rewardData.stableBorrowRate ?? 0) * (debtStableUSD ?? 0);
|
|
11647
|
+
if (!rewardsPerAsset[key])
|
|
11648
|
+
rewardsPerAsset[key] = { depositApr: 0, borrowApr: 0 };
|
|
11649
|
+
if (rewDepo > 0) rewardsPerAsset[key].depositApr += rewDepo;
|
|
11650
|
+
if (rewDebt > 0) rewardsPerAsset[key].borrowApr += rewDebt;
|
|
11651
|
+
});
|
|
11616
11652
|
stakingDepositAccrual += (intrinsicYield ?? 0) * depositsUSD;
|
|
11617
11653
|
stakingBorrowAccrual += (intrinsicYield ?? 0) * (debtStableUSD + debtUSD);
|
|
11618
11654
|
if (sumerMeta) {
|
|
@@ -11674,7 +11710,7 @@ function createSumerUserState(payload, lenderData, totalDeposits24h = 0, totalDe
|
|
|
11674
11710
|
intrinsicDepositApr: safeDivide(stakingDepositAccrual, deposits),
|
|
11675
11711
|
intrinsicBorrowApr: safeDivide(stakingBorrowAccrual, debt)
|
|
11676
11712
|
};
|
|
11677
|
-
const userConfig = { selectedMode: 0, id: account, isWhitelisted };
|
|
11713
|
+
const userConfig = { selectedMode: "0", id: account, isWhitelisted };
|
|
11678
11714
|
const creditLine = Math.max(
|
|
11679
11715
|
0,
|
|
11680
11716
|
borrowDiscountedCollateral - balanceData2.adjustedDebt
|
|
@@ -11768,7 +11804,7 @@ function createMultiAccountTypeUserState(payload, lenderData, histData) {
|
|
|
11768
11804
|
for (let j = 0; j < positionKeys.length; j++) {
|
|
11769
11805
|
const posId = positionKeys[j];
|
|
11770
11806
|
const posMode = payload.modes?.[posId];
|
|
11771
|
-
const mode = posMode ?? LENDER_MODE_NO_MODE;
|
|
11807
|
+
const mode = String(posMode ?? LENDER_MODE_NO_MODE);
|
|
11772
11808
|
const userConfig = {
|
|
11773
11809
|
id: posId,
|
|
11774
11810
|
selectedMode: mode,
|
|
@@ -11802,9 +11838,9 @@ function createMultiAccountTypeUserState(payload, lenderData, histData) {
|
|
|
11802
11838
|
} = lenderData[marketUid];
|
|
11803
11839
|
deposits += depositsUSD;
|
|
11804
11840
|
debt += debtUSD;
|
|
11805
|
-
|
|
11841
|
+
(rewards ?? []).forEach((rewardData) => {
|
|
11806
11842
|
rewardDepositAccrual += rewardData.depositRate * depositsUSD;
|
|
11807
|
-
rewardBorrowAccrual += rewardData.variableBorrowRate * debtUSD + rewardData.stableBorrowRate * debtUSD;
|
|
11843
|
+
rewardBorrowAccrual += rewardData.variableBorrowRate * debtUSD + (rewardData.stableBorrowRate ?? 0) * debtUSD;
|
|
11808
11844
|
});
|
|
11809
11845
|
stakingDepositAccrual += (intrinsicYield ?? 0) * depositsUSD;
|
|
11810
11846
|
stakingBorrowAccrual += (intrinsicYield ?? 0) * debtUSD;
|
|
@@ -11984,7 +12020,15 @@ function convertMarketsToMorphoResponse(response, chainId, additionalYields = {
|
|
|
11984
12020
|
if (collateralAsset && loanAsset && oracleAddress && oracleAddress !== zeroAddress) {
|
|
11985
12021
|
const m = "MORPHO_BLUE_" + uniqueKey.slice(2).toUpperCase();
|
|
11986
12022
|
if (!data[m]) data[m] = { data: {} };
|
|
11987
|
-
const loanRewards =
|
|
12023
|
+
const loanRewards = [];
|
|
12024
|
+
state.rewards?.forEach((reward) => {
|
|
12025
|
+
loanRewards.push({
|
|
12026
|
+
asset: reward.asset.address,
|
|
12027
|
+
depositRate: reward.supplyApr * 100,
|
|
12028
|
+
variableBorrowRate: reward.borrowApr * 100,
|
|
12029
|
+
stableBorrowRate: 0
|
|
12030
|
+
});
|
|
12031
|
+
});
|
|
11988
12032
|
const loanAssetAddress = loanAsset.address.toLowerCase();
|
|
11989
12033
|
const meta = tokens[loanAssetAddress] ?? loanAsset;
|
|
11990
12034
|
const totalDeposits = formatNr(state.supplyAssets, loanAsset.decimals);
|
|
@@ -12006,8 +12050,8 @@ function convertMarketsToMorphoResponse(response, chainId, additionalYields = {
|
|
|
12006
12050
|
depositRate: apyToApr2(Number(state.supplyApy)) * 100,
|
|
12007
12051
|
variableBorrowRate: apyToApr2(Number(state.borrowApy)) * 100,
|
|
12008
12052
|
stableBorrowRate: 0,
|
|
12009
|
-
intrinsicYield: additionalYields
|
|
12010
|
-
rewards:
|
|
12053
|
+
intrinsicYield: additionalYields?.intrinsicYields?.[meta?.assetGroup] ?? 0,
|
|
12054
|
+
rewards: loanRewards.length > 0 ? loanRewards : void 0,
|
|
12011
12055
|
decimals: loanAsset.decimals,
|
|
12012
12056
|
config: {
|
|
12013
12057
|
0: {
|
|
@@ -12055,7 +12099,7 @@ function convertMarketsToMorphoResponse(response, chainId, additionalYields = {
|
|
|
12055
12099
|
depositRate: 0,
|
|
12056
12100
|
variableBorrowRate: 0,
|
|
12057
12101
|
stableBorrowRate: 0,
|
|
12058
|
-
intrinsicYield: additionalYields
|
|
12102
|
+
intrinsicYield: additionalYields?.intrinsicYields?.[metaCollateral?.assetGroup] ?? 0,
|
|
12059
12103
|
rewards: void 0,
|
|
12060
12104
|
decimals: collateralAsset.decimals,
|
|
12061
12105
|
config: {
|
|
@@ -12129,12 +12173,9 @@ query GetMarkets {
|
|
|
12129
12173
|
rewards {
|
|
12130
12174
|
asset {
|
|
12131
12175
|
address
|
|
12132
|
-
name
|
|
12133
|
-
symbol
|
|
12134
|
-
decimals
|
|
12135
12176
|
}
|
|
12136
|
-
|
|
12137
|
-
|
|
12177
|
+
supplyApr
|
|
12178
|
+
borrowApr
|
|
12138
12179
|
}
|
|
12139
12180
|
borrowAssets
|
|
12140
12181
|
borrowAssetsUsd
|
|
@@ -12633,7 +12674,7 @@ function getListaMarketDataConverter(lender, chainId, prices, additionalYields =
|
|
|
12633
12674
|
if (collateralToken && loanToken && oracle && oracle !== zeroAddress) {
|
|
12634
12675
|
const m = "LISTA_DAO_" + uniqueKey.slice(2).toUpperCase();
|
|
12635
12676
|
if (!data[m]) data[m] = { data: {} };
|
|
12636
|
-
const loanRewards =
|
|
12677
|
+
const loanRewards = [];
|
|
12637
12678
|
const loanTokenAddress = loanToken.toLowerCase();
|
|
12638
12679
|
const collateralAssetAddress = collateralToken.toLowerCase();
|
|
12639
12680
|
const loanAsset = tokens[loanTokenAddress];
|
|
@@ -12692,8 +12733,8 @@ function getListaMarketDataConverter(lender, chainId, prices, additionalYields =
|
|
|
12692
12733
|
depositRate: depositApr,
|
|
12693
12734
|
variableBorrowRate: borrowApr,
|
|
12694
12735
|
stableBorrowRate: 0,
|
|
12695
|
-
intrinsicYield: additionalYields
|
|
12696
|
-
rewards:
|
|
12736
|
+
intrinsicYield: additionalYields?.intrinsicYields?.[meta?.assetGroup] ?? 0,
|
|
12737
|
+
rewards: loanRewards.length > 0 ? loanRewards : void 0,
|
|
12697
12738
|
decimals: loanDecimals,
|
|
12698
12739
|
config: {
|
|
12699
12740
|
0: {
|
|
@@ -12731,7 +12772,7 @@ function getListaMarketDataConverter(lender, chainId, prices, additionalYields =
|
|
|
12731
12772
|
depositRate: 0,
|
|
12732
12773
|
variableBorrowRate: 0,
|
|
12733
12774
|
stableBorrowRate: 0,
|
|
12734
|
-
intrinsicYield: additionalYields
|
|
12775
|
+
intrinsicYield: additionalYields?.intrinsicYields?.[metaCollateral?.assetGroup] ?? 0,
|
|
12735
12776
|
rewards: void 0,
|
|
12736
12777
|
decimals: collateralDecimals,
|
|
12737
12778
|
config: {
|
|
@@ -12832,7 +12873,7 @@ function getMorphoMarketDataConverter(lender, chainId, prices, additionalYields
|
|
|
12832
12873
|
if (collateralToken && loanToken && oracle && collateralToken !== zeroAddress && loanToken !== zeroAddress) {
|
|
12833
12874
|
const m = "MORPHO_BLUE_" + uniqueKey.slice(2).toUpperCase();
|
|
12834
12875
|
if (!data[m]) data[m] = { data: {} };
|
|
12835
|
-
const loanRewards =
|
|
12876
|
+
const loanRewards = [];
|
|
12836
12877
|
const loanAsset = tokens[loanToken.toLowerCase()];
|
|
12837
12878
|
const collateralAsset = tokens[collateralToken.toLowerCase()];
|
|
12838
12879
|
const loanDecimals = loanAsset?.decimals ?? 18;
|
|
@@ -12893,8 +12934,8 @@ function getMorphoMarketDataConverter(lender, chainId, prices, additionalYields
|
|
|
12893
12934
|
depositRate: depositApr,
|
|
12894
12935
|
variableBorrowRate: borrowApr,
|
|
12895
12936
|
stableBorrowRate: 0,
|
|
12896
|
-
intrinsicYield: additionalYields
|
|
12897
|
-
rewards:
|
|
12937
|
+
intrinsicYield: additionalYields?.intrinsicYields?.[meta?.assetGroup] ?? 0,
|
|
12938
|
+
rewards: loanRewards.length > 0 ? loanRewards : void 0,
|
|
12898
12939
|
decimals: loanDecimals,
|
|
12899
12940
|
config: {
|
|
12900
12941
|
0: {
|
|
@@ -12915,7 +12956,11 @@ function getMorphoMarketDataConverter(lender, chainId, prices, additionalYields
|
|
|
12915
12956
|
const ltv = parseLtv(lltv);
|
|
12916
12957
|
const collateralAssetAddress = (collateralAsset?.address ?? collateralToken).toLowerCase();
|
|
12917
12958
|
const metaCollateral = tokens[collateralAssetAddress] ?? collateralAsset;
|
|
12918
|
-
const collateralMarketUid = createMarketUid(
|
|
12959
|
+
const collateralMarketUid = createMarketUid(
|
|
12960
|
+
chainId,
|
|
12961
|
+
m,
|
|
12962
|
+
collateralAssetAddress
|
|
12963
|
+
);
|
|
12919
12964
|
data[m].data[collateralMarketUid] = {
|
|
12920
12965
|
marketUid: collateralMarketUid,
|
|
12921
12966
|
poolId: collateralAssetAddress,
|
|
@@ -12933,7 +12978,7 @@ function getMorphoMarketDataConverter(lender, chainId, prices, additionalYields
|
|
|
12933
12978
|
depositRate: 0,
|
|
12934
12979
|
variableBorrowRate: 0,
|
|
12935
12980
|
stableBorrowRate: 0,
|
|
12936
|
-
intrinsicYield: additionalYields
|
|
12981
|
+
intrinsicYield: additionalYields?.intrinsicYields?.[metaCollateral?.assetGroup] ?? 0,
|
|
12937
12982
|
rewards: void 0,
|
|
12938
12983
|
decimals: collateralDecimals,
|
|
12939
12984
|
config: {
|
|
@@ -15518,7 +15563,7 @@ function convertSingleEntry(opts) {
|
|
|
15518
15563
|
totalDepositsUSD: totalSupplyUnderlying * price,
|
|
15519
15564
|
totalDebtStable: 0,
|
|
15520
15565
|
totalDebtStableUSD: 0,
|
|
15521
|
-
intrinsicYield: additionalYields
|
|
15566
|
+
intrinsicYield: additionalYields?.intrinsicYields?.[asset.assetGroup] ?? 0,
|
|
15522
15567
|
config: {
|
|
15523
15568
|
[LENDER_MODE_NO_MODE]: {
|
|
15524
15569
|
category: LENDER_MODE_NO_MODE,
|
|
@@ -15534,7 +15579,7 @@ function convertSingleEntry(opts) {
|
|
|
15534
15579
|
underlying: asset.address,
|
|
15535
15580
|
isActive: Boolean(currentEntry?.isListed) && !allPaused,
|
|
15536
15581
|
isFrozen: pausedActions[0 /* MINT */] && pausedActions[2 /* BORROW */],
|
|
15537
|
-
rewards:
|
|
15582
|
+
rewards: [],
|
|
15538
15583
|
collateralActive,
|
|
15539
15584
|
borrowingEnabled,
|
|
15540
15585
|
params: {
|
|
@@ -15617,13 +15662,13 @@ function convertSumerEntry(opts) {
|
|
|
15617
15662
|
totalDepositsUSD: totalSupplyUnderlying * price,
|
|
15618
15663
|
totalDebtStable: 0,
|
|
15619
15664
|
totalDebtStableUSD: 0,
|
|
15620
|
-
stakingYield: additionalYields
|
|
15665
|
+
stakingYield: additionalYields?.intrinsicYields?.[asset.assetGroup] ?? 0,
|
|
15621
15666
|
config,
|
|
15622
15667
|
hasStable: false,
|
|
15623
15668
|
underlying: asset.address,
|
|
15624
15669
|
isActive: Boolean(currentEntry.isListed),
|
|
15625
15670
|
isFrozen: false,
|
|
15626
|
-
rewards:
|
|
15671
|
+
rewards: [],
|
|
15627
15672
|
collateralActive,
|
|
15628
15673
|
borrowingEnabled,
|
|
15629
15674
|
params: {
|
|
@@ -15678,7 +15723,7 @@ function convertTakaraEntry(opts) {
|
|
|
15678
15723
|
totalDepositsUSD: totalSupplyUSD,
|
|
15679
15724
|
totalDebtStable: 0,
|
|
15680
15725
|
totalDebtStableUSD: 0,
|
|
15681
|
-
intrinsicYield: additionalYields
|
|
15726
|
+
intrinsicYield: additionalYields?.intrinsicYields?.[asset.assetGroup] ?? 0,
|
|
15682
15727
|
config: {
|
|
15683
15728
|
[LENDER_MODE_NO_MODE]: {
|
|
15684
15729
|
category: LENDER_MODE_NO_MODE,
|
|
@@ -15693,7 +15738,7 @@ function convertTakaraEntry(opts) {
|
|
|
15693
15738
|
underlying: asset.address,
|
|
15694
15739
|
isActive: info.isListed,
|
|
15695
15740
|
isFrozen: false,
|
|
15696
|
-
rewards:
|
|
15741
|
+
rewards: [],
|
|
15697
15742
|
collateralActive: info.isListed,
|
|
15698
15743
|
borrowingEnabled: info.isListed,
|
|
15699
15744
|
params: {
|
|
@@ -15741,7 +15786,7 @@ function convertTectonicEntry(opts) {
|
|
|
15741
15786
|
totalDepositsUSD: totalSupplyUnderlying * price,
|
|
15742
15787
|
totalDebtStable: 0,
|
|
15743
15788
|
totalDebtStableUSD: 0,
|
|
15744
|
-
intrinsicYield: additionalYields
|
|
15789
|
+
intrinsicYield: additionalYields?.intrinsicYields?.[asset.assetGroup] ?? 0,
|
|
15745
15790
|
config: {
|
|
15746
15791
|
[LENDER_MODE_NO_MODE]: {
|
|
15747
15792
|
category: LENDER_MODE_NO_MODE,
|
|
@@ -15756,7 +15801,7 @@ function convertTectonicEntry(opts) {
|
|
|
15756
15801
|
underlying: asset.address,
|
|
15757
15802
|
isActive: info.asCollateralEnabled,
|
|
15758
15803
|
isFrozen: false,
|
|
15759
|
-
rewards:
|
|
15804
|
+
rewards: [],
|
|
15760
15805
|
collateralActive: info.asCollateralEnabled,
|
|
15761
15806
|
borrowingEnabled: info.asCollateralEnabled,
|
|
15762
15807
|
params: {
|
|
@@ -15903,7 +15948,7 @@ function convertBenqiEntry(opts) {
|
|
|
15903
15948
|
totalDepositsUSD: totalDeposits * price,
|
|
15904
15949
|
totalDebtStable: 0,
|
|
15905
15950
|
totalDebtStableUSD: 0,
|
|
15906
|
-
intrinsicYield: additionalYields
|
|
15951
|
+
intrinsicYield: additionalYields?.intrinsicYields?.[asset.assetGroup] ?? 0,
|
|
15907
15952
|
config: {
|
|
15908
15953
|
[LENDER_MODE_NO_MODE]: {
|
|
15909
15954
|
category: LENDER_MODE_NO_MODE,
|
|
@@ -15918,7 +15963,7 @@ function convertBenqiEntry(opts) {
|
|
|
15918
15963
|
underlying: asset.address,
|
|
15919
15964
|
isActive: !parsed.mintPaused || !parsed.borrowPaused,
|
|
15920
15965
|
isFrozen: parsed.mintPaused && parsed.borrowPaused,
|
|
15921
|
-
rewards:
|
|
15966
|
+
rewards: [],
|
|
15922
15967
|
collateralActive,
|
|
15923
15968
|
borrowingEnabled,
|
|
15924
15969
|
params: {
|
|
@@ -17042,6 +17087,634 @@ var VenusLensAbi = [
|
|
|
17042
17087
|
}
|
|
17043
17088
|
];
|
|
17044
17089
|
|
|
17090
|
+
// src/abis/euler/vaultLens.ts
|
|
17091
|
+
var vaultLensAbi = [
|
|
17092
|
+
{
|
|
17093
|
+
type: "function",
|
|
17094
|
+
name: "getVaultInfoFull",
|
|
17095
|
+
inputs: [{ name: "vault", type: "address" }],
|
|
17096
|
+
outputs: [
|
|
17097
|
+
{
|
|
17098
|
+
name: "",
|
|
17099
|
+
type: "tuple",
|
|
17100
|
+
components: [
|
|
17101
|
+
{ name: "timestamp", type: "uint256" },
|
|
17102
|
+
{ name: "vault", type: "address" },
|
|
17103
|
+
{ name: "vaultName", type: "string" },
|
|
17104
|
+
{ name: "vaultSymbol", type: "string" },
|
|
17105
|
+
{ name: "vaultDecimals", type: "uint256" },
|
|
17106
|
+
{ name: "asset", type: "address" },
|
|
17107
|
+
{ name: "assetName", type: "string" },
|
|
17108
|
+
{ name: "assetSymbol", type: "string" },
|
|
17109
|
+
{ name: "assetDecimals", type: "uint256" },
|
|
17110
|
+
{ name: "unitOfAccount", type: "address" },
|
|
17111
|
+
{ name: "unitOfAccountName", type: "string" },
|
|
17112
|
+
{ name: "unitOfAccountSymbol", type: "string" },
|
|
17113
|
+
{ name: "unitOfAccountDecimals", type: "uint256" },
|
|
17114
|
+
{ name: "totalShares", type: "uint256" },
|
|
17115
|
+
{ name: "totalCash", type: "uint256" },
|
|
17116
|
+
{ name: "totalBorrowed", type: "uint256" },
|
|
17117
|
+
{ name: "totalAssets", type: "uint256" },
|
|
17118
|
+
{ name: "accumulatedFeesShares", type: "uint256" },
|
|
17119
|
+
{ name: "accumulatedFeesAssets", type: "uint256" },
|
|
17120
|
+
{ name: "governorFeeReceiver", type: "address" },
|
|
17121
|
+
{ name: "protocolFeeReceiver", type: "address" },
|
|
17122
|
+
{ name: "protocolFeeShare", type: "uint256" },
|
|
17123
|
+
{ name: "interestFee", type: "uint256" },
|
|
17124
|
+
{ name: "hookedOperations", type: "uint256" },
|
|
17125
|
+
{ name: "configFlags", type: "uint256" },
|
|
17126
|
+
{ name: "supplyCap", type: "uint256" },
|
|
17127
|
+
{ name: "borrowCap", type: "uint256" },
|
|
17128
|
+
{ name: "maxLiquidationDiscount", type: "uint256" },
|
|
17129
|
+
{ name: "liquidationCoolOffTime", type: "uint256" },
|
|
17130
|
+
{ name: "dToken", type: "address" },
|
|
17131
|
+
{ name: "oracle", type: "address" },
|
|
17132
|
+
{ name: "interestRateModel", type: "address" },
|
|
17133
|
+
{ name: "hookTarget", type: "address" },
|
|
17134
|
+
{ name: "evc", type: "address" },
|
|
17135
|
+
{ name: "protocolConfig", type: "address" },
|
|
17136
|
+
{ name: "balanceTracker", type: "address" },
|
|
17137
|
+
{ name: "permit2", type: "address" },
|
|
17138
|
+
{ name: "creator", type: "address" },
|
|
17139
|
+
{ name: "governorAdmin", type: "address" },
|
|
17140
|
+
// irmInfo: VaultInterestRateModelInfo
|
|
17141
|
+
{
|
|
17142
|
+
name: "irmInfo",
|
|
17143
|
+
type: "tuple",
|
|
17144
|
+
components: [
|
|
17145
|
+
{ name: "queryFailure", type: "bool" },
|
|
17146
|
+
{ name: "queryFailureReason", type: "bytes" },
|
|
17147
|
+
{ name: "vault", type: "address" },
|
|
17148
|
+
{ name: "interestRateModel", type: "address" },
|
|
17149
|
+
{
|
|
17150
|
+
name: "interestRateInfo",
|
|
17151
|
+
type: "tuple[]",
|
|
17152
|
+
components: [
|
|
17153
|
+
{ name: "cash", type: "uint256" },
|
|
17154
|
+
{ name: "borrows", type: "uint256" },
|
|
17155
|
+
{ name: "borrowSPY", type: "uint256" },
|
|
17156
|
+
{ name: "borrowAPY", type: "uint256" },
|
|
17157
|
+
{ name: "supplyAPY", type: "uint256" }
|
|
17158
|
+
]
|
|
17159
|
+
},
|
|
17160
|
+
{
|
|
17161
|
+
name: "interestRateModelInfo",
|
|
17162
|
+
type: "tuple",
|
|
17163
|
+
components: [
|
|
17164
|
+
{ name: "interestRateModel", type: "address" },
|
|
17165
|
+
{ name: "interestRateModelType", type: "uint8" },
|
|
17166
|
+
{ name: "interestRateModelParams", type: "bytes" }
|
|
17167
|
+
]
|
|
17168
|
+
}
|
|
17169
|
+
]
|
|
17170
|
+
},
|
|
17171
|
+
// collateralLTVInfo: LTVInfo[]
|
|
17172
|
+
{
|
|
17173
|
+
name: "collateralLTVInfo",
|
|
17174
|
+
type: "tuple[]",
|
|
17175
|
+
components: [
|
|
17176
|
+
{ name: "collateral", type: "address" },
|
|
17177
|
+
{ name: "borrowLTV", type: "uint256" },
|
|
17178
|
+
{ name: "liquidationLTV", type: "uint256" },
|
|
17179
|
+
{ name: "initialLiquidationLTV", type: "uint256" },
|
|
17180
|
+
{ name: "targetTimestamp", type: "uint256" },
|
|
17181
|
+
{ name: "rampDuration", type: "uint256" }
|
|
17182
|
+
]
|
|
17183
|
+
},
|
|
17184
|
+
// liabilityPriceInfo: AssetPriceInfo
|
|
17185
|
+
{
|
|
17186
|
+
name: "liabilityPriceInfo",
|
|
17187
|
+
type: "tuple",
|
|
17188
|
+
components: [
|
|
17189
|
+
{ name: "queryFailure", type: "bool" },
|
|
17190
|
+
{ name: "queryFailureReason", type: "bytes" },
|
|
17191
|
+
{ name: "timestamp", type: "uint256" },
|
|
17192
|
+
{ name: "oracle", type: "address" },
|
|
17193
|
+
{ name: "asset", type: "address" },
|
|
17194
|
+
{ name: "unitOfAccount", type: "address" },
|
|
17195
|
+
{ name: "amountIn", type: "uint256" },
|
|
17196
|
+
{ name: "amountOutMid", type: "uint256" },
|
|
17197
|
+
{ name: "amountOutBid", type: "uint256" },
|
|
17198
|
+
{ name: "amountOutAsk", type: "uint256" }
|
|
17199
|
+
]
|
|
17200
|
+
},
|
|
17201
|
+
// collateralPriceInfo: AssetPriceInfo[]
|
|
17202
|
+
{
|
|
17203
|
+
name: "collateralPriceInfo",
|
|
17204
|
+
type: "tuple[]",
|
|
17205
|
+
components: [
|
|
17206
|
+
{ name: "queryFailure", type: "bool" },
|
|
17207
|
+
{ name: "queryFailureReason", type: "bytes" },
|
|
17208
|
+
{ name: "timestamp", type: "uint256" },
|
|
17209
|
+
{ name: "oracle", type: "address" },
|
|
17210
|
+
{ name: "asset", type: "address" },
|
|
17211
|
+
{ name: "unitOfAccount", type: "address" },
|
|
17212
|
+
{ name: "amountIn", type: "uint256" },
|
|
17213
|
+
{ name: "amountOutMid", type: "uint256" },
|
|
17214
|
+
{ name: "amountOutBid", type: "uint256" },
|
|
17215
|
+
{ name: "amountOutAsk", type: "uint256" }
|
|
17216
|
+
]
|
|
17217
|
+
},
|
|
17218
|
+
// oracleInfo: OracleDetailedInfo
|
|
17219
|
+
{
|
|
17220
|
+
name: "oracleInfo",
|
|
17221
|
+
type: "tuple",
|
|
17222
|
+
components: [
|
|
17223
|
+
{ name: "oracle", type: "address" },
|
|
17224
|
+
{ name: "name", type: "string" },
|
|
17225
|
+
{ name: "oracleInfo", type: "bytes" }
|
|
17226
|
+
]
|
|
17227
|
+
},
|
|
17228
|
+
// backupAssetPriceInfo: AssetPriceInfo
|
|
17229
|
+
{
|
|
17230
|
+
name: "backupAssetPriceInfo",
|
|
17231
|
+
type: "tuple",
|
|
17232
|
+
components: [
|
|
17233
|
+
{ name: "queryFailure", type: "bool" },
|
|
17234
|
+
{ name: "queryFailureReason", type: "bytes" },
|
|
17235
|
+
{ name: "timestamp", type: "uint256" },
|
|
17236
|
+
{ name: "oracle", type: "address" },
|
|
17237
|
+
{ name: "asset", type: "address" },
|
|
17238
|
+
{ name: "unitOfAccount", type: "address" },
|
|
17239
|
+
{ name: "amountIn", type: "uint256" },
|
|
17240
|
+
{ name: "amountOutMid", type: "uint256" },
|
|
17241
|
+
{ name: "amountOutBid", type: "uint256" },
|
|
17242
|
+
{ name: "amountOutAsk", type: "uint256" }
|
|
17243
|
+
]
|
|
17244
|
+
},
|
|
17245
|
+
// backupAssetOracleInfo: OracleDetailedInfo
|
|
17246
|
+
{
|
|
17247
|
+
name: "backupAssetOracleInfo",
|
|
17248
|
+
type: "tuple",
|
|
17249
|
+
components: [
|
|
17250
|
+
{ name: "oracle", type: "address" },
|
|
17251
|
+
{ name: "name", type: "string" },
|
|
17252
|
+
{ name: "oracleInfo", type: "bytes" }
|
|
17253
|
+
]
|
|
17254
|
+
}
|
|
17255
|
+
]
|
|
17256
|
+
}
|
|
17257
|
+
],
|
|
17258
|
+
stateMutability: "view"
|
|
17259
|
+
}
|
|
17260
|
+
];
|
|
17261
|
+
|
|
17262
|
+
// src/lending/public-data/euler/publicCallBuild.ts
|
|
17263
|
+
var buildEulerV2LenderReserveCall = (chainId, lender) => {
|
|
17264
|
+
if (!ENABLED_EULER_V2_CHAINS.includes(chainId)) return [];
|
|
17265
|
+
const config = eulerConfigs()?.[lender]?.[chainId];
|
|
17266
|
+
const vaults = eulerVaults()?.[lender]?.[chainId] ?? [];
|
|
17267
|
+
if (!config || vaults.length === 0) return [];
|
|
17268
|
+
return vaults.map((vault) => ({
|
|
17269
|
+
address: config.vaultLens,
|
|
17270
|
+
name: "getVaultInfoFull",
|
|
17271
|
+
params: [vault],
|
|
17272
|
+
abi: vaultLensAbi
|
|
17273
|
+
}));
|
|
17274
|
+
};
|
|
17275
|
+
|
|
17276
|
+
// src/lending/public-data/euler/fetcher/constants.ts
|
|
17277
|
+
var ZERO_ADDRESS = "0x0000000000000000000000000000000000000000";
|
|
17278
|
+
|
|
17279
|
+
// src/lending/public-data/euler/fetcher/cluster.ts
|
|
17280
|
+
function getActiveCollaterals(ltvInfo) {
|
|
17281
|
+
const active = /* @__PURE__ */ new Set();
|
|
17282
|
+
for (const entry of ltvInfo) {
|
|
17283
|
+
if (entry.borrowLTV > 0n) {
|
|
17284
|
+
active.add(entry.collateral.toLowerCase());
|
|
17285
|
+
}
|
|
17286
|
+
}
|
|
17287
|
+
return active;
|
|
17288
|
+
}
|
|
17289
|
+
function findVaultInfo(normalizedAddr, vaultData) {
|
|
17290
|
+
for (const [key, value] of vaultData) {
|
|
17291
|
+
if (key.toLowerCase() === normalizedAddr) return value;
|
|
17292
|
+
}
|
|
17293
|
+
return void 0;
|
|
17294
|
+
}
|
|
17295
|
+
function buildAdjacencyList(vaultData) {
|
|
17296
|
+
const adj = /* @__PURE__ */ new Map();
|
|
17297
|
+
const knownVaults = /* @__PURE__ */ new Set();
|
|
17298
|
+
for (const addr of vaultData.keys()) {
|
|
17299
|
+
const norm = addr.toLowerCase();
|
|
17300
|
+
knownVaults.add(norm);
|
|
17301
|
+
adj.set(norm, /* @__PURE__ */ new Set());
|
|
17302
|
+
}
|
|
17303
|
+
for (const [addr, info] of vaultData) {
|
|
17304
|
+
const from = addr.toLowerCase();
|
|
17305
|
+
const activeCollaterals = getActiveCollaterals(info.collateralLTVInfo);
|
|
17306
|
+
for (const to of activeCollaterals) {
|
|
17307
|
+
if (knownVaults.has(to) && from !== to) {
|
|
17308
|
+
adj.get(from).add(to);
|
|
17309
|
+
adj.get(to).add(from);
|
|
17310
|
+
}
|
|
17311
|
+
}
|
|
17312
|
+
}
|
|
17313
|
+
return adj;
|
|
17314
|
+
}
|
|
17315
|
+
function bfs(start, adj, visited) {
|
|
17316
|
+
const component = [];
|
|
17317
|
+
const queue = [start];
|
|
17318
|
+
visited.add(start);
|
|
17319
|
+
while (queue.length > 0) {
|
|
17320
|
+
const current = queue.shift();
|
|
17321
|
+
component.push(current);
|
|
17322
|
+
const neighbors = adj.get(current);
|
|
17323
|
+
if (!neighbors) continue;
|
|
17324
|
+
for (const neighbor of neighbors) {
|
|
17325
|
+
if (!visited.has(neighbor)) {
|
|
17326
|
+
visited.add(neighbor);
|
|
17327
|
+
queue.push(neighbor);
|
|
17328
|
+
}
|
|
17329
|
+
}
|
|
17330
|
+
}
|
|
17331
|
+
return component;
|
|
17332
|
+
}
|
|
17333
|
+
function findConnectedComponents(adj) {
|
|
17334
|
+
const visited = /* @__PURE__ */ new Set();
|
|
17335
|
+
const components = [];
|
|
17336
|
+
for (const vault of adj.keys()) {
|
|
17337
|
+
if (!visited.has(vault)) {
|
|
17338
|
+
const component = bfs(vault, adj, visited);
|
|
17339
|
+
components.push(component);
|
|
17340
|
+
}
|
|
17341
|
+
}
|
|
17342
|
+
return components;
|
|
17343
|
+
}
|
|
17344
|
+
function deriveGovernor(vaultAddresses, vaultData) {
|
|
17345
|
+
const counts = /* @__PURE__ */ new Map();
|
|
17346
|
+
const zeroNorm = ZERO_ADDRESS.toLowerCase();
|
|
17347
|
+
for (const addr of vaultAddresses) {
|
|
17348
|
+
const info = findVaultInfo(addr, vaultData);
|
|
17349
|
+
if (!info) continue;
|
|
17350
|
+
const gov = info.governorAdmin.toLowerCase();
|
|
17351
|
+
if (gov === zeroNorm) continue;
|
|
17352
|
+
counts.set(gov, (counts.get(gov) ?? 0) + 1);
|
|
17353
|
+
}
|
|
17354
|
+
let best = ZERO_ADDRESS;
|
|
17355
|
+
let bestCount = 0;
|
|
17356
|
+
for (const [gov, count] of counts) {
|
|
17357
|
+
if (count > bestCount) {
|
|
17358
|
+
best = gov;
|
|
17359
|
+
bestCount = count;
|
|
17360
|
+
}
|
|
17361
|
+
}
|
|
17362
|
+
return best;
|
|
17363
|
+
}
|
|
17364
|
+
function deriveClusters(vaultData, includeSingletons = false) {
|
|
17365
|
+
if (vaultData.size === 0) return [];
|
|
17366
|
+
const adj = buildAdjacencyList(vaultData);
|
|
17367
|
+
const components = findConnectedComponents(adj);
|
|
17368
|
+
const clusters = [];
|
|
17369
|
+
for (const component of components) {
|
|
17370
|
+
if (!includeSingletons && component.length < 2) continue;
|
|
17371
|
+
if (!includeSingletons) {
|
|
17372
|
+
let hasActiveEdge = false;
|
|
17373
|
+
for (const addr of component) {
|
|
17374
|
+
const neighbors = adj.get(addr);
|
|
17375
|
+
if (neighbors && neighbors.size > 0) {
|
|
17376
|
+
hasActiveEdge = true;
|
|
17377
|
+
break;
|
|
17378
|
+
}
|
|
17379
|
+
}
|
|
17380
|
+
if (!hasActiveEdge) continue;
|
|
17381
|
+
}
|
|
17382
|
+
const clusterVaultData = /* @__PURE__ */ new Map();
|
|
17383
|
+
for (const addr of component) {
|
|
17384
|
+
const info = findVaultInfo(addr, vaultData);
|
|
17385
|
+
if (info) clusterVaultData.set(addr, info);
|
|
17386
|
+
}
|
|
17387
|
+
clusters.push({
|
|
17388
|
+
governor: deriveGovernor(component, vaultData),
|
|
17389
|
+
vaults: component,
|
|
17390
|
+
vaultData: clusterVaultData
|
|
17391
|
+
});
|
|
17392
|
+
}
|
|
17393
|
+
return clusters;
|
|
17394
|
+
}
|
|
17395
|
+
|
|
17396
|
+
// src/lending/public-data/euler/fetcher/normalize.ts
|
|
17397
|
+
var LTV_SCALE = 10000n;
|
|
17398
|
+
function ltvToNumber(ltv) {
|
|
17399
|
+
return Number(ltv) / Number(LTV_SCALE);
|
|
17400
|
+
}
|
|
17401
|
+
var RAY = 10n ** 27n;
|
|
17402
|
+
function rayToNumber(ray) {
|
|
17403
|
+
return Number(ray) / Number(RAY);
|
|
17404
|
+
}
|
|
17405
|
+
function toTokenAmount(raw, decimals) {
|
|
17406
|
+
return Number(raw) / 10 ** Number(decimals);
|
|
17407
|
+
}
|
|
17408
|
+
function identifyBorrowVaults(cluster) {
|
|
17409
|
+
const borrowVaults = /* @__PURE__ */ new Set();
|
|
17410
|
+
for (const [addr, info] of cluster.vaultData) {
|
|
17411
|
+
const hasIRM = info.interestRateModel.toLowerCase() !== ZERO_ADDRESS.toLowerCase();
|
|
17412
|
+
const hasActiveCollateral = info.collateralLTVInfo.some(
|
|
17413
|
+
(ltv) => ltv.borrowLTV > 0n
|
|
17414
|
+
);
|
|
17415
|
+
if (hasIRM && hasActiveCollateral) {
|
|
17416
|
+
borrowVaults.add(addr.toLowerCase());
|
|
17417
|
+
}
|
|
17418
|
+
}
|
|
17419
|
+
return borrowVaults;
|
|
17420
|
+
}
|
|
17421
|
+
function buildReverseLTVIndex(cluster) {
|
|
17422
|
+
const index = /* @__PURE__ */ new Map();
|
|
17423
|
+
for (const [addr, info] of cluster.vaultData) {
|
|
17424
|
+
const borrowVault = addr.toLowerCase();
|
|
17425
|
+
for (const ltv of info.collateralLTVInfo) {
|
|
17426
|
+
if (ltv.borrowLTV <= 0n) continue;
|
|
17427
|
+
const collateral = ltv.collateral.toLowerCase();
|
|
17428
|
+
let entries = index.get(collateral);
|
|
17429
|
+
if (!entries) {
|
|
17430
|
+
entries = [];
|
|
17431
|
+
index.set(collateral, entries);
|
|
17432
|
+
}
|
|
17433
|
+
entries.push({ borrowVault, ltv });
|
|
17434
|
+
}
|
|
17435
|
+
}
|
|
17436
|
+
return index;
|
|
17437
|
+
}
|
|
17438
|
+
function buildForwardLTVIndex(cluster) {
|
|
17439
|
+
const index = /* @__PURE__ */ new Map();
|
|
17440
|
+
for (const [addr, info] of cluster.vaultData) {
|
|
17441
|
+
const borrowVault = addr.toLowerCase();
|
|
17442
|
+
const entries = [];
|
|
17443
|
+
for (const ltv of info.collateralLTVInfo) {
|
|
17444
|
+
if (ltv.borrowLTV <= 0n) continue;
|
|
17445
|
+
entries.push({
|
|
17446
|
+
collateralVault: ltv.collateral.toLowerCase(),
|
|
17447
|
+
ltv
|
|
17448
|
+
});
|
|
17449
|
+
}
|
|
17450
|
+
if (entries.length > 0) {
|
|
17451
|
+
index.set(borrowVault, entries);
|
|
17452
|
+
}
|
|
17453
|
+
}
|
|
17454
|
+
return index;
|
|
17455
|
+
}
|
|
17456
|
+
function buildTokenConfig(vaultAddr, reverseLTV, forwardLTV, borrowVaults, clusterVaults) {
|
|
17457
|
+
const config = {};
|
|
17458
|
+
const reverseEntries = reverseLTV.get(vaultAddr) ?? [];
|
|
17459
|
+
for (const { borrowVault, ltv } of reverseEntries) {
|
|
17460
|
+
if (!borrowVaults.has(borrowVault)) continue;
|
|
17461
|
+
config[borrowVault] = {
|
|
17462
|
+
category: borrowVault,
|
|
17463
|
+
borrowCollateralFactor: ltvToNumber(ltv.borrowLTV),
|
|
17464
|
+
collateralFactor: ltvToNumber(ltv.liquidationLTV),
|
|
17465
|
+
borrowFactor: 1
|
|
17466
|
+
};
|
|
17467
|
+
}
|
|
17468
|
+
if (borrowVaults.has(vaultAddr)) {
|
|
17469
|
+
const forwardEntries = forwardLTV.get(vaultAddr) ?? [];
|
|
17470
|
+
for (const { collateralVault } of forwardEntries) {
|
|
17471
|
+
if (!clusterVaults.has(collateralVault)) continue;
|
|
17472
|
+
if (config[collateralVault]) continue;
|
|
17473
|
+
config[collateralVault] = {
|
|
17474
|
+
category: collateralVault,
|
|
17475
|
+
borrowCollateralFactor: 0,
|
|
17476
|
+
collateralFactor: 0,
|
|
17477
|
+
borrowFactor: 1
|
|
17478
|
+
};
|
|
17479
|
+
}
|
|
17480
|
+
}
|
|
17481
|
+
return config;
|
|
17482
|
+
}
|
|
17483
|
+
function buildEModes(borrowVaults, cluster) {
|
|
17484
|
+
const eModes = {};
|
|
17485
|
+
for (const addr of borrowVaults) {
|
|
17486
|
+
const info = findInfo(addr, cluster.vaultData);
|
|
17487
|
+
if (!info) continue;
|
|
17488
|
+
const activeLTVs = info.collateralLTVInfo.filter(
|
|
17489
|
+
(l) => l.borrowLTV > 0n
|
|
17490
|
+
);
|
|
17491
|
+
const avgBorrowLTV = activeLTVs.length > 0 ? activeLTVs.reduce((sum, l) => sum + ltvToNumber(l.borrowLTV), 0) / activeLTVs.length : 0;
|
|
17492
|
+
const avgLiqLTV = activeLTVs.length > 0 ? activeLTVs.reduce(
|
|
17493
|
+
(sum, l) => sum + ltvToNumber(l.liquidationLTV),
|
|
17494
|
+
0
|
|
17495
|
+
) / activeLTVs.length : 0;
|
|
17496
|
+
eModes[addr] = {
|
|
17497
|
+
category: addr,
|
|
17498
|
+
label: `${info.assetSymbol} Borrow (${info.vaultSymbol})`,
|
|
17499
|
+
borrowCollateralFactor: avgBorrowLTV,
|
|
17500
|
+
collateralFactor: avgLiqLTV,
|
|
17501
|
+
priceSource: info.oracle
|
|
17502
|
+
};
|
|
17503
|
+
}
|
|
17504
|
+
return eModes;
|
|
17505
|
+
}
|
|
17506
|
+
function buildMetadata(info) {
|
|
17507
|
+
return {
|
|
17508
|
+
vault: info.vault.toLowerCase(),
|
|
17509
|
+
dToken: info.dToken.toLowerCase(),
|
|
17510
|
+
oracle: info.oracle.toLowerCase(),
|
|
17511
|
+
interestRateModel: info.interestRateModel.toLowerCase(),
|
|
17512
|
+
unitOfAccount: info.unitOfAccount.toLowerCase(),
|
|
17513
|
+
evc: info.evc.toLowerCase(),
|
|
17514
|
+
governorAdmin: info.governorAdmin.toLowerCase()
|
|
17515
|
+
};
|
|
17516
|
+
}
|
|
17517
|
+
function buildTokenEntry(info, config, collateralActive, borrowVaults, opts) {
|
|
17518
|
+
const addr = info.asset.toLowerCase();
|
|
17519
|
+
const tokenMeta = opts.tokenList?.[addr];
|
|
17520
|
+
const asset = {
|
|
17521
|
+
chainId: opts.chainId,
|
|
17522
|
+
address: addr,
|
|
17523
|
+
name: tokenMeta?.name ?? info.assetName,
|
|
17524
|
+
symbol: tokenMeta?.symbol ?? info.assetSymbol,
|
|
17525
|
+
decimals: tokenMeta?.decimals ?? Number(info.assetDecimals)
|
|
17526
|
+
};
|
|
17527
|
+
const irmData = info.irmInfo.interestRateInfo;
|
|
17528
|
+
const currentRate = irmData.length > 0 ? irmData[irmData.length - 1] : null;
|
|
17529
|
+
const depositRate = currentRate ? rayToNumber(currentRate.supplyAPY) : 0;
|
|
17530
|
+
const variableBorrowRate = currentRate ? rayToNumber(currentRate.borrowAPY) : 0;
|
|
17531
|
+
const totalDeposits = toTokenAmount(info.totalAssets, info.assetDecimals);
|
|
17532
|
+
const totalDebt = toTokenAmount(info.totalBorrowed, info.assetDecimals);
|
|
17533
|
+
const priceInfo = info.liabilityPriceInfo;
|
|
17534
|
+
const hasPrice = !priceInfo.queryFailure && priceInfo.amountOutMid > 0n;
|
|
17535
|
+
const pricePerUnit = hasPrice ? Number(priceInfo.amountOutMid) / Number(10n ** info.unitOfAccountDecimals) : 0;
|
|
17536
|
+
const vaultAddrNorm = info.vault.toLowerCase();
|
|
17537
|
+
const isBorrowVault = borrowVaults.has(vaultAddrNorm);
|
|
17538
|
+
const selfEMode = isBorrowVault ? {
|
|
17539
|
+
label: `${info.assetSymbol} Borrow`,
|
|
17540
|
+
category: vaultAddrNorm,
|
|
17541
|
+
borrowCollateralFactor: 0,
|
|
17542
|
+
collateralFactor: 0,
|
|
17543
|
+
priceSource: info.oracle
|
|
17544
|
+
} : {
|
|
17545
|
+
label: "None",
|
|
17546
|
+
category: ZERO_ADDRESS,
|
|
17547
|
+
borrowCollateralFactor: 0,
|
|
17548
|
+
collateralFactor: 0,
|
|
17549
|
+
priceSource: ZERO_ADDRESS
|
|
17550
|
+
};
|
|
17551
|
+
return {
|
|
17552
|
+
vaultName: info.vaultName,
|
|
17553
|
+
asset,
|
|
17554
|
+
totalDeposits,
|
|
17555
|
+
totalDebtStable: 0,
|
|
17556
|
+
totalDebt,
|
|
17557
|
+
totalDepositsUSD: totalDeposits * pricePerUnit,
|
|
17558
|
+
totalDebtStableUSD: 0,
|
|
17559
|
+
totalDebtUSD: totalDebt * pricePerUnit,
|
|
17560
|
+
depositRate,
|
|
17561
|
+
variableBorrowRate,
|
|
17562
|
+
stableBorrowRate: 0,
|
|
17563
|
+
averageStableBorrowRate: 0,
|
|
17564
|
+
liquidityIndex: "0",
|
|
17565
|
+
variableBorrowIndex: "0",
|
|
17566
|
+
lastUpdateTimestamp: Number(info.timestamp),
|
|
17567
|
+
config,
|
|
17568
|
+
collateralActive,
|
|
17569
|
+
borrowingEnabled: isBorrowVault,
|
|
17570
|
+
hasStable: false,
|
|
17571
|
+
isActive: true,
|
|
17572
|
+
isFrozen: false,
|
|
17573
|
+
borrowCap: toTokenAmount(info.borrowCap, info.assetDecimals),
|
|
17574
|
+
supplyCap: toTokenAmount(info.supplyCap, info.assetDecimals),
|
|
17575
|
+
debtCeiling: 0,
|
|
17576
|
+
eMode: selfEMode,
|
|
17577
|
+
decimals: Number(info.assetDecimals),
|
|
17578
|
+
params: { metadata: buildMetadata(info) }
|
|
17579
|
+
};
|
|
17580
|
+
}
|
|
17581
|
+
function findInfo(addr, vaultData) {
|
|
17582
|
+
for (const [key, value] of vaultData) {
|
|
17583
|
+
if (key.toLowerCase() === addr) return value;
|
|
17584
|
+
}
|
|
17585
|
+
return void 0;
|
|
17586
|
+
}
|
|
17587
|
+
function normalizeCluster(cluster, opts) {
|
|
17588
|
+
const borrowVaults = identifyBorrowVaults(cluster);
|
|
17589
|
+
const reverseLTV = buildReverseLTVIndex(cluster);
|
|
17590
|
+
const forwardLTV = buildForwardLTVIndex(cluster);
|
|
17591
|
+
const clusterVaults = new Set(
|
|
17592
|
+
[...cluster.vaultData.keys()].map((a) => a.toLowerCase())
|
|
17593
|
+
);
|
|
17594
|
+
const collateralActiveVaults = /* @__PURE__ */ new Set();
|
|
17595
|
+
for (const [collateral, entries] of reverseLTV) {
|
|
17596
|
+
if (entries.some((e) => borrowVaults.has(e.borrowVault))) {
|
|
17597
|
+
collateralActiveVaults.add(collateral);
|
|
17598
|
+
}
|
|
17599
|
+
}
|
|
17600
|
+
const eModes = buildEModes(borrowVaults, cluster);
|
|
17601
|
+
const data = {};
|
|
17602
|
+
for (const [addr, info] of cluster.vaultData) {
|
|
17603
|
+
const norm = addr.toLowerCase();
|
|
17604
|
+
const config = buildTokenConfig(
|
|
17605
|
+
norm,
|
|
17606
|
+
reverseLTV,
|
|
17607
|
+
forwardLTV,
|
|
17608
|
+
borrowVaults,
|
|
17609
|
+
clusterVaults
|
|
17610
|
+
);
|
|
17611
|
+
data[norm] = buildTokenEntry(
|
|
17612
|
+
info,
|
|
17613
|
+
config,
|
|
17614
|
+
collateralActiveVaults.has(norm),
|
|
17615
|
+
borrowVaults,
|
|
17616
|
+
opts
|
|
17617
|
+
);
|
|
17618
|
+
}
|
|
17619
|
+
return {
|
|
17620
|
+
data,
|
|
17621
|
+
chainId: opts.chainId,
|
|
17622
|
+
eModes
|
|
17623
|
+
};
|
|
17624
|
+
}
|
|
17625
|
+
|
|
17626
|
+
// src/lending/public-data/euler/publicCallParse.ts
|
|
17627
|
+
var getEulerV2ReservesDataConverter = (lender, chainId, prices, additionalYields, tokenList = {}) => {
|
|
17628
|
+
const vaultAddresses = eulerVaults()?.[lender]?.[chainId] ?? [];
|
|
17629
|
+
const expectedNumberOfCalls = vaultAddresses.length;
|
|
17630
|
+
return [
|
|
17631
|
+
(data) => {
|
|
17632
|
+
if (data.length !== expectedNumberOfCalls) {
|
|
17633
|
+
return void 0;
|
|
17634
|
+
}
|
|
17635
|
+
const vaultDataMap = /* @__PURE__ */ new Map();
|
|
17636
|
+
for (let i = 0; i < vaultAddresses.length; i++) {
|
|
17637
|
+
const result = data[i];
|
|
17638
|
+
if (result) {
|
|
17639
|
+
vaultDataMap.set(vaultAddresses[i].toLowerCase(), result);
|
|
17640
|
+
}
|
|
17641
|
+
}
|
|
17642
|
+
if (vaultDataMap.size === 0) return void 0;
|
|
17643
|
+
const clusters = deriveClusters(vaultDataMap, true);
|
|
17644
|
+
const resultReserves = {};
|
|
17645
|
+
for (const cluster of clusters) {
|
|
17646
|
+
const normalized = normalizeCluster(cluster, {
|
|
17647
|
+
chainId,
|
|
17648
|
+
tokenList
|
|
17649
|
+
});
|
|
17650
|
+
for (const [vaultAddr, entry] of Object.entries(normalized.data)) {
|
|
17651
|
+
const marketUid = createMarketUid(chainId, lender, vaultAddr);
|
|
17652
|
+
const assetMeta = tokenList[entry.asset.address];
|
|
17653
|
+
const oracleKey = toOracleKey(assetMeta?.assetGroup ?? null) || toGenericPriceKey(entry.asset.address, chainId);
|
|
17654
|
+
const price = prices[oracleKey] ?? 0;
|
|
17655
|
+
const totalDeposits = entry.totalDeposits;
|
|
17656
|
+
const totalDebt = entry.totalDebt;
|
|
17657
|
+
const totalLiquidity = totalDeposits - totalDebt;
|
|
17658
|
+
const totalDepositsUSD = price > 0 ? totalDeposits * price : entry.totalDepositsUSD;
|
|
17659
|
+
const totalDebtUSD = price > 0 ? totalDebt * price : entry.totalDebtUSD;
|
|
17660
|
+
const totalLiquidityUSD = price > 0 ? totalLiquidity * price : totalDepositsUSD - totalDebtUSD;
|
|
17661
|
+
resultReserves[marketUid] = {
|
|
17662
|
+
marketUid,
|
|
17663
|
+
poolId: vaultAddr,
|
|
17664
|
+
underlying: entry.asset.address,
|
|
17665
|
+
asset: {
|
|
17666
|
+
chainId,
|
|
17667
|
+
decimals: entry.asset.decimals,
|
|
17668
|
+
name: entry.asset.name,
|
|
17669
|
+
address: entry.asset.address,
|
|
17670
|
+
symbol: entry.asset.symbol
|
|
17671
|
+
},
|
|
17672
|
+
// token amounts
|
|
17673
|
+
totalDeposits: String(totalDeposits),
|
|
17674
|
+
totalDebtStable: String(entry.totalDebtStable),
|
|
17675
|
+
totalDebt: String(totalDebt),
|
|
17676
|
+
totalLiquidity: String(totalLiquidity),
|
|
17677
|
+
// USD amounts
|
|
17678
|
+
totalDepositsUSD,
|
|
17679
|
+
totalDebtStableUSD: entry.totalDebtStableUSD,
|
|
17680
|
+
totalDebtUSD,
|
|
17681
|
+
totalLiquidityUSD,
|
|
17682
|
+
// rates (normalizer yields APY as decimal, convert to APR percentage)
|
|
17683
|
+
depositRate: apyToApr(entry.depositRate) * 100,
|
|
17684
|
+
variableBorrowRate: apyToApr(entry.variableBorrowRate) * 100,
|
|
17685
|
+
stableBorrowRate: entry.stableBorrowRate,
|
|
17686
|
+
intrinsicYield: additionalYields?.intrinsicYields?.[oracleKey] ?? 0,
|
|
17687
|
+
// rewards
|
|
17688
|
+
rewards: [],
|
|
17689
|
+
decimals: entry.decimals,
|
|
17690
|
+
// config (keyed by counterparty vault address)
|
|
17691
|
+
config: entry.config,
|
|
17692
|
+
// flags
|
|
17693
|
+
collateralActive: entry.collateralActive,
|
|
17694
|
+
borrowingEnabled: entry.borrowingEnabled,
|
|
17695
|
+
hasStable: entry.hasStable,
|
|
17696
|
+
isActive: entry.isActive,
|
|
17697
|
+
isFrozen: entry.isFrozen,
|
|
17698
|
+
// caps
|
|
17699
|
+
borrowCap: entry.borrowCap,
|
|
17700
|
+
supplyCap: entry.supplyCap,
|
|
17701
|
+
debtCeiling: entry.debtCeiling,
|
|
17702
|
+
// metadata
|
|
17703
|
+
params: {
|
|
17704
|
+
metadata: entry.params.metadata
|
|
17705
|
+
}
|
|
17706
|
+
};
|
|
17707
|
+
}
|
|
17708
|
+
}
|
|
17709
|
+
return {
|
|
17710
|
+
data: resultReserves,
|
|
17711
|
+
chainId
|
|
17712
|
+
};
|
|
17713
|
+
},
|
|
17714
|
+
expectedNumberOfCalls
|
|
17715
|
+
];
|
|
17716
|
+
};
|
|
17717
|
+
|
|
17045
17718
|
// src/lending/public-data/fetchLender.ts
|
|
17046
17719
|
function getMorphoTypeMarketConverter(lender, chainId, prices, additionalYields, tokenList = {}, marketsOverride) {
|
|
17047
17720
|
if (lender.startsWith("LISTA_DAO"))
|
|
@@ -17075,6 +17748,8 @@ function buildLenderCall(chainId, lender) {
|
|
|
17075
17748
|
}
|
|
17076
17749
|
if (isCompoundV2Type(lender))
|
|
17077
17750
|
return buildCompoundV2StyleLenderReserveCall(chainId, lender);
|
|
17751
|
+
if (isEulerType(lender))
|
|
17752
|
+
return buildEulerV2LenderReserveCall(chainId, lender);
|
|
17078
17753
|
return [];
|
|
17079
17754
|
}
|
|
17080
17755
|
function getLenderDataConverter(lender, chainId, prices, additionalYields, tokenList = {}) {
|
|
@@ -17127,6 +17802,14 @@ function getLenderDataConverter(lender, chainId, prices, additionalYields, token
|
|
|
17127
17802
|
additionalYields,
|
|
17128
17803
|
tokenList
|
|
17129
17804
|
);
|
|
17805
|
+
if (isEulerType(lender))
|
|
17806
|
+
return getEulerV2ReservesDataConverter(
|
|
17807
|
+
lender,
|
|
17808
|
+
chainId,
|
|
17809
|
+
prices,
|
|
17810
|
+
additionalYields,
|
|
17811
|
+
tokenList
|
|
17812
|
+
);
|
|
17130
17813
|
return [() => null, 0];
|
|
17131
17814
|
}
|
|
17132
17815
|
var getAbi = (lender) => {
|
|
@@ -17145,6 +17828,7 @@ var getAbi = (lender) => {
|
|
|
17145
17828
|
if (isCompoundV3(lender)) return [...IrgetterAbi, ...CometAbi, ...CometExtAbi];
|
|
17146
17829
|
if (isInit(lender)) return InitLensAbi;
|
|
17147
17830
|
if (isMorphoType(lender)) return MorphoLensAbi;
|
|
17831
|
+
if (isEulerType(lender)) return vaultLensAbi;
|
|
17148
17832
|
if (isSumerType(lender)) return [...SumerLensAbi, ...SumerComptrollerAbi];
|
|
17149
17833
|
if (lender === Lender.TAKARA) return [...TakaraMarketStateAbi];
|
|
17150
17834
|
if (isCompoundV2Type(lender)) return VenusLensAbi;
|
|
@@ -17525,6 +18209,37 @@ function createCompoundV2Entry(i, data, key, assetsIn, vToken, meta, claimableRe
|
|
|
17525
18209
|
};
|
|
17526
18210
|
}
|
|
17527
18211
|
|
|
18212
|
+
// src/lending/user-data/euler/userCallBuild.ts
|
|
18213
|
+
var DEFAULT_MAX_SUB_ACCOUNTS = 255;
|
|
18214
|
+
function getSubAccountAddress(owner, index) {
|
|
18215
|
+
const prefix = owner.slice(0, 40);
|
|
18216
|
+
const suffix = index.toString(16).padStart(2, "0");
|
|
18217
|
+
return (prefix + suffix).toLowerCase();
|
|
18218
|
+
}
|
|
18219
|
+
function getSubAccountIndex(addr) {
|
|
18220
|
+
return parseInt(addr.slice(40), 16);
|
|
18221
|
+
}
|
|
18222
|
+
var buildEulerUserCall = (chainId, lender, account, maxSubAccounts = DEFAULT_MAX_SUB_ACCOUNTS) => {
|
|
18223
|
+
if (!ENABLED_EULER_V2_CHAINS.includes(chainId)) return [];
|
|
18224
|
+
const config = eulerConfigs()?.[lender]?.[chainId];
|
|
18225
|
+
if (!config) return [];
|
|
18226
|
+
const accountLensAddress = config.accountLens;
|
|
18227
|
+
const evcAddress = config.evc;
|
|
18228
|
+
if (!accountLensAddress || !evcAddress) return [];
|
|
18229
|
+
const ownerIndex = getSubAccountIndex(account);
|
|
18230
|
+
const indices = /* @__PURE__ */ new Set();
|
|
18231
|
+
indices.add(ownerIndex);
|
|
18232
|
+
for (let i = 0; indices.size < maxSubAccounts && i < 256; i++) {
|
|
18233
|
+
indices.add(i);
|
|
18234
|
+
}
|
|
18235
|
+
const sortedIndices = [...indices].sort((a, b) => a - b);
|
|
18236
|
+
return sortedIndices.map((i) => ({
|
|
18237
|
+
address: accountLensAddress,
|
|
18238
|
+
name: "getAccountEnabledVaultsInfo",
|
|
18239
|
+
params: [evcAddress, getSubAccountAddress(account, i)]
|
|
18240
|
+
}));
|
|
18241
|
+
};
|
|
18242
|
+
|
|
17528
18243
|
// src/lending/user-data/fetch-balances/prepare.ts
|
|
17529
18244
|
function buildUserCall(chainId, lender, account, params) {
|
|
17530
18245
|
if (isAaveV2Type(lender)) return buildAaveV2UserCall(chainId, lender, account);
|
|
@@ -17534,6 +18249,8 @@ function buildUserCall(chainId, lender, account, params) {
|
|
|
17534
18249
|
return buildMorphoTypeUserCallWithLens(chainId, account, lender, params);
|
|
17535
18250
|
if (isCompoundV3Type(lender))
|
|
17536
18251
|
return buildCompoundV3UserCall(chainId, lender, account);
|
|
18252
|
+
if (isEulerType(lender))
|
|
18253
|
+
return buildEulerUserCall(chainId, lender, account);
|
|
17537
18254
|
return buildCompoundV2UserCall(chainId, lender, account);
|
|
17538
18255
|
}
|
|
17539
18256
|
function organizeUserQueries(queries) {
|
|
@@ -17776,20 +18493,18 @@ function parseSingleBrokerData(data, validOwner, brokerAddress, lender, chainId,
|
|
|
17776
18493
|
);
|
|
17777
18494
|
const debtData = Object.assign(
|
|
17778
18495
|
{},
|
|
17779
|
-
...data[2 /* debts */][index].map(
|
|
17780
|
-
(
|
|
17781
|
-
|
|
17782
|
-
|
|
17783
|
-
|
|
17784
|
-
|
|
17785
|
-
|
|
17786
|
-
|
|
17787
|
-
|
|
17788
|
-
|
|
17789
|
-
|
|
17790
|
-
|
|
17791
|
-
}
|
|
17792
|
-
)
|
|
18496
|
+
...data[2 /* debts */][index].map((c) => {
|
|
18497
|
+
const pool = c.pool.toLowerCase();
|
|
18498
|
+
allPools[pool] = c.underlying.toLowerCase();
|
|
18499
|
+
const key = createMarketUid(chainId, lender, pool);
|
|
18500
|
+
const metaEntity = metaMap?.[key];
|
|
18501
|
+
const decimals = metaEntity.asset?.decimals ?? 18;
|
|
18502
|
+
return {
|
|
18503
|
+
[pool]: {
|
|
18504
|
+
debt: parseRawAmount(c.amount.toString(), decimals)
|
|
18505
|
+
}
|
|
18506
|
+
};
|
|
18507
|
+
})
|
|
17793
18508
|
);
|
|
17794
18509
|
return {
|
|
17795
18510
|
[id]: Object.assign(
|
|
@@ -17806,8 +18521,8 @@ function parseSingleBrokerData(data, validOwner, brokerAddress, lender, chainId,
|
|
|
17806
18521
|
totalDebt24h: 0,
|
|
17807
18522
|
totalDeposits24h: 0
|
|
17808
18523
|
};
|
|
17809
|
-
const debt = debtData[pool]?.debt ?? 0;
|
|
17810
|
-
const deposits = collatData[pool]?.deposits ?? 0;
|
|
18524
|
+
const debt = debtData[pool]?.debt ?? "0";
|
|
18525
|
+
const deposits = collatData[pool]?.deposits ?? "0";
|
|
17811
18526
|
histData[id].totalDebt24h += Number(debt) * priceHist;
|
|
17812
18527
|
histData[id].totalDeposits24h += Number(deposits) * priceHist;
|
|
17813
18528
|
return {
|
|
@@ -17845,8 +18560,22 @@ var getInitUserDataConverter = (lender, chainId, account, metaMap) => {
|
|
|
17845
18560
|
if (_data.length !== expectedNumberOfCalls) {
|
|
17846
18561
|
return void 0;
|
|
17847
18562
|
}
|
|
17848
|
-
const legacy = parseSingleBrokerData(
|
|
17849
|
-
|
|
18563
|
+
const legacy = parseSingleBrokerData(
|
|
18564
|
+
_data[0],
|
|
18565
|
+
validOwner,
|
|
18566
|
+
legacyBroker,
|
|
18567
|
+
lender,
|
|
18568
|
+
chainId,
|
|
18569
|
+
metaMap
|
|
18570
|
+
);
|
|
18571
|
+
const current = parseSingleBrokerData(
|
|
18572
|
+
_data[1],
|
|
18573
|
+
validOwner,
|
|
18574
|
+
currentBroker,
|
|
18575
|
+
lender,
|
|
18576
|
+
chainId,
|
|
18577
|
+
metaMap
|
|
18578
|
+
);
|
|
17850
18579
|
const result = { ...legacy.result, ...current.result };
|
|
17851
18580
|
const modes = { ...legacy.modes, ...current.modes };
|
|
17852
18581
|
const histData = { ...legacy.histData, ...current.histData };
|
|
@@ -18176,7 +18905,7 @@ var userDataEmpty = (account, chainId, notWhitelisted = false) => {
|
|
|
18176
18905
|
balanceData,
|
|
18177
18906
|
aprData,
|
|
18178
18907
|
positions: [],
|
|
18179
|
-
userConfig: { selectedMode: 0, id: account, notWhitelisted }
|
|
18908
|
+
userConfig: { selectedMode: "0", id: account, notWhitelisted }
|
|
18180
18909
|
}
|
|
18181
18910
|
]
|
|
18182
18911
|
};
|
|
@@ -18407,6 +19136,266 @@ function createMorphoEntryFromMarketWithLens(balanceInfo, metaMap, chainId, lend
|
|
|
18407
19136
|
};
|
|
18408
19137
|
}
|
|
18409
19138
|
|
|
19139
|
+
// src/lending/user-data/utils/createEulerMultiAccountTypeUserState.ts
|
|
19140
|
+
function createEulerMultiAccountTypeUserState(payload, lenderData, histData) {
|
|
19141
|
+
const subAccountKeys = Object.keys(payload.lendingPositions ?? {});
|
|
19142
|
+
const marketUids = getMarketUidsFromMeta(lenderData);
|
|
19143
|
+
const { chainId, account } = payload;
|
|
19144
|
+
const data = [];
|
|
19145
|
+
for (let j = 0; j < subAccountKeys.length; j++) {
|
|
19146
|
+
const subAccount = subAccountKeys[j];
|
|
19147
|
+
const controller = payload.controllers?.[subAccount];
|
|
19148
|
+
const configKey = controller ?? String(LENDER_MODE_NO_MODE);
|
|
19149
|
+
const userConfig = {
|
|
19150
|
+
id: subAccount,
|
|
19151
|
+
selectedMode: configKey,
|
|
19152
|
+
isWhitelisted: true
|
|
19153
|
+
};
|
|
19154
|
+
let depositInterest = 0;
|
|
19155
|
+
let borrowInterest = 0;
|
|
19156
|
+
let rewardDepositAccrual = 0;
|
|
19157
|
+
let rewardBorrowAccrual = 0;
|
|
19158
|
+
let stakingDepositAccrual = 0;
|
|
19159
|
+
let stakingBorrowAccrual = 0;
|
|
19160
|
+
let deposits = 0;
|
|
19161
|
+
let debt = 0;
|
|
19162
|
+
let collateral = 0;
|
|
19163
|
+
let borrowDiscountedCollateral = 0;
|
|
19164
|
+
let adjustedDebt = 0;
|
|
19165
|
+
for (let i = 0; i < marketUids.length; i++) {
|
|
19166
|
+
const marketUid = marketUids[i];
|
|
19167
|
+
if (!lenderData?.[marketUid] || !payload.lendingPositions[subAccount][marketUid])
|
|
19168
|
+
continue;
|
|
19169
|
+
const pos = payload.lendingPositions[subAccount][marketUid];
|
|
19170
|
+
const { depositsUSD, debtUSD } = pos;
|
|
19171
|
+
const depositsUSDOracle = pos.depositsUSDOracle ?? depositsUSD;
|
|
19172
|
+
const debtUSDOracle = pos.debtUSDOracle ?? debtUSD;
|
|
19173
|
+
const {
|
|
19174
|
+
depositRate,
|
|
19175
|
+
intrinsicYield,
|
|
19176
|
+
variableBorrowRate,
|
|
19177
|
+
rewards,
|
|
19178
|
+
configs
|
|
19179
|
+
} = lenderData[marketUid];
|
|
19180
|
+
deposits += depositsUSD;
|
|
19181
|
+
debt += debtUSD;
|
|
19182
|
+
(rewards ?? []).forEach((rewardData) => {
|
|
19183
|
+
rewardDepositAccrual += rewardData.depositRate * depositsUSD;
|
|
19184
|
+
rewardBorrowAccrual += rewardData.variableBorrowRate * debtUSD + (rewardData.stableBorrowRate ?? 0) * debtUSD;
|
|
19185
|
+
});
|
|
19186
|
+
stakingDepositAccrual += (intrinsicYield ?? 0) * depositsUSD;
|
|
19187
|
+
stakingBorrowAccrual += (intrinsicYield ?? 0) * debtUSD;
|
|
19188
|
+
const config = configs?.[configKey];
|
|
19189
|
+
collateral += (config?.collateralFactor ?? 1) * depositsUSDOracle;
|
|
19190
|
+
borrowDiscountedCollateral += (config?.borrowCollateralFactor ?? 1) * depositsUSDOracle;
|
|
19191
|
+
adjustedDebt += (config?.borrowFactor ?? 1) * debtUSDOracle;
|
|
19192
|
+
depositInterest += depositRate * depositsUSD;
|
|
19193
|
+
borrowInterest += debtUSD * variableBorrowRate;
|
|
19194
|
+
}
|
|
19195
|
+
const nav = deposits - debt;
|
|
19196
|
+
const balanceData2 = {
|
|
19197
|
+
borrowDiscountedCollateral,
|
|
19198
|
+
borrowDiscountedCollateralAllActive: borrowDiscountedCollateral,
|
|
19199
|
+
collateral,
|
|
19200
|
+
collateralAllActive: collateral,
|
|
19201
|
+
deposits,
|
|
19202
|
+
debt,
|
|
19203
|
+
adjustedDebt,
|
|
19204
|
+
nav,
|
|
19205
|
+
deposits24h: histData[subAccount]?.totalDeposits24h,
|
|
19206
|
+
debt24h: histData[subAccount]?.totalDebt24h,
|
|
19207
|
+
nav24h: histData[subAccount]?.totalDeposits24h - histData[subAccount]?.totalDebt24h
|
|
19208
|
+
};
|
|
19209
|
+
const aprData2 = {
|
|
19210
|
+
apr: safeDivide(depositInterest - borrowInterest, nav),
|
|
19211
|
+
borrowApr: safeDivide(borrowInterest, debt),
|
|
19212
|
+
depositApr: safeDivide(depositInterest, deposits),
|
|
19213
|
+
rewardApr: safeDivide(rewardDepositAccrual + rewardBorrowAccrual, nav),
|
|
19214
|
+
rewardDepositApr: safeDivide(rewardDepositAccrual, deposits),
|
|
19215
|
+
rewardBorrowApr: safeDivide(rewardBorrowAccrual, debt),
|
|
19216
|
+
intrinsicApr: safeDivide(
|
|
19217
|
+
stakingDepositAccrual - stakingBorrowAccrual,
|
|
19218
|
+
nav
|
|
19219
|
+
),
|
|
19220
|
+
intrinsicDepositApr: safeDivide(stakingDepositAccrual, deposits),
|
|
19221
|
+
intrinsicBorrowApr: safeDivide(stakingBorrowAccrual, debt),
|
|
19222
|
+
rewards: {}
|
|
19223
|
+
};
|
|
19224
|
+
const creditLine = Math.max(0, borrowDiscountedCollateral - adjustedDebt);
|
|
19225
|
+
for (let i = 0; i < marketUids.length; i++) {
|
|
19226
|
+
const marketUid = marketUids[i];
|
|
19227
|
+
if (!lenderData?.[marketUid]) continue;
|
|
19228
|
+
const { configs, flags, borrowLiquidity, withdrawLiquidity } = lenderData[marketUid];
|
|
19229
|
+
const config = configs?.[configKey];
|
|
19230
|
+
const price = getOraclePrice(lenderData[marketUid]);
|
|
19231
|
+
const bcf = config?.borrowCollateralFactor ?? 1;
|
|
19232
|
+
const bf = config?.borrowFactor ?? 1;
|
|
19233
|
+
const pos = payload.lendingPositions[subAccount]?.[marketUid];
|
|
19234
|
+
if (pos) {
|
|
19235
|
+
let withdrawable;
|
|
19236
|
+
if (!pos.collateralEnabled || config?.collateralDisabled) {
|
|
19237
|
+
withdrawable = String(pos.deposits);
|
|
19238
|
+
} else if (balanceData2.debt === 0) {
|
|
19239
|
+
withdrawable = String(pos.deposits);
|
|
19240
|
+
} else {
|
|
19241
|
+
const withdrawableUSD = Math.max(creditLine / bcf, 0);
|
|
19242
|
+
withdrawable = String(
|
|
19243
|
+
Math.min(withdrawableUSD / price, Number(pos.deposits))
|
|
19244
|
+
);
|
|
19245
|
+
}
|
|
19246
|
+
if (withdrawLiquidity != null) {
|
|
19247
|
+
withdrawable = String(
|
|
19248
|
+
Math.min(Number(withdrawable), withdrawLiquidity)
|
|
19249
|
+
);
|
|
19250
|
+
}
|
|
19251
|
+
let borrowable;
|
|
19252
|
+
if (!flags?.borrowingEnabled || flags?.isFrozen || config?.debtDisabled) {
|
|
19253
|
+
borrowable = "0";
|
|
19254
|
+
} else {
|
|
19255
|
+
const borrowableUSD = Math.max(creditLine / bf, 0);
|
|
19256
|
+
borrowable = String(borrowableUSD / price);
|
|
19257
|
+
}
|
|
19258
|
+
if (borrowLiquidity != null) {
|
|
19259
|
+
borrowable = String(Math.min(Number(borrowable), borrowLiquidity));
|
|
19260
|
+
}
|
|
19261
|
+
pos.withdrawable = withdrawable;
|
|
19262
|
+
pos.borrowable = borrowable;
|
|
19263
|
+
} else if ((deposits > 0 || debt > 0) && flags?.borrowingEnabled && !flags?.isFrozen && !config?.debtDisabled) {
|
|
19264
|
+
let borrowable = String(Math.max(creditLine / bf, 0) / price);
|
|
19265
|
+
if (borrowLiquidity != null) {
|
|
19266
|
+
borrowable = String(Math.min(Number(borrowable), borrowLiquidity));
|
|
19267
|
+
}
|
|
19268
|
+
payload.lendingPositions[subAccount][marketUid] = {
|
|
19269
|
+
marketUid,
|
|
19270
|
+
underlying: lenderData[marketUid].underlying,
|
|
19271
|
+
deposits: "0",
|
|
19272
|
+
debt: "0",
|
|
19273
|
+
debtStable: "0",
|
|
19274
|
+
depositsUSD: 0,
|
|
19275
|
+
debtUSD: 0,
|
|
19276
|
+
debtStableUSD: 0,
|
|
19277
|
+
depositsUSDOracle: 0,
|
|
19278
|
+
debtUSDOracle: 0,
|
|
19279
|
+
debtStableUSDOracle: 0,
|
|
19280
|
+
collateralEnabled: false,
|
|
19281
|
+
isAllowed: false,
|
|
19282
|
+
withdrawable: "0",
|
|
19283
|
+
borrowable
|
|
19284
|
+
};
|
|
19285
|
+
}
|
|
19286
|
+
}
|
|
19287
|
+
data.push({
|
|
19288
|
+
accountId: subAccount,
|
|
19289
|
+
health: balanceData2.debt === 0 ? null : balanceData2.adjustedDebt > 0 ? balanceData2.borrowDiscountedCollateral / balanceData2.adjustedDebt : balanceData2.collateral / balanceData2.debt,
|
|
19290
|
+
borrowCapacityUSD: creditLine,
|
|
19291
|
+
userConfig,
|
|
19292
|
+
balanceData: balanceData2,
|
|
19293
|
+
aprData: aprData2,
|
|
19294
|
+
positions: Object.values(payload.lendingPositions[subAccount])
|
|
19295
|
+
});
|
|
19296
|
+
}
|
|
19297
|
+
return {
|
|
19298
|
+
lender: "",
|
|
19299
|
+
account,
|
|
19300
|
+
chainId,
|
|
19301
|
+
data
|
|
19302
|
+
};
|
|
19303
|
+
}
|
|
19304
|
+
|
|
19305
|
+
// src/lending/user-data/euler/userCallParse.ts
|
|
19306
|
+
var getEulerUserDataConverter = (lender, chainId, account, metaMap, maxSubAccounts = DEFAULT_MAX_SUB_ACCOUNTS) => {
|
|
19307
|
+
const ownerIndex = getSubAccountIndex(account);
|
|
19308
|
+
const indices = /* @__PURE__ */ new Set();
|
|
19309
|
+
indices.add(ownerIndex);
|
|
19310
|
+
for (let i = 0; indices.size < maxSubAccounts && i < 256; i++) {
|
|
19311
|
+
indices.add(i);
|
|
19312
|
+
}
|
|
19313
|
+
const sortedIndices = [...indices].sort((a, b) => a - b);
|
|
19314
|
+
const expectedNumberOfCalls = sortedIndices.length;
|
|
19315
|
+
return [
|
|
19316
|
+
(_data) => {
|
|
19317
|
+
if (_data.length !== expectedNumberOfCalls) {
|
|
19318
|
+
return void 0;
|
|
19319
|
+
}
|
|
19320
|
+
const lendingPositions = {};
|
|
19321
|
+
const controllers = {};
|
|
19322
|
+
const histData = {};
|
|
19323
|
+
for (let idx = 0; idx < sortedIndices.length; idx++) {
|
|
19324
|
+
const result = _data[idx];
|
|
19325
|
+
if (!result) continue;
|
|
19326
|
+
const evcInfo = result.evcAccountInfo ?? result[0];
|
|
19327
|
+
const vaultAccounts = result.vaultAccountInfo ?? result[1] ?? [];
|
|
19328
|
+
if (vaultAccounts.length === 0) continue;
|
|
19329
|
+
const subAccountAddr = getSubAccountAddress(
|
|
19330
|
+
account,
|
|
19331
|
+
sortedIndices[idx]
|
|
19332
|
+
).toLowerCase();
|
|
19333
|
+
const enabledControllers = (evcInfo?.enabledControllers ?? []).map((a) => a.toLowerCase());
|
|
19334
|
+
const controller = enabledControllers.length > 0 ? enabledControllers[0] : void 0;
|
|
19335
|
+
if (controller) {
|
|
19336
|
+
controllers[subAccountAddr] = controller;
|
|
19337
|
+
}
|
|
19338
|
+
const positions = {};
|
|
19339
|
+
let totalDebt24h = 0;
|
|
19340
|
+
let totalDeposits24h = 0;
|
|
19341
|
+
for (const va of vaultAccounts) {
|
|
19342
|
+
const vaultAddr = (va.vault?.toString() ?? "").toLowerCase();
|
|
19343
|
+
const assetAddr = (va.asset?.toString() ?? "").toLowerCase();
|
|
19344
|
+
const assets = BigInt(va.assets ?? 0);
|
|
19345
|
+
const borrowed = BigInt(va.borrowed ?? 0);
|
|
19346
|
+
if (assets === 0n && borrowed === 0n) continue;
|
|
19347
|
+
const marketUid = createMarketUid(chainId, lender, vaultAddr);
|
|
19348
|
+
const meta = metaMap?.[marketUid];
|
|
19349
|
+
const decimals = meta?.asset?.decimals ?? 18;
|
|
19350
|
+
const depositsStr = parseRawAmount(assets.toString(), decimals);
|
|
19351
|
+
const debtStr = parseRawAmount(borrowed.toString(), decimals);
|
|
19352
|
+
const depositsNum = Number(depositsStr);
|
|
19353
|
+
const debtNum = Number(debtStr);
|
|
19354
|
+
const displayPrice = meta ? getDisplayPrice(meta) : 0;
|
|
19355
|
+
const oraclePrice = meta ? getOraclePrice(meta) : 0;
|
|
19356
|
+
const priceHist = meta?.price?.priceUsd24h ?? displayPrice;
|
|
19357
|
+
const depositsUSD = depositsNum * displayPrice;
|
|
19358
|
+
const debtUSD = debtNum * displayPrice;
|
|
19359
|
+
const depositsUSDOracle = depositsNum * oraclePrice;
|
|
19360
|
+
const debtUSDOracle = debtNum * oraclePrice;
|
|
19361
|
+
totalDeposits24h += depositsNum * priceHist;
|
|
19362
|
+
totalDebt24h += debtNum * priceHist;
|
|
19363
|
+
positions[marketUid] = {
|
|
19364
|
+
marketUid,
|
|
19365
|
+
underlying: assetAddr,
|
|
19366
|
+
deposits: depositsStr,
|
|
19367
|
+
debt: debtStr,
|
|
19368
|
+
debtStable: "0",
|
|
19369
|
+
depositsUSD,
|
|
19370
|
+
debtUSD,
|
|
19371
|
+
debtStableUSD: 0,
|
|
19372
|
+
depositsUSDOracle,
|
|
19373
|
+
debtUSDOracle,
|
|
19374
|
+
debtStableUSDOracle: 0,
|
|
19375
|
+
collateralEnabled: Boolean(va.isCollateral),
|
|
19376
|
+
isAllowed: assets > 0n || borrowed > 0n
|
|
19377
|
+
};
|
|
19378
|
+
}
|
|
19379
|
+
if (Object.keys(positions).length > 0) {
|
|
19380
|
+
lendingPositions[subAccountAddr] = positions;
|
|
19381
|
+
histData[subAccountAddr] = { totalDebt24h, totalDeposits24h };
|
|
19382
|
+
}
|
|
19383
|
+
}
|
|
19384
|
+
if (Object.keys(lendingPositions).length === 0) {
|
|
19385
|
+
return void 0;
|
|
19386
|
+
}
|
|
19387
|
+
const payload = {
|
|
19388
|
+
chainId,
|
|
19389
|
+
lendingPositions,
|
|
19390
|
+
controllers,
|
|
19391
|
+
account
|
|
19392
|
+
};
|
|
19393
|
+
return createEulerMultiAccountTypeUserState(payload, metaMap, histData);
|
|
19394
|
+
},
|
|
19395
|
+
expectedNumberOfCalls
|
|
19396
|
+
];
|
|
19397
|
+
};
|
|
19398
|
+
|
|
18410
19399
|
// src/lending/user-data/fetch-balances/parse.ts
|
|
18411
19400
|
function getUserDataConverter(lender, chainId, account, params, meta) {
|
|
18412
19401
|
if (isYLDR(lender))
|
|
@@ -18432,6 +19421,8 @@ function getUserDataConverter(lender, chainId, account, params, meta) {
|
|
|
18432
19421
|
account,
|
|
18433
19422
|
meta?.[lender]
|
|
18434
19423
|
);
|
|
19424
|
+
if (isEulerType(lender))
|
|
19425
|
+
return getEulerUserDataConverter(lender, chainId, account, meta?.[lender]);
|
|
18435
19426
|
return getCompoundV2UserDataConverter(
|
|
18436
19427
|
lender,
|
|
18437
19428
|
chainId,
|
|
@@ -22978,6 +23969,111 @@ var CompoundV2CollateralToken = [
|
|
|
22978
23969
|
}
|
|
22979
23970
|
];
|
|
22980
23971
|
|
|
23972
|
+
// src/abis/euler/accountLens.ts
|
|
23973
|
+
var accountLensAbi = [
|
|
23974
|
+
{
|
|
23975
|
+
type: "function",
|
|
23976
|
+
name: "getAccountEnabledVaultsInfo",
|
|
23977
|
+
inputs: [
|
|
23978
|
+
{ name: "evc", type: "address" },
|
|
23979
|
+
{ name: "account", type: "address" }
|
|
23980
|
+
],
|
|
23981
|
+
outputs: [
|
|
23982
|
+
{
|
|
23983
|
+
name: "",
|
|
23984
|
+
type: "tuple",
|
|
23985
|
+
components: [
|
|
23986
|
+
// EVCAccountInfo
|
|
23987
|
+
{
|
|
23988
|
+
name: "evcAccountInfo",
|
|
23989
|
+
type: "tuple",
|
|
23990
|
+
components: [
|
|
23991
|
+
{ name: "timestamp", type: "uint256" },
|
|
23992
|
+
{ name: "evc", type: "address" },
|
|
23993
|
+
{ name: "account", type: "address" },
|
|
23994
|
+
{ name: "addressPrefix", type: "bytes19" },
|
|
23995
|
+
{ name: "owner", type: "address" },
|
|
23996
|
+
{ name: "isLockdownMode", type: "bool" },
|
|
23997
|
+
{ name: "isPermitDisabledMode", type: "bool" },
|
|
23998
|
+
{ name: "lastAccountStatusCheckTimestamp", type: "uint256" },
|
|
23999
|
+
{ name: "enabledControllers", type: "address[]" },
|
|
24000
|
+
{ name: "enabledCollaterals", type: "address[]" }
|
|
24001
|
+
]
|
|
24002
|
+
},
|
|
24003
|
+
// VaultAccountInfo[]
|
|
24004
|
+
{
|
|
24005
|
+
name: "vaultAccountInfo",
|
|
24006
|
+
type: "tuple[]",
|
|
24007
|
+
components: [
|
|
24008
|
+
{ name: "timestamp", type: "uint256" },
|
|
24009
|
+
{ name: "account", type: "address" },
|
|
24010
|
+
{ name: "vault", type: "address" },
|
|
24011
|
+
{ name: "asset", type: "address" },
|
|
24012
|
+
{ name: "assetsAccount", type: "uint256" },
|
|
24013
|
+
{ name: "shares", type: "uint256" },
|
|
24014
|
+
{ name: "assets", type: "uint256" },
|
|
24015
|
+
{ name: "borrowed", type: "uint256" },
|
|
24016
|
+
{ name: "assetAllowanceVault", type: "uint256" },
|
|
24017
|
+
{ name: "assetAllowanceVaultPermit2", type: "uint256" },
|
|
24018
|
+
{ name: "assetAllowanceExpirationVaultPermit2", type: "uint256" },
|
|
24019
|
+
{ name: "assetAllowancePermit2", type: "uint256" },
|
|
24020
|
+
{ name: "balanceForwarderEnabled", type: "bool" },
|
|
24021
|
+
{ name: "isController", type: "bool" },
|
|
24022
|
+
{ name: "isCollateral", type: "bool" },
|
|
24023
|
+
// AccountLiquidityInfo
|
|
24024
|
+
{
|
|
24025
|
+
name: "liquidityInfo",
|
|
24026
|
+
type: "tuple",
|
|
24027
|
+
components: [
|
|
24028
|
+
{ name: "queryFailure", type: "bool" },
|
|
24029
|
+
{ name: "queryFailureReason", type: "bytes" },
|
|
24030
|
+
{ name: "account", type: "address" },
|
|
24031
|
+
{ name: "vault", type: "address" },
|
|
24032
|
+
{ name: "unitOfAccount", type: "address" },
|
|
24033
|
+
{ name: "timeToLiquidation", type: "int256" },
|
|
24034
|
+
{ name: "liabilityValueBorrowing", type: "uint256" },
|
|
24035
|
+
{ name: "liabilityValueLiquidation", type: "uint256" },
|
|
24036
|
+
{ name: "collateralValueBorrowing", type: "uint256" },
|
|
24037
|
+
{ name: "collateralValueLiquidation", type: "uint256" },
|
|
24038
|
+
{ name: "collateralValueRaw", type: "uint256" },
|
|
24039
|
+
{ name: "collaterals", type: "address[]" },
|
|
24040
|
+
{ name: "collateralValuesBorrowing", type: "uint256[]" },
|
|
24041
|
+
{ name: "collateralValuesLiquidation", type: "uint256[]" },
|
|
24042
|
+
{ name: "collateralValuesRaw", type: "uint256[]" }
|
|
24043
|
+
]
|
|
24044
|
+
}
|
|
24045
|
+
]
|
|
24046
|
+
},
|
|
24047
|
+
// AccountRewardInfo[]
|
|
24048
|
+
{
|
|
24049
|
+
name: "accountRewardInfo",
|
|
24050
|
+
type: "tuple[]",
|
|
24051
|
+
components: [
|
|
24052
|
+
{ name: "timestamp", type: "uint256" },
|
|
24053
|
+
{ name: "account", type: "address" },
|
|
24054
|
+
{ name: "vault", type: "address" },
|
|
24055
|
+
{ name: "balanceTracker", type: "address" },
|
|
24056
|
+
{ name: "balanceForwarderEnabled", type: "bool" },
|
|
24057
|
+
{ name: "balance", type: "uint256" },
|
|
24058
|
+
// EnabledRewardInfo[]
|
|
24059
|
+
{
|
|
24060
|
+
name: "enabledRewardsInfo",
|
|
24061
|
+
type: "tuple[]",
|
|
24062
|
+
components: [
|
|
24063
|
+
{ name: "reward", type: "address" },
|
|
24064
|
+
{ name: "earnedReward", type: "uint256" },
|
|
24065
|
+
{ name: "earnedRewardRecentIgnored", type: "uint256" }
|
|
24066
|
+
]
|
|
24067
|
+
}
|
|
24068
|
+
]
|
|
24069
|
+
}
|
|
24070
|
+
]
|
|
24071
|
+
}
|
|
24072
|
+
],
|
|
24073
|
+
stateMutability: "view"
|
|
24074
|
+
}
|
|
24075
|
+
];
|
|
24076
|
+
|
|
22981
24077
|
// src/lending/user-data/abis.ts
|
|
22982
24078
|
var getAbi2 = (lender) => {
|
|
22983
24079
|
if (isAaveV2Type(lender))
|
|
@@ -23002,6 +24098,7 @@ var getAbi2 = (lender) => {
|
|
|
23002
24098
|
return [...CometAbi, ...CometExtAbi, ...CometRewardsAbi];
|
|
23003
24099
|
if (isMorphoType(lender)) return [...MorphoBlueAbi, ...MorphoLensAbi];
|
|
23004
24100
|
if (isInit(lender)) return InitLensAbi;
|
|
24101
|
+
if (isEulerType(lender)) return accountLensAbi;
|
|
23005
24102
|
if (isCompoundV2Type(lender))
|
|
23006
24103
|
return [...ComptrollerAbi, ...CompoundV2CollateralToken];
|
|
23007
24104
|
return [];
|
|
@@ -24091,6 +25188,11 @@ function keysFromMaps(a, b) {
|
|
|
24091
25188
|
if (b) for (const k of Object.keys(b)) set.add(k);
|
|
24092
25189
|
return [...set];
|
|
24093
25190
|
}
|
|
25191
|
+
function rewardsToMap(rewards) {
|
|
25192
|
+
const map = {};
|
|
25193
|
+
if (Array.isArray(rewards)) for (const r of rewards) map[r.asset] = r;
|
|
25194
|
+
return map;
|
|
25195
|
+
}
|
|
24094
25196
|
function noOpResult(balance, apr) {
|
|
24095
25197
|
const hf = getHealthFactor2(balance.collateral, balance.adjustedDebt);
|
|
24096
25198
|
const bc = balance.collateral - balance.adjustedDebt;
|
|
@@ -24167,13 +25269,13 @@ function getOrganicYieldCollateralSwap(amountInUSD, amountOutUSD, cashFlowDeposi
|
|
|
24167
25269
|
|
|
24168
25270
|
// src/lending/margin/loop/yield/getRewardYieldChange.ts
|
|
24169
25271
|
function getRewardYieldOpen(amountInUSD, amountOutUSD, irModeIn, cashFlowDeposits, cashFlowDebt, deposits, debt, yieldIn, yieldOut) {
|
|
24170
|
-
const
|
|
24171
|
-
const
|
|
24172
|
-
if (!
|
|
25272
|
+
const mapIn = rewardsToMap(yieldIn?.rewards);
|
|
25273
|
+
const mapOut = rewardsToMap(yieldOut?.rewards);
|
|
25274
|
+
if (!yieldIn?.rewards?.length && !yieldOut?.rewards?.length) return {};
|
|
24173
25275
|
const data = {};
|
|
24174
|
-
for (const key of keysFromMaps(
|
|
24175
|
-
const _flowIn = amountInUSD * ((irModeIn === 1 ?
|
|
24176
|
-
const _flowOut = amountOutUSD * (
|
|
25276
|
+
for (const key of keysFromMaps(mapIn, mapOut)) {
|
|
25277
|
+
const _flowIn = amountInUSD * ((irModeIn === 1 ? mapIn[key]?.stableBorrowRate : mapIn[key]?.variableBorrowRate) ?? 0);
|
|
25278
|
+
const _flowOut = amountOutUSD * (mapOut[key]?.depositRate ?? 0);
|
|
24177
25279
|
const totalCashFlowDebt = cashFlowDebt + _flowIn;
|
|
24178
25280
|
const totalCashFlowDeposits = cashFlowDeposits + _flowOut;
|
|
24179
25281
|
const newCollat = deposits + amountOutUSD;
|
|
@@ -24187,13 +25289,13 @@ function getRewardYieldOpen(amountInUSD, amountOutUSD, irModeIn, cashFlowDeposit
|
|
|
24187
25289
|
return data;
|
|
24188
25290
|
}
|
|
24189
25291
|
function getRewardYieldClose(amountInUSD, amountOutUSD, irModeOut, cashFlowDeposits, cashFlowDebt, deposits, debt, yieldIn, yieldOut) {
|
|
24190
|
-
const
|
|
24191
|
-
const
|
|
24192
|
-
if (!
|
|
25292
|
+
const mapIn = rewardsToMap(yieldIn?.rewards);
|
|
25293
|
+
const mapOut = rewardsToMap(yieldOut?.rewards);
|
|
25294
|
+
if (!yieldIn?.rewards?.length && !yieldOut?.rewards?.length) return {};
|
|
24193
25295
|
const data = {};
|
|
24194
|
-
for (const key of keysFromMaps(
|
|
24195
|
-
const _flowIn = amountInUSD * (
|
|
24196
|
-
const _flowOut = amountOutUSD * ((irModeOut === 1 ?
|
|
25296
|
+
for (const key of keysFromMaps(mapIn, mapOut)) {
|
|
25297
|
+
const _flowIn = amountInUSD * (mapIn[key]?.depositRate ?? 0);
|
|
25298
|
+
const _flowOut = amountOutUSD * ((irModeOut === 1 ? mapOut[key]?.stableBorrowRate : mapOut[key]?.variableBorrowRate) ?? 0);
|
|
24197
25299
|
const totalCashFlowDebt = cashFlowDebt - _flowOut;
|
|
24198
25300
|
const totalCashFlowDeposits = cashFlowDeposits - _flowIn;
|
|
24199
25301
|
const newCollat = deposits - amountInUSD;
|
|
@@ -24207,13 +25309,13 @@ function getRewardYieldClose(amountInUSD, amountOutUSD, irModeOut, cashFlowDepos
|
|
|
24207
25309
|
return data;
|
|
24208
25310
|
}
|
|
24209
25311
|
function getRewardYieldDebtSwap(amountInUSD, amountOutUSD, irModeIn, irModeOut, cashFlowDeposits, cashFlowDebt, deposits, debt, yieldIn, yieldOut) {
|
|
24210
|
-
const
|
|
24211
|
-
const
|
|
24212
|
-
if (!
|
|
25312
|
+
const mapIn = rewardsToMap(yieldIn?.rewards);
|
|
25313
|
+
const mapOut = rewardsToMap(yieldOut?.rewards);
|
|
25314
|
+
if (!yieldIn?.rewards?.length && !yieldOut?.rewards?.length) return {};
|
|
24213
25315
|
const data = {};
|
|
24214
|
-
for (const key of keysFromMaps(
|
|
24215
|
-
const _flowIn = amountInUSD * ((irModeIn === 1 ?
|
|
24216
|
-
const _flowOut = amountOutUSD * ((irModeOut === 1 ?
|
|
25316
|
+
for (const key of keysFromMaps(mapIn, mapOut)) {
|
|
25317
|
+
const _flowIn = amountInUSD * ((irModeIn === 1 ? mapIn[key]?.stableBorrowRate : mapIn[key]?.variableBorrowRate) ?? 0);
|
|
25318
|
+
const _flowOut = amountOutUSD * ((irModeOut === 1 ? mapOut[key]?.stableBorrowRate : mapOut[key]?.variableBorrowRate) ?? 0);
|
|
24217
25319
|
const totalCashFlowDebt = cashFlowDebt + _flowIn - _flowOut;
|
|
24218
25320
|
const newDebt = debt - amountOutUSD + amountInUSD;
|
|
24219
25321
|
data[key] = {
|
|
@@ -24225,13 +25327,13 @@ function getRewardYieldDebtSwap(amountInUSD, amountOutUSD, irModeIn, irModeOut,
|
|
|
24225
25327
|
return data;
|
|
24226
25328
|
}
|
|
24227
25329
|
function getRewardYieldCollateralSwap(amountInUSD, amountOutUSD, cashFlowDeposits, cashFlowDebt, deposits, debt, yieldIn, yieldOut) {
|
|
24228
|
-
const
|
|
24229
|
-
const
|
|
24230
|
-
if (!
|
|
25330
|
+
const mapIn = rewardsToMap(yieldIn?.rewards);
|
|
25331
|
+
const mapOut = rewardsToMap(yieldOut?.rewards);
|
|
25332
|
+
if (!yieldIn?.rewards?.length && !yieldOut?.rewards?.length) return {};
|
|
24231
25333
|
const data = {};
|
|
24232
|
-
for (const key of keysFromMaps(
|
|
24233
|
-
const _flowIn = amountInUSD * (
|
|
24234
|
-
const _flowOut = amountOutUSD * (
|
|
25334
|
+
for (const key of keysFromMaps(mapIn, mapOut)) {
|
|
25335
|
+
const _flowIn = amountInUSD * (mapIn[key]?.depositRate ?? 0);
|
|
25336
|
+
const _flowOut = amountOutUSD * (mapOut[key]?.depositRate ?? 0);
|
|
24235
25337
|
const totalCashFlowDeposits = cashFlowDeposits + _flowOut - _flowIn;
|
|
24236
25338
|
const newCollat = deposits + amountOutUSD - amountInUSD;
|
|
24237
25339
|
data[key] = {
|
|
@@ -24605,9 +25707,8 @@ function meetsLiquidityThresholdsShort(pool, thresholds) {
|
|
|
24605
25707
|
}
|
|
24606
25708
|
function findMaxBorrowCollateralFactorRatio(lender, configsIn, configsOut) {
|
|
24607
25709
|
let maxRatio = -Infinity;
|
|
24608
|
-
let result = { modeId: 0, eModeCategory: 0 };
|
|
24609
|
-
for (const
|
|
24610
|
-
const modeId = Number(modeIdStr);
|
|
25710
|
+
let result = { modeId: "0", eModeCategory: 0 };
|
|
25711
|
+
for (const modeId of Object.keys(configsIn)) {
|
|
24611
25712
|
const dataIn = configsIn[modeId];
|
|
24612
25713
|
const dataOut = configsOut[modeId];
|
|
24613
25714
|
if (dataIn.debtDisabled || isAaveV32Type(lender) && dataOut.collateralDisabled) {
|
|
@@ -24636,7 +25737,7 @@ var isEMode = (lender, longData, shortData) => findMaxBorrowCollateralFactorRati
|
|
|
24636
25737
|
var intersection = (a0, a1) => {
|
|
24637
25738
|
return a0.filter((a) => a1.includes(a));
|
|
24638
25739
|
};
|
|
24639
|
-
var LENDER_MODE_NO_MODE2 = 0;
|
|
25740
|
+
var LENDER_MODE_NO_MODE2 = "0";
|
|
24640
25741
|
var getMaxLeverage = (lender, longData, shortData) => {
|
|
24641
25742
|
if (isAaveV3Type(lender)) {
|
|
24642
25743
|
const emode = isEMode(lender, longData, shortData).modeId;
|
|
@@ -24649,9 +25750,9 @@ var getMaxLeverage = (lender, longData, shortData) => {
|
|
|
24649
25750
|
Object.values(shortData.config).map((c) => c.category)
|
|
24650
25751
|
);
|
|
24651
25752
|
if (modeIntersect.length === 0) return 1;
|
|
24652
|
-
const configId = Object.values(longData.config).filter((c) => modeIntersect.includes(c.category)).sort(
|
|
25753
|
+
const configId = String(Object.values(longData.config).filter((c) => modeIntersect.includes(c.category)).sort(
|
|
24653
25754
|
(c, d) => c.borrowCollateralFactor < d.borrowCollateralFactor ? 1 : -1
|
|
24654
|
-
)[0].category;
|
|
25755
|
+
)[0].category);
|
|
24655
25756
|
const cf2 = longData.config[configId]?.borrowCollateralFactor;
|
|
24656
25757
|
const bf = shortData.config[configId]?.borrowFactor;
|
|
24657
25758
|
return 1 / (1 - cf2 / bf);
|
|
@@ -24659,11 +25760,9 @@ var getMaxLeverage = (lender, longData, shortData) => {
|
|
|
24659
25760
|
if (isSumerType(lender)) {
|
|
24660
25761
|
const shortEntries = Object.entries(shortData?.config ?? {});
|
|
24661
25762
|
if (shortEntries.length === 0) return 1;
|
|
24662
|
-
const shortGroupId =
|
|
24663
|
-
|
|
24664
|
-
|
|
24665
|
-
)[0][0]
|
|
24666
|
-
);
|
|
25763
|
+
const shortGroupId = shortEntries.sort(
|
|
25764
|
+
([, a], [, b]) => b.borrowCollateralFactor - a.borrowCollateralFactor
|
|
25765
|
+
)[0][0];
|
|
24667
25766
|
const cf2 = longData?.config?.[shortGroupId]?.borrowCollateralFactor ?? 0;
|
|
24668
25767
|
return cf2 > 0 && cf2 < 1 ? 1 / (1 - cf2) : 1;
|
|
24669
25768
|
}
|
|
@@ -25432,13 +26531,14 @@ var hwhlpFetcher = {
|
|
|
25432
26531
|
};
|
|
25433
26532
|
|
|
25434
26533
|
// src/yields/intrinsic/fetchers/usdx.ts
|
|
25435
|
-
var SUSDX_URL = "https://app.usdx.money/v1/base/apyInfo";
|
|
25436
26534
|
var susdx = "SUSDX";
|
|
25437
26535
|
var susdxFetcher = {
|
|
25438
26536
|
label: "SUSDX",
|
|
25439
26537
|
fetch: async () => {
|
|
25440
|
-
|
|
25441
|
-
|
|
26538
|
+
return {
|
|
26539
|
+
[susdx]: 0
|
|
26540
|
+
// apyToApr(res.result.susdxApy) * 100
|
|
26541
|
+
};
|
|
25442
26542
|
}
|
|
25443
26543
|
};
|
|
25444
26544
|
|
|
@@ -25678,11 +26778,16 @@ async function fetchPendleYields(lists = {}) {
|
|
|
25678
26778
|
dataArr.forEach((market) => {
|
|
25679
26779
|
const ptPrice = prices[market.pt];
|
|
25680
26780
|
const ytPrice = prices[market.yt];
|
|
26781
|
+
const [chainId, address] = market.pt.split("-");
|
|
26782
|
+
const assetKey = lists[chainId]?.list?.[address.toLowerCase()]?.assetGroup ?? market.pt;
|
|
26783
|
+
const expiry = new Date(market.expiry);
|
|
26784
|
+
if (expiry <= now) {
|
|
26785
|
+
yields[assetKey] = 0;
|
|
26786
|
+
return;
|
|
26787
|
+
}
|
|
25681
26788
|
if (ytPrice && ytPrice > 0) {
|
|
25682
26789
|
const yearFraction = yearFractionToExpiry(market.expiry, now);
|
|
25683
26790
|
const apr = ytPrice / ptPrice * 100 / yearFraction;
|
|
25684
|
-
const [chainId, address] = market.pt.split("-");
|
|
25685
|
-
const assetKey = lists[chainId]?.list?.[address.toLowerCase()]?.assetGroup ?? market.pt;
|
|
25686
26791
|
yields[assetKey] = apr;
|
|
25687
26792
|
}
|
|
25688
26793
|
});
|
|
@@ -29281,6 +30386,84 @@ var listaFetcher = {
|
|
|
29281
30386
|
getAbi: getListaAbi
|
|
29282
30387
|
};
|
|
29283
30388
|
|
|
30389
|
+
// src/prices/oracle-prices/fetchers/euler.ts
|
|
30390
|
+
var MAX_VIRTUAL_ADDRESS = 65535;
|
|
30391
|
+
function isUsdUnitOfAccount(addr) {
|
|
30392
|
+
const numeric = parseInt(addr, 16);
|
|
30393
|
+
return numeric <= MAX_VIRTUAL_ADDRESS;
|
|
30394
|
+
}
|
|
30395
|
+
function getEulerV2Calls(chainId) {
|
|
30396
|
+
if (!ENABLED_EULER_V2_CHAINS.includes(chainId)) return [];
|
|
30397
|
+
const configs = eulerConfigs() ?? {};
|
|
30398
|
+
const vaults = eulerVaults() ?? {};
|
|
30399
|
+
const results = [];
|
|
30400
|
+
for (const [lender, chainVaults] of Object.entries(vaults)) {
|
|
30401
|
+
const vaultList = chainVaults[chainId] ?? [];
|
|
30402
|
+
const config = configs[lender]?.[chainId];
|
|
30403
|
+
if (!config || vaultList.length === 0) continue;
|
|
30404
|
+
const calls = [];
|
|
30405
|
+
const meta = [];
|
|
30406
|
+
for (const vault of vaultList) {
|
|
30407
|
+
calls.push({
|
|
30408
|
+
address: config.vaultLens,
|
|
30409
|
+
name: "getVaultInfoFull",
|
|
30410
|
+
params: [vault]
|
|
30411
|
+
});
|
|
30412
|
+
meta.push({
|
|
30413
|
+
vault: vault.toLowerCase(),
|
|
30414
|
+
lender
|
|
30415
|
+
});
|
|
30416
|
+
}
|
|
30417
|
+
if (calls.length > 0) {
|
|
30418
|
+
results.push({ calls, meta, lender });
|
|
30419
|
+
}
|
|
30420
|
+
}
|
|
30421
|
+
return results;
|
|
30422
|
+
}
|
|
30423
|
+
function parseEulerV2Results(data, meta, context) {
|
|
30424
|
+
const entries = [];
|
|
30425
|
+
data.forEach((result, index) => {
|
|
30426
|
+
const queryMeta = meta[index];
|
|
30427
|
+
if (!queryMeta || !result) return;
|
|
30428
|
+
try {
|
|
30429
|
+
const priceInfo = result.liabilityPriceInfo;
|
|
30430
|
+
if (!priceInfo || priceInfo.queryFailure) return;
|
|
30431
|
+
const amountOutMid = BigInt(priceInfo.amountOutMid);
|
|
30432
|
+
if (amountOutMid === 0n) return;
|
|
30433
|
+
const unitOfAccountDecimals = BigInt(result.unitOfAccountDecimals);
|
|
30434
|
+
const priceInUoA = Number(amountOutMid) / Number(10n ** unitOfAccountDecimals);
|
|
30435
|
+
if (isNaN(priceInUoA) || priceInUoA === 0) return;
|
|
30436
|
+
const unitOfAccount = result.unitOfAccount.toLowerCase();
|
|
30437
|
+
let priceUSD;
|
|
30438
|
+
if (isUsdUnitOfAccount(unitOfAccount)) {
|
|
30439
|
+
priceUSD = priceInUoA;
|
|
30440
|
+
} else {
|
|
30441
|
+
const uoaUSD = context.usdPrices[unitOfAccount] ?? 0;
|
|
30442
|
+
if (uoaUSD === 0) return;
|
|
30443
|
+
priceUSD = priceInUoA * uoaUSD;
|
|
30444
|
+
}
|
|
30445
|
+
if (isNaN(priceUSD) || priceUSD === 0) return;
|
|
30446
|
+
const asset = result.asset.toLowerCase();
|
|
30447
|
+
entries.push({
|
|
30448
|
+
asset,
|
|
30449
|
+
price: priceInUoA,
|
|
30450
|
+
priceUSD,
|
|
30451
|
+
marketUid: createMarketUid(context.chainId, queryMeta.lender, queryMeta.vault)
|
|
30452
|
+
});
|
|
30453
|
+
} catch {
|
|
30454
|
+
}
|
|
30455
|
+
});
|
|
30456
|
+
return entries;
|
|
30457
|
+
}
|
|
30458
|
+
function getEulerV2Abi() {
|
|
30459
|
+
return vaultLensAbi;
|
|
30460
|
+
}
|
|
30461
|
+
var eulerV2Fetcher = {
|
|
30462
|
+
getCalls: getEulerV2Calls,
|
|
30463
|
+
parse: parseEulerV2Results,
|
|
30464
|
+
getAbi: getEulerV2Abi
|
|
30465
|
+
};
|
|
30466
|
+
|
|
29284
30467
|
// src/prices/oracle-prices/fetchOraclePrices.ts
|
|
29285
30468
|
async function fetchOraclePrices(chainIds, rpcOverrides, lists = {}, retries = 3, batchSize = void 0, allowFailure = true, basePrices = {}, morphoMarketOverrides, listaMarketOverrides) {
|
|
29286
30469
|
const result = {};
|
|
@@ -29288,7 +30471,8 @@ async function fetchOraclePrices(chainIds, rpcOverrides, lists = {}, retries = 3
|
|
|
29288
30471
|
...AaveOracleAbi,
|
|
29289
30472
|
...ProxyOracleAbi,
|
|
29290
30473
|
...CompoundV2OracleAbi,
|
|
29291
|
-
...ChainlinkAggregatorAbi
|
|
30474
|
+
...ChainlinkAggregatorAbi,
|
|
30475
|
+
...vaultLensAbi
|
|
29292
30476
|
];
|
|
29293
30477
|
const chainPromises = chainIds.map(async (chainId) => {
|
|
29294
30478
|
const chainResult = {};
|
|
@@ -29299,6 +30483,7 @@ async function fetchOraclePrices(chainIds, rpcOverrides, lists = {}, retries = 3
|
|
|
29299
30483
|
const listaResults = listaFetcher.getCalls(chainId, {
|
|
29300
30484
|
marketOverrides: listaMarketOverrides
|
|
29301
30485
|
});
|
|
30486
|
+
const eulerResults = eulerV2Fetcher.getCalls(chainId);
|
|
29302
30487
|
const morphoResults = morphoFetcher.getCalls(chainId, {
|
|
29303
30488
|
marketOverrides: morphoMarketOverrides
|
|
29304
30489
|
});
|
|
@@ -29344,6 +30529,16 @@ async function fetchOraclePrices(chainIds, rpcOverrides, lists = {}, retries = 3
|
|
|
29344
30529
|
});
|
|
29345
30530
|
allCalls.push(...fr.calls);
|
|
29346
30531
|
}
|
|
30532
|
+
for (const fr of eulerResults) {
|
|
30533
|
+
fetcherTracker.push({
|
|
30534
|
+
lender: fr.lender,
|
|
30535
|
+
meta: fr.meta,
|
|
30536
|
+
offset: allCalls.length,
|
|
30537
|
+
count: fr.calls.length,
|
|
30538
|
+
parse: eulerV2Fetcher.parse
|
|
30539
|
+
});
|
|
30540
|
+
allCalls.push(...fr.calls);
|
|
30541
|
+
}
|
|
29347
30542
|
for (const fr of morphoResults) {
|
|
29348
30543
|
fetcherTracker.push({
|
|
29349
30544
|
lender: fr.lender,
|
|
@@ -29949,19 +31144,20 @@ function computeEModeAnalysis(subAccount, lenderMeta, eModes) {
|
|
|
29949
31144
|
const { positions, balanceData: balanceData2, userConfig } = subAccount;
|
|
29950
31145
|
const currentMode = userConfig.selectedMode;
|
|
29951
31146
|
return Object.values(eModes).map((eMode) => {
|
|
31147
|
+
const targetMode = String(eMode.category);
|
|
29952
31148
|
const healthFactor = computeEModeSwitchHealth(
|
|
29953
31149
|
positions,
|
|
29954
31150
|
lenderMeta,
|
|
29955
31151
|
balanceData2.collateral,
|
|
29956
31152
|
balanceData2.adjustedDebt,
|
|
29957
31153
|
currentMode,
|
|
29958
|
-
|
|
31154
|
+
targetMode
|
|
29959
31155
|
);
|
|
29960
|
-
const supportedAssets = getSupportedAssets(lenderMeta,
|
|
31156
|
+
const supportedAssets = getSupportedAssets(lenderMeta, targetMode);
|
|
29961
31157
|
const canSwitch = canSwitchToEMode(
|
|
29962
31158
|
positions,
|
|
29963
31159
|
lenderMeta,
|
|
29964
|
-
|
|
31160
|
+
targetMode,
|
|
29965
31161
|
healthFactor
|
|
29966
31162
|
);
|
|
29967
31163
|
return {
|
|
@@ -30334,6 +31530,6 @@ async function fetchTokenBalances(chainId, account, tokens, options = {}) {
|
|
|
30334
31530
|
return parseTokenBalanceResult(rawResult, prepared.query);
|
|
30335
31531
|
}
|
|
30336
31532
|
|
|
30337
|
-
export { EMPTY_BALANCE, MORPHO_LENS, applyPositionDelta, attachPricesToFlashLiquidity, buildLoopResult, buildMorphoTypeCall, buildMorphoTypeUserCallWithLens, buildPortfolioTotals, buildSumerAccumulators, buildSummaries, calculateLeverage, calculateNetApr, calculateOverallNetApr, calculateWeightedAverage, computeBorrowDelta2 as computeBorrowDelta, computeCloseTradeDeltas, computeCollateralSwapDeltas, computeDebtSwapDeltas, computeDepositDelta2 as computeDepositDelta, computeEModeAnalysis, computeOpenTradeDeltas, computePostTradeMetrics, computeRepayDelta2 as computeRepayDelta, computeSumerBorrowDelta, computeSumerDepositDelta, computeSumerRepayDelta, computeSumerWaterfall, computeSumerWithdrawDelta, computeWithdrawDelta2 as computeWithdrawDelta, computeZapTradeDeltas, convertLenderUserDataResult, createMarketUid, createMulticallRpcCall, createRawRpcCalls, decodeListaMarkets, decodeMarkets, decodePackedListaUserDataset, decodePackedMorphoUserDataset, encodeBalanceFetcherCalldata, fetchDefillamaData, fetchDefillamaHistData, fetchFlashLiquidityForChain, fetchGeneralYields, fetchGeneralYieldsByMarketUid, fetchMainPrices, fetchOraclePrices, fetchPendlePrices, fetchTokenBalances, fetchTokenMetadata, filterActiveLenders, filterLendersByProtocol, fuseLenderData, generateLendingPairs, generateLendingPools, getAavesForChain, getAssetConfig, getBorrowCapacity, getHealthFactor, getLenderAssets, getLenderPublicData, getLenderPublicDataAll, getLenderPublicDataViaApi, getLenderUserDataMulti, getLenderUserDataResult, getLendersForChain, getMergedUserData, getMorphoTypeMarketConverter, getTopPairs, keysFromMaps, multicall3Abi, nanTo, needsLenderApproval, needsTokenApproval, noOpResult, normalizeToBytes, parseBalanceFetcherResult, parseMergedResult, parseMulticallRpcResponses, parseRawRpcBatchResponses, parseRawRpcResponses, parseTokenBalanceResult, positivePart2 as positivePart, prepareLenderUserDataRpcCalls, prepareMergedMulticallParams, prepareMergedRpcCalls, prepareMulticallInputs, prepareTokenBalanceRpcCalls, selectAssetGroupPrices, unflattenLenderData };
|
|
31533
|
+
export { EMPTY_BALANCE, MORPHO_LENS, applyPositionDelta, attachPricesToFlashLiquidity, buildLoopResult, buildMorphoTypeCall, buildMorphoTypeUserCallWithLens, buildPortfolioTotals, buildSumerAccumulators, buildSummaries, calculateLeverage, calculateNetApr, calculateOverallNetApr, calculateWeightedAverage, computeBorrowDelta2 as computeBorrowDelta, computeCloseTradeDeltas, computeCollateralSwapDeltas, computeDebtSwapDeltas, computeDepositDelta2 as computeDepositDelta, computeEModeAnalysis, computeOpenTradeDeltas, computePostTradeMetrics, computeRepayDelta2 as computeRepayDelta, computeSumerBorrowDelta, computeSumerDepositDelta, computeSumerRepayDelta, computeSumerWaterfall, computeSumerWithdrawDelta, computeWithdrawDelta2 as computeWithdrawDelta, computeZapTradeDeltas, convertLenderUserDataResult, createMarketUid, createMulticallRpcCall, createRawRpcCalls, decodeListaMarkets, decodeMarkets, decodePackedListaUserDataset, decodePackedMorphoUserDataset, encodeBalanceFetcherCalldata, fetchDefillamaData, fetchDefillamaHistData, fetchFlashLiquidityForChain, fetchGeneralYields, fetchGeneralYieldsByMarketUid, fetchMainPrices, fetchOraclePrices, fetchPendlePrices, fetchTokenBalances, fetchTokenMetadata, filterActiveLenders, filterLendersByProtocol, fuseLenderData, generateLendingPairs, generateLendingPools, getAavesForChain, getAssetConfig, getBalanceForMarketUid, getBorrowCapacity, getHealthFactor, getLenderAssets, getLenderPublicData, getLenderPublicDataAll, getLenderPublicDataViaApi, getLenderUserDataMulti, getLenderUserDataResult, getLendersForChain, getMergedUserData, getMorphoTypeMarketConverter, getTopPairs, keysFromMaps, multicall3Abi, nanTo, needsLenderApproval, needsTokenApproval, noOpResult, normalizeToBytes, parseBalanceFetcherResult, parseMergedResult, parseMulticallRpcResponses, parseRawRpcBatchResponses, parseRawRpcResponses, parseTokenBalanceResult, positivePart2 as positivePart, prepareLenderUserDataRpcCalls, prepareMergedMulticallParams, prepareMergedRpcCalls, prepareMulticallInputs, prepareTokenBalanceRpcCalls, selectAssetGroupPrices, unflattenLenderData };
|
|
30338
31534
|
//# sourceMappingURL=index.js.map
|
|
30339
31535
|
//# sourceMappingURL=index.js.map
|