@1delta/margin-fetcher 0.0.170 → 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.js +1306 -137
- package/dist/index.js.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 +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/types.d.ts +2 -1
- package/dist/lending/user-data/utils/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/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 +6 -6
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;
|
|
@@ -10886,18 +10914,17 @@ function createBaseTypeUserState(payload, lenderData, totalDeposits24h = 0, tota
|
|
|
10886
10914
|
debt += debtUSD;
|
|
10887
10915
|
oracleDebt += debtStableUSDOracle;
|
|
10888
10916
|
oracleDebt += debtUSDOracle;
|
|
10889
|
-
|
|
10890
|
-
|
|
10891
|
-
|
|
10892
|
-
|
|
10893
|
-
|
|
10894
|
-
|
|
10895
|
-
|
|
10896
|
-
|
|
10897
|
-
|
|
10898
|
-
|
|
10899
|
-
|
|
10900
|
-
);
|
|
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
|
+
});
|
|
10901
10928
|
stakingDepositAccrual += (intrinsicYield ?? 0) * depositsUSD;
|
|
10902
10929
|
stakingBorrowAccrual += (intrinsicYield ?? 0) * (debtStableUSD + debtUSD);
|
|
10903
10930
|
if (flags?.collateralActive || userConfigForAsset && !userConfigForAsset.collateralDisabled) {
|
|
@@ -11152,13 +11179,13 @@ function getIntrinsicYieldRepay(amountUSD, cashFlowDeposits, cashFlowDebt, depos
|
|
|
11152
11179
|
// src/lending/margin/base/yield/getRewardYieldChange.ts
|
|
11153
11180
|
function getRewardYieldDeposit(amountUSD, cashFlowDeposits, cashFlowDebt, deposits, debt, yieldParams) {
|
|
11154
11181
|
const rewards = yieldParams?.rewards;
|
|
11155
|
-
if (!rewards) return {};
|
|
11182
|
+
if (!Array.isArray(rewards) || rewards.length === 0) return {};
|
|
11156
11183
|
const data = {};
|
|
11157
|
-
for (const
|
|
11158
|
-
const _flowOut = amountUSD * (
|
|
11184
|
+
for (const reward of rewards) {
|
|
11185
|
+
const _flowOut = amountUSD * (reward.depositRate ?? 0);
|
|
11159
11186
|
const totalCashFlowDeposits = cashFlowDeposits + _flowOut;
|
|
11160
11187
|
const newCollat = deposits + amountUSD;
|
|
11161
|
-
data[
|
|
11188
|
+
data[reward.asset] = {
|
|
11162
11189
|
borrowApr: Math.abs(debt) < 0.01 ? 0 : cashFlowDebt / debt,
|
|
11163
11190
|
depositApr: totalCashFlowDeposits / newCollat,
|
|
11164
11191
|
apr: (cashFlowDeposits + cashFlowDebt + _flowOut) / (newCollat - debt)
|
|
@@ -11168,13 +11195,13 @@ function getRewardYieldDeposit(amountUSD, cashFlowDeposits, cashFlowDebt, deposi
|
|
|
11168
11195
|
}
|
|
11169
11196
|
function getRewardYieldBorrow(amountUSD, irMode, cashFlowDeposits, cashFlowDebt, deposits, debt, yieldParams) {
|
|
11170
11197
|
const rewards = yieldParams?.rewards;
|
|
11171
|
-
if (!rewards) return {};
|
|
11198
|
+
if (!Array.isArray(rewards) || rewards.length === 0) return {};
|
|
11172
11199
|
const data = {};
|
|
11173
|
-
for (const
|
|
11174
|
-
const _flowIn = amountUSD * ((irMode === 1 ?
|
|
11200
|
+
for (const reward of rewards) {
|
|
11201
|
+
const _flowIn = amountUSD * ((irMode === 1 ? reward.stableBorrowRate : reward.variableBorrowRate) ?? 0);
|
|
11175
11202
|
const totalCashFlowDebt = cashFlowDebt + _flowIn;
|
|
11176
11203
|
const newDebt = debt + amountUSD;
|
|
11177
|
-
data[
|
|
11204
|
+
data[reward.asset] = {
|
|
11178
11205
|
borrowApr: totalCashFlowDebt / newDebt,
|
|
11179
11206
|
depositApr: Math.abs(deposits) < 0.01 ? 0 : cashFlowDeposits / deposits,
|
|
11180
11207
|
apr: (cashFlowDeposits + cashFlowDebt + _flowIn) / (deposits - newDebt)
|
|
@@ -11184,13 +11211,13 @@ function getRewardYieldBorrow(amountUSD, irMode, cashFlowDeposits, cashFlowDebt,
|
|
|
11184
11211
|
}
|
|
11185
11212
|
function getRewardYieldWithdraw(amountUSD, cashFlowDeposits, cashFlowDebt, deposits, debt, yieldParams) {
|
|
11186
11213
|
const rewards = yieldParams?.rewards;
|
|
11187
|
-
if (!rewards) return {};
|
|
11214
|
+
if (!Array.isArray(rewards) || rewards.length === 0) return {};
|
|
11188
11215
|
const data = {};
|
|
11189
|
-
for (const
|
|
11190
|
-
const _flowIn = amountUSD * (
|
|
11216
|
+
for (const reward of rewards) {
|
|
11217
|
+
const _flowIn = amountUSD * (reward.depositRate ?? 0);
|
|
11191
11218
|
const totalCashFlowDeposits = cashFlowDeposits - _flowIn;
|
|
11192
11219
|
const newCollat = deposits - amountUSD;
|
|
11193
|
-
data[
|
|
11220
|
+
data[reward.asset] = {
|
|
11194
11221
|
borrowApr: Math.abs(debt) < 0.01 ? 0 : cashFlowDebt / debt,
|
|
11195
11222
|
depositApr: totalCashFlowDeposits / newCollat,
|
|
11196
11223
|
apr: (cashFlowDeposits + cashFlowDebt - _flowIn) / (newCollat - debt)
|
|
@@ -11200,13 +11227,13 @@ function getRewardYieldWithdraw(amountUSD, cashFlowDeposits, cashFlowDebt, depos
|
|
|
11200
11227
|
}
|
|
11201
11228
|
function getRewardYieldRepay(amountUSD, irMode, cashFlowDeposits, cashFlowDebt, deposits, debt, yieldParams) {
|
|
11202
11229
|
const rewards = yieldParams?.rewards;
|
|
11203
|
-
if (!rewards) return {};
|
|
11230
|
+
if (!Array.isArray(rewards) || rewards.length === 0) return {};
|
|
11204
11231
|
const data = {};
|
|
11205
|
-
for (const
|
|
11206
|
-
const _flowOut = amountUSD * ((irMode === 1 ?
|
|
11232
|
+
for (const reward of rewards) {
|
|
11233
|
+
const _flowOut = amountUSD * ((irMode === 1 ? reward.stableBorrowRate : reward.variableBorrowRate) ?? 0);
|
|
11207
11234
|
const totalCashFlowDebt = cashFlowDebt - _flowOut;
|
|
11208
11235
|
const newDebt = debt - amountUSD;
|
|
11209
|
-
data[
|
|
11236
|
+
data[reward.asset] = {
|
|
11210
11237
|
borrowApr: Math.abs(newDebt) < 0.01 ? 0 : totalCashFlowDebt / newDebt,
|
|
11211
11238
|
depositApr: Math.abs(deposits) < 0.01 ? 0 : cashFlowDeposits / deposits,
|
|
11212
11239
|
apr: (cashFlowDeposits + cashFlowDebt - _flowOut) / (deposits - newDebt)
|
|
@@ -11611,18 +11638,17 @@ function createSumerUserState(payload, lenderData, totalDeposits24h = 0, totalDe
|
|
|
11611
11638
|
debt += debtUSD;
|
|
11612
11639
|
oracleDebt += debtStableUSDOracle;
|
|
11613
11640
|
oracleDebt += debtUSDOracle;
|
|
11614
|
-
|
|
11615
|
-
|
|
11616
|
-
|
|
11617
|
-
|
|
11618
|
-
|
|
11619
|
-
|
|
11620
|
-
|
|
11621
|
-
|
|
11622
|
-
|
|
11623
|
-
|
|
11624
|
-
|
|
11625
|
-
);
|
|
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
|
+
});
|
|
11626
11652
|
stakingDepositAccrual += (intrinsicYield ?? 0) * depositsUSD;
|
|
11627
11653
|
stakingBorrowAccrual += (intrinsicYield ?? 0) * (debtStableUSD + debtUSD);
|
|
11628
11654
|
if (sumerMeta) {
|
|
@@ -11684,7 +11710,7 @@ function createSumerUserState(payload, lenderData, totalDeposits24h = 0, totalDe
|
|
|
11684
11710
|
intrinsicDepositApr: safeDivide(stakingDepositAccrual, deposits),
|
|
11685
11711
|
intrinsicBorrowApr: safeDivide(stakingBorrowAccrual, debt)
|
|
11686
11712
|
};
|
|
11687
|
-
const userConfig = { selectedMode: 0, id: account, isWhitelisted };
|
|
11713
|
+
const userConfig = { selectedMode: "0", id: account, isWhitelisted };
|
|
11688
11714
|
const creditLine = Math.max(
|
|
11689
11715
|
0,
|
|
11690
11716
|
borrowDiscountedCollateral - balanceData2.adjustedDebt
|
|
@@ -11778,7 +11804,7 @@ function createMultiAccountTypeUserState(payload, lenderData, histData) {
|
|
|
11778
11804
|
for (let j = 0; j < positionKeys.length; j++) {
|
|
11779
11805
|
const posId = positionKeys[j];
|
|
11780
11806
|
const posMode = payload.modes?.[posId];
|
|
11781
|
-
const mode = posMode ?? LENDER_MODE_NO_MODE;
|
|
11807
|
+
const mode = String(posMode ?? LENDER_MODE_NO_MODE);
|
|
11782
11808
|
const userConfig = {
|
|
11783
11809
|
id: posId,
|
|
11784
11810
|
selectedMode: mode,
|
|
@@ -11812,9 +11838,9 @@ function createMultiAccountTypeUserState(payload, lenderData, histData) {
|
|
|
11812
11838
|
} = lenderData[marketUid];
|
|
11813
11839
|
deposits += depositsUSD;
|
|
11814
11840
|
debt += debtUSD;
|
|
11815
|
-
|
|
11841
|
+
(rewards ?? []).forEach((rewardData) => {
|
|
11816
11842
|
rewardDepositAccrual += rewardData.depositRate * depositsUSD;
|
|
11817
|
-
rewardBorrowAccrual += rewardData.variableBorrowRate * debtUSD + rewardData.stableBorrowRate * debtUSD;
|
|
11843
|
+
rewardBorrowAccrual += rewardData.variableBorrowRate * debtUSD + (rewardData.stableBorrowRate ?? 0) * debtUSD;
|
|
11818
11844
|
});
|
|
11819
11845
|
stakingDepositAccrual += (intrinsicYield ?? 0) * depositsUSD;
|
|
11820
11846
|
stakingBorrowAccrual += (intrinsicYield ?? 0) * debtUSD;
|
|
@@ -11994,7 +12020,15 @@ function convertMarketsToMorphoResponse(response, chainId, additionalYields = {
|
|
|
11994
12020
|
if (collateralAsset && loanAsset && oracleAddress && oracleAddress !== zeroAddress) {
|
|
11995
12021
|
const m = "MORPHO_BLUE_" + uniqueKey.slice(2).toUpperCase();
|
|
11996
12022
|
if (!data[m]) data[m] = { data: {} };
|
|
11997
|
-
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
|
+
});
|
|
11998
12032
|
const loanAssetAddress = loanAsset.address.toLowerCase();
|
|
11999
12033
|
const meta = tokens[loanAssetAddress] ?? loanAsset;
|
|
12000
12034
|
const totalDeposits = formatNr(state.supplyAssets, loanAsset.decimals);
|
|
@@ -12016,8 +12050,8 @@ function convertMarketsToMorphoResponse(response, chainId, additionalYields = {
|
|
|
12016
12050
|
depositRate: apyToApr2(Number(state.supplyApy)) * 100,
|
|
12017
12051
|
variableBorrowRate: apyToApr2(Number(state.borrowApy)) * 100,
|
|
12018
12052
|
stableBorrowRate: 0,
|
|
12019
|
-
intrinsicYield: additionalYields
|
|
12020
|
-
rewards:
|
|
12053
|
+
intrinsicYield: additionalYields?.intrinsicYields?.[meta?.assetGroup] ?? 0,
|
|
12054
|
+
rewards: loanRewards.length > 0 ? loanRewards : void 0,
|
|
12021
12055
|
decimals: loanAsset.decimals,
|
|
12022
12056
|
config: {
|
|
12023
12057
|
0: {
|
|
@@ -12065,7 +12099,7 @@ function convertMarketsToMorphoResponse(response, chainId, additionalYields = {
|
|
|
12065
12099
|
depositRate: 0,
|
|
12066
12100
|
variableBorrowRate: 0,
|
|
12067
12101
|
stableBorrowRate: 0,
|
|
12068
|
-
intrinsicYield: additionalYields
|
|
12102
|
+
intrinsicYield: additionalYields?.intrinsicYields?.[metaCollateral?.assetGroup] ?? 0,
|
|
12069
12103
|
rewards: void 0,
|
|
12070
12104
|
decimals: collateralAsset.decimals,
|
|
12071
12105
|
config: {
|
|
@@ -12139,12 +12173,9 @@ query GetMarkets {
|
|
|
12139
12173
|
rewards {
|
|
12140
12174
|
asset {
|
|
12141
12175
|
address
|
|
12142
|
-
name
|
|
12143
|
-
symbol
|
|
12144
|
-
decimals
|
|
12145
12176
|
}
|
|
12146
|
-
|
|
12147
|
-
|
|
12177
|
+
supplyApr
|
|
12178
|
+
borrowApr
|
|
12148
12179
|
}
|
|
12149
12180
|
borrowAssets
|
|
12150
12181
|
borrowAssetsUsd
|
|
@@ -12643,7 +12674,7 @@ function getListaMarketDataConverter(lender, chainId, prices, additionalYields =
|
|
|
12643
12674
|
if (collateralToken && loanToken && oracle && oracle !== zeroAddress) {
|
|
12644
12675
|
const m = "LISTA_DAO_" + uniqueKey.slice(2).toUpperCase();
|
|
12645
12676
|
if (!data[m]) data[m] = { data: {} };
|
|
12646
|
-
const loanRewards =
|
|
12677
|
+
const loanRewards = [];
|
|
12647
12678
|
const loanTokenAddress = loanToken.toLowerCase();
|
|
12648
12679
|
const collateralAssetAddress = collateralToken.toLowerCase();
|
|
12649
12680
|
const loanAsset = tokens[loanTokenAddress];
|
|
@@ -12702,8 +12733,8 @@ function getListaMarketDataConverter(lender, chainId, prices, additionalYields =
|
|
|
12702
12733
|
depositRate: depositApr,
|
|
12703
12734
|
variableBorrowRate: borrowApr,
|
|
12704
12735
|
stableBorrowRate: 0,
|
|
12705
|
-
intrinsicYield: additionalYields
|
|
12706
|
-
rewards:
|
|
12736
|
+
intrinsicYield: additionalYields?.intrinsicYields?.[meta?.assetGroup] ?? 0,
|
|
12737
|
+
rewards: loanRewards.length > 0 ? loanRewards : void 0,
|
|
12707
12738
|
decimals: loanDecimals,
|
|
12708
12739
|
config: {
|
|
12709
12740
|
0: {
|
|
@@ -12741,7 +12772,7 @@ function getListaMarketDataConverter(lender, chainId, prices, additionalYields =
|
|
|
12741
12772
|
depositRate: 0,
|
|
12742
12773
|
variableBorrowRate: 0,
|
|
12743
12774
|
stableBorrowRate: 0,
|
|
12744
|
-
intrinsicYield: additionalYields
|
|
12775
|
+
intrinsicYield: additionalYields?.intrinsicYields?.[metaCollateral?.assetGroup] ?? 0,
|
|
12745
12776
|
rewards: void 0,
|
|
12746
12777
|
decimals: collateralDecimals,
|
|
12747
12778
|
config: {
|
|
@@ -12842,7 +12873,7 @@ function getMorphoMarketDataConverter(lender, chainId, prices, additionalYields
|
|
|
12842
12873
|
if (collateralToken && loanToken && oracle && collateralToken !== zeroAddress && loanToken !== zeroAddress) {
|
|
12843
12874
|
const m = "MORPHO_BLUE_" + uniqueKey.slice(2).toUpperCase();
|
|
12844
12875
|
if (!data[m]) data[m] = { data: {} };
|
|
12845
|
-
const loanRewards =
|
|
12876
|
+
const loanRewards = [];
|
|
12846
12877
|
const loanAsset = tokens[loanToken.toLowerCase()];
|
|
12847
12878
|
const collateralAsset = tokens[collateralToken.toLowerCase()];
|
|
12848
12879
|
const loanDecimals = loanAsset?.decimals ?? 18;
|
|
@@ -12903,8 +12934,8 @@ function getMorphoMarketDataConverter(lender, chainId, prices, additionalYields
|
|
|
12903
12934
|
depositRate: depositApr,
|
|
12904
12935
|
variableBorrowRate: borrowApr,
|
|
12905
12936
|
stableBorrowRate: 0,
|
|
12906
|
-
intrinsicYield: additionalYields
|
|
12907
|
-
rewards:
|
|
12937
|
+
intrinsicYield: additionalYields?.intrinsicYields?.[meta?.assetGroup] ?? 0,
|
|
12938
|
+
rewards: loanRewards.length > 0 ? loanRewards : void 0,
|
|
12908
12939
|
decimals: loanDecimals,
|
|
12909
12940
|
config: {
|
|
12910
12941
|
0: {
|
|
@@ -12925,7 +12956,11 @@ function getMorphoMarketDataConverter(lender, chainId, prices, additionalYields
|
|
|
12925
12956
|
const ltv = parseLtv(lltv);
|
|
12926
12957
|
const collateralAssetAddress = (collateralAsset?.address ?? collateralToken).toLowerCase();
|
|
12927
12958
|
const metaCollateral = tokens[collateralAssetAddress] ?? collateralAsset;
|
|
12928
|
-
const collateralMarketUid = createMarketUid(
|
|
12959
|
+
const collateralMarketUid = createMarketUid(
|
|
12960
|
+
chainId,
|
|
12961
|
+
m,
|
|
12962
|
+
collateralAssetAddress
|
|
12963
|
+
);
|
|
12929
12964
|
data[m].data[collateralMarketUid] = {
|
|
12930
12965
|
marketUid: collateralMarketUid,
|
|
12931
12966
|
poolId: collateralAssetAddress,
|
|
@@ -12943,7 +12978,7 @@ function getMorphoMarketDataConverter(lender, chainId, prices, additionalYields
|
|
|
12943
12978
|
depositRate: 0,
|
|
12944
12979
|
variableBorrowRate: 0,
|
|
12945
12980
|
stableBorrowRate: 0,
|
|
12946
|
-
intrinsicYield: additionalYields
|
|
12981
|
+
intrinsicYield: additionalYields?.intrinsicYields?.[metaCollateral?.assetGroup] ?? 0,
|
|
12947
12982
|
rewards: void 0,
|
|
12948
12983
|
decimals: collateralDecimals,
|
|
12949
12984
|
config: {
|
|
@@ -15528,7 +15563,7 @@ function convertSingleEntry(opts) {
|
|
|
15528
15563
|
totalDepositsUSD: totalSupplyUnderlying * price,
|
|
15529
15564
|
totalDebtStable: 0,
|
|
15530
15565
|
totalDebtStableUSD: 0,
|
|
15531
|
-
intrinsicYield: additionalYields
|
|
15566
|
+
intrinsicYield: additionalYields?.intrinsicYields?.[asset.assetGroup] ?? 0,
|
|
15532
15567
|
config: {
|
|
15533
15568
|
[LENDER_MODE_NO_MODE]: {
|
|
15534
15569
|
category: LENDER_MODE_NO_MODE,
|
|
@@ -15544,7 +15579,7 @@ function convertSingleEntry(opts) {
|
|
|
15544
15579
|
underlying: asset.address,
|
|
15545
15580
|
isActive: Boolean(currentEntry?.isListed) && !allPaused,
|
|
15546
15581
|
isFrozen: pausedActions[0 /* MINT */] && pausedActions[2 /* BORROW */],
|
|
15547
|
-
rewards:
|
|
15582
|
+
rewards: [],
|
|
15548
15583
|
collateralActive,
|
|
15549
15584
|
borrowingEnabled,
|
|
15550
15585
|
params: {
|
|
@@ -15627,13 +15662,13 @@ function convertSumerEntry(opts) {
|
|
|
15627
15662
|
totalDepositsUSD: totalSupplyUnderlying * price,
|
|
15628
15663
|
totalDebtStable: 0,
|
|
15629
15664
|
totalDebtStableUSD: 0,
|
|
15630
|
-
stakingYield: additionalYields
|
|
15665
|
+
stakingYield: additionalYields?.intrinsicYields?.[asset.assetGroup] ?? 0,
|
|
15631
15666
|
config,
|
|
15632
15667
|
hasStable: false,
|
|
15633
15668
|
underlying: asset.address,
|
|
15634
15669
|
isActive: Boolean(currentEntry.isListed),
|
|
15635
15670
|
isFrozen: false,
|
|
15636
|
-
rewards:
|
|
15671
|
+
rewards: [],
|
|
15637
15672
|
collateralActive,
|
|
15638
15673
|
borrowingEnabled,
|
|
15639
15674
|
params: {
|
|
@@ -15688,7 +15723,7 @@ function convertTakaraEntry(opts) {
|
|
|
15688
15723
|
totalDepositsUSD: totalSupplyUSD,
|
|
15689
15724
|
totalDebtStable: 0,
|
|
15690
15725
|
totalDebtStableUSD: 0,
|
|
15691
|
-
intrinsicYield: additionalYields
|
|
15726
|
+
intrinsicYield: additionalYields?.intrinsicYields?.[asset.assetGroup] ?? 0,
|
|
15692
15727
|
config: {
|
|
15693
15728
|
[LENDER_MODE_NO_MODE]: {
|
|
15694
15729
|
category: LENDER_MODE_NO_MODE,
|
|
@@ -15703,7 +15738,7 @@ function convertTakaraEntry(opts) {
|
|
|
15703
15738
|
underlying: asset.address,
|
|
15704
15739
|
isActive: info.isListed,
|
|
15705
15740
|
isFrozen: false,
|
|
15706
|
-
rewards:
|
|
15741
|
+
rewards: [],
|
|
15707
15742
|
collateralActive: info.isListed,
|
|
15708
15743
|
borrowingEnabled: info.isListed,
|
|
15709
15744
|
params: {
|
|
@@ -15751,7 +15786,7 @@ function convertTectonicEntry(opts) {
|
|
|
15751
15786
|
totalDepositsUSD: totalSupplyUnderlying * price,
|
|
15752
15787
|
totalDebtStable: 0,
|
|
15753
15788
|
totalDebtStableUSD: 0,
|
|
15754
|
-
intrinsicYield: additionalYields
|
|
15789
|
+
intrinsicYield: additionalYields?.intrinsicYields?.[asset.assetGroup] ?? 0,
|
|
15755
15790
|
config: {
|
|
15756
15791
|
[LENDER_MODE_NO_MODE]: {
|
|
15757
15792
|
category: LENDER_MODE_NO_MODE,
|
|
@@ -15766,7 +15801,7 @@ function convertTectonicEntry(opts) {
|
|
|
15766
15801
|
underlying: asset.address,
|
|
15767
15802
|
isActive: info.asCollateralEnabled,
|
|
15768
15803
|
isFrozen: false,
|
|
15769
|
-
rewards:
|
|
15804
|
+
rewards: [],
|
|
15770
15805
|
collateralActive: info.asCollateralEnabled,
|
|
15771
15806
|
borrowingEnabled: info.asCollateralEnabled,
|
|
15772
15807
|
params: {
|
|
@@ -15913,7 +15948,7 @@ function convertBenqiEntry(opts) {
|
|
|
15913
15948
|
totalDepositsUSD: totalDeposits * price,
|
|
15914
15949
|
totalDebtStable: 0,
|
|
15915
15950
|
totalDebtStableUSD: 0,
|
|
15916
|
-
intrinsicYield: additionalYields
|
|
15951
|
+
intrinsicYield: additionalYields?.intrinsicYields?.[asset.assetGroup] ?? 0,
|
|
15917
15952
|
config: {
|
|
15918
15953
|
[LENDER_MODE_NO_MODE]: {
|
|
15919
15954
|
category: LENDER_MODE_NO_MODE,
|
|
@@ -15928,7 +15963,7 @@ function convertBenqiEntry(opts) {
|
|
|
15928
15963
|
underlying: asset.address,
|
|
15929
15964
|
isActive: !parsed.mintPaused || !parsed.borrowPaused,
|
|
15930
15965
|
isFrozen: parsed.mintPaused && parsed.borrowPaused,
|
|
15931
|
-
rewards:
|
|
15966
|
+
rewards: [],
|
|
15932
15967
|
collateralActive,
|
|
15933
15968
|
borrowingEnabled,
|
|
15934
15969
|
params: {
|
|
@@ -17052,6 +17087,634 @@ var VenusLensAbi = [
|
|
|
17052
17087
|
}
|
|
17053
17088
|
];
|
|
17054
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
|
+
|
|
17055
17718
|
// src/lending/public-data/fetchLender.ts
|
|
17056
17719
|
function getMorphoTypeMarketConverter(lender, chainId, prices, additionalYields, tokenList = {}, marketsOverride) {
|
|
17057
17720
|
if (lender.startsWith("LISTA_DAO"))
|
|
@@ -17085,6 +17748,8 @@ function buildLenderCall(chainId, lender) {
|
|
|
17085
17748
|
}
|
|
17086
17749
|
if (isCompoundV2Type(lender))
|
|
17087
17750
|
return buildCompoundV2StyleLenderReserveCall(chainId, lender);
|
|
17751
|
+
if (isEulerType(lender))
|
|
17752
|
+
return buildEulerV2LenderReserveCall(chainId, lender);
|
|
17088
17753
|
return [];
|
|
17089
17754
|
}
|
|
17090
17755
|
function getLenderDataConverter(lender, chainId, prices, additionalYields, tokenList = {}) {
|
|
@@ -17137,6 +17802,14 @@ function getLenderDataConverter(lender, chainId, prices, additionalYields, token
|
|
|
17137
17802
|
additionalYields,
|
|
17138
17803
|
tokenList
|
|
17139
17804
|
);
|
|
17805
|
+
if (isEulerType(lender))
|
|
17806
|
+
return getEulerV2ReservesDataConverter(
|
|
17807
|
+
lender,
|
|
17808
|
+
chainId,
|
|
17809
|
+
prices,
|
|
17810
|
+
additionalYields,
|
|
17811
|
+
tokenList
|
|
17812
|
+
);
|
|
17140
17813
|
return [() => null, 0];
|
|
17141
17814
|
}
|
|
17142
17815
|
var getAbi = (lender) => {
|
|
@@ -17155,6 +17828,7 @@ var getAbi = (lender) => {
|
|
|
17155
17828
|
if (isCompoundV3(lender)) return [...IrgetterAbi, ...CometAbi, ...CometExtAbi];
|
|
17156
17829
|
if (isInit(lender)) return InitLensAbi;
|
|
17157
17830
|
if (isMorphoType(lender)) return MorphoLensAbi;
|
|
17831
|
+
if (isEulerType(lender)) return vaultLensAbi;
|
|
17158
17832
|
if (isSumerType(lender)) return [...SumerLensAbi, ...SumerComptrollerAbi];
|
|
17159
17833
|
if (lender === Lender.TAKARA) return [...TakaraMarketStateAbi];
|
|
17160
17834
|
if (isCompoundV2Type(lender)) return VenusLensAbi;
|
|
@@ -17535,6 +18209,37 @@ function createCompoundV2Entry(i, data, key, assetsIn, vToken, meta, claimableRe
|
|
|
17535
18209
|
};
|
|
17536
18210
|
}
|
|
17537
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
|
+
|
|
17538
18243
|
// src/lending/user-data/fetch-balances/prepare.ts
|
|
17539
18244
|
function buildUserCall(chainId, lender, account, params) {
|
|
17540
18245
|
if (isAaveV2Type(lender)) return buildAaveV2UserCall(chainId, lender, account);
|
|
@@ -17544,6 +18249,8 @@ function buildUserCall(chainId, lender, account, params) {
|
|
|
17544
18249
|
return buildMorphoTypeUserCallWithLens(chainId, account, lender, params);
|
|
17545
18250
|
if (isCompoundV3Type(lender))
|
|
17546
18251
|
return buildCompoundV3UserCall(chainId, lender, account);
|
|
18252
|
+
if (isEulerType(lender))
|
|
18253
|
+
return buildEulerUserCall(chainId, lender, account);
|
|
17547
18254
|
return buildCompoundV2UserCall(chainId, lender, account);
|
|
17548
18255
|
}
|
|
17549
18256
|
function organizeUserQueries(queries) {
|
|
@@ -18198,7 +18905,7 @@ var userDataEmpty = (account, chainId, notWhitelisted = false) => {
|
|
|
18198
18905
|
balanceData,
|
|
18199
18906
|
aprData,
|
|
18200
18907
|
positions: [],
|
|
18201
|
-
userConfig: { selectedMode: 0, id: account, notWhitelisted }
|
|
18908
|
+
userConfig: { selectedMode: "0", id: account, notWhitelisted }
|
|
18202
18909
|
}
|
|
18203
18910
|
]
|
|
18204
18911
|
};
|
|
@@ -18429,6 +19136,266 @@ function createMorphoEntryFromMarketWithLens(balanceInfo, metaMap, chainId, lend
|
|
|
18429
19136
|
};
|
|
18430
19137
|
}
|
|
18431
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
|
+
|
|
18432
19399
|
// src/lending/user-data/fetch-balances/parse.ts
|
|
18433
19400
|
function getUserDataConverter(lender, chainId, account, params, meta) {
|
|
18434
19401
|
if (isYLDR(lender))
|
|
@@ -18454,6 +19421,8 @@ function getUserDataConverter(lender, chainId, account, params, meta) {
|
|
|
18454
19421
|
account,
|
|
18455
19422
|
meta?.[lender]
|
|
18456
19423
|
);
|
|
19424
|
+
if (isEulerType(lender))
|
|
19425
|
+
return getEulerUserDataConverter(lender, chainId, account, meta?.[lender]);
|
|
18457
19426
|
return getCompoundV2UserDataConverter(
|
|
18458
19427
|
lender,
|
|
18459
19428
|
chainId,
|
|
@@ -23000,6 +23969,111 @@ var CompoundV2CollateralToken = [
|
|
|
23000
23969
|
}
|
|
23001
23970
|
];
|
|
23002
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
|
+
|
|
23003
24077
|
// src/lending/user-data/abis.ts
|
|
23004
24078
|
var getAbi2 = (lender) => {
|
|
23005
24079
|
if (isAaveV2Type(lender))
|
|
@@ -23024,6 +24098,7 @@ var getAbi2 = (lender) => {
|
|
|
23024
24098
|
return [...CometAbi, ...CometExtAbi, ...CometRewardsAbi];
|
|
23025
24099
|
if (isMorphoType(lender)) return [...MorphoBlueAbi, ...MorphoLensAbi];
|
|
23026
24100
|
if (isInit(lender)) return InitLensAbi;
|
|
24101
|
+
if (isEulerType(lender)) return accountLensAbi;
|
|
23027
24102
|
if (isCompoundV2Type(lender))
|
|
23028
24103
|
return [...ComptrollerAbi, ...CompoundV2CollateralToken];
|
|
23029
24104
|
return [];
|
|
@@ -24113,6 +25188,11 @@ function keysFromMaps(a, b) {
|
|
|
24113
25188
|
if (b) for (const k of Object.keys(b)) set.add(k);
|
|
24114
25189
|
return [...set];
|
|
24115
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
|
+
}
|
|
24116
25196
|
function noOpResult(balance, apr) {
|
|
24117
25197
|
const hf = getHealthFactor2(balance.collateral, balance.adjustedDebt);
|
|
24118
25198
|
const bc = balance.collateral - balance.adjustedDebt;
|
|
@@ -24189,13 +25269,13 @@ function getOrganicYieldCollateralSwap(amountInUSD, amountOutUSD, cashFlowDeposi
|
|
|
24189
25269
|
|
|
24190
25270
|
// src/lending/margin/loop/yield/getRewardYieldChange.ts
|
|
24191
25271
|
function getRewardYieldOpen(amountInUSD, amountOutUSD, irModeIn, cashFlowDeposits, cashFlowDebt, deposits, debt, yieldIn, yieldOut) {
|
|
24192
|
-
const
|
|
24193
|
-
const
|
|
24194
|
-
if (!
|
|
25272
|
+
const mapIn = rewardsToMap(yieldIn?.rewards);
|
|
25273
|
+
const mapOut = rewardsToMap(yieldOut?.rewards);
|
|
25274
|
+
if (!yieldIn?.rewards?.length && !yieldOut?.rewards?.length) return {};
|
|
24195
25275
|
const data = {};
|
|
24196
|
-
for (const key of keysFromMaps(
|
|
24197
|
-
const _flowIn = amountInUSD * ((irModeIn === 1 ?
|
|
24198
|
-
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);
|
|
24199
25279
|
const totalCashFlowDebt = cashFlowDebt + _flowIn;
|
|
24200
25280
|
const totalCashFlowDeposits = cashFlowDeposits + _flowOut;
|
|
24201
25281
|
const newCollat = deposits + amountOutUSD;
|
|
@@ -24209,13 +25289,13 @@ function getRewardYieldOpen(amountInUSD, amountOutUSD, irModeIn, cashFlowDeposit
|
|
|
24209
25289
|
return data;
|
|
24210
25290
|
}
|
|
24211
25291
|
function getRewardYieldClose(amountInUSD, amountOutUSD, irModeOut, cashFlowDeposits, cashFlowDebt, deposits, debt, yieldIn, yieldOut) {
|
|
24212
|
-
const
|
|
24213
|
-
const
|
|
24214
|
-
if (!
|
|
25292
|
+
const mapIn = rewardsToMap(yieldIn?.rewards);
|
|
25293
|
+
const mapOut = rewardsToMap(yieldOut?.rewards);
|
|
25294
|
+
if (!yieldIn?.rewards?.length && !yieldOut?.rewards?.length) return {};
|
|
24215
25295
|
const data = {};
|
|
24216
|
-
for (const key of keysFromMaps(
|
|
24217
|
-
const _flowIn = amountInUSD * (
|
|
24218
|
-
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);
|
|
24219
25299
|
const totalCashFlowDebt = cashFlowDebt - _flowOut;
|
|
24220
25300
|
const totalCashFlowDeposits = cashFlowDeposits - _flowIn;
|
|
24221
25301
|
const newCollat = deposits - amountInUSD;
|
|
@@ -24229,13 +25309,13 @@ function getRewardYieldClose(amountInUSD, amountOutUSD, irModeOut, cashFlowDepos
|
|
|
24229
25309
|
return data;
|
|
24230
25310
|
}
|
|
24231
25311
|
function getRewardYieldDebtSwap(amountInUSD, amountOutUSD, irModeIn, irModeOut, cashFlowDeposits, cashFlowDebt, deposits, debt, yieldIn, yieldOut) {
|
|
24232
|
-
const
|
|
24233
|
-
const
|
|
24234
|
-
if (!
|
|
25312
|
+
const mapIn = rewardsToMap(yieldIn?.rewards);
|
|
25313
|
+
const mapOut = rewardsToMap(yieldOut?.rewards);
|
|
25314
|
+
if (!yieldIn?.rewards?.length && !yieldOut?.rewards?.length) return {};
|
|
24235
25315
|
const data = {};
|
|
24236
|
-
for (const key of keysFromMaps(
|
|
24237
|
-
const _flowIn = amountInUSD * ((irModeIn === 1 ?
|
|
24238
|
-
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);
|
|
24239
25319
|
const totalCashFlowDebt = cashFlowDebt + _flowIn - _flowOut;
|
|
24240
25320
|
const newDebt = debt - amountOutUSD + amountInUSD;
|
|
24241
25321
|
data[key] = {
|
|
@@ -24247,13 +25327,13 @@ function getRewardYieldDebtSwap(amountInUSD, amountOutUSD, irModeIn, irModeOut,
|
|
|
24247
25327
|
return data;
|
|
24248
25328
|
}
|
|
24249
25329
|
function getRewardYieldCollateralSwap(amountInUSD, amountOutUSD, cashFlowDeposits, cashFlowDebt, deposits, debt, yieldIn, yieldOut) {
|
|
24250
|
-
const
|
|
24251
|
-
const
|
|
24252
|
-
if (!
|
|
25330
|
+
const mapIn = rewardsToMap(yieldIn?.rewards);
|
|
25331
|
+
const mapOut = rewardsToMap(yieldOut?.rewards);
|
|
25332
|
+
if (!yieldIn?.rewards?.length && !yieldOut?.rewards?.length) return {};
|
|
24253
25333
|
const data = {};
|
|
24254
|
-
for (const key of keysFromMaps(
|
|
24255
|
-
const _flowIn = amountInUSD * (
|
|
24256
|
-
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);
|
|
24257
25337
|
const totalCashFlowDeposits = cashFlowDeposits + _flowOut - _flowIn;
|
|
24258
25338
|
const newCollat = deposits + amountOutUSD - amountInUSD;
|
|
24259
25339
|
data[key] = {
|
|
@@ -24627,9 +25707,8 @@ function meetsLiquidityThresholdsShort(pool, thresholds) {
|
|
|
24627
25707
|
}
|
|
24628
25708
|
function findMaxBorrowCollateralFactorRatio(lender, configsIn, configsOut) {
|
|
24629
25709
|
let maxRatio = -Infinity;
|
|
24630
|
-
let result = { modeId: 0, eModeCategory: 0 };
|
|
24631
|
-
for (const
|
|
24632
|
-
const modeId = Number(modeIdStr);
|
|
25710
|
+
let result = { modeId: "0", eModeCategory: 0 };
|
|
25711
|
+
for (const modeId of Object.keys(configsIn)) {
|
|
24633
25712
|
const dataIn = configsIn[modeId];
|
|
24634
25713
|
const dataOut = configsOut[modeId];
|
|
24635
25714
|
if (dataIn.debtDisabled || isAaveV32Type(lender) && dataOut.collateralDisabled) {
|
|
@@ -24658,7 +25737,7 @@ var isEMode = (lender, longData, shortData) => findMaxBorrowCollateralFactorRati
|
|
|
24658
25737
|
var intersection = (a0, a1) => {
|
|
24659
25738
|
return a0.filter((a) => a1.includes(a));
|
|
24660
25739
|
};
|
|
24661
|
-
var LENDER_MODE_NO_MODE2 = 0;
|
|
25740
|
+
var LENDER_MODE_NO_MODE2 = "0";
|
|
24662
25741
|
var getMaxLeverage = (lender, longData, shortData) => {
|
|
24663
25742
|
if (isAaveV3Type(lender)) {
|
|
24664
25743
|
const emode = isEMode(lender, longData, shortData).modeId;
|
|
@@ -24671,9 +25750,9 @@ var getMaxLeverage = (lender, longData, shortData) => {
|
|
|
24671
25750
|
Object.values(shortData.config).map((c) => c.category)
|
|
24672
25751
|
);
|
|
24673
25752
|
if (modeIntersect.length === 0) return 1;
|
|
24674
|
-
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(
|
|
24675
25754
|
(c, d) => c.borrowCollateralFactor < d.borrowCollateralFactor ? 1 : -1
|
|
24676
|
-
)[0].category;
|
|
25755
|
+
)[0].category);
|
|
24677
25756
|
const cf2 = longData.config[configId]?.borrowCollateralFactor;
|
|
24678
25757
|
const bf = shortData.config[configId]?.borrowFactor;
|
|
24679
25758
|
return 1 / (1 - cf2 / bf);
|
|
@@ -24681,11 +25760,9 @@ var getMaxLeverage = (lender, longData, shortData) => {
|
|
|
24681
25760
|
if (isSumerType(lender)) {
|
|
24682
25761
|
const shortEntries = Object.entries(shortData?.config ?? {});
|
|
24683
25762
|
if (shortEntries.length === 0) return 1;
|
|
24684
|
-
const shortGroupId =
|
|
24685
|
-
|
|
24686
|
-
|
|
24687
|
-
)[0][0]
|
|
24688
|
-
);
|
|
25763
|
+
const shortGroupId = shortEntries.sort(
|
|
25764
|
+
([, a], [, b]) => b.borrowCollateralFactor - a.borrowCollateralFactor
|
|
25765
|
+
)[0][0];
|
|
24689
25766
|
const cf2 = longData?.config?.[shortGroupId]?.borrowCollateralFactor ?? 0;
|
|
24690
25767
|
return cf2 > 0 && cf2 < 1 ? 1 / (1 - cf2) : 1;
|
|
24691
25768
|
}
|
|
@@ -25454,13 +26531,14 @@ var hwhlpFetcher = {
|
|
|
25454
26531
|
};
|
|
25455
26532
|
|
|
25456
26533
|
// src/yields/intrinsic/fetchers/usdx.ts
|
|
25457
|
-
var SUSDX_URL = "https://app.usdx.money/v1/base/apyInfo";
|
|
25458
26534
|
var susdx = "SUSDX";
|
|
25459
26535
|
var susdxFetcher = {
|
|
25460
26536
|
label: "SUSDX",
|
|
25461
26537
|
fetch: async () => {
|
|
25462
|
-
|
|
25463
|
-
|
|
26538
|
+
return {
|
|
26539
|
+
[susdx]: 0
|
|
26540
|
+
// apyToApr(res.result.susdxApy) * 100
|
|
26541
|
+
};
|
|
25464
26542
|
}
|
|
25465
26543
|
};
|
|
25466
26544
|
|
|
@@ -29308,6 +30386,84 @@ var listaFetcher = {
|
|
|
29308
30386
|
getAbi: getListaAbi
|
|
29309
30387
|
};
|
|
29310
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
|
+
|
|
29311
30467
|
// src/prices/oracle-prices/fetchOraclePrices.ts
|
|
29312
30468
|
async function fetchOraclePrices(chainIds, rpcOverrides, lists = {}, retries = 3, batchSize = void 0, allowFailure = true, basePrices = {}, morphoMarketOverrides, listaMarketOverrides) {
|
|
29313
30469
|
const result = {};
|
|
@@ -29315,7 +30471,8 @@ async function fetchOraclePrices(chainIds, rpcOverrides, lists = {}, retries = 3
|
|
|
29315
30471
|
...AaveOracleAbi,
|
|
29316
30472
|
...ProxyOracleAbi,
|
|
29317
30473
|
...CompoundV2OracleAbi,
|
|
29318
|
-
...ChainlinkAggregatorAbi
|
|
30474
|
+
...ChainlinkAggregatorAbi,
|
|
30475
|
+
...vaultLensAbi
|
|
29319
30476
|
];
|
|
29320
30477
|
const chainPromises = chainIds.map(async (chainId) => {
|
|
29321
30478
|
const chainResult = {};
|
|
@@ -29326,6 +30483,7 @@ async function fetchOraclePrices(chainIds, rpcOverrides, lists = {}, retries = 3
|
|
|
29326
30483
|
const listaResults = listaFetcher.getCalls(chainId, {
|
|
29327
30484
|
marketOverrides: listaMarketOverrides
|
|
29328
30485
|
});
|
|
30486
|
+
const eulerResults = eulerV2Fetcher.getCalls(chainId);
|
|
29329
30487
|
const morphoResults = morphoFetcher.getCalls(chainId, {
|
|
29330
30488
|
marketOverrides: morphoMarketOverrides
|
|
29331
30489
|
});
|
|
@@ -29371,6 +30529,16 @@ async function fetchOraclePrices(chainIds, rpcOverrides, lists = {}, retries = 3
|
|
|
29371
30529
|
});
|
|
29372
30530
|
allCalls.push(...fr.calls);
|
|
29373
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
|
+
}
|
|
29374
30542
|
for (const fr of morphoResults) {
|
|
29375
30543
|
fetcherTracker.push({
|
|
29376
30544
|
lender: fr.lender,
|
|
@@ -29976,19 +31144,20 @@ function computeEModeAnalysis(subAccount, lenderMeta, eModes) {
|
|
|
29976
31144
|
const { positions, balanceData: balanceData2, userConfig } = subAccount;
|
|
29977
31145
|
const currentMode = userConfig.selectedMode;
|
|
29978
31146
|
return Object.values(eModes).map((eMode) => {
|
|
31147
|
+
const targetMode = String(eMode.category);
|
|
29979
31148
|
const healthFactor = computeEModeSwitchHealth(
|
|
29980
31149
|
positions,
|
|
29981
31150
|
lenderMeta,
|
|
29982
31151
|
balanceData2.collateral,
|
|
29983
31152
|
balanceData2.adjustedDebt,
|
|
29984
31153
|
currentMode,
|
|
29985
|
-
|
|
31154
|
+
targetMode
|
|
29986
31155
|
);
|
|
29987
|
-
const supportedAssets = getSupportedAssets(lenderMeta,
|
|
31156
|
+
const supportedAssets = getSupportedAssets(lenderMeta, targetMode);
|
|
29988
31157
|
const canSwitch = canSwitchToEMode(
|
|
29989
31158
|
positions,
|
|
29990
31159
|
lenderMeta,
|
|
29991
|
-
|
|
31160
|
+
targetMode,
|
|
29992
31161
|
healthFactor
|
|
29993
31162
|
);
|
|
29994
31163
|
return {
|