@1delta/margin-fetcher 0.0.251 → 0.0.253
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.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +504 -6
- package/dist/index.js.map +1 -1
- package/dist/lending/public-data/fetchLender.d.ts.map +1 -1
- package/dist/vaults/displayName.d.ts +19 -0
- package/dist/vaults/displayName.d.ts.map +1 -0
- package/dist/vaults/euler-earn/fetchFromSubgraph.d.ts +12 -0
- package/dist/vaults/euler-earn/fetchFromSubgraph.d.ts.map +1 -0
- package/dist/vaults/euler-earn/fetchPublic.d.ts +24 -0
- package/dist/vaults/euler-earn/fetchPublic.d.ts.map +1 -0
- package/dist/vaults/euler-earn/index.d.ts +4 -0
- package/dist/vaults/euler-earn/index.d.ts.map +1 -0
- package/dist/vaults/euler-earn/types.d.ts +70 -0
- package/dist/vaults/euler-earn/types.d.ts.map +1 -0
- package/dist/vaults/fetchVaultsAll.d.ts +4 -2
- package/dist/vaults/fetchVaultsAll.d.ts.map +1 -1
- package/dist/vaults/fluid/publicCallParse.d.ts.map +1 -1
- package/dist/vaults/fluid/types.d.ts +11 -1
- package/dist/vaults/fluid/types.d.ts.map +1 -1
- package/dist/vaults/gearbox/publicCallParse.d.ts.map +1 -1
- package/dist/vaults/gearbox/types.d.ts +14 -1
- package/dist/vaults/gearbox/types.d.ts.map +1 -1
- package/dist/vaults/index.d.ts +2 -0
- package/dist/vaults/index.d.ts.map +1 -1
- package/dist/vaults/morpho/fetchFromApi.d.ts.map +1 -1
- package/dist/vaults/morpho/fetchFromChain.d.ts +30 -0
- package/dist/vaults/morpho/fetchFromChain.d.ts.map +1 -0
- package/dist/vaults/morpho/fetchFromSubgraph.d.ts.map +1 -1
- package/dist/vaults/morpho/fetchListaFromChain.d.ts +34 -0
- package/dist/vaults/morpho/fetchListaFromChain.d.ts.map +1 -0
- package/dist/vaults/morpho/index.d.ts +3 -1
- package/dist/vaults/morpho/index.d.ts.map +1 -1
- package/dist/vaults/morpho/types.d.ts +28 -1
- package/dist/vaults/morpho/types.d.ts.map +1 -1
- package/dist/vaults/silo/fetchPublic.d.ts.map +1 -1
- package/dist/vaults/silo/types.d.ts +12 -1
- package/dist/vaults/silo/types.d.ts.map +1 -1
- package/package.json +6 -6
package/dist/index.js
CHANGED
|
@@ -5,7 +5,7 @@ import { Lender, isAaveType, isCompoundV3, isMultiMarket, isSiloV2Type, isSiloV3
|
|
|
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, getEvmClient, getEvmClientUniversal, multicallRetryUniversal } from '@1delta/providers';
|
|
8
|
-
import { FluidLendingResolverAbi, MorphoLensAbi, AaveV4SpokeAbi, AaveV4OracleAbi, AaveV4HubAbi, FluidVaultResolverAbi, GearboxMarketCompressorV310Abi, MorphoBlueAbi, GearboxCreditAccountCompressorV310Abi } from '@1delta/abis';
|
|
8
|
+
import { FluidLendingResolverAbi, MetaMorphoAbi, MoolahVaultAbi, MorphoLensAbi, AaveV4SpokeAbi, AaveV4OracleAbi, AaveV4HubAbi, FluidVaultResolverAbi, GearboxMarketCompressorV310Abi, MorphoBlueAbi, GearboxCreditAccountCompressorV310Abi } from '@1delta/abis';
|
|
9
9
|
export { MorphoLensAbi } from '@1delta/abis';
|
|
10
10
|
import { prepareDebitDataMulticall, prepareLenderDebitMulticall, parseDebitDataResult, parseLenderDebitResult, getPermit2ContractAddress, getCompoundV3CometAddress as getCompoundV3CometAddress$1, getMorphoAddress, getAaveCollateralTokenAddress, getSiloHalfForUnderlying, InitMarginAddresses } from '@1delta/calldata-sdk';
|
|
11
11
|
import { proxyNativeFetch } from '@1delta/proxy-fetch';
|
|
@@ -6269,6 +6269,7 @@ globalThis[GLOBAL_LENDER_DATA_KEY] = {
|
|
|
6269
6269
|
morphoOracles: {},
|
|
6270
6270
|
morphoTypeOracles: {},
|
|
6271
6271
|
morphoTypeMarkets: {},
|
|
6272
|
+
morphoTypeVaults: {},
|
|
6272
6273
|
aaveOraclesConfig: {},
|
|
6273
6274
|
aaveWethGateway: {},
|
|
6274
6275
|
morphoBundler3: {},
|
|
@@ -6300,6 +6301,7 @@ var aaveOracles = () => getGlobalData2()?.aaveOracles;
|
|
|
6300
6301
|
var compoundV2Oracles = () => getGlobalData2()?.compoundV2Oracles;
|
|
6301
6302
|
var compoundV3OraclesData = () => getGlobalData2()?.compoundV3OraclesData;
|
|
6302
6303
|
var morphoTypeMarkets = () => getGlobalData2()?.morphoTypeMarkets;
|
|
6304
|
+
var morphoTypeVaults = () => getGlobalData2()?.morphoTypeVaults;
|
|
6303
6305
|
var aaveReserves = () => getGlobalData2()?.aaveReserves;
|
|
6304
6306
|
var compoundV3Reserves = () => getGlobalData2()?.compoundV3Reserves;
|
|
6305
6307
|
var compoundV2Reserves = () => getGlobalData2()?.compoundV2Reserves;
|
|
@@ -8118,6 +8120,9 @@ function encode(type, value, isArray2 = false) {
|
|
|
8118
8120
|
throw new UnsupportedPackedAbiType(type);
|
|
8119
8121
|
}
|
|
8120
8122
|
|
|
8123
|
+
// ../../node_modules/.pnpm/viem@2.45.3_bufferutil@4.1.0_typescript@5.9.3_utf-8-validate@6.0.6_zod@4.3.6/node_modules/viem/_esm/constants/bytes.js
|
|
8124
|
+
var zeroHash = "0x0000000000000000000000000000000000000000000000000000000000000000";
|
|
8125
|
+
|
|
8121
8126
|
// ../../node_modules/.pnpm/viem@2.45.3_bufferutil@4.1.0_typescript@5.9.3_utf-8-validate@6.0.6_zod@4.3.6/node_modules/viem/_esm/errors/unit.js
|
|
8122
8127
|
var InvalidDecimalNumberError = class extends BaseError {
|
|
8123
8128
|
constructor({ value }) {
|
|
@@ -19835,11 +19840,14 @@ var getLenderPublicData = async (chainId, lenders, prices, additionalYields, mul
|
|
|
19835
19840
|
return {};
|
|
19836
19841
|
}) => {
|
|
19837
19842
|
let calls = [];
|
|
19843
|
+
const validLenders = [];
|
|
19838
19844
|
for (const lender of lenders) {
|
|
19839
19845
|
const abi = getAbi(lender);
|
|
19840
19846
|
const callData = buildLenderCall(chainId, lender);
|
|
19847
|
+
if (callData.some((c) => !c.address)) continue;
|
|
19841
19848
|
const mappedCalls = callData.map((call) => ({ call, abi: call.abi ?? abi }));
|
|
19842
19849
|
calls.push(...mappedCalls);
|
|
19850
|
+
validLenders.push(lender);
|
|
19843
19851
|
}
|
|
19844
19852
|
const [rawResults, list] = await Promise.all([
|
|
19845
19853
|
multicallRetry({
|
|
@@ -19853,7 +19861,7 @@ var getLenderPublicData = async (chainId, lenders, prices, additionalYields, mul
|
|
|
19853
19861
|
const invalidLenders = [];
|
|
19854
19862
|
let lenderData = {};
|
|
19855
19863
|
let currentSlice = 0;
|
|
19856
|
-
for (const lender of
|
|
19864
|
+
for (const lender of validLenders) {
|
|
19857
19865
|
const [converter, sliceLength] = getLenderDataConverter(
|
|
19858
19866
|
lender,
|
|
19859
19867
|
chainId,
|
|
@@ -33928,6 +33936,15 @@ var buildFluidFTokensCall = (chainId) => {
|
|
|
33928
33936
|
];
|
|
33929
33937
|
};
|
|
33930
33938
|
|
|
33939
|
+
// src/vaults/displayName.ts
|
|
33940
|
+
var composeVaultDisplayName = (brand, curatorName, asset, fallbackName) => {
|
|
33941
|
+
const symbol = (asset?.symbol ?? "").trim();
|
|
33942
|
+
const label = (curatorName ?? brand).trim() || brand;
|
|
33943
|
+
if (symbol) return `${label} ${symbol}`;
|
|
33944
|
+
const fallback = (fallbackName ?? "").trim();
|
|
33945
|
+
return fallback || brand;
|
|
33946
|
+
};
|
|
33947
|
+
|
|
33931
33948
|
// src/vaults/fluid/publicCallParse.ts
|
|
33932
33949
|
var FLUID_EEE_LOWER4 = "0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee";
|
|
33933
33950
|
var normalizeUnderlying4 = (addr) => addr === FLUID_EEE_LOWER4 ? zeroAddress : addr;
|
|
@@ -33964,11 +33981,21 @@ function parseFTokens(fTokens, chainId, prices, tokenList) {
|
|
|
33964
33981
|
const rewardsRate = scaleFluidRate2(ft.rewardsRate);
|
|
33965
33982
|
const liquidityRaw = ft.liquidityUserSupplyData?.withdrawable?.toString() ?? "0";
|
|
33966
33983
|
const liquidityFormatted = Number(parseRawAmount(liquidityRaw, decimals));
|
|
33984
|
+
const onchainName = (ft.name ?? "").toString().trim();
|
|
33985
|
+
const underlyingSymbol = (assetMeta?.symbol ?? ft.symbol ?? "").toString().replace(/^f/, "").trim();
|
|
33986
|
+
const displayName = onchainName ? onchainName : underlyingSymbol ? `Fluid ${underlyingSymbol}` : "Fluid";
|
|
33967
33987
|
const entry = {
|
|
33968
33988
|
address: ft.tokenAddress,
|
|
33969
33989
|
underlying,
|
|
33970
33990
|
symbol: ft.symbol ?? "",
|
|
33971
|
-
name:
|
|
33991
|
+
name: displayName,
|
|
33992
|
+
displayName: composeVaultDisplayName(
|
|
33993
|
+
"Fluid",
|
|
33994
|
+
void 0,
|
|
33995
|
+
assetMeta,
|
|
33996
|
+
displayName
|
|
33997
|
+
),
|
|
33998
|
+
curatorName: "Fluid",
|
|
33972
33999
|
decimals,
|
|
33973
34000
|
totalAssets: ft.totalAssets?.toString() ?? "0",
|
|
33974
34001
|
totalSupply: ft.totalSupply?.toString() ?? "0",
|
|
@@ -34050,6 +34077,7 @@ var getGearboxV3PoolsConverter = (chainId, prices = {}, tokenList = {}) => {
|
|
|
34050
34077
|
};
|
|
34051
34078
|
function parseMarkets(markets, chainId, prices, tokenList) {
|
|
34052
34079
|
const out = {};
|
|
34080
|
+
const configuratorNames = gearboxMarketConfigurators(chainId) ?? {};
|
|
34053
34081
|
for (const m of markets) {
|
|
34054
34082
|
const pool = m?.pool;
|
|
34055
34083
|
if (!pool) continue;
|
|
@@ -34068,11 +34096,19 @@ function parseMarkets(markets, chainId, prices, tokenList) {
|
|
|
34068
34096
|
const priceUsd = prices[oracleKey] ?? prices[underlying] ?? 0;
|
|
34069
34097
|
const liquidityRaw = pool.availableLiquidity?.toString() ?? "0";
|
|
34070
34098
|
const liquidityFormatted = Number(parseRawAmount(liquidityRaw, decimals));
|
|
34099
|
+
const configurator = (m?.configurator ?? "").toString().toLowerCase();
|
|
34100
|
+
const curatorName = configurator ? configuratorNames[configurator] : void 0;
|
|
34071
34101
|
const entry = {
|
|
34072
34102
|
address: rawAddress,
|
|
34073
34103
|
underlying,
|
|
34074
34104
|
symbol: pool.symbol ?? "",
|
|
34075
34105
|
name: pool.name ?? "",
|
|
34106
|
+
displayName: composeVaultDisplayName(
|
|
34107
|
+
"Gearbox",
|
|
34108
|
+
curatorName,
|
|
34109
|
+
assetMeta,
|
|
34110
|
+
pool.name ?? void 0
|
|
34111
|
+
),
|
|
34076
34112
|
decimals,
|
|
34077
34113
|
totalAssets: totalAssetsRaw,
|
|
34078
34114
|
totalSupply: pool.totalSupply?.toString() ?? "0",
|
|
@@ -34081,6 +34117,8 @@ function parseMarkets(markets, chainId, prices, tokenList) {
|
|
|
34081
34117
|
expectedLiquidity: pool.expectedLiquidity?.toString() ?? "0",
|
|
34082
34118
|
dieselRate: pool.dieselRate?.toString() ?? "0",
|
|
34083
34119
|
withdrawFeeBps: Number(pool.withdrawFee ?? 0),
|
|
34120
|
+
curator: configurator || void 0,
|
|
34121
|
+
curatorName,
|
|
34084
34122
|
supplyRate: scaleRate(pool.supplyRate),
|
|
34085
34123
|
baseInterestRate: scaleRate(pool.baseInterestRate),
|
|
34086
34124
|
asset: assetMeta,
|
|
@@ -34146,6 +34184,12 @@ query GetVaults {
|
|
|
34146
34184
|
owner
|
|
34147
34185
|
curator
|
|
34148
34186
|
guardian
|
|
34187
|
+
curators {
|
|
34188
|
+
id
|
|
34189
|
+
name
|
|
34190
|
+
image
|
|
34191
|
+
verified
|
|
34192
|
+
}
|
|
34149
34193
|
rewards {
|
|
34150
34194
|
supplyApr
|
|
34151
34195
|
asset {
|
|
@@ -34171,6 +34215,21 @@ async function fetchPage(chainId, first, skip) {
|
|
|
34171
34215
|
const json = await response.json();
|
|
34172
34216
|
return json?.data?.vaults?.items ?? [];
|
|
34173
34217
|
}
|
|
34218
|
+
var parseCurators = (curators) => {
|
|
34219
|
+
if (!curators?.length) return void 0;
|
|
34220
|
+
const out = [];
|
|
34221
|
+
for (const c of curators) {
|
|
34222
|
+
const name = c?.name?.trim();
|
|
34223
|
+
if (!name) continue;
|
|
34224
|
+
out.push({
|
|
34225
|
+
id: c.id ?? "",
|
|
34226
|
+
name,
|
|
34227
|
+
image: c.image ?? void 0,
|
|
34228
|
+
verified: c.verified ?? void 0
|
|
34229
|
+
});
|
|
34230
|
+
}
|
|
34231
|
+
return out.length > 0 ? out : void 0;
|
|
34232
|
+
};
|
|
34174
34233
|
var sumRewardsApr = (rewards) => {
|
|
34175
34234
|
if (!rewards) return 0;
|
|
34176
34235
|
let total = 0;
|
|
@@ -34200,11 +34259,19 @@ function parseVault2(v, chainId, prices, tokenList) {
|
|
|
34200
34259
|
const rewardsRate = sumRewardsApr(state.rewards);
|
|
34201
34260
|
const apiTotalAssetsUsd = Number(state.totalAssetsUsd ?? 0);
|
|
34202
34261
|
const totalAssetsUsd = apiTotalAssetsUsd || totalAssetsFormatted * resolvedPriceUsd;
|
|
34262
|
+
const curators = parseCurators(state.curators);
|
|
34263
|
+
const primaryCurator = curators?.[0];
|
|
34203
34264
|
return {
|
|
34204
34265
|
address,
|
|
34205
34266
|
underlying: assetAddr,
|
|
34206
34267
|
symbol: v.symbol ?? "",
|
|
34207
34268
|
name: v.name ?? "",
|
|
34269
|
+
displayName: composeVaultDisplayName(
|
|
34270
|
+
"Morpho",
|
|
34271
|
+
primaryCurator?.name,
|
|
34272
|
+
assetMeta,
|
|
34273
|
+
v.name ?? void 0
|
|
34274
|
+
),
|
|
34208
34275
|
decimals,
|
|
34209
34276
|
totalAssets: totalAssetsRaw,
|
|
34210
34277
|
totalSupply: state.totalSupply?.toString() ?? "0",
|
|
@@ -34217,6 +34284,9 @@ function parseVault2(v, chainId, prices, tokenList) {
|
|
|
34217
34284
|
owner: state.owner?.toLowerCase() || void 0,
|
|
34218
34285
|
curator: state.curator?.toLowerCase() || void 0,
|
|
34219
34286
|
guardian: state.guardian?.toLowerCase() || void 0,
|
|
34287
|
+
curatorName: primaryCurator?.name,
|
|
34288
|
+
curatorImage: primaryCurator?.image,
|
|
34289
|
+
curators,
|
|
34220
34290
|
asset: assetMeta,
|
|
34221
34291
|
priceUsd: resolvedPriceUsd || void 0,
|
|
34222
34292
|
totalAssetsFormatted,
|
|
@@ -34294,6 +34364,12 @@ function parseVault3(v, chainId, prices, tokenList) {
|
|
|
34294
34364
|
underlying: assetAddr,
|
|
34295
34365
|
symbol: v.symbol ?? "",
|
|
34296
34366
|
name: v.name ?? "",
|
|
34367
|
+
displayName: composeVaultDisplayName(
|
|
34368
|
+
"Morpho",
|
|
34369
|
+
void 0,
|
|
34370
|
+
assetMeta,
|
|
34371
|
+
v.name ?? void 0
|
|
34372
|
+
),
|
|
34297
34373
|
decimals,
|
|
34298
34374
|
totalAssets: totalAssetsRaw,
|
|
34299
34375
|
totalSupply: v.totalShares?.toString() ?? "0",
|
|
@@ -34352,6 +34428,289 @@ var fetchMorphoVaults = async (chainId, prices = {}, tokenList = {}) => {
|
|
|
34352
34428
|
}
|
|
34353
34429
|
return fetchMorphoVaultsFromApi(chainId, prices, tokenList);
|
|
34354
34430
|
};
|
|
34431
|
+
var VAULT_CALLS = [
|
|
34432
|
+
"name",
|
|
34433
|
+
"symbol",
|
|
34434
|
+
"decimals",
|
|
34435
|
+
"totalAssets",
|
|
34436
|
+
"totalSupply",
|
|
34437
|
+
"fee",
|
|
34438
|
+
"timelock",
|
|
34439
|
+
"owner",
|
|
34440
|
+
"curator",
|
|
34441
|
+
"guardian"
|
|
34442
|
+
];
|
|
34443
|
+
var CALLS_PER_VAULT = VAULT_CALLS.length;
|
|
34444
|
+
var FEE_SCALE = 1e18;
|
|
34445
|
+
var isHex40 = (addr) => typeof addr === "string" && /^0x[0-9a-f]{40}$/i.test(addr);
|
|
34446
|
+
var lcOrUndefined = (addr) => isHex40(addr) ? addr.toLowerCase() : void 0;
|
|
34447
|
+
var toNumberSafe = (raw, fallback = 0) => {
|
|
34448
|
+
if (raw === void 0 || raw === null) return fallback;
|
|
34449
|
+
const n = Number(raw);
|
|
34450
|
+
return Number.isFinite(n) ? n : fallback;
|
|
34451
|
+
};
|
|
34452
|
+
var toStringSafe = (raw, fallback = "") => {
|
|
34453
|
+
if (raw === void 0 || raw === null) return fallback;
|
|
34454
|
+
return String(raw);
|
|
34455
|
+
};
|
|
34456
|
+
var DEFAULT_SKIP_PROTOCOLS = /* @__PURE__ */ new Set(["LISTA_DAO"]);
|
|
34457
|
+
var collectEntries = (chainId, protocols, skip) => {
|
|
34458
|
+
const all = morphoTypeVaults() ?? {};
|
|
34459
|
+
const out = [];
|
|
34460
|
+
const seen = /* @__PURE__ */ new Set();
|
|
34461
|
+
const protocolKeys = protocols && protocols.length > 0 ? protocols : Object.keys(all);
|
|
34462
|
+
for (const protocol of protocolKeys) {
|
|
34463
|
+
if (skip?.has(protocol)) continue;
|
|
34464
|
+
const list = all[protocol]?.[chainId] ?? [];
|
|
34465
|
+
for (const entry of list) {
|
|
34466
|
+
const vaultAddr = entry?.vault?.toLowerCase();
|
|
34467
|
+
if (!vaultAddr || seen.has(vaultAddr)) continue;
|
|
34468
|
+
seen.add(vaultAddr);
|
|
34469
|
+
out.push({ protocol, entry });
|
|
34470
|
+
}
|
|
34471
|
+
}
|
|
34472
|
+
return out;
|
|
34473
|
+
};
|
|
34474
|
+
var fetchMorphoVaultsFromChain = async (chainId, multicallRetry, prices = {}, tokenList = {}, opts = {}) => {
|
|
34475
|
+
const entries = opts.vaultsOverride ? opts.vaultsOverride.map((entry) => ({ protocol: "", entry })) : collectEntries(chainId, opts.protocols, DEFAULT_SKIP_PROTOCOLS);
|
|
34476
|
+
if (entries.length === 0) return {};
|
|
34477
|
+
const calls = entries.flatMap(
|
|
34478
|
+
({ entry }) => VAULT_CALLS.map((name) => ({
|
|
34479
|
+
address: entry.vault,
|
|
34480
|
+
name,
|
|
34481
|
+
params: []
|
|
34482
|
+
}))
|
|
34483
|
+
);
|
|
34484
|
+
const raw = await multicallRetry({
|
|
34485
|
+
chain: chainId,
|
|
34486
|
+
calls,
|
|
34487
|
+
abi: calls.map(() => MetaMorphoAbi),
|
|
34488
|
+
allowFailure: true
|
|
34489
|
+
});
|
|
34490
|
+
const out = {};
|
|
34491
|
+
for (let i = 0; i < entries.length; i++) {
|
|
34492
|
+
const { entry } = entries[i];
|
|
34493
|
+
const base = i * CALLS_PER_VAULT;
|
|
34494
|
+
const slice = raw.slice(base, base + CALLS_PER_VAULT);
|
|
34495
|
+
const parsed = parseVault4(entry, slice, chainId, prices, tokenList);
|
|
34496
|
+
if (parsed) out[parsed.address] = parsed;
|
|
34497
|
+
}
|
|
34498
|
+
return out;
|
|
34499
|
+
};
|
|
34500
|
+
function parseVault4(entry, results, chainId, prices, tokenList) {
|
|
34501
|
+
const address = entry?.vault?.toLowerCase();
|
|
34502
|
+
const underlying = entry?.underlying?.toLowerCase();
|
|
34503
|
+
if (!address || !underlying) return null;
|
|
34504
|
+
const [
|
|
34505
|
+
nameRaw,
|
|
34506
|
+
symbolRaw,
|
|
34507
|
+
decimalsRaw,
|
|
34508
|
+
totalAssetsRaw,
|
|
34509
|
+
totalSupplyRaw,
|
|
34510
|
+
feeRaw,
|
|
34511
|
+
timelockRaw,
|
|
34512
|
+
ownerRaw,
|
|
34513
|
+
curatorRaw,
|
|
34514
|
+
guardianRaw
|
|
34515
|
+
] = results;
|
|
34516
|
+
const assetMeta = tokenList[underlying];
|
|
34517
|
+
const decimals = Number(decimalsRaw ?? assetMeta?.decimals ?? 18);
|
|
34518
|
+
const totalAssets = toStringSafe(totalAssetsRaw, "0");
|
|
34519
|
+
const totalSupply = toStringSafe(totalSupplyRaw, "0");
|
|
34520
|
+
const totalAssetsFormatted = Number(parseRawAmount(totalAssets, decimals));
|
|
34521
|
+
const oracleKey = toOracleKey(assetMeta?.assetGroup) ?? toGenericPriceKey(underlying, chainId);
|
|
34522
|
+
const priceUsd = prices[oracleKey] ?? prices[underlying] ?? 0;
|
|
34523
|
+
const onchainName = toStringSafe(nameRaw).trim();
|
|
34524
|
+
const fallbackName = onchainName || (entry.name ?? "").trim();
|
|
34525
|
+
const symbol = toStringSafe(symbolRaw);
|
|
34526
|
+
const fee = toNumberSafe(feeRaw) / FEE_SCALE * 100;
|
|
34527
|
+
const timelock = toNumberSafe(timelockRaw);
|
|
34528
|
+
return {
|
|
34529
|
+
address,
|
|
34530
|
+
underlying,
|
|
34531
|
+
symbol,
|
|
34532
|
+
name: fallbackName,
|
|
34533
|
+
displayName: composeVaultDisplayName("Morpho", void 0, assetMeta, fallbackName),
|
|
34534
|
+
decimals,
|
|
34535
|
+
totalAssets,
|
|
34536
|
+
totalSupply,
|
|
34537
|
+
// On-chain path can't compute the per-allocation supply APR without
|
|
34538
|
+
// walking the underlying market list — surface 0 like the Goldsky path
|
|
34539
|
+
// does for rewards. Callers that need APR on these vaults should layer
|
|
34540
|
+
// it in separately or fall back to the API/subgraph fetchers.
|
|
34541
|
+
supplyRate: 0,
|
|
34542
|
+
rewardsRate: 0,
|
|
34543
|
+
depositRate: 0,
|
|
34544
|
+
fee,
|
|
34545
|
+
timelock,
|
|
34546
|
+
whitelisted: true,
|
|
34547
|
+
owner: lcOrUndefined(ownerRaw),
|
|
34548
|
+
curator: lcOrUndefined(curatorRaw),
|
|
34549
|
+
guardian: lcOrUndefined(guardianRaw),
|
|
34550
|
+
asset: assetMeta,
|
|
34551
|
+
priceUsd: priceUsd || void 0,
|
|
34552
|
+
totalAssetsFormatted,
|
|
34553
|
+
totalAssetsUsd: totalAssetsFormatted * priceUsd,
|
|
34554
|
+
// No on-chain "immediately withdrawable" figure without summing the
|
|
34555
|
+
// public allocator's per-market caps. Use totalAssets as an optimistic
|
|
34556
|
+
// ceiling — same convention as Silo / Euler-Earn / Morpho-Goldsky.
|
|
34557
|
+
liquidity: totalAssets,
|
|
34558
|
+
liquidityFormatted: totalAssetsFormatted,
|
|
34559
|
+
liquidityUsd: totalAssetsFormatted * priceUsd
|
|
34560
|
+
};
|
|
34561
|
+
}
|
|
34562
|
+
var LISTA_PROTOCOL = "LISTA_DAO";
|
|
34563
|
+
var PHASE1_CALLS = [
|
|
34564
|
+
"name",
|
|
34565
|
+
"symbol",
|
|
34566
|
+
"decimals",
|
|
34567
|
+
"totalAssets",
|
|
34568
|
+
"totalSupply",
|
|
34569
|
+
"fee",
|
|
34570
|
+
"feeRecipient",
|
|
34571
|
+
"CURATOR"
|
|
34572
|
+
];
|
|
34573
|
+
var PHASE1_PER_VAULT = PHASE1_CALLS.length;
|
|
34574
|
+
var FEE_SCALE2 = 1e18;
|
|
34575
|
+
var isHex402 = (addr) => typeof addr === "string" && /^0x[0-9a-f]{40}$/i.test(addr);
|
|
34576
|
+
var lcOrUndefined2 = (addr) => {
|
|
34577
|
+
if (!isHex402(addr)) return void 0;
|
|
34578
|
+
const lower = addr.toLowerCase();
|
|
34579
|
+
return lower === zeroAddress ? void 0 : lower;
|
|
34580
|
+
};
|
|
34581
|
+
var isHex64 = (val) => typeof val === "string" && /^0x[0-9a-f]{64}$/i.test(val);
|
|
34582
|
+
var toNumberSafe2 = (raw, fallback = 0) => {
|
|
34583
|
+
if (raw === void 0 || raw === null) return fallback;
|
|
34584
|
+
const n = Number(raw);
|
|
34585
|
+
return Number.isFinite(n) ? n : fallback;
|
|
34586
|
+
};
|
|
34587
|
+
var toStringSafe2 = (raw, fallback = "") => {
|
|
34588
|
+
if (raw === void 0 || raw === null) return fallback;
|
|
34589
|
+
return String(raw);
|
|
34590
|
+
};
|
|
34591
|
+
var collectEntries2 = (chainId) => {
|
|
34592
|
+
const list = morphoTypeVaults()?.[LISTA_PROTOCOL]?.[chainId] ?? [];
|
|
34593
|
+
const seen = /* @__PURE__ */ new Set();
|
|
34594
|
+
const out = [];
|
|
34595
|
+
for (const entry of list) {
|
|
34596
|
+
const vaultAddr = entry?.vault?.toLowerCase();
|
|
34597
|
+
if (!vaultAddr || seen.has(vaultAddr)) continue;
|
|
34598
|
+
seen.add(vaultAddr);
|
|
34599
|
+
out.push(entry);
|
|
34600
|
+
}
|
|
34601
|
+
return out;
|
|
34602
|
+
};
|
|
34603
|
+
var fetchListaVaultsFromChain = async (chainId, multicallRetry, prices = {}, tokenList = {}, opts = {}) => {
|
|
34604
|
+
const entries = opts.vaultsOverride ?? collectEntries2(chainId);
|
|
34605
|
+
if (entries.length === 0) return {};
|
|
34606
|
+
const phase1Calls = entries.flatMap(
|
|
34607
|
+
(entry) => PHASE1_CALLS.map((name) => ({
|
|
34608
|
+
address: entry.vault,
|
|
34609
|
+
name,
|
|
34610
|
+
params: []
|
|
34611
|
+
}))
|
|
34612
|
+
);
|
|
34613
|
+
const phase1 = await multicallRetry({
|
|
34614
|
+
chain: chainId,
|
|
34615
|
+
calls: phase1Calls,
|
|
34616
|
+
abi: phase1Calls.map(() => MoolahVaultAbi),
|
|
34617
|
+
allowFailure: true
|
|
34618
|
+
});
|
|
34619
|
+
const curatorRoleByVault = [];
|
|
34620
|
+
for (let i = 0; i < entries.length; i++) {
|
|
34621
|
+
const role = phase1[i * PHASE1_PER_VAULT + 7];
|
|
34622
|
+
curatorRoleByVault.push(isHex64(role) ? role : void 0);
|
|
34623
|
+
}
|
|
34624
|
+
const phase2Calls = entries.map((entry, i) => ({
|
|
34625
|
+
address: entry.vault,
|
|
34626
|
+
name: "getRoleMember",
|
|
34627
|
+
params: [curatorRoleByVault[i] ?? zeroHash, 0n]
|
|
34628
|
+
}));
|
|
34629
|
+
const phase2 = await multicallRetry({
|
|
34630
|
+
chain: chainId,
|
|
34631
|
+
calls: phase2Calls,
|
|
34632
|
+
abi: phase2Calls.map(() => MoolahVaultAbi),
|
|
34633
|
+
allowFailure: true
|
|
34634
|
+
});
|
|
34635
|
+
const out = {};
|
|
34636
|
+
for (let i = 0; i < entries.length; i++) {
|
|
34637
|
+
const entry = entries[i];
|
|
34638
|
+
const slice = phase1.slice(
|
|
34639
|
+
i * PHASE1_PER_VAULT,
|
|
34640
|
+
(i + 1) * PHASE1_PER_VAULT
|
|
34641
|
+
);
|
|
34642
|
+
const curatorAddrRaw = curatorRoleByVault[i] ? phase2[i] : void 0;
|
|
34643
|
+
const parsed = parseVault5(
|
|
34644
|
+
entry,
|
|
34645
|
+
slice,
|
|
34646
|
+
curatorAddrRaw,
|
|
34647
|
+
chainId,
|
|
34648
|
+
prices,
|
|
34649
|
+
tokenList
|
|
34650
|
+
);
|
|
34651
|
+
if (parsed) out[parsed.address] = parsed;
|
|
34652
|
+
}
|
|
34653
|
+
return out;
|
|
34654
|
+
};
|
|
34655
|
+
function parseVault5(entry, results, curatorAddrRaw, chainId, prices, tokenList) {
|
|
34656
|
+
const address = entry?.vault?.toLowerCase();
|
|
34657
|
+
const underlying = entry?.underlying?.toLowerCase();
|
|
34658
|
+
if (!address || !underlying) return null;
|
|
34659
|
+
const [
|
|
34660
|
+
nameRaw,
|
|
34661
|
+
symbolRaw,
|
|
34662
|
+
decimalsRaw,
|
|
34663
|
+
totalAssetsRaw,
|
|
34664
|
+
totalSupplyRaw,
|
|
34665
|
+
feeRaw,
|
|
34666
|
+
/* feeRecipientRaw */
|
|
34667
|
+
,
|
|
34668
|
+
/* curatorRoleRaw */
|
|
34669
|
+
,
|
|
34670
|
+
] = results;
|
|
34671
|
+
const assetMeta = tokenList[underlying];
|
|
34672
|
+
const decimals = Number(decimalsRaw ?? assetMeta?.decimals ?? 18);
|
|
34673
|
+
const totalAssets = toStringSafe2(totalAssetsRaw, "0");
|
|
34674
|
+
const totalSupply = toStringSafe2(totalSupplyRaw, "0");
|
|
34675
|
+
const totalAssetsFormatted = Number(parseRawAmount(totalAssets, decimals));
|
|
34676
|
+
const oracleKey = toOracleKey(assetMeta?.assetGroup) ?? toGenericPriceKey(underlying, chainId);
|
|
34677
|
+
const priceUsd = prices[oracleKey] ?? prices[underlying] ?? 0;
|
|
34678
|
+
const onchainName = toStringSafe2(nameRaw).trim();
|
|
34679
|
+
const fallbackName = onchainName || (entry.name ?? "").trim();
|
|
34680
|
+
const symbol = toStringSafe2(symbolRaw);
|
|
34681
|
+
const fee = toNumberSafe2(feeRaw) / FEE_SCALE2 * 100;
|
|
34682
|
+
return {
|
|
34683
|
+
address,
|
|
34684
|
+
underlying,
|
|
34685
|
+
symbol,
|
|
34686
|
+
name: fallbackName,
|
|
34687
|
+
displayName: composeVaultDisplayName(
|
|
34688
|
+
"Lista",
|
|
34689
|
+
void 0,
|
|
34690
|
+
assetMeta,
|
|
34691
|
+
fallbackName
|
|
34692
|
+
),
|
|
34693
|
+
decimals,
|
|
34694
|
+
totalAssets,
|
|
34695
|
+
totalSupply,
|
|
34696
|
+
supplyRate: 0,
|
|
34697
|
+
rewardsRate: 0,
|
|
34698
|
+
depositRate: 0,
|
|
34699
|
+
fee,
|
|
34700
|
+
timelock: 0,
|
|
34701
|
+
whitelisted: true,
|
|
34702
|
+
owner: void 0,
|
|
34703
|
+
curator: lcOrUndefined2(curatorAddrRaw),
|
|
34704
|
+
guardian: void 0,
|
|
34705
|
+
asset: assetMeta,
|
|
34706
|
+
priceUsd: priceUsd || void 0,
|
|
34707
|
+
totalAssetsFormatted,
|
|
34708
|
+
totalAssetsUsd: totalAssetsFormatted * priceUsd,
|
|
34709
|
+
liquidity: totalAssets,
|
|
34710
|
+
liquidityFormatted: totalAssetsFormatted,
|
|
34711
|
+
liquidityUsd: totalAssetsFormatted * priceUsd
|
|
34712
|
+
};
|
|
34713
|
+
}
|
|
34355
34714
|
|
|
34356
34715
|
// src/vaults/silo/fetchPublic.ts
|
|
34357
34716
|
var SILO_API_URL = "https://api-v3.silo.finance";
|
|
@@ -34391,7 +34750,7 @@ var toRawAmount = (decimalString, decimals) => {
|
|
|
34391
34750
|
return "0";
|
|
34392
34751
|
}
|
|
34393
34752
|
};
|
|
34394
|
-
function
|
|
34753
|
+
function parseVault6(v, chainId, prices, tokenList) {
|
|
34395
34754
|
const address = (v?.id ?? "").toLowerCase();
|
|
34396
34755
|
const assetAddr = (v?.asset?.id ?? "").toLowerCase();
|
|
34397
34756
|
if (!address || !assetAddr) return null;
|
|
@@ -34415,6 +34774,12 @@ function parseVault4(v, chainId, prices, tokenList) {
|
|
|
34415
34774
|
underlying: assetAddr,
|
|
34416
34775
|
symbol: v.symbol ?? "",
|
|
34417
34776
|
name: v.name ?? "",
|
|
34777
|
+
displayName: composeVaultDisplayName(
|
|
34778
|
+
"Silo",
|
|
34779
|
+
void 0,
|
|
34780
|
+
assetMeta,
|
|
34781
|
+
v.name ?? void 0
|
|
34782
|
+
),
|
|
34418
34783
|
decimals,
|
|
34419
34784
|
protocolVersion: v.protocol?.protocolVersion ?? "",
|
|
34420
34785
|
protocolId: (v.protocolId ?? v.protocol?.id ?? "").toLowerCase(),
|
|
@@ -34469,10 +34834,131 @@ var fetchSiloVaults = async (chainId, prices = {}, tokenList = {}, options) => {
|
|
|
34469
34834
|
if (options?.protocolVersion && v.protocol?.protocolVersion !== options.protocolVersion) {
|
|
34470
34835
|
continue;
|
|
34471
34836
|
}
|
|
34472
|
-
const parsed =
|
|
34837
|
+
const parsed = parseVault6(v, chainId, prices, tokenList);
|
|
34838
|
+
if (parsed) out[parsed.address] = parsed;
|
|
34839
|
+
}
|
|
34840
|
+
return out;
|
|
34841
|
+
};
|
|
34842
|
+
|
|
34843
|
+
// src/vaults/euler-earn/fetchFromSubgraph.ts
|
|
34844
|
+
var EULER_EARN_SUBGRAPH_URLS = {
|
|
34845
|
+
// [Chain.ETHEREUM_MAINNET]:
|
|
34846
|
+
// 'https://api.goldsky.com/api/public/<projectId>/subgraphs/euler-earn-mainnet/<ver>/gn',
|
|
34847
|
+
};
|
|
34848
|
+
var hasEulerEarnVaultSubgraph = (chainId) => chainId in EULER_EARN_SUBGRAPH_URLS;
|
|
34849
|
+
var EULER_EARN_VAULTS_QUERY = `
|
|
34850
|
+
{
|
|
34851
|
+
eulerEarnVaults(first: 200, skip: 0) {
|
|
34852
|
+
id
|
|
34853
|
+
name
|
|
34854
|
+
symbol
|
|
34855
|
+
decimals
|
|
34856
|
+
asset { id }
|
|
34857
|
+
owner { id }
|
|
34858
|
+
curator { id }
|
|
34859
|
+
guardian { id }
|
|
34860
|
+
feeRecipient
|
|
34861
|
+
performanceFee
|
|
34862
|
+
fee
|
|
34863
|
+
totalAssets
|
|
34864
|
+
totalShares
|
|
34865
|
+
supplyApy
|
|
34866
|
+
rate { id rate }
|
|
34867
|
+
}
|
|
34868
|
+
}
|
|
34869
|
+
`;
|
|
34870
|
+
function readAddress2(field5) {
|
|
34871
|
+
if (!field5) return void 0;
|
|
34872
|
+
if (typeof field5 === "string") return field5.toLowerCase();
|
|
34873
|
+
return field5.id?.toLowerCase();
|
|
34874
|
+
}
|
|
34875
|
+
function parseVaultRate2(v) {
|
|
34876
|
+
if (v.supplyApy != null) {
|
|
34877
|
+
const n = Number(v.supplyApy);
|
|
34878
|
+
if (Number.isFinite(n)) {
|
|
34879
|
+
return n < 1 ? n * 100 : n;
|
|
34880
|
+
}
|
|
34881
|
+
}
|
|
34882
|
+
if (v.rate?.rate) {
|
|
34883
|
+
const n = Number(v.rate.rate) * 100;
|
|
34884
|
+
if (Number.isFinite(n)) return n;
|
|
34885
|
+
}
|
|
34886
|
+
return 0;
|
|
34887
|
+
}
|
|
34888
|
+
function parseVaultFee(v) {
|
|
34889
|
+
const raw = v.performanceFee ?? v.fee;
|
|
34890
|
+
if (raw == null) return 0;
|
|
34891
|
+
const n = Number(raw);
|
|
34892
|
+
if (!Number.isFinite(n)) return 0;
|
|
34893
|
+
if (n < 1) return n * 100;
|
|
34894
|
+
if (n > 100) return n / 1e16;
|
|
34895
|
+
return n;
|
|
34896
|
+
}
|
|
34897
|
+
function parseVault7(v, chainId, prices, tokenList) {
|
|
34898
|
+
const address = (v?.id ?? "").toLowerCase();
|
|
34899
|
+
const assetAddr = (v?.asset?.id ?? "").toLowerCase();
|
|
34900
|
+
if (!address || !assetAddr) return null;
|
|
34901
|
+
const assetMeta = tokenList[assetAddr];
|
|
34902
|
+
const decimals = Number(v.decimals ?? assetMeta?.decimals ?? 18);
|
|
34903
|
+
const totalAssetsRaw = v.totalAssets?.toString() ?? "0";
|
|
34904
|
+
const totalAssetsFormatted = Number(parseRawAmount(totalAssetsRaw, decimals));
|
|
34905
|
+
const oracleKey = toOracleKey(assetMeta?.assetGroup) ?? toGenericPriceKey(assetAddr, chainId);
|
|
34906
|
+
const priceUsd = prices[oracleKey] ?? prices[assetAddr] ?? 0;
|
|
34907
|
+
const supplyRate = parseVaultRate2(v);
|
|
34908
|
+
const fee = parseVaultFee(v);
|
|
34909
|
+
return {
|
|
34910
|
+
address,
|
|
34911
|
+
underlying: assetAddr,
|
|
34912
|
+
symbol: v.symbol ?? "",
|
|
34913
|
+
name: v.name ?? "",
|
|
34914
|
+
decimals,
|
|
34915
|
+
totalAssets: totalAssetsRaw,
|
|
34916
|
+
totalSupply: v.totalShares?.toString() ?? "0",
|
|
34917
|
+
supplyRate,
|
|
34918
|
+
rewardsRate: 0,
|
|
34919
|
+
depositRate: supplyRate,
|
|
34920
|
+
fee,
|
|
34921
|
+
owner: readAddress2(v.owner),
|
|
34922
|
+
curator: readAddress2(v.curator),
|
|
34923
|
+
guardian: readAddress2(v.guardian),
|
|
34924
|
+
feeRecipient: v.feeRecipient?.toLowerCase() || void 0,
|
|
34925
|
+
asset: assetMeta,
|
|
34926
|
+
priceUsd: priceUsd || void 0,
|
|
34927
|
+
totalAssetsFormatted,
|
|
34928
|
+
totalAssetsUsd: totalAssetsFormatted * priceUsd,
|
|
34929
|
+
// Subgraph doesn't expose immediate-withdraw — same optimistic
|
|
34930
|
+
// ceiling as Morpho/Silo earn-vault fetchers.
|
|
34931
|
+
liquidity: totalAssetsRaw,
|
|
34932
|
+
liquidityFormatted: totalAssetsFormatted,
|
|
34933
|
+
liquidityUsd: totalAssetsFormatted * priceUsd
|
|
34934
|
+
};
|
|
34935
|
+
}
|
|
34936
|
+
async function fetchEulerEarnVaultsFromSubgraph(chainId, prices = {}, tokenList = {}) {
|
|
34937
|
+
const url = EULER_EARN_SUBGRAPH_URLS[chainId];
|
|
34938
|
+
if (!url) return {};
|
|
34939
|
+
const response = await fetch(url, {
|
|
34940
|
+
method: "POST",
|
|
34941
|
+
headers: { "Content-Type": "application/json" },
|
|
34942
|
+
body: JSON.stringify({ query: EULER_EARN_VAULTS_QUERY })
|
|
34943
|
+
});
|
|
34944
|
+
if (!response.ok) {
|
|
34945
|
+
throw new Error(
|
|
34946
|
+
`Euler Earn vaults subgraph failed for chain ${chainId}: ${response.status} - ${response.statusText}`
|
|
34947
|
+
);
|
|
34948
|
+
}
|
|
34949
|
+
const json = await response.json();
|
|
34950
|
+
const items = json?.data?.eulerEarnVaults ?? [];
|
|
34951
|
+
const out = {};
|
|
34952
|
+
for (const v of items) {
|
|
34953
|
+
const parsed = parseVault7(v, chainId, prices, tokenList);
|
|
34473
34954
|
if (parsed) out[parsed.address] = parsed;
|
|
34474
34955
|
}
|
|
34475
34956
|
return out;
|
|
34957
|
+
}
|
|
34958
|
+
|
|
34959
|
+
// src/vaults/euler-earn/fetchPublic.ts
|
|
34960
|
+
var fetchEulerEarnVaults = async (chainId, prices = {}, tokenList = {}) => {
|
|
34961
|
+
return fetchEulerEarnVaultsFromSubgraph(chainId, prices, tokenList);
|
|
34476
34962
|
};
|
|
34477
34963
|
var warn3 = (...args) => {
|
|
34478
34964
|
};
|
|
@@ -34532,6 +35018,18 @@ var getVaultPublicDataAll = async (chainId, providers, multicallRetry, prices =
|
|
|
34532
35018
|
})
|
|
34533
35019
|
);
|
|
34534
35020
|
}
|
|
35021
|
+
if (requested.has("euler-earn")) {
|
|
35022
|
+
tasks.push(
|
|
35023
|
+
fetchEulerEarnVaults(chainId, prices, tokenList).then((res) => {
|
|
35024
|
+
out["euler-earn"] = res;
|
|
35025
|
+
}).catch((e) => {
|
|
35026
|
+
warn3(
|
|
35027
|
+
`[vaults] euler-earn fetch failed for chain ${chainId}:`,
|
|
35028
|
+
e?.message ?? e
|
|
35029
|
+
);
|
|
35030
|
+
})
|
|
35031
|
+
);
|
|
35032
|
+
}
|
|
34535
35033
|
await Promise.all(tasks);
|
|
34536
35034
|
return out;
|
|
34537
35035
|
};
|
|
@@ -35022,6 +35520,6 @@ async function fetchTokenBalances(chainId, account, tokens, options = {}) {
|
|
|
35022
35520
|
return parseTokenBalanceResult(rawResult, prepared.query);
|
|
35023
35521
|
}
|
|
35024
35522
|
|
|
35025
|
-
export { EMPTY_BALANCE, MORPHO_LENS, MaxParamThresholds, applyPositionDelta, attachPricesToFlashLiquidity, buildFluidFTokensCall, buildLoopResult, buildMorphoTypeCall, buildMorphoTypeUserCallWithLens, buildPortfolioTotals, buildSumerAccumulators, buildSummaries, calculateLeverage, calculateNetApr, calculateOverallNetApr, calculateWeightedAverage, computeBorrowDelta2 as computeBorrowDelta, computeCloseTradeDeltas, computeCollateralSwapDeltas, computeDebtSwapDeltas, computeDepositDelta2 as computeDepositDelta, computeEModeAnalysis, computeOpenTradeDeltas, computePostTradeMetrics, computeRepayDelta2 as computeRepayDelta, computeSumerBorrowDelta, computeSumerDepositDelta, computeSumerRepayDelta, computeSumerWaterfall, computeSumerWithdrawDelta, computeWithdrawDelta2 as computeWithdrawDelta, computeZapTradeDeltas, convertLenderUserDataResult, createMarketUid, createMulticallRpcCall, createRawRpcCalls, decodeListaMarkets, decodeMarkets, decodePackedListaUserDataset, decodePackedMorphoUserDataset, encodeBalanceFetcherCalldata, fetchEulerSubAccountIndexes, fetchFlashLiquidityForChain, fetchFluidFTokens, fetchGeneralYields, fetchGeneralYieldsByMarketUid, fetchMorphoUserBalances, fetchMorphoUserPositionMarkets, fetchMorphoVaults, fetchMorphoVaultsFromApi, fetchMorphoVaultsFromSubgraph, fetchOraclePrices, fetchPendlePrices, fetchSiloVaults, fetchTokenBalances, fetchTokenMetadata, filterActiveLenders, filterLendersByProtocol, fuseLenderData, generateLendingPools, getAavesForChain, getAssetConfig, getBalanceForMarketUid, getBorrowCapacity, getFluidFTokensConverter, getHealthFactor, getLenderAssets, getLenderPublicData, getLenderPublicDataAll, getLenderPublicDataViaApi, getLenderUserDataMulti, getLenderUserDataResult, getLendersForChain, getMaxAmountClose, getMaxAmountCollateralSwap, getMaxAmountDebtSwap, getMaxAmountOpen, getMergedUserData, getMorphoTypeMarketConverter, getSubAccountAddress, getSubAccountIndex, getVaultPublicDataAll, hasMorphoPositionIndex, hasMorphoUserApi, hasMorphoUserSubgraph, hasMorphoVaultSubgraph, keysFromMaps, multicall3Abi, nanTo, needsLenderApproval, needsTokenApproval, noOpResult, normalizeToBytes, parseBalanceFetcherResult, parseMergedResult, parseMulticallRpcResponses, parseRawRpcBatchResponses, parseRawRpcResponses, parseTokenBalanceResult, positivePart2 as positivePart, prepareLenderUserDataRpcCalls, prepareMergedMulticallParams, prepareMergedRpcCalls, prepareMulticallInputs, prepareTokenBalanceRpcCalls, selectAssetGroupPrices, unflattenLenderData };
|
|
35523
|
+
export { EMPTY_BALANCE, MORPHO_LENS, MaxParamThresholds, applyPositionDelta, attachPricesToFlashLiquidity, buildFluidFTokensCall, buildLoopResult, buildMorphoTypeCall, buildMorphoTypeUserCallWithLens, buildPortfolioTotals, buildSumerAccumulators, buildSummaries, calculateLeverage, calculateNetApr, calculateOverallNetApr, calculateWeightedAverage, computeBorrowDelta2 as computeBorrowDelta, computeCloseTradeDeltas, computeCollateralSwapDeltas, computeDebtSwapDeltas, computeDepositDelta2 as computeDepositDelta, computeEModeAnalysis, computeOpenTradeDeltas, computePostTradeMetrics, computeRepayDelta2 as computeRepayDelta, computeSumerBorrowDelta, computeSumerDepositDelta, computeSumerRepayDelta, computeSumerWaterfall, computeSumerWithdrawDelta, computeWithdrawDelta2 as computeWithdrawDelta, computeZapTradeDeltas, convertLenderUserDataResult, createMarketUid, createMulticallRpcCall, createRawRpcCalls, decodeListaMarkets, decodeMarkets, decodePackedListaUserDataset, decodePackedMorphoUserDataset, encodeBalanceFetcherCalldata, fetchEulerEarnVaults, fetchEulerEarnVaultsFromSubgraph, fetchEulerSubAccountIndexes, fetchFlashLiquidityForChain, fetchFluidFTokens, fetchGeneralYields, fetchGeneralYieldsByMarketUid, fetchListaVaultsFromChain, fetchMorphoUserBalances, fetchMorphoUserPositionMarkets, fetchMorphoVaults, fetchMorphoVaultsFromApi, fetchMorphoVaultsFromChain, fetchMorphoVaultsFromSubgraph, fetchOraclePrices, fetchPendlePrices, fetchSiloVaults, fetchTokenBalances, fetchTokenMetadata, filterActiveLenders, filterLendersByProtocol, fuseLenderData, generateLendingPools, getAavesForChain, getAssetConfig, getBalanceForMarketUid, getBorrowCapacity, getFluidFTokensConverter, getHealthFactor, getLenderAssets, getLenderPublicData, getLenderPublicDataAll, getLenderPublicDataViaApi, getLenderUserDataMulti, getLenderUserDataResult, getLendersForChain, getMaxAmountClose, getMaxAmountCollateralSwap, getMaxAmountDebtSwap, getMaxAmountOpen, getMergedUserData, getMorphoTypeMarketConverter, getSubAccountAddress, getSubAccountIndex, getVaultPublicDataAll, hasEulerEarnVaultSubgraph, hasMorphoPositionIndex, hasMorphoUserApi, hasMorphoUserSubgraph, hasMorphoVaultSubgraph, keysFromMaps, multicall3Abi, nanTo, needsLenderApproval, needsTokenApproval, noOpResult, normalizeToBytes, parseBalanceFetcherResult, parseMergedResult, parseMulticallRpcResponses, parseRawRpcBatchResponses, parseRawRpcResponses, parseTokenBalanceResult, positivePart2 as positivePart, prepareLenderUserDataRpcCalls, prepareMergedMulticallParams, prepareMergedRpcCalls, prepareMulticallInputs, prepareTokenBalanceRpcCalls, selectAssetGroupPrices, unflattenLenderData };
|
|
35026
35524
|
//# sourceMappingURL=index.js.map
|
|
35027
35525
|
//# sourceMappingURL=index.js.map
|