VaultMetricsRecord
Documentation for eth_defi.research.vault_metrics.VaultMetricsRecord Python class.
- class VaultMetricsRecord
Bases:
TypedDictPer-vault record in the JSON export.
Uses
total=Falseso that only the most critical fields are typed explicitly — remaining fields are still present but not enforced by the type checker. This is an incremental approach; more fields can be promoted to required as the schema stabilises.Attributes summary
Vault display name
Chain identifier (integer chain ID)
Chain display name, e.g.
Native protocol deployment slug, or
Nonefor ordinary EVM vaults.Real EVM chain ID associated with a native protocol deployment.
Protocol display name, e.g.
Protocol slug, e.g.
Curator slug, e.g.
Curator display name, e.g.
Whether the curator is the vault protocol itself.
Vault contract address (checksummed hex)
Unique vault slug for URLs
Compound Annual Growth Rate (lifetime)
Lifetime total return
3-month CAGR
1-month CAGR
Annualised volatility
Sharpe ratio
Technical risk classification
Latest adaptive vault scan cycle, e.g.
Source used to produce the share-price series.
Current net asset value in USD
Peak net asset value in USD
Management fee percentage
Performance fee percentage
Denomination (reserve) token ERC-20 decimals, e.g.
Minimum deposit in decimal denomination-token units.
Minimum redemption in decimal vault-share units.
Static support for this library's deposit/redemption manager, or
None.Vault-wide KYC or manual identity-approval policy.
Structured vault-wide account-admission status.
Share token ERC-20 decimals (the vault's own ERC-4626 token).
Protocol-specific extension data (Morpho flags, etc.)
Compact Core3 risk summary for the vault's protocol, or
Nonewhen no Core3 data is available.Compact Xerberus risk summary for this vault (pool score preferred), or
Nonewhen no Xerberus data is available.Stablecoin rate data for the vault denomination token.
Per-period tearsheet results
Methods summary
__init__(*args, **kwargs)clear()Remove all items from the dict.
copy()Return a shallow copy of the dict.
fromkeys([value])Create a new dictionary with keys from iterable and values set to value.
get(key[, default])Return the value for key if key is in the dictionary, else default.
items()Return a set-like object providing a view on the dict's items.
keys()Return a set-like object providing a view on the dict's keys.
pop(k[,d])If the key is not found, return the default if given; otherwise, raise a KeyError.
popitem()Remove and return a (key, value) pair as a 2-tuple.
setdefault(key[, default])Insert key with a value of default if key is not in the dictionary.
update([E, ]**F)If E is present and has a .keys() method, then does: for k in E.keys(): D[k] = E[k] If E is present and lacks a .keys() method, then does: for k, v in E: D[k] = v In either case, this is followed by: for k in F: D[k] = F[k]
values()Return an object providing a view on the dict's values.
- name: str
Vault display name
- chain_id: int
Chain identifier (integer chain ID)
- chain: str
Chain display name, e.g.
"Ethereum"
- deployment: Optional[str]
Native protocol deployment slug, or
Nonefor ordinary EVM vaults.For now this is populated for Lighter so consumers can distinguish the original
ethereumdeployment from Lighter onrobinhoodwhile retaining Lighter’s synthetic vault-dataset chain ID.
- deployment_chain_id: Optional[int]
Real EVM chain ID associated with a native protocol deployment.
For now this is populated for Lighter on Ethereum (1) and Lighter on Robinhood Chain (4663). Both deployments keep
chain_id=9998because they share the native Lighter dataset namespace; their synthetic address prefixes and these deployment fields distinguish individual vaults.
- protocol: str
Protocol display name, e.g.
"Morpho"
- protocol_slug: str
Protocol slug, e.g.
"morpho"
- curator_slug: Optional[str]
Curator slug, e.g.
"gauntlet".Nonewhen no curator is known.
- curator_name: Optional[str]
Curator display name, e.g.
"Gauntlet".
- protocol_curator: Optional[bool]
Whether the curator is the vault protocol itself.
- address: str
Vault contract address (checksummed hex)
- vault_slug: str
Unique vault slug for URLs
- cagr: Optional[float]
Compound Annual Growth Rate (lifetime)
- lifetime_return: Optional[float]
Lifetime total return
- three_months_cagr: Optional[float]
3-month CAGR
- one_month_cagr: Optional[float]
1-month CAGR
- volatility: Optional[float]
Annualised volatility
- sharpe: Optional[float]
Sharpe ratio
- risk: Optional[str]
Technical risk classification
- vault_poll_frequency: Optional[str]
Latest adaptive vault scan cycle, e.g.
"large_tvl"or"peaked".
- share_price_source: Optional[str]
Source used to produce the share-price series.
- current_nav: Optional[float]
Current net asset value in USD
- peak_nav: Optional[float]
Peak net asset value in USD
- management_fee: Optional[float]
Management fee percentage
- performance_fee: Optional[float]
Performance fee percentage
- denomination_decimals: Optional[int]
Denomination (reserve) token ERC-20 decimals, e.g.
6for USDC. Consumers use this to convert human amounts to raw uint256; a missing value must NOT be defaulted to 18 (seedenomination_token_address).
- minimum_deposit: Optional[float]
Minimum deposit in decimal denomination-token units.
0means the scanner verified that this vault has no minimum.Nonemeans the value is unavailable; it must not be interpreted as a zero minimum.
- minimum_redemption: Optional[float]
Minimum redemption in decimal vault-share units.
0means the scanner verified that this vault has no minimum.Nonemeans the value is unavailable; it must not be interpreted as a zero minimum.
- deposit_manager: Optional[dict]
Static support for this library’s deposit/redemption manager, or
None.This does not mean the vault is currently open or that an account has permission, funds, acceptable slippage, spare cap, or liquidity.
- deposit_permission: str
Vault-wide KYC or manual identity-approval policy.
whitelistednormally means deposits require prior KYC or manual identity approval,permissionlessmeans no such approval applies andunknownmeans the scanner has no source-proven KYC result for this contract version. Open dates, lock-ups, epoch windows, pauses, caps and token-holding requirements do not change this status. Consultwhitelist.notesfor explicitly documented operating assumptions.
- whitelist: eth_defi.research.vault_metrics.VaultWhitelist
Structured vault-wide account-admission status.
statusmirrorsdeposit_permission.notescontains a protocol-specific qualification where the scanner must expose one.
- share_token_decimals: Optional[int]
Share token ERC-20 decimals (the vault’s own ERC-4626 token).
- other_data: dict
Protocol-specific extension data (Morpho flags, etc.)
- core3: Optional[eth_defi.core3.vault_protocol.Core3VaultSection]
Compact Core3 risk summary for the vault’s protocol, or
Nonewhen no Core3 data is available. SeeCore3VaultSection.
- xerberus: Optional[eth_defi.xerberus.vault_export.XerberusVaultSection]
Compact Xerberus risk summary for this vault (pool score preferred), or
Nonewhen no Xerberus data is available. Unlikecore3, this is primarily a per-vault rating when the pool is scored. SeeXerberusVaultSection.
- denomination_token_rate: eth_defi.feed.stablecoin_rate.DenominationTokenRate
Stablecoin rate data for the vault denomination token.
- __init__(*args, **kwargs)
- __new__(**kwargs)
- clear()
Remove all items from the dict.
- copy()
Return a shallow copy of the dict.
- fromkeys(value=None, /)
Create a new dictionary with keys from iterable and values set to value.
- get(key, default=None, /)
Return the value for key if key is in the dictionary, else default.
- items()
Return a set-like object providing a view on the dict’s items.
- keys()
Return a set-like object providing a view on the dict’s keys.
- pop(k[, d]) v, remove specified key and return the corresponding value.
If the key is not found, return the default if given; otherwise, raise a KeyError.
- popitem()
Remove and return a (key, value) pair as a 2-tuple.
Pairs are returned in LIFO (last-in, first-out) order. Raises KeyError if the dict is empty.
- setdefault(key, default=None, /)
Insert key with a value of default if key is not in the dictionary.
Return the value for key if key is in the dictionary, else default.
- update([E, ]**F) None. Update D from mapping/iterable E and F.
If E is present and has a .keys() method, then does: for k in E.keys(): D[k] = E[k] If E is present and lacks a .keys() method, then does: for k, v in E: D[k] = v In either case, this is followed by: for k in F: D[k] = F[k]
- values()
Return an object providing a view on the dict’s values.