@1delta/margin-fetcher 0.0.215 → 0.0.217
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/index.js +313 -75
- package/dist/index.js.map +1 -1
- package/dist/lending/public-data/aave-v4-type/fetcher/normalize.d.ts +1 -1
- package/dist/lending/public-data/aave-v4-type/fetcher/normalize.d.ts.map +1 -1
- package/dist/lending/public-data/aave-v4-type/publicCallBuild.d.ts +8 -4
- package/dist/lending/public-data/aave-v4-type/publicCallBuild.d.ts.map +1 -1
- package/dist/lending/public-data/aave-v4-type/publicCallParse.d.ts.map +1 -1
- package/dist/lending/public-data/morpho/convertPublic.d.ts.map +1 -1
- package/dist/lending/user-data/aave-v4-type/createAaveV4UserState.d.ts +22 -0
- package/dist/lending/user-data/aave-v4-type/createAaveV4UserState.d.ts.map +1 -0
- package/dist/lending/user-data/aave-v4-type/userCallBuild.d.ts +2 -1
- package/dist/lending/user-data/aave-v4-type/userCallBuild.d.ts.map +1 -1
- package/dist/lending/user-data/aave-v4-type/userCallParse.d.ts.map +1 -1
- package/dist/yields/intrinsic/fetchers/reserve.d.ts.map +1 -1
- package/dist/yields/intrinsic/fetchers/resolv.d.ts.map +1 -1
- package/package.json +4 -4
package/dist/index.js
CHANGED
|
@@ -6275,6 +6275,7 @@ globalThis[GLOBAL_LENDER_DATA_KEY] = {
|
|
|
6275
6275
|
compoundV3Bulker: {},
|
|
6276
6276
|
eulerConfigs: {},
|
|
6277
6277
|
eulerVaults: {},
|
|
6278
|
+
aaveV4Hubs: {},
|
|
6278
6279
|
aaveV4Spokes: {},
|
|
6279
6280
|
aaveV4Reserves: {},
|
|
6280
6281
|
aaveV4Oracles: {}
|
|
@@ -6302,6 +6303,7 @@ var initConfig = () => getGlobalData2()?.initConfig;
|
|
|
6302
6303
|
var aaveOraclesConfig = () => getGlobalData2()?.aaveOraclesConfig;
|
|
6303
6304
|
var eulerConfigs = () => getGlobalData2()?.eulerConfigs;
|
|
6304
6305
|
var eulerVaults = () => getGlobalData2()?.eulerVaults;
|
|
6306
|
+
var aaveV4Hubs = () => getGlobalData2()?.aaveV4Hubs;
|
|
6305
6307
|
var aaveV4Spokes = () => getGlobalData2()?.aaveV4Spokes;
|
|
6306
6308
|
var aaveV4Reserves = () => getGlobalData2()?.aaveV4Reserves;
|
|
6307
6309
|
var aaveV4Oracles = () => getGlobalData2()?.aaveV4Oracles;
|
|
@@ -12104,7 +12106,9 @@ function convertMarketsToMorphoResponse(response, chainId, additionalYields = {
|
|
|
12104
12106
|
loaded: true
|
|
12105
12107
|
}, tokens = {}) {
|
|
12106
12108
|
const data = {};
|
|
12107
|
-
response
|
|
12109
|
+
const items = response?.markets?.items;
|
|
12110
|
+
if (!items) return data;
|
|
12111
|
+
items.forEach((market) => {
|
|
12108
12112
|
const {
|
|
12109
12113
|
uniqueKey,
|
|
12110
12114
|
lltv,
|
|
@@ -17893,7 +17897,7 @@ var getEulerV2ReservesDataConverter = (lender, chainId, prices, additionalYields
|
|
|
17893
17897
|
};
|
|
17894
17898
|
|
|
17895
17899
|
// src/lending/public-data/aave-v4-type/publicCallBuild.ts
|
|
17896
|
-
var
|
|
17900
|
+
var BASE_CALLS_PER_RESERVE = 5;
|
|
17897
17901
|
var CALLS_PER_SPOKE_TAIL = 2;
|
|
17898
17902
|
function isValidAddress(addr) {
|
|
17899
17903
|
return !!addr && addr !== "0x" && addr.length > 2;
|
|
@@ -17901,6 +17905,10 @@ function isValidAddress(addr) {
|
|
|
17901
17905
|
function getSpokeReserves(reservesMap, spokeAddr) {
|
|
17902
17906
|
return reservesMap[spokeAddr.toLowerCase()] ?? reservesMap[spokeAddr] ?? [];
|
|
17903
17907
|
}
|
|
17908
|
+
function getDynamicConfigCount(spokeEntry) {
|
|
17909
|
+
const max = spokeEntry.dynamicConfigKeyMax ?? 0;
|
|
17910
|
+
return max + 1;
|
|
17911
|
+
}
|
|
17904
17912
|
var buildAaveV4LenderReserveCall = (chainId, lender) => {
|
|
17905
17913
|
const spokes = aaveV4Spokes()?.[lender]?.[chainId] ?? [];
|
|
17906
17914
|
const reservesMap = aaveV4Reserves()?.[lender]?.[chainId] ?? {};
|
|
@@ -17912,6 +17920,7 @@ var buildAaveV4LenderReserveCall = (chainId, lender) => {
|
|
|
17912
17920
|
if (!isValidAddress(spokeEntry.spoke)) continue;
|
|
17913
17921
|
const spokeAddr = spokeEntry.spoke;
|
|
17914
17922
|
const reserves = getSpokeReserves(reservesMap, spokeAddr);
|
|
17923
|
+
const dynConfigCount = getDynamicConfigCount(spokeEntry);
|
|
17915
17924
|
for (const entry of reserves) {
|
|
17916
17925
|
const rid = typeof entry === "number" ? entry : entry.reserveId;
|
|
17917
17926
|
calls.push(
|
|
@@ -17939,13 +17948,15 @@ var buildAaveV4LenderReserveCall = (chainId, lender) => {
|
|
|
17939
17948
|
address: spokeAddr,
|
|
17940
17949
|
name: "getReserveTotalDebt",
|
|
17941
17950
|
params: [rid]
|
|
17942
|
-
},
|
|
17943
|
-
{
|
|
17944
|
-
address: spokeAddr,
|
|
17945
|
-
name: "getDynamicReserveConfig",
|
|
17946
|
-
params: [rid, 0]
|
|
17947
17951
|
}
|
|
17948
17952
|
);
|
|
17953
|
+
for (let key = 0; key < dynConfigCount; key++) {
|
|
17954
|
+
calls.push({
|
|
17955
|
+
address: spokeAddr,
|
|
17956
|
+
name: "getDynamicReserveConfig",
|
|
17957
|
+
params: [rid, key]
|
|
17958
|
+
});
|
|
17959
|
+
}
|
|
17949
17960
|
if (typeof entry === "object" && spokeEntry.hub && entry.assetId !== void 0) {
|
|
17950
17961
|
const hubLc = spokeEntry.hub.toLowerCase();
|
|
17951
17962
|
const key = `${hubLc}:${entry.assetId}`;
|
|
@@ -18020,7 +18031,8 @@ var getAaveV4ExpectedCallCount = (chainId, lender) => {
|
|
|
18020
18031
|
reservesMap,
|
|
18021
18032
|
spokeEntry.spoke
|
|
18022
18033
|
);
|
|
18023
|
-
|
|
18034
|
+
const dynConfigCount = getDynamicConfigCount(spokeEntry);
|
|
18035
|
+
count += reserves.length * (BASE_CALLS_PER_RESERVE + dynConfigCount) + CALLS_PER_SPOKE_TAIL;
|
|
18024
18036
|
const rids = reserves.map(
|
|
18025
18037
|
(e) => typeof e === "number" ? e : e.reserveId
|
|
18026
18038
|
);
|
|
@@ -18029,7 +18041,9 @@ var getAaveV4ExpectedCallCount = (chainId, lender) => {
|
|
|
18029
18041
|
}
|
|
18030
18042
|
for (const entry of reserves) {
|
|
18031
18043
|
if (typeof entry === "object" && spokeEntry.hub && entry.assetId !== void 0) {
|
|
18032
|
-
hubAssetKeys.add(
|
|
18044
|
+
hubAssetKeys.add(
|
|
18045
|
+
`${spokeEntry.hub.toLowerCase()}:${entry.assetId}`
|
|
18046
|
+
);
|
|
18033
18047
|
}
|
|
18034
18048
|
}
|
|
18035
18049
|
}
|
|
@@ -18052,13 +18066,17 @@ function rayRateToApr(rateRay) {
|
|
|
18052
18066
|
if (rateRay === 0n) return 0;
|
|
18053
18067
|
return Number(rateRay) / RAY2 * 100;
|
|
18054
18068
|
}
|
|
18055
|
-
function normalizeAaveV4(spokeDataList, chainId, lender, prices, additionalYields, tokenList, lenderShortNameFn, createMarketUidFn, toOracleKeyFn, toGenericPriceKeyFn) {
|
|
18069
|
+
function normalizeAaveV4(spokeDataList, chainId, lender, prices, additionalYields, tokenList, lenderShortNameFn, createMarketUidFn, toOracleKeyFn, toGenericPriceKeyFn, expectedHub) {
|
|
18056
18070
|
const data = {};
|
|
18057
18071
|
const eModes = {};
|
|
18072
|
+
const hubFilter = expectedHub?.toLowerCase();
|
|
18058
18073
|
for (const spokeData of spokeDataList) {
|
|
18059
18074
|
const spokeAddr = spokeData.spoke.toLowerCase();
|
|
18060
18075
|
const spokeReserves = spokeData.reserves;
|
|
18061
18076
|
for (const reserve of spokeReserves) {
|
|
18077
|
+
const reserveHub = reserve.reserve.hub?.toLowerCase();
|
|
18078
|
+
if (hubFilter && reserveHub && reserveHub !== hubFilter)
|
|
18079
|
+
continue;
|
|
18062
18080
|
for (const [keyStr, dynCfg] of Object.entries(
|
|
18063
18081
|
reserve.dynamicConfigs
|
|
18064
18082
|
)) {
|
|
@@ -18075,6 +18093,9 @@ function normalizeAaveV4(spokeDataList, chainId, lender, prices, additionalYield
|
|
|
18075
18093
|
}
|
|
18076
18094
|
}
|
|
18077
18095
|
for (const reserve of spokeReserves) {
|
|
18096
|
+
const reserveHub = reserve.reserve.hub?.toLowerCase();
|
|
18097
|
+
if (hubFilter && reserveHub && reserveHub !== hubFilter)
|
|
18098
|
+
continue;
|
|
18078
18099
|
const underlying = reserve.reserve.underlying.toLowerCase();
|
|
18079
18100
|
const decimals = reserve.reserve.decimals;
|
|
18080
18101
|
const hubAddr = reserve.reserve.hub.toLowerCase();
|
|
@@ -18208,18 +18229,35 @@ var getAaveV4ReservesDataConverter = (lender, chainId, prices, additionalYields,
|
|
|
18208
18229
|
if (!isValidAddress2(spokeEntry.spoke)) continue;
|
|
18209
18230
|
const spokeAddr = spokeEntry.spoke;
|
|
18210
18231
|
const reserves = getSpokeReserves2(reservesMap, spokeAddr);
|
|
18211
|
-
const
|
|
18232
|
+
const dynConfigCount = (spokeEntry.dynamicConfigKeyMax ?? 0) + 1;
|
|
18212
18233
|
const parsedReserves = [];
|
|
18213
|
-
for (let i = 0; i <
|
|
18234
|
+
for (let i = 0; i < reserves.length; i++) {
|
|
18214
18235
|
const entry = reserves[i];
|
|
18215
18236
|
const reserveId = typeof entry === "number" ? entry : entry.reserveId;
|
|
18216
|
-
const
|
|
18217
|
-
const
|
|
18218
|
-
const
|
|
18219
|
-
const
|
|
18220
|
-
const
|
|
18221
|
-
|
|
18222
|
-
const
|
|
18237
|
+
const rawReserve = data[offset];
|
|
18238
|
+
const rawConfig = data[offset + 1];
|
|
18239
|
+
const rawSupplied = data[offset + 2];
|
|
18240
|
+
const rawDebt = data[offset + 3];
|
|
18241
|
+
const rawTotalDebt = data[offset + 4];
|
|
18242
|
+
offset += BASE_CALLS_PER_RESERVE;
|
|
18243
|
+
const dynamicConfigs = {};
|
|
18244
|
+
for (let key = 0; key < dynConfigCount; key++) {
|
|
18245
|
+
const rawDynConfig = data[offset];
|
|
18246
|
+
offset += 1;
|
|
18247
|
+
if (rawDynConfig && rawDynConfig !== "0x") {
|
|
18248
|
+
dynamicConfigs[key] = {
|
|
18249
|
+
collateralFactor: Number(
|
|
18250
|
+
rawDynConfig?.collateralFactor ?? 0
|
|
18251
|
+
),
|
|
18252
|
+
maxLiquidationBonus: Number(
|
|
18253
|
+
rawDynConfig?.maxLiquidationBonus ?? 0
|
|
18254
|
+
),
|
|
18255
|
+
liquidationFee: Number(
|
|
18256
|
+
rawDynConfig?.liquidationFee ?? 0
|
|
18257
|
+
)
|
|
18258
|
+
};
|
|
18259
|
+
}
|
|
18260
|
+
}
|
|
18223
18261
|
const reserve = {
|
|
18224
18262
|
underlying: rawReserve?.underlying ?? "",
|
|
18225
18263
|
hub: rawReserve?.hub ?? "",
|
|
@@ -18248,20 +18286,6 @@ var getAaveV4ReservesDataConverter = (lender, chainId, prices, additionalYields,
|
|
|
18248
18286
|
} else {
|
|
18249
18287
|
drawnDebt = BigInt(rawDebt ?? 0);
|
|
18250
18288
|
}
|
|
18251
|
-
const dynamicConfigs = {};
|
|
18252
|
-
if (rawDynConfig && rawDynConfig !== "0x") {
|
|
18253
|
-
dynamicConfigs[0] = {
|
|
18254
|
-
collateralFactor: Number(
|
|
18255
|
-
rawDynConfig?.collateralFactor ?? 0
|
|
18256
|
-
),
|
|
18257
|
-
maxLiquidationBonus: Number(
|
|
18258
|
-
rawDynConfig?.maxLiquidationBonus ?? 0
|
|
18259
|
-
),
|
|
18260
|
-
liquidationFee: Number(
|
|
18261
|
-
rawDynConfig?.liquidationFee ?? 0
|
|
18262
|
-
)
|
|
18263
|
-
};
|
|
18264
|
-
}
|
|
18265
18289
|
if (spokeEntry.hub && typeof entry === "object" && entry.assetId !== void 0) {
|
|
18266
18290
|
const hubLc = spokeEntry.hub.toLowerCase();
|
|
18267
18291
|
const key = `${hubLc}:${entry.assetId}`;
|
|
@@ -18286,7 +18310,6 @@ var getAaveV4ReservesDataConverter = (lender, chainId, prices, additionalYields,
|
|
|
18286
18310
|
price: 0n
|
|
18287
18311
|
});
|
|
18288
18312
|
}
|
|
18289
|
-
offset += reserveCount * CALLS_PER_RESERVE;
|
|
18290
18313
|
const rawLiqConfig = data[offset];
|
|
18291
18314
|
const rawOracle = data[offset + 1];
|
|
18292
18315
|
offset += CALLS_PER_SPOKE_TAIL;
|
|
@@ -18373,6 +18396,8 @@ var getAaveV4ReservesDataConverter = (lender, chainId, prices, additionalYields,
|
|
|
18373
18396
|
}
|
|
18374
18397
|
}
|
|
18375
18398
|
}
|
|
18399
|
+
const hubEntry = aaveV4Hubs()?.[lender]?.[chainId];
|
|
18400
|
+
const expectedHub = hubEntry?.hub;
|
|
18376
18401
|
return normalizeAaveV4(
|
|
18377
18402
|
spokeDataList,
|
|
18378
18403
|
chainId,
|
|
@@ -18383,7 +18408,8 @@ var getAaveV4ReservesDataConverter = (lender, chainId, prices, additionalYields,
|
|
|
18383
18408
|
lenderShortName,
|
|
18384
18409
|
createMarketUid,
|
|
18385
18410
|
toOracleKey,
|
|
18386
|
-
toGenericPriceKey
|
|
18411
|
+
toGenericPriceKey,
|
|
18412
|
+
expectedHub
|
|
18387
18413
|
);
|
|
18388
18414
|
};
|
|
18389
18415
|
return [converter, expectedCalls];
|
|
@@ -19042,7 +19068,7 @@ var buildEulerUserCall = async (chainId, lender, account, subAccountIndexes) =>
|
|
|
19042
19068
|
};
|
|
19043
19069
|
|
|
19044
19070
|
// src/lending/user-data/aave-v4-type/userCallBuild.ts
|
|
19045
|
-
var USER_CALLS_PER_RESERVE =
|
|
19071
|
+
var USER_CALLS_PER_RESERVE = 4;
|
|
19046
19072
|
var buildAaveV4UserCall = (chainId, lender, account) => {
|
|
19047
19073
|
const spokes = aaveV4Spokes()?.[lender]?.[chainId] ?? [];
|
|
19048
19074
|
const reservesMap = aaveV4Reserves()?.[lender]?.[chainId] ?? {};
|
|
@@ -19069,6 +19095,11 @@ var buildAaveV4UserCall = (chainId, lender, account) => {
|
|
|
19069
19095
|
address: spokeAddr,
|
|
19070
19096
|
name: "getUserReserveStatus",
|
|
19071
19097
|
params: [rid, account]
|
|
19098
|
+
},
|
|
19099
|
+
{
|
|
19100
|
+
address: spokeAddr,
|
|
19101
|
+
name: "getUserPosition",
|
|
19102
|
+
params: [rid, account]
|
|
19072
19103
|
}
|
|
19073
19104
|
);
|
|
19074
19105
|
}
|
|
@@ -20237,21 +20268,230 @@ var getEulerUserDataConverter = (lender, chainId, account, metaMap, subAccountIn
|
|
|
20237
20268
|
];
|
|
20238
20269
|
};
|
|
20239
20270
|
|
|
20271
|
+
// src/lending/user-data/aave-v4-type/createAaveV4UserState.ts
|
|
20272
|
+
function resolveV4Config(configs, userConfigKey) {
|
|
20273
|
+
if (!configs) return { config: void 0, spokeAddr: void 0 };
|
|
20274
|
+
if (userConfigKey && configs[userConfigKey]) {
|
|
20275
|
+
return {
|
|
20276
|
+
config: configs[userConfigKey],
|
|
20277
|
+
spokeAddr: userConfigKey.split(":")[0]
|
|
20278
|
+
};
|
|
20279
|
+
}
|
|
20280
|
+
const entries = Object.entries(configs);
|
|
20281
|
+
if (entries.length === 0) return { config: void 0, spokeAddr: void 0 };
|
|
20282
|
+
const [key, config] = entries[0];
|
|
20283
|
+
const spokeAddr = key.split(":")[0];
|
|
20284
|
+
return { config, spokeAddr };
|
|
20285
|
+
}
|
|
20286
|
+
function getConfigScopedPrice(meta, spokeAddr, configPriceMap) {
|
|
20287
|
+
return getOraclePrice(meta);
|
|
20288
|
+
}
|
|
20289
|
+
function createAaveV4UserState(payload, lenderData, totalDeposits24h = 0, totalDebt24h = 0, configPriceMap) {
|
|
20290
|
+
const assetKeys = getMarketUidsFromMeta(lenderData);
|
|
20291
|
+
const { chainId, account } = payload;
|
|
20292
|
+
let depositInterest = 0;
|
|
20293
|
+
let borrowInterest = 0;
|
|
20294
|
+
let rewardDepositAccrual = 0;
|
|
20295
|
+
let rewardBorrowAccrual = 0;
|
|
20296
|
+
let stakingDepositAccrual = 0;
|
|
20297
|
+
let stakingBorrowAccrual = 0;
|
|
20298
|
+
let deposits = 0;
|
|
20299
|
+
let debt = 0;
|
|
20300
|
+
let oracleDebt = 0;
|
|
20301
|
+
let collateral = 0;
|
|
20302
|
+
let borrowDiscountedCollateral = 0;
|
|
20303
|
+
let borrowDiscountedCollateralAllActive = 0;
|
|
20304
|
+
let collateralAllActive = 0;
|
|
20305
|
+
let rewardsPerAsset = {};
|
|
20306
|
+
for (const marketUid of assetKeys) {
|
|
20307
|
+
if (!lenderData?.[marketUid] || !payload.lendingPositions[marketUid])
|
|
20308
|
+
continue;
|
|
20309
|
+
const pos = payload.lendingPositions[marketUid];
|
|
20310
|
+
const { depositsUSD, debtStableUSD, debtUSD, collateralEnabled } = pos;
|
|
20311
|
+
const depositsUSDOracle = pos.depositsUSDOracle ?? depositsUSD;
|
|
20312
|
+
const debtUSDOracle = pos.debtUSDOracle ?? debtUSD;
|
|
20313
|
+
const {
|
|
20314
|
+
depositRate,
|
|
20315
|
+
intrinsicYield,
|
|
20316
|
+
variableBorrowRate,
|
|
20317
|
+
stableBorrowRate,
|
|
20318
|
+
rewards,
|
|
20319
|
+
flags,
|
|
20320
|
+
configs
|
|
20321
|
+
} = lenderData[marketUid];
|
|
20322
|
+
const { config: userConfigForAsset } = resolveV4Config(
|
|
20323
|
+
configs,
|
|
20324
|
+
pos.userConfigKey
|
|
20325
|
+
);
|
|
20326
|
+
deposits += depositsUSD;
|
|
20327
|
+
debt += debtUSD + (debtStableUSD ?? 0);
|
|
20328
|
+
oracleDebt += debtUSDOracle + (pos.debtStableUSDOracle ?? debtStableUSD ?? 0);
|
|
20329
|
+
(rewards ?? []).forEach((rewardData) => {
|
|
20330
|
+
const key = rewardData.asset;
|
|
20331
|
+
rewardDepositAccrual += rewardData.depositRate * depositsUSD;
|
|
20332
|
+
rewardBorrowAccrual += rewardData.variableBorrowRate * debtUSD;
|
|
20333
|
+
const rewDepo = rewardData.depositRate * depositsUSD;
|
|
20334
|
+
const rewDebt = rewardData.variableBorrowRate * debtUSD;
|
|
20335
|
+
if (!rewardsPerAsset[key])
|
|
20336
|
+
rewardsPerAsset[key] = { depositApr: 0, borrowApr: 0 };
|
|
20337
|
+
if (rewDepo > 0) rewardsPerAsset[key].depositApr += rewDepo;
|
|
20338
|
+
if (rewDebt > 0) rewardsPerAsset[key].borrowApr += rewDebt;
|
|
20339
|
+
});
|
|
20340
|
+
stakingDepositAccrual += (intrinsicYield ?? 0) * depositsUSD;
|
|
20341
|
+
stakingBorrowAccrual += (intrinsicYield ?? 0) * debtUSD;
|
|
20342
|
+
if (flags?.collateralActive || userConfigForAsset && !userConfigForAsset.collateralDisabled) {
|
|
20343
|
+
if (collateralEnabled) {
|
|
20344
|
+
collateral += (userConfigForAsset?.collateralFactor ?? 1) * depositsUSDOracle;
|
|
20345
|
+
borrowDiscountedCollateral += (userConfigForAsset?.borrowCollateralFactor ?? 1) * depositsUSDOracle;
|
|
20346
|
+
}
|
|
20347
|
+
borrowDiscountedCollateralAllActive += (userConfigForAsset?.borrowCollateralFactor ?? 1) * depositsUSDOracle;
|
|
20348
|
+
collateralAllActive += (userConfigForAsset?.collateralFactor ?? 1) * depositsUSDOracle;
|
|
20349
|
+
}
|
|
20350
|
+
depositInterest += (depositRate ?? 0) * depositsUSD;
|
|
20351
|
+
borrowInterest += debtUSD * (variableBorrowRate ?? 0) + (debtStableUSD ?? 0) * (stableBorrowRate ?? 0);
|
|
20352
|
+
}
|
|
20353
|
+
const nav = deposits - debt;
|
|
20354
|
+
const balanceData2 = {
|
|
20355
|
+
borrowDiscountedCollateral,
|
|
20356
|
+
borrowDiscountedCollateralAllActive,
|
|
20357
|
+
collateral,
|
|
20358
|
+
collateralAllActive,
|
|
20359
|
+
deposits,
|
|
20360
|
+
debt,
|
|
20361
|
+
adjustedDebt: oracleDebt,
|
|
20362
|
+
nav,
|
|
20363
|
+
deposits24h: totalDeposits24h,
|
|
20364
|
+
debt24h: totalDebt24h,
|
|
20365
|
+
nav24h: totalDeposits24h - totalDebt24h,
|
|
20366
|
+
...payload.rewards ? { rewards: payload.rewards } : {}
|
|
20367
|
+
};
|
|
20368
|
+
const aprData2 = {
|
|
20369
|
+
apr: safeDivide(depositInterest - borrowInterest, nav),
|
|
20370
|
+
borrowApr: safeDivide(borrowInterest, debt),
|
|
20371
|
+
depositApr: safeDivide(depositInterest, deposits),
|
|
20372
|
+
rewards: divideAccrualsToAprs(rewardsPerAsset, nav, deposits, debt),
|
|
20373
|
+
rewardApr: safeDivide(rewardDepositAccrual + rewardBorrowAccrual, nav),
|
|
20374
|
+
rewardDepositApr: safeDivide(rewardDepositAccrual, deposits),
|
|
20375
|
+
rewardBorrowApr: safeDivide(rewardBorrowAccrual, debt),
|
|
20376
|
+
intrinsicApr: safeDivide(stakingDepositAccrual - stakingBorrowAccrual, nav),
|
|
20377
|
+
intrinsicDepositApr: safeDivide(stakingDepositAccrual, deposits),
|
|
20378
|
+
intrinsicBorrowApr: safeDivide(stakingBorrowAccrual, debt)
|
|
20379
|
+
};
|
|
20380
|
+
const userConfig = {
|
|
20381
|
+
selectedMode: "0",
|
|
20382
|
+
id: account,
|
|
20383
|
+
isWhitelisted: true
|
|
20384
|
+
};
|
|
20385
|
+
const creditLine = Math.max(
|
|
20386
|
+
0,
|
|
20387
|
+
borrowDiscountedCollateral - balanceData2.adjustedDebt
|
|
20388
|
+
);
|
|
20389
|
+
for (const marketUid of assetKeys) {
|
|
20390
|
+
if (!lenderData?.[marketUid]) continue;
|
|
20391
|
+
const meta = lenderData[marketUid];
|
|
20392
|
+
const { configs, flags, borrowLiquidity, withdrawLiquidity } = meta;
|
|
20393
|
+
const pos = payload.lendingPositions[marketUid];
|
|
20394
|
+
const { config, spokeAddr } = resolveV4Config(
|
|
20395
|
+
configs,
|
|
20396
|
+
pos ? pos.userConfigKey : void 0
|
|
20397
|
+
);
|
|
20398
|
+
const price = getConfigScopedPrice(meta);
|
|
20399
|
+
const bcf = config?.borrowCollateralFactor ?? 1;
|
|
20400
|
+
const bf = config?.borrowFactor ?? 1;
|
|
20401
|
+
if (pos) {
|
|
20402
|
+
let withdrawable;
|
|
20403
|
+
if (!pos.collateralEnabled || config?.collateralDisabled) {
|
|
20404
|
+
withdrawable = String(pos.deposits);
|
|
20405
|
+
} else if (balanceData2.debt === 0) {
|
|
20406
|
+
withdrawable = String(pos.deposits);
|
|
20407
|
+
} else {
|
|
20408
|
+
const withdrawableUSD = Math.max(creditLine / bcf, 0);
|
|
20409
|
+
withdrawable = String(
|
|
20410
|
+
Math.min(withdrawableUSD / price, Number(pos.deposits))
|
|
20411
|
+
);
|
|
20412
|
+
}
|
|
20413
|
+
if (withdrawLiquidity != null) {
|
|
20414
|
+
withdrawable = String(Math.min(Number(withdrawable), withdrawLiquidity));
|
|
20415
|
+
}
|
|
20416
|
+
let borrowable;
|
|
20417
|
+
if (!flags?.borrowingEnabled || flags?.isFrozen || config?.debtDisabled) {
|
|
20418
|
+
borrowable = "0";
|
|
20419
|
+
} else {
|
|
20420
|
+
const borrowableUSD = Math.max(creditLine / bf, 0);
|
|
20421
|
+
borrowable = String(borrowableUSD / price);
|
|
20422
|
+
}
|
|
20423
|
+
if (borrowLiquidity != null) {
|
|
20424
|
+
borrowable = String(Math.min(Number(borrowable), borrowLiquidity));
|
|
20425
|
+
}
|
|
20426
|
+
pos.withdrawable = withdrawable;
|
|
20427
|
+
pos.borrowable = borrowable;
|
|
20428
|
+
pos.underlyingInfo = buildUnderlyingInfo(meta);
|
|
20429
|
+
} else if ((deposits > 0 || debt > 0) && flags?.borrowingEnabled && !flags?.isFrozen && !config?.debtDisabled) {
|
|
20430
|
+
let borrowable = String(Math.max(creditLine / bf, 0) / price);
|
|
20431
|
+
if (borrowLiquidity != null) {
|
|
20432
|
+
borrowable = String(Math.min(Number(borrowable), borrowLiquidity));
|
|
20433
|
+
}
|
|
20434
|
+
payload.lendingPositions[marketUid] = {
|
|
20435
|
+
marketUid,
|
|
20436
|
+
deposits: "0",
|
|
20437
|
+
debt: "0",
|
|
20438
|
+
debtStable: "0",
|
|
20439
|
+
depositsUSD: 0,
|
|
20440
|
+
debtUSD: 0,
|
|
20441
|
+
debtStableUSD: 0,
|
|
20442
|
+
collateralEnabled: false,
|
|
20443
|
+
claimableRewards: 0,
|
|
20444
|
+
withdrawable: "0",
|
|
20445
|
+
borrowable,
|
|
20446
|
+
underlyingInfo: buildUnderlyingInfo(meta)
|
|
20447
|
+
};
|
|
20448
|
+
}
|
|
20449
|
+
}
|
|
20450
|
+
return {
|
|
20451
|
+
lender: "",
|
|
20452
|
+
account,
|
|
20453
|
+
chainId,
|
|
20454
|
+
data: [
|
|
20455
|
+
{
|
|
20456
|
+
health: balanceData2.debt === 0 ? null : balanceData2.adjustedDebt > 0 ? balanceData2.collateral / balanceData2.adjustedDebt : balanceData2.collateral / balanceData2.debt,
|
|
20457
|
+
borrowCapacityUSD: creditLine,
|
|
20458
|
+
accountId: "0",
|
|
20459
|
+
balanceData: balanceData2,
|
|
20460
|
+
aprData: aprData2,
|
|
20461
|
+
userConfig,
|
|
20462
|
+
positions: Object.values(payload.lendingPositions)
|
|
20463
|
+
}
|
|
20464
|
+
]
|
|
20465
|
+
};
|
|
20466
|
+
}
|
|
20467
|
+
|
|
20240
20468
|
// src/lending/user-data/aave-v4-type/userCallParse.ts
|
|
20241
20469
|
var getAaveV4UserDataConverter = (lender, chainId, account, metaMap) => {
|
|
20242
20470
|
const spokes = aaveV4Spokes()?.[lender]?.[chainId] ?? [];
|
|
20243
20471
|
const reservesMap = aaveV4Reserves()?.[lender]?.[chainId] ?? {};
|
|
20472
|
+
const oracleEntries = aaveV4Oracles()?.[lender]?.[chainId] ?? [];
|
|
20473
|
+
const spokeReserveToUnderlying = /* @__PURE__ */ new Map();
|
|
20474
|
+
for (const oe of oracleEntries) {
|
|
20475
|
+
if (oe.underlying && oe.spoke) {
|
|
20476
|
+
spokeReserveToUnderlying.set(
|
|
20477
|
+
`${oe.spoke.toLowerCase()}:${oe.reserveId}`,
|
|
20478
|
+
oe.underlying.toLowerCase()
|
|
20479
|
+
);
|
|
20480
|
+
}
|
|
20481
|
+
}
|
|
20244
20482
|
const reserveEntries = [];
|
|
20245
20483
|
for (const spokeEntry of spokes) {
|
|
20246
20484
|
const spokeAddr = spokeEntry.spoke;
|
|
20247
20485
|
if (!spokeAddr || spokeAddr === "0x" || spokeAddr.length <= 2) continue;
|
|
20248
20486
|
const reserves = reservesMap[spokeAddr.toLowerCase()] ?? reservesMap[spokeAddr] ?? [];
|
|
20249
20487
|
for (const entry of reserves) {
|
|
20488
|
+
const rid = typeof entry === "number" ? entry : entry.reserveId;
|
|
20489
|
+
const underlying = ((typeof entry === "object" ? entry.underlying : void 0) ?? spokeReserveToUnderlying.get(`${spokeAddr.toLowerCase()}:${rid}`) ?? "").toLowerCase();
|
|
20250
20490
|
reserveEntries.push({
|
|
20251
20491
|
spokeAddr,
|
|
20252
|
-
reserveId:
|
|
20492
|
+
reserveId: rid,
|
|
20253
20493
|
hub: (spokeEntry.hub ?? "").toLowerCase(),
|
|
20254
|
-
underlying
|
|
20494
|
+
underlying
|
|
20255
20495
|
});
|
|
20256
20496
|
}
|
|
20257
20497
|
}
|
|
@@ -20262,12 +20502,23 @@ var getAaveV4UserDataConverter = (lender, chainId, account, metaMap) => {
|
|
|
20262
20502
|
return void 0;
|
|
20263
20503
|
}
|
|
20264
20504
|
const lendingPositions = {};
|
|
20505
|
+
const underlyingToUid = /* @__PURE__ */ new Map();
|
|
20506
|
+
if (metaMap) {
|
|
20507
|
+
for (const [uid, meta] of Object.entries(metaMap)) {
|
|
20508
|
+
const addr = (meta?.underlying ?? "").toLowerCase();
|
|
20509
|
+
if (addr) underlyingToUid.set(addr, uid);
|
|
20510
|
+
}
|
|
20511
|
+
}
|
|
20265
20512
|
let totalDebt24h = 0;
|
|
20266
20513
|
let totalDeposits24h = 0;
|
|
20267
20514
|
for (let i = 0; i < reserveEntries.length; i++) {
|
|
20268
|
-
const { hub, underlying } = reserveEntries[i];
|
|
20269
|
-
|
|
20270
|
-
|
|
20515
|
+
const { hub, underlying, spokeAddr } = reserveEntries[i];
|
|
20516
|
+
let key;
|
|
20517
|
+
if (hub) {
|
|
20518
|
+
key = createMarketUid(chainId, lender, `${hub}:${underlying}`);
|
|
20519
|
+
} else {
|
|
20520
|
+
key = underlyingToUid.get(underlying) ?? createMarketUid(chainId, lender, `:${underlying}`);
|
|
20521
|
+
}
|
|
20271
20522
|
const metaEntity = metaMap?.[key];
|
|
20272
20523
|
if (!metaEntity) continue;
|
|
20273
20524
|
const base = i * USER_CALLS_PER_RESERVE;
|
|
@@ -20278,6 +20529,11 @@ var getAaveV4UserDataConverter = (lender, chainId, account, metaMap) => {
|
|
|
20278
20529
|
metaEntity
|
|
20279
20530
|
);
|
|
20280
20531
|
if (!dataForAsset) continue;
|
|
20532
|
+
const userPositionResult = data[base + 3];
|
|
20533
|
+
const userDynConfigKey = Number(
|
|
20534
|
+
userPositionResult?.dynamicConfigKey ?? 0
|
|
20535
|
+
);
|
|
20536
|
+
dataForAsset.userConfigKey = `${spokeAddr.toLowerCase()}:${userDynConfigKey}`;
|
|
20281
20537
|
totalDebt24h += addedDebt;
|
|
20282
20538
|
totalDeposits24h += addedDeposits;
|
|
20283
20539
|
lendingPositions[key] = dataForAsset;
|
|
@@ -20286,10 +20542,8 @@ var getAaveV4UserDataConverter = (lender, chainId, account, metaMap) => {
|
|
|
20286
20542
|
chainId,
|
|
20287
20543
|
account,
|
|
20288
20544
|
lendingPositions,
|
|
20289
|
-
rewards: []
|
|
20290
|
-
|
|
20291
|
-
};
|
|
20292
|
-
const userData = createBaseTypeUserState(
|
|
20545
|
+
rewards: []};
|
|
20546
|
+
const userData = createAaveV4UserState(
|
|
20293
20547
|
payload,
|
|
20294
20548
|
metaMap,
|
|
20295
20549
|
totalDeposits24h,
|
|
@@ -27381,34 +27635,18 @@ var yusdFetcher = {
|
|
|
27381
27635
|
};
|
|
27382
27636
|
|
|
27383
27637
|
// src/yields/intrinsic/fetchers/resolv.ts
|
|
27384
|
-
var RLP_URL = "https://api.resolv.xyz/apr/rlp/7d";
|
|
27385
|
-
var WSTUSR_URL = "https://api.resolv.xyz/apr/staking/7d";
|
|
27386
27638
|
var rlp = "Resolv RLP::RLP";
|
|
27387
27639
|
var wstusr = "Resolv wstUSR::WSTUSR";
|
|
27388
27640
|
var rlpFetcher = {
|
|
27389
27641
|
label: "RLP",
|
|
27390
27642
|
fetch: async () => {
|
|
27391
|
-
|
|
27392
|
-
method: "GET",
|
|
27393
|
-
headers: {
|
|
27394
|
-
Accept: "application/json",
|
|
27395
|
-
"User-Agent": "1delta/yields"
|
|
27396
|
-
}
|
|
27397
|
-
}).then((r) => r.json());
|
|
27398
|
-
return { [rlp]: Number(res?.value ?? 0) * 100 };
|
|
27643
|
+
return { [rlp]: 0 };
|
|
27399
27644
|
}
|
|
27400
27645
|
};
|
|
27401
27646
|
var wstusrFetcher = {
|
|
27402
27647
|
label: "WSTUSR",
|
|
27403
27648
|
fetch: async () => {
|
|
27404
|
-
|
|
27405
|
-
method: "GET",
|
|
27406
|
-
headers: {
|
|
27407
|
-
Accept: "application/json",
|
|
27408
|
-
"User-Agent": "1delta/yields"
|
|
27409
|
-
}
|
|
27410
|
-
}).then((r) => r.json());
|
|
27411
|
-
return { [wstusr]: Number(res?.value ?? 0) * 100 };
|
|
27649
|
+
return { [wstusr]: 0 };
|
|
27412
27650
|
}
|
|
27413
27651
|
};
|
|
27414
27652
|
|
|
@@ -27625,7 +27863,7 @@ var susdxFetcher = {
|
|
|
27625
27863
|
};
|
|
27626
27864
|
|
|
27627
27865
|
// src/yields/intrinsic/fetchers/reserve.ts
|
|
27628
|
-
var RTOKENS_URL = "https://yields.reserve.org
|
|
27866
|
+
var RTOKENS_URL = "https://yields.reserve.org";
|
|
27629
27867
|
var hyUSD = "High Yield USD Base::HYUSD";
|
|
27630
27868
|
var bsdETH = "Based ETH::BSDETH";
|
|
27631
27869
|
var ethPlus = "ETHPlus::ETH+";
|
|
@@ -27638,18 +27876,18 @@ var rtokensFetcher = {
|
|
|
27638
27876
|
label: "RTOKENS",
|
|
27639
27877
|
fetch: async () => {
|
|
27640
27878
|
const res = await fetch(RTOKENS_URL).then((r) => r.json());
|
|
27641
|
-
const data = res
|
|
27642
|
-
const dataMainnet = res
|
|
27643
|
-
const dataMainnetColalterals = res
|
|
27879
|
+
const data = res?.rtokens?.["8453"];
|
|
27880
|
+
const dataMainnet = res?.rtokens?.["1"];
|
|
27881
|
+
const dataMainnetColalterals = res?.collaterals?.["1"];
|
|
27644
27882
|
return {
|
|
27645
|
-
[bsdETH]: apyToAprPercent(data
|
|
27646
|
-
[hyUSD]: apyToAprPercent(data
|
|
27647
|
-
[sfrxeth]: apyToAprPercent(dataMainnetColalterals
|
|
27648
|
-
[sfrax]: apyToAprPercent(dataMainnetColalterals
|
|
27649
|
-
[ceth]: apyToAprPercent(dataMainnetColalterals
|
|
27650
|
-
[ethPlus]: apyToAprPercent(dataMainnet["ETH+"] / 100) * 100,
|
|
27651
|
-
[usdThree]: apyToAprPercent(dataMainnet["USD3"] / 100) * 100,
|
|
27652
|
-
[woEth]: apyToAprPercent(dataMainnetColalterals
|
|
27883
|
+
[bsdETH]: apyToAprPercent((data?.bsdETH ?? 0) / 100) * 100,
|
|
27884
|
+
[hyUSD]: apyToAprPercent((data?.hyUSD ?? 0) / 100) * 100,
|
|
27885
|
+
[sfrxeth]: apyToAprPercent((dataMainnetColalterals?.sfrxeth ?? 0) / 100) * 100,
|
|
27886
|
+
[sfrax]: apyToAprPercent((dataMainnetColalterals?.sfrax ?? 0) / 100) * 100,
|
|
27887
|
+
[ceth]: apyToAprPercent((dataMainnetColalterals?.ceth ?? 0) / 100) * 100,
|
|
27888
|
+
[ethPlus]: apyToAprPercent((dataMainnet?.["ETH+"] ?? 0) / 100) * 100,
|
|
27889
|
+
[usdThree]: apyToAprPercent((dataMainnet?.["USD3"] ?? 0) / 100) * 100,
|
|
27890
|
+
[woEth]: apyToAprPercent((dataMainnetColalterals?.woeth ?? 0) / 100) * 100
|
|
27653
27891
|
};
|
|
27654
27892
|
}
|
|
27655
27893
|
};
|