@1delta/margin-fetcher 0.0.274 → 0.0.276
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 +324 -24
- package/dist/index.js.map +1 -1
- package/dist/vaults/assetDecimals.d.ts +14 -0
- package/dist/vaults/assetDecimals.d.ts.map +1 -0
- package/dist/vaults/classification.d.ts +22 -4
- package/dist/vaults/classification.d.ts.map +1 -1
- package/dist/vaults/euler-earn/fetchFromSubgraph.d.ts.map +1 -1
- package/dist/vaults/euler-earn/types.d.ts +3 -0
- package/dist/vaults/euler-earn/types.d.ts.map +1 -1
- package/dist/vaults/fluid/fetchPublic.d.ts.map +1 -1
- package/dist/vaults/gearbox/publicCallParse.d.ts.map +1 -1
- package/dist/vaults/gearbox/types.d.ts +3 -0
- package/dist/vaults/gearbox/types.d.ts.map +1 -1
- package/dist/vaults/lookup.d.ts +5 -0
- package/dist/vaults/lookup.d.ts.map +1 -1
- package/dist/vaults/lst/abis/etherfi.d.ts +14 -1
- package/dist/vaults/lst/abis/etherfi.d.ts.map +1 -1
- package/dist/vaults/lst/fetchPublic.d.ts.map +1 -1
- package/dist/vaults/lst/readers/etherfi.d.ts +8 -6
- package/dist/vaults/lst/readers/etherfi.d.ts.map +1 -1
- package/dist/vaults/lst/readers/shared.d.ts +20 -0
- package/dist/vaults/lst/readers/shared.d.ts.map +1 -1
- package/dist/vaults/lst/types.d.ts +13 -7
- package/dist/vaults/lst/types.d.ts.map +1 -1
- package/dist/vaults/lst/withdrawals/registry.d.ts.map +1 -1
- package/dist/vaults/morpho/fetchFromApi.d.ts.map +1 -1
- package/dist/vaults/morpho/fetchFromChain.d.ts.map +1 -1
- package/dist/vaults/morpho/fetchListaFromChain.d.ts.map +1 -1
- package/dist/vaults/morpho/types.d.ts +3 -0
- package/dist/vaults/morpho/types.d.ts.map +1 -1
- package/dist/vaults/sharePrice.d.ts +18 -0
- package/dist/vaults/sharePrice.d.ts.map +1 -0
- package/dist/vaults/silo/fetchPublic.d.ts.map +1 -1
- package/dist/vaults/silo/types.d.ts +3 -0
- package/dist/vaults/silo/types.d.ts.map +1 -1
- package/package.json +3 -3
package/dist/index.js
CHANGED
|
@@ -35740,6 +35740,32 @@ function parseFTokens(fTokens, chainId, prices, tokenList) {
|
|
|
35740
35740
|
}
|
|
35741
35741
|
return out;
|
|
35742
35742
|
}
|
|
35743
|
+
|
|
35744
|
+
// src/vaults/assetDecimals.ts
|
|
35745
|
+
var ERC20_DECIMALS_ABI = parseAbi([
|
|
35746
|
+
"function decimals() view returns (uint8)"
|
|
35747
|
+
]);
|
|
35748
|
+
async function fetchAssetDecimals(chainId, underlyings, multicallRetry) {
|
|
35749
|
+
const map = /* @__PURE__ */ new Map();
|
|
35750
|
+
if (underlyings.length === 0) return map;
|
|
35751
|
+
const raw = await multicallRetry({
|
|
35752
|
+
chain: chainId,
|
|
35753
|
+
calls: underlyings.map((address) => ({
|
|
35754
|
+
address,
|
|
35755
|
+
name: "decimals",
|
|
35756
|
+
params: []
|
|
35757
|
+
})),
|
|
35758
|
+
abi: underlyings.map(() => ERC20_DECIMALS_ABI),
|
|
35759
|
+
allowFailure: true
|
|
35760
|
+
});
|
|
35761
|
+
underlyings.forEach((address, i) => {
|
|
35762
|
+
const d = Number(raw[i]);
|
|
35763
|
+
if (Number.isFinite(d) && d > 0 && d <= 36) map.set(address, d);
|
|
35764
|
+
});
|
|
35765
|
+
return map;
|
|
35766
|
+
}
|
|
35767
|
+
|
|
35768
|
+
// src/vaults/fluid/fetchPublic.ts
|
|
35743
35769
|
var fetchFluidFTokens = async (chainId, multicallRetry, prices = {}, tokenList = {}) => {
|
|
35744
35770
|
const calls = buildFluidFTokensCall(chainId);
|
|
35745
35771
|
if (calls.length === 0) return {};
|
|
@@ -35750,6 +35776,25 @@ var fetchFluidFTokens = async (chainId, multicallRetry, prices = {}, tokenList =
|
|
|
35750
35776
|
});
|
|
35751
35777
|
const [converter] = getFluidFTokensConverter(chainId, prices, tokenList);
|
|
35752
35778
|
const fTokens = converter(raw) ?? {};
|
|
35779
|
+
try {
|
|
35780
|
+
const underlyings = Object.values(fTokens).map((f) => f.underlying).filter((a) => !!a && a !== zeroAddress);
|
|
35781
|
+
const assetDec = await fetchAssetDecimals(
|
|
35782
|
+
chainId,
|
|
35783
|
+
[...new Set(underlyings)],
|
|
35784
|
+
multicallRetry
|
|
35785
|
+
);
|
|
35786
|
+
for (const f of Object.values(fTokens)) {
|
|
35787
|
+
const dec = assetDec.get(f.underlying);
|
|
35788
|
+
if (dec == null || dec === f.decimals) continue;
|
|
35789
|
+
const price2 = f.priceUsd ?? 0;
|
|
35790
|
+
f.decimals = dec;
|
|
35791
|
+
f.totalAssetsFormatted = Number(parseRawAmount(f.totalAssets, dec));
|
|
35792
|
+
f.totalAssetsUsd = f.totalAssetsFormatted * price2;
|
|
35793
|
+
f.liquidityFormatted = Number(parseRawAmount(f.liquidity, dec));
|
|
35794
|
+
f.liquidityUsd = f.liquidityFormatted * price2;
|
|
35795
|
+
}
|
|
35796
|
+
} catch {
|
|
35797
|
+
}
|
|
35753
35798
|
try {
|
|
35754
35799
|
const exposuresByUnderlying = await fetchFluidExposures(
|
|
35755
35800
|
chainId,
|
|
@@ -35846,6 +35891,20 @@ var buildGearboxV3PoolsCall = (chainId) => {
|
|
|
35846
35891
|
];
|
|
35847
35892
|
};
|
|
35848
35893
|
|
|
35894
|
+
// src/vaults/sharePrice.ts
|
|
35895
|
+
function deriveConvertToAssets(totalAssetsRaw, totalSupplyRaw, shareDecimals) {
|
|
35896
|
+
try {
|
|
35897
|
+
const ta = BigInt(totalAssetsRaw ?? 0);
|
|
35898
|
+
const ts = BigInt(totalSupplyRaw ?? 0);
|
|
35899
|
+
if (ts <= 0n) return "0";
|
|
35900
|
+
const dec = Math.max(0, Math.round(Number(shareDecimals) || 0));
|
|
35901
|
+
const probe = 10n ** BigInt(dec);
|
|
35902
|
+
return (ta * probe / ts).toString();
|
|
35903
|
+
} catch {
|
|
35904
|
+
return "0";
|
|
35905
|
+
}
|
|
35906
|
+
}
|
|
35907
|
+
|
|
35849
35908
|
// src/vaults/gearbox/publicCallParse.ts
|
|
35850
35909
|
var WETH_MAINNET = "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2";
|
|
35851
35910
|
var normalizeUnderlying6 = (addr, chainId) => {
|
|
@@ -35883,9 +35942,15 @@ function parseMarkets(markets, chainId, prices, tokenList) {
|
|
|
35883
35942
|
const assetMeta = tokenList[underlying];
|
|
35884
35943
|
const decimals = Number(assetMeta?.decimals ?? pool.decimals ?? 18);
|
|
35885
35944
|
const totalAssetsRaw = pool.expectedLiquidity?.toString() ?? "0";
|
|
35945
|
+
const totalSupplyRaw = pool.totalSupply?.toString() ?? "0";
|
|
35886
35946
|
const totalAssetsFormatted = Number(
|
|
35887
35947
|
parseRawAmount(totalAssetsRaw, decimals)
|
|
35888
35948
|
);
|
|
35949
|
+
const convertToAssets = deriveConvertToAssets(
|
|
35950
|
+
totalAssetsRaw,
|
|
35951
|
+
totalSupplyRaw,
|
|
35952
|
+
decimals
|
|
35953
|
+
);
|
|
35889
35954
|
const oracleKey = toOracleKey(assetMeta?.assetGroup) ?? toGenericPriceKey(underlying, chainId);
|
|
35890
35955
|
const priceUsd = prices[oracleKey] ?? prices[underlying] ?? 0;
|
|
35891
35956
|
const liquidityRaw = pool.availableLiquidity?.toString() ?? "0";
|
|
@@ -35905,7 +35970,8 @@ function parseMarkets(markets, chainId, prices, tokenList) {
|
|
|
35905
35970
|
),
|
|
35906
35971
|
decimals,
|
|
35907
35972
|
totalAssets: totalAssetsRaw,
|
|
35908
|
-
totalSupply:
|
|
35973
|
+
totalSupply: totalSupplyRaw,
|
|
35974
|
+
convertToAssets,
|
|
35909
35975
|
totalBorrowed: pool.totalBorrowed?.toString() ?? "0",
|
|
35910
35976
|
availableLiquidity: pool.availableLiquidity?.toString() ?? "0",
|
|
35911
35977
|
expectedLiquidity: pool.expectedLiquidity?.toString() ?? "0",
|
|
@@ -35940,6 +36006,7 @@ var fetchGearboxV3Pools = async (chainId, multicallRetry, prices = {}, tokenList
|
|
|
35940
36006
|
};
|
|
35941
36007
|
|
|
35942
36008
|
// src/vaults/morpho/fetchFromApi.ts
|
|
36009
|
+
var MORPHO_SHARE_DECIMALS = 18;
|
|
35943
36010
|
var MORPHO_API_URL = "https://blue-api.morpho.org/graphql";
|
|
35944
36011
|
var PAGE_SIZE = 200;
|
|
35945
36012
|
var vaultsQuery = (first, skip, chainId) => `
|
|
@@ -36046,7 +36113,13 @@ function parseVault2(v, chainId, prices, tokenList) {
|
|
|
36046
36113
|
const assetMeta = tokenList[assetAddr];
|
|
36047
36114
|
const decimals = Number(v.asset?.decimals ?? assetMeta?.decimals ?? 18);
|
|
36048
36115
|
const totalAssetsRaw = state.totalAssets?.toString() ?? "0";
|
|
36116
|
+
const totalSupplyRaw = state.totalSupply?.toString() ?? "0";
|
|
36049
36117
|
const totalAssetsFormatted = Number(parseRawAmount(totalAssetsRaw, decimals));
|
|
36118
|
+
const convertToAssets = deriveConvertToAssets(
|
|
36119
|
+
totalAssetsRaw,
|
|
36120
|
+
totalSupplyRaw,
|
|
36121
|
+
MORPHO_SHARE_DECIMALS
|
|
36122
|
+
);
|
|
36050
36123
|
const liquidityRaw = v.liquidity?.underlying?.toString() ?? "0";
|
|
36051
36124
|
const liquidityFormatted = Number(parseRawAmount(liquidityRaw, decimals));
|
|
36052
36125
|
const liquidityUsd = Number(v.liquidity?.usd ?? 0);
|
|
@@ -36073,7 +36146,8 @@ function parseVault2(v, chainId, prices, tokenList) {
|
|
|
36073
36146
|
),
|
|
36074
36147
|
decimals,
|
|
36075
36148
|
totalAssets: totalAssetsRaw,
|
|
36076
|
-
totalSupply:
|
|
36149
|
+
totalSupply: totalSupplyRaw,
|
|
36150
|
+
convertToAssets,
|
|
36077
36151
|
supplyRate,
|
|
36078
36152
|
rewardsRate,
|
|
36079
36153
|
depositRate: supplyRate + rewardsRate,
|
|
@@ -36307,7 +36381,12 @@ var fetchMorphoVaultsFromChain = async (chainId, multicallRetry, prices = {}, to
|
|
|
36307
36381
|
});
|
|
36308
36382
|
const core = morphoPools()?.MORPHO_BLUE?.[chainId];
|
|
36309
36383
|
const allMarketIds = [...new Set(marketIdsByVault.flat())];
|
|
36310
|
-
const
|
|
36384
|
+
const underlyings = [
|
|
36385
|
+
...new Set(
|
|
36386
|
+
entries.map(({ entry }) => entry.underlying?.toLowerCase()).filter((a) => !!a)
|
|
36387
|
+
)
|
|
36388
|
+
];
|
|
36389
|
+
const [rateMap, positionMap, assetDecimals] = await Promise.all([
|
|
36311
36390
|
fetchMorphoMarketRates(chainId, core, allMarketIds, multicallRetry),
|
|
36312
36391
|
fetchVaultSupplyShares(
|
|
36313
36392
|
chainId,
|
|
@@ -36315,7 +36394,8 @@ var fetchMorphoVaultsFromChain = async (chainId, multicallRetry, prices = {}, to
|
|
|
36315
36394
|
entries.map((e) => e.entry),
|
|
36316
36395
|
marketIdsByVault,
|
|
36317
36396
|
multicallRetry
|
|
36318
|
-
)
|
|
36397
|
+
),
|
|
36398
|
+
fetchAssetDecimals(chainId, underlyings, multicallRetry)
|
|
36319
36399
|
]);
|
|
36320
36400
|
const out = {};
|
|
36321
36401
|
for (let i = 0; i < entries.length; i++) {
|
|
@@ -36330,7 +36410,8 @@ var fetchMorphoVaultsFromChain = async (chainId, multicallRetry, prices = {}, to
|
|
|
36330
36410
|
tokenList,
|
|
36331
36411
|
marketIdsByVault[i],
|
|
36332
36412
|
rateMap,
|
|
36333
|
-
positionMap
|
|
36413
|
+
positionMap,
|
|
36414
|
+
assetDecimals
|
|
36334
36415
|
);
|
|
36335
36416
|
if (parsed) out[parsed.address] = parsed;
|
|
36336
36417
|
}
|
|
@@ -36391,7 +36472,7 @@ async function fetchMorphoMarketRates(chainId, core, marketIds, multicallRetry)
|
|
|
36391
36472
|
});
|
|
36392
36473
|
return map;
|
|
36393
36474
|
}
|
|
36394
|
-
function parseVault3(entry, results, chainId, prices, tokenList, marketIds, rateMap, positionMap) {
|
|
36475
|
+
function parseVault3(entry, results, chainId, prices, tokenList, marketIds, rateMap, positionMap, assetDecimals) {
|
|
36395
36476
|
const address = entry?.vault?.toLowerCase();
|
|
36396
36477
|
const underlying = entry?.underlying?.toLowerCase();
|
|
36397
36478
|
if (!address || !underlying) return null;
|
|
@@ -36408,10 +36489,15 @@ function parseVault3(entry, results, chainId, prices, tokenList, marketIds, rate
|
|
|
36408
36489
|
guardianRaw
|
|
36409
36490
|
] = results;
|
|
36410
36491
|
const assetMeta = tokenList[underlying];
|
|
36411
|
-
const decimals =
|
|
36492
|
+
const decimals = assetDecimals.get(underlying) ?? assetMeta?.decimals ?? Number(decimalsRaw ?? 18);
|
|
36412
36493
|
const totalAssets = toStringSafe(totalAssetsRaw, "0");
|
|
36413
36494
|
const totalSupply = toStringSafe(totalSupplyRaw, "0");
|
|
36414
36495
|
const totalAssetsFormatted = Number(parseRawAmount(totalAssets, decimals));
|
|
36496
|
+
const convertToAssets = deriveConvertToAssets(
|
|
36497
|
+
totalAssets,
|
|
36498
|
+
totalSupply,
|
|
36499
|
+
Number(decimalsRaw ?? 18)
|
|
36500
|
+
);
|
|
36415
36501
|
const oracleKey = toOracleKey(assetMeta?.assetGroup) ?? toGenericPriceKey(underlying, chainId);
|
|
36416
36502
|
const priceUsd = prices[oracleKey] ?? prices[underlying] ?? 0;
|
|
36417
36503
|
const onchainName = toStringSafe(nameRaw).trim();
|
|
@@ -36445,6 +36531,7 @@ function parseVault3(entry, results, chainId, prices, tokenList, marketIds, rate
|
|
|
36445
36531
|
decimals,
|
|
36446
36532
|
totalAssets,
|
|
36447
36533
|
totalSupply,
|
|
36534
|
+
convertToAssets,
|
|
36448
36535
|
supplyRate: depositRate,
|
|
36449
36536
|
rewardsRate: 0,
|
|
36450
36537
|
depositRate,
|
|
@@ -36679,7 +36766,12 @@ var fetchListaVaultsFromChain = async (chainId, multicallRetry, prices = {}, tok
|
|
|
36679
36766
|
});
|
|
36680
36767
|
const moolah = morphoPools()?.[LISTA_PROTOCOL]?.[chainId];
|
|
36681
36768
|
const allMarketIds = [...new Set(marketIdsByVault.flat())];
|
|
36682
|
-
const
|
|
36769
|
+
const underlyings = [
|
|
36770
|
+
...new Set(
|
|
36771
|
+
entries.map((entry) => entry.underlying?.toLowerCase()).filter((a) => !!a)
|
|
36772
|
+
)
|
|
36773
|
+
];
|
|
36774
|
+
const [rateMap, positionMap, assetDecimals] = await Promise.all([
|
|
36683
36775
|
fetchListaMarketRates(chainId, moolah, allMarketIds, multicallRetry),
|
|
36684
36776
|
fetchVaultSupplyShares(
|
|
36685
36777
|
chainId,
|
|
@@ -36687,7 +36779,8 @@ var fetchListaVaultsFromChain = async (chainId, multicallRetry, prices = {}, tok
|
|
|
36687
36779
|
entries,
|
|
36688
36780
|
marketIdsByVault,
|
|
36689
36781
|
multicallRetry
|
|
36690
|
-
)
|
|
36782
|
+
),
|
|
36783
|
+
fetchAssetDecimals(chainId, underlyings, multicallRetry)
|
|
36691
36784
|
]);
|
|
36692
36785
|
const out = {};
|
|
36693
36786
|
for (let i = 0; i < entries.length; i++) {
|
|
@@ -36702,7 +36795,8 @@ var fetchListaVaultsFromChain = async (chainId, multicallRetry, prices = {}, tok
|
|
|
36702
36795
|
tokenList,
|
|
36703
36796
|
marketIdsByVault[i],
|
|
36704
36797
|
rateMap,
|
|
36705
|
-
positionMap
|
|
36798
|
+
positionMap,
|
|
36799
|
+
assetDecimals
|
|
36706
36800
|
);
|
|
36707
36801
|
if (parsed) out[parsed.address] = parsed;
|
|
36708
36802
|
}
|
|
@@ -36765,7 +36859,7 @@ async function fetchListaMarketRates(chainId, moolah, marketIds, multicallRetry)
|
|
|
36765
36859
|
});
|
|
36766
36860
|
return map;
|
|
36767
36861
|
}
|
|
36768
|
-
function parseVault4(entry, results, curatorAddrRaw, chainId, prices, tokenList, marketIds, rateMap, positionMap) {
|
|
36862
|
+
function parseVault4(entry, results, curatorAddrRaw, chainId, prices, tokenList, marketIds, rateMap, positionMap, assetDecimals) {
|
|
36769
36863
|
const address = entry?.vault?.toLowerCase();
|
|
36770
36864
|
const underlying = entry?.underlying?.toLowerCase();
|
|
36771
36865
|
if (!address || !underlying) return null;
|
|
@@ -36782,10 +36876,15 @@ function parseVault4(entry, results, curatorAddrRaw, chainId, prices, tokenList,
|
|
|
36782
36876
|
,
|
|
36783
36877
|
] = results;
|
|
36784
36878
|
const assetMeta = tokenList[underlying];
|
|
36785
|
-
const decimals =
|
|
36879
|
+
const decimals = assetDecimals.get(underlying) ?? assetMeta?.decimals ?? Number(decimalsRaw ?? 18);
|
|
36786
36880
|
const totalAssets = toStringSafe2(totalAssetsRaw, "0");
|
|
36787
36881
|
const totalSupply = toStringSafe2(totalSupplyRaw, "0");
|
|
36788
36882
|
const totalAssetsFormatted = Number(parseRawAmount(totalAssets, decimals));
|
|
36883
|
+
const convertToAssets = deriveConvertToAssets(
|
|
36884
|
+
totalAssets,
|
|
36885
|
+
totalSupply,
|
|
36886
|
+
Number(decimalsRaw ?? 18)
|
|
36887
|
+
);
|
|
36789
36888
|
const oracleKey = toOracleKey(assetMeta?.assetGroup) ?? toGenericPriceKey(underlying, chainId);
|
|
36790
36889
|
const priceUsd = prices[oracleKey] ?? prices[underlying] ?? 0;
|
|
36791
36890
|
const onchainName = toStringSafe2(nameRaw).trim();
|
|
@@ -36818,6 +36917,7 @@ function parseVault4(entry, results, curatorAddrRaw, chainId, prices, tokenList,
|
|
|
36818
36917
|
decimals,
|
|
36819
36918
|
totalAssets,
|
|
36820
36919
|
totalSupply,
|
|
36920
|
+
convertToAssets,
|
|
36821
36921
|
supplyRate: depositRate,
|
|
36822
36922
|
rewardsRate: 0,
|
|
36823
36923
|
depositRate,
|
|
@@ -36961,6 +37061,11 @@ function parseVault5(v, chainId, prices, tokenList, exposures, liquidityFormatte
|
|
|
36961
37061
|
const totalAssetsFormatted = Number(v.totalAssets ?? 0) || 0;
|
|
36962
37062
|
const totalAssetsRaw = toRawAmount3(v.totalAssets, decimals);
|
|
36963
37063
|
const totalSupplyRaw = toRawAmount3(v.totalSupply, decimals);
|
|
37064
|
+
const convertToAssets = deriveConvertToAssets(
|
|
37065
|
+
totalAssetsRaw,
|
|
37066
|
+
totalSupplyRaw,
|
|
37067
|
+
decimals
|
|
37068
|
+
);
|
|
36964
37069
|
const oracleKey = toOracleKey(assetMeta?.assetGroup) ?? toGenericPriceKey(assetAddr, chainId);
|
|
36965
37070
|
const priceUsd = prices[oracleKey] ?? prices[assetAddr] ?? 0;
|
|
36966
37071
|
const supplyRate = Number(v.userApr ?? 0) || 0;
|
|
@@ -36985,6 +37090,7 @@ function parseVault5(v, chainId, prices, tokenList, exposures, liquidityFormatte
|
|
|
36985
37090
|
protocolId: (v.protocolId ?? v.protocol?.id ?? "").toLowerCase(),
|
|
36986
37091
|
totalAssets: totalAssetsRaw,
|
|
36987
37092
|
totalSupply: totalSupplyRaw,
|
|
37093
|
+
convertToAssets,
|
|
36988
37094
|
supplyRate,
|
|
36989
37095
|
grossRate,
|
|
36990
37096
|
rewardsRate: 0,
|
|
@@ -37224,6 +37330,11 @@ function parseVault6(v, chainId, prices, tokenList, evkIndex) {
|
|
|
37224
37330
|
evkIndex
|
|
37225
37331
|
);
|
|
37226
37332
|
const totalSupplyRaw = v.totalSupply?.toString() ?? v.totalShares?.toString() ?? "0";
|
|
37333
|
+
const convertToAssets = deriveConvertToAssets(
|
|
37334
|
+
totalAssetsRaw,
|
|
37335
|
+
totalSupplyRaw,
|
|
37336
|
+
decimals
|
|
37337
|
+
);
|
|
37227
37338
|
const liquidityBig = computeRealLiquidity(
|
|
37228
37339
|
v.strategies,
|
|
37229
37340
|
totalAssetsRaw,
|
|
@@ -37239,6 +37350,7 @@ function parseVault6(v, chainId, prices, tokenList, evkIndex) {
|
|
|
37239
37350
|
decimals,
|
|
37240
37351
|
totalAssets: totalAssetsRaw,
|
|
37241
37352
|
totalSupply: totalSupplyRaw,
|
|
37353
|
+
convertToAssets,
|
|
37242
37354
|
supplyRate,
|
|
37243
37355
|
rewardsRate: 0,
|
|
37244
37356
|
depositRate: supplyRate,
|
|
@@ -38822,6 +38934,16 @@ var Erc4626PreviewRedeemAbi = [
|
|
|
38822
38934
|
|
|
38823
38935
|
// src/vaults/lst/readers/shared.ts
|
|
38824
38936
|
var ONE_E187 = 10n ** 18n;
|
|
38937
|
+
var MULTICALL3_ADDRESS = "0xcA11bde05977b3631167028862bE2a173976CA11";
|
|
38938
|
+
var Multicall3BalanceAbi = [
|
|
38939
|
+
{
|
|
38940
|
+
name: "getEthBalance",
|
|
38941
|
+
type: "function",
|
|
38942
|
+
stateMutability: "view",
|
|
38943
|
+
inputs: [{ name: "addr", type: "address" }],
|
|
38944
|
+
outputs: [{ type: "uint256" }]
|
|
38945
|
+
}
|
|
38946
|
+
];
|
|
38825
38947
|
var toBigInt10 = (v) => {
|
|
38826
38948
|
if (v === void 0 || v === null) return void 0;
|
|
38827
38949
|
if (typeof v === "bigint") return v;
|
|
@@ -39006,6 +39128,13 @@ var EtherFiLiquidityPoolAbi = [
|
|
|
39006
39128
|
stateMutability: "view",
|
|
39007
39129
|
inputs: [],
|
|
39008
39130
|
outputs: [{ type: "uint256" }]
|
|
39131
|
+
},
|
|
39132
|
+
{
|
|
39133
|
+
name: "ethAmountLockedForWithdrawal",
|
|
39134
|
+
type: "function",
|
|
39135
|
+
stateMutability: "view",
|
|
39136
|
+
inputs: [],
|
|
39137
|
+
outputs: [{ type: "uint256" }]
|
|
39009
39138
|
}
|
|
39010
39139
|
];
|
|
39011
39140
|
|
|
@@ -39018,8 +39147,17 @@ var readerEtherFiWeEth = (entry) => {
|
|
|
39018
39147
|
];
|
|
39019
39148
|
const abis = [TotalSupplyAbi, EtherFiWeEthAbi];
|
|
39020
39149
|
if (lp) {
|
|
39021
|
-
calls.push({
|
|
39022
|
-
|
|
39150
|
+
calls.push({
|
|
39151
|
+
address: MULTICALL3_ADDRESS,
|
|
39152
|
+
name: "getEthBalance",
|
|
39153
|
+
params: [lp]
|
|
39154
|
+
});
|
|
39155
|
+
calls.push({
|
|
39156
|
+
address: lp,
|
|
39157
|
+
name: "ethAmountLockedForWithdrawal",
|
|
39158
|
+
params: []
|
|
39159
|
+
});
|
|
39160
|
+
abis.push(Multicall3BalanceAbi, EtherFiLiquidityPoolAbi);
|
|
39023
39161
|
}
|
|
39024
39162
|
return {
|
|
39025
39163
|
calls,
|
|
@@ -39030,7 +39168,14 @@ var readerEtherFiWeEth = (entry) => {
|
|
|
39030
39168
|
if (totalSupply === void 0 || exchangeRate === void 0) {
|
|
39031
39169
|
return void 0;
|
|
39032
39170
|
}
|
|
39033
|
-
|
|
39171
|
+
let liquidity;
|
|
39172
|
+
if (lp) {
|
|
39173
|
+
const lpBalance = toBigInt10(slice[2]);
|
|
39174
|
+
const locked = toBigInt10(slice[3]);
|
|
39175
|
+
if (lpBalance !== void 0 && locked !== void 0) {
|
|
39176
|
+
liquidity = lpBalance > locked ? lpBalance - locked : 0n;
|
|
39177
|
+
}
|
|
39178
|
+
}
|
|
39034
39179
|
return {
|
|
39035
39180
|
totalAssets: totalSupply * exchangeRate / ONE_E187,
|
|
39036
39181
|
totalSupply,
|
|
@@ -40062,6 +40207,11 @@ var resolveYieldApr = async (entries) => {
|
|
|
40062
40207
|
|
|
40063
40208
|
// src/vaults/lst/fetchPublic.ts
|
|
40064
40209
|
var ONE_E188 = 10n ** 18n;
|
|
40210
|
+
var ERC20_BALANCE_ABI = parseAbi([
|
|
40211
|
+
"function balanceOf(address) view returns (uint256)"
|
|
40212
|
+
]);
|
|
40213
|
+
var INSTANT_MODES = /* @__PURE__ */ new Set(["instant-or-queued", "fee-or-queued"]);
|
|
40214
|
+
var IDLE_READER_KINDS = /* @__PURE__ */ new Set(["erc4626", "erc4626PreviewRedeem"]);
|
|
40065
40215
|
var resolveAcceptedInputs = (chainId, shareToken, entry) => {
|
|
40066
40216
|
const enriched = getLstAcceptedInputs(chainId, shareToken);
|
|
40067
40217
|
if (enriched) return enriched;
|
|
@@ -40079,6 +40229,20 @@ var fetchLstShareTokens = async (chainId, multicallRetry, prices = {}, tokenList
|
|
|
40079
40229
|
const readers = entries.map(buildReader);
|
|
40080
40230
|
const allCalls = readers.flatMap((r) => r.calls);
|
|
40081
40231
|
const allAbis = readers.flatMap((r) => r.abis);
|
|
40232
|
+
const idleEntries = entries.filter(
|
|
40233
|
+
(e) => INSTANT_MODES.has(e.withdrawalMode) && IDLE_READER_KINDS.has(e.reader)
|
|
40234
|
+
);
|
|
40235
|
+
const idleIsNative = (e) => e.underlying.toLowerCase() === zeroAddress;
|
|
40236
|
+
const idleCalls = idleEntries.map(
|
|
40237
|
+
(e) => idleIsNative(e) ? {
|
|
40238
|
+
address: MULTICALL3_ADDRESS,
|
|
40239
|
+
name: "getEthBalance",
|
|
40240
|
+
params: [e.address]
|
|
40241
|
+
} : { address: e.underlying, name: "balanceOf", params: [e.address] }
|
|
40242
|
+
);
|
|
40243
|
+
const idleAbis = idleEntries.map(
|
|
40244
|
+
(e) => idleIsNative(e) ? Multicall3BalanceAbi : ERC20_BALANCE_ABI
|
|
40245
|
+
);
|
|
40082
40246
|
const groups = {};
|
|
40083
40247
|
for (let i = 0; i < allCalls.length; i++) {
|
|
40084
40248
|
const target = allCalls[i].chainId ?? chainId;
|
|
@@ -40088,7 +40252,7 @@ var fetchLstShareTokens = async (chainId, multicallRetry, prices = {}, tokenList
|
|
|
40088
40252
|
g.positions.push(i);
|
|
40089
40253
|
}
|
|
40090
40254
|
const chainEntries = Object.entries(groups);
|
|
40091
|
-
const [perChainResults, aprByAddress] = await Promise.all([
|
|
40255
|
+
const [perChainResults, aprByAddress, idleResults] = await Promise.all([
|
|
40092
40256
|
chainEntries.length > 0 ? Promise.all(
|
|
40093
40257
|
chainEntries.map(async ([chain, { calls, abis }]) => ({
|
|
40094
40258
|
chain,
|
|
@@ -40099,8 +40263,19 @@ var fetchLstShareTokens = async (chainId, multicallRetry, prices = {}, tokenList
|
|
|
40099
40263
|
})
|
|
40100
40264
|
}))
|
|
40101
40265
|
) : Promise.resolve([]),
|
|
40102
|
-
resolveYieldApr(entries)
|
|
40266
|
+
resolveYieldApr(entries),
|
|
40267
|
+
idleEntries.length > 0 ? multicallRetry({
|
|
40268
|
+
chain: chainId,
|
|
40269
|
+
calls: idleCalls,
|
|
40270
|
+
abi: idleAbis,
|
|
40271
|
+
allowFailure: true
|
|
40272
|
+
}) : Promise.resolve([])
|
|
40103
40273
|
]);
|
|
40274
|
+
const idleByAddress = /* @__PURE__ */ new Map();
|
|
40275
|
+
idleEntries.forEach((e, i) => {
|
|
40276
|
+
const bal = toBigInt10(idleResults[i]);
|
|
40277
|
+
if (bal !== void 0) idleByAddress.set(e.address.toLowerCase(), bal);
|
|
40278
|
+
});
|
|
40104
40279
|
const rawResults = new Array(allCalls.length);
|
|
40105
40280
|
for (const { chain, results } of perChainResults) {
|
|
40106
40281
|
const positions = groups[chain].positions;
|
|
@@ -40129,9 +40304,15 @@ var fetchLstShareTokens = async (chainId, multicallRetry, prices = {}, tokenList
|
|
|
40129
40304
|
const totalAssetsUsd = priceUsd !== void 0 ? totalAssetsFormatted * priceUsd : 0;
|
|
40130
40305
|
const convertToAssets = state.exchangeRate;
|
|
40131
40306
|
const convertToShares = state.exchangeRate > 0n ? ONE_E188 * ONE_E188 / state.exchangeRate : 0n;
|
|
40132
|
-
|
|
40133
|
-
|
|
40134
|
-
|
|
40307
|
+
let liquidityRaw;
|
|
40308
|
+
if (state.liquidity !== void 0) {
|
|
40309
|
+
liquidityRaw = state.liquidity;
|
|
40310
|
+
} else {
|
|
40311
|
+
const idle = idleByAddress.get(addressLc);
|
|
40312
|
+
liquidityRaw = idle !== void 0 ? idle > state.totalAssets ? state.totalAssets : idle : 0n;
|
|
40313
|
+
}
|
|
40314
|
+
const liquidityFormatted = Number(liquidityRaw) / decimalsFactor;
|
|
40315
|
+
const liquidityUsd = priceUsd !== void 0 ? liquidityFormatted * priceUsd : 0;
|
|
40135
40316
|
const displayName = composeVaultDisplayName(
|
|
40136
40317
|
entry.brand,
|
|
40137
40318
|
entry.brand,
|
|
@@ -40171,7 +40352,7 @@ var fetchLstShareTokens = async (chainId, multicallRetry, prices = {}, tokenList
|
|
|
40171
40352
|
priceUsd,
|
|
40172
40353
|
totalAssetsFormatted,
|
|
40173
40354
|
totalAssetsUsd,
|
|
40174
|
-
liquidity:
|
|
40355
|
+
liquidity: liquidityRaw.toString(),
|
|
40175
40356
|
liquidityFormatted,
|
|
40176
40357
|
liquidityUsd
|
|
40177
40358
|
};
|
|
@@ -42585,6 +42766,71 @@ var buildWithdrawalReader = (entry) => {
|
|
|
42585
42766
|
// src/vaults/lst/withdrawals/registry.ts
|
|
42586
42767
|
var LST_WITHDRAWAL_REGISTRY = {
|
|
42587
42768
|
"1": [
|
|
42769
|
+
// Ankr ankrETH — Ankr unstake queue; reader not yet implemented.
|
|
42770
|
+
{
|
|
42771
|
+
lst: "0xe95a203b1a91a908f9b9ce46459d101078c2c3cb",
|
|
42772
|
+
brand: "Ankr",
|
|
42773
|
+
symbol: "ankrETH",
|
|
42774
|
+
reader: "unverified"
|
|
42775
|
+
},
|
|
42776
|
+
// BTC LSTs — exits via issuer/DEX or a protocol queue; per-protocol
|
|
42777
|
+
// readers not yet implemented. Listed as `unverified` placeholders so the
|
|
42778
|
+
// orchestrator surfaces the asset (returns [] requests) instead of
|
|
42779
|
+
// silently omitting it.
|
|
42780
|
+
{
|
|
42781
|
+
lst: "0x8db2350d78abc13f5673a411d4700bcf87864dde",
|
|
42782
|
+
brand: "Swell",
|
|
42783
|
+
symbol: "swBTC",
|
|
42784
|
+
reader: "unverified"
|
|
42785
|
+
},
|
|
42786
|
+
{
|
|
42787
|
+
lst: "0x8236a87084f8b84306f72007f36f2618a5634494",
|
|
42788
|
+
brand: "Lombard",
|
|
42789
|
+
symbol: "LBTC",
|
|
42790
|
+
reader: "unverified"
|
|
42791
|
+
},
|
|
42792
|
+
{
|
|
42793
|
+
lst: "0x657e8c867d8b37dcc18fa4caead9c45eb088c642",
|
|
42794
|
+
brand: "ether.fi",
|
|
42795
|
+
symbol: "eBTC",
|
|
42796
|
+
reader: "unverified"
|
|
42797
|
+
},
|
|
42798
|
+
{
|
|
42799
|
+
lst: "0x004e9c3ef86bc1ca1f0bb5c7662861ee93350568",
|
|
42800
|
+
brand: "Bedrock",
|
|
42801
|
+
symbol: "uniBTC",
|
|
42802
|
+
reader: "unverified"
|
|
42803
|
+
},
|
|
42804
|
+
{
|
|
42805
|
+
lst: "0x2ec37d45fcae65d9787ecf71dc85a444968f6646",
|
|
42806
|
+
brand: "Bedrock",
|
|
42807
|
+
symbol: "brBTC",
|
|
42808
|
+
reader: "unverified"
|
|
42809
|
+
},
|
|
42810
|
+
{
|
|
42811
|
+
lst: "0xf469fbd2abcd6b9de8e169d128226c0fc90a012e",
|
|
42812
|
+
brand: "PumpBTC",
|
|
42813
|
+
symbol: "pumpBTC",
|
|
42814
|
+
reader: "unverified"
|
|
42815
|
+
},
|
|
42816
|
+
{
|
|
42817
|
+
lst: "0x7a56e1c57c7475ccf742a1832b028f0456652f97",
|
|
42818
|
+
brand: "Solv",
|
|
42819
|
+
symbol: "SolvBTC",
|
|
42820
|
+
reader: "unverified"
|
|
42821
|
+
},
|
|
42822
|
+
{
|
|
42823
|
+
lst: "0xd9d920aa40f578ab794426f5c90f6c731d159def",
|
|
42824
|
+
brand: "Solv",
|
|
42825
|
+
symbol: "xSolvBTC",
|
|
42826
|
+
reader: "unverified"
|
|
42827
|
+
},
|
|
42828
|
+
{
|
|
42829
|
+
lst: "0xcea2daf93617b97504e05affc5bcf9b3922d3034",
|
|
42830
|
+
brand: "Solv",
|
|
42831
|
+
symbol: "BTC+",
|
|
42832
|
+
reader: "unverified"
|
|
42833
|
+
},
|
|
42588
42834
|
{
|
|
42589
42835
|
lst: "0x7f39c581f595b53c5cb19bd0b3f8da6c935e2ca0",
|
|
42590
42836
|
brand: "Lido",
|
|
@@ -42748,6 +42994,13 @@ var LST_WITHDRAWAL_REGISTRY = {
|
|
|
42748
42994
|
}
|
|
42749
42995
|
],
|
|
42750
42996
|
"56": [
|
|
42997
|
+
// Ankr ankrBNB — Ankr unstake queue; reader not yet implemented.
|
|
42998
|
+
{
|
|
42999
|
+
lst: "0x52f24a5e03aee338da5fd9df68d2b6fae1178827",
|
|
43000
|
+
brand: "Ankr",
|
|
43001
|
+
symbol: "ankrBNB",
|
|
43002
|
+
reader: "unverified"
|
|
43003
|
+
},
|
|
42751
43004
|
{
|
|
42752
43005
|
// slisBNB — ListaStakeManager withdrawal queue. Per-user
|
|
42753
43006
|
// requests via getUserWithdrawalRequests; claimability + BNB
|
|
@@ -42776,6 +43029,13 @@ var LST_WITHDRAWAL_REGISTRY = {
|
|
|
42776
43029
|
}
|
|
42777
43030
|
],
|
|
42778
43031
|
"137": [
|
|
43032
|
+
// Ankr ankrMATIC — bridged, non-mintable on Polygon; exit via DEX only.
|
|
43033
|
+
{
|
|
43034
|
+
lst: "0x0e9b89007eee9c958c0eda24ef70723c2c93dd58",
|
|
43035
|
+
brand: "Ankr",
|
|
43036
|
+
symbol: "ankrMATIC",
|
|
43037
|
+
reader: "noQueue"
|
|
43038
|
+
},
|
|
42779
43039
|
{
|
|
42780
43040
|
// Polygon-side MaticX is a bridged ERC-20 — users bridge to
|
|
42781
43041
|
// Ethereum and claim from the L1 home contract.
|
|
@@ -42786,6 +43046,13 @@ var LST_WITHDRAWAL_REGISTRY = {
|
|
|
42786
43046
|
}
|
|
42787
43047
|
],
|
|
42788
43048
|
"43114": [
|
|
43049
|
+
// Ankr ankrAVAX — Ankr unstake queue; reader not yet implemented.
|
|
43050
|
+
{
|
|
43051
|
+
lst: "0xc3344870d52688874b06d844e0c36cc39fc727f6",
|
|
43052
|
+
brand: "Ankr",
|
|
43053
|
+
symbol: "ankrAVAX",
|
|
43054
|
+
reader: "unverified"
|
|
43055
|
+
},
|
|
42789
43056
|
{
|
|
42790
43057
|
lst: "0x2b2c81e08f1af8835a78bb2a90ae924ace0ea4be",
|
|
42791
43058
|
brand: "BENQI",
|
|
@@ -42969,6 +43236,35 @@ var LST_WITHDRAWAL_REGISTRY = {
|
|
|
42969
43236
|
reader: "stellaUnbondQueue",
|
|
42970
43237
|
withdrawalContract: "0xbc7e02c4178a7df7d3e564323a5c359dc96c4db4"
|
|
42971
43238
|
}
|
|
43239
|
+
],
|
|
43240
|
+
"1116": [
|
|
43241
|
+
// Core DAO LSTs — CoreDAO stakers unbond via the Earn / staking
|
|
43242
|
+
// contracts; per-protocol queue readers not yet implemented.
|
|
43243
|
+
{
|
|
43244
|
+
lst: "0xb3a8f0f0da9ffc65318aa39e55079796093029ad",
|
|
43245
|
+
brand: "Core",
|
|
43246
|
+
symbol: "stCORE",
|
|
43247
|
+
reader: "unverified"
|
|
43248
|
+
},
|
|
43249
|
+
{
|
|
43250
|
+
lst: "0xc5555ea27e63cd89f8b227dece2a3916800c0f4f",
|
|
43251
|
+
brand: "b14g",
|
|
43252
|
+
symbol: "dualCORE",
|
|
43253
|
+
reader: "unverified"
|
|
43254
|
+
},
|
|
43255
|
+
{
|
|
43256
|
+
lst: "0xa20b3b97df3a02f9185175760300a06b4e0a2c05",
|
|
43257
|
+
brand: "StakedCore",
|
|
43258
|
+
symbol: "SCORE",
|
|
43259
|
+
reader: "unverified"
|
|
43260
|
+
},
|
|
43261
|
+
// pumpBTC on Core — bridged, non-mintable; exit via DEX only.
|
|
43262
|
+
{
|
|
43263
|
+
lst: "0x5a2aa871954ebdf89b1547e75d032598356caad5",
|
|
43264
|
+
brand: "PumpBTC",
|
|
43265
|
+
symbol: "pumpBTC",
|
|
43266
|
+
reader: "noQueue"
|
|
43267
|
+
}
|
|
42972
43268
|
]
|
|
42973
43269
|
};
|
|
42974
43270
|
var getLstWithdrawalRegistry = (chainId, extraEntries) => {
|
|
@@ -44191,10 +44487,12 @@ var classifyVault = (input) => {
|
|
|
44191
44487
|
const denomination = isStablecoinSymbol(input.underlyingSymbol) ? "stable" : "volatile";
|
|
44192
44488
|
return { yieldProfile, denomination };
|
|
44193
44489
|
};
|
|
44194
|
-
var stampVaultClassification = (data, chainId) => {
|
|
44490
|
+
var stampVaultClassification = (data, chainId, tokenList = {}) => {
|
|
44195
44491
|
const stampBag = (bag, provider) => {
|
|
44196
44492
|
if (!bag) return;
|
|
44197
44493
|
for (const v of Object.values(bag)) {
|
|
44494
|
+
const shareAsset = tokenList[v.address?.toLowerCase?.() ?? ""];
|
|
44495
|
+
if (shareAsset) v.shareAsset = shareAsset;
|
|
44198
44496
|
const c = classifyVault({
|
|
44199
44497
|
provider,
|
|
44200
44498
|
chainId,
|
|
@@ -44203,6 +44501,7 @@ var stampVaultClassification = (data, chainId) => {
|
|
|
44203
44501
|
});
|
|
44204
44502
|
v.yieldProfile = c.yieldProfile;
|
|
44205
44503
|
v.denomination = c.denomination;
|
|
44504
|
+
v.sharePrice = v.convertToAssets ?? v.pricePerShare;
|
|
44206
44505
|
}
|
|
44207
44506
|
};
|
|
44208
44507
|
stampBag(data.fluid, "fluid");
|
|
@@ -45475,7 +45774,8 @@ function buildVaultLookup(data) {
|
|
|
45475
45774
|
// Carried through from `stampVaultClassification` (set on the
|
|
45476
45775
|
// provider objects before the lookup is built).
|
|
45477
45776
|
yieldProfile: v.yieldProfile,
|
|
45478
|
-
denomination: v.denomination
|
|
45777
|
+
denomination: v.denomination,
|
|
45778
|
+
sharePrice: v.sharePrice
|
|
45479
45779
|
});
|
|
45480
45780
|
}
|
|
45481
45781
|
};
|
|
@@ -45663,7 +45963,7 @@ var getVaultPublicDataAll = async (chainId, providers, multicallRetry, prices =
|
|
|
45663
45963
|
);
|
|
45664
45964
|
}
|
|
45665
45965
|
await Promise.all(tasks);
|
|
45666
|
-
stampVaultClassification(out, chainId);
|
|
45966
|
+
stampVaultClassification(out, chainId, tokenList);
|
|
45667
45967
|
return { data: out, lookup: buildVaultLookup(out) };
|
|
45668
45968
|
};
|
|
45669
45969
|
|