VaultMetricsRecord

Documentation for eth_defi.research.vault_metrics.VaultMetricsRecord Python class.

class VaultMetricsRecord

Bases: TypedDict

Per-vault record in the JSON export.

Uses total=False so 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

name

Vault display name

chain_id

Chain identifier (integer chain ID)

chain

Chain display name, e.g.

deployment

Native protocol deployment slug, or None for ordinary EVM vaults.

deployment_chain_id

Real EVM chain ID associated with a native protocol deployment.

protocol

Protocol display name, e.g.

protocol_slug

Protocol slug, e.g.

curator_slug

Curator slug, e.g.

curator_name

Curator display name, e.g.

protocol_curator

Whether the curator is the vault protocol itself.

address

Vault contract address (checksummed hex)

vault_slug

Unique vault slug for URLs

cagr

Compound Annual Growth Rate (lifetime)

lifetime_return

Lifetime total return

three_months_cagr

3-month CAGR

one_month_cagr

1-month CAGR

volatility

Annualised volatility

sharpe

Sharpe ratio

risk

Technical risk classification

vault_poll_frequency

Latest adaptive vault scan cycle, e.g.

share_price_source

Source used to produce the share-price series.

current_nav

Current net asset value in USD

peak_nav

Peak net asset value in USD

management_fee

Management fee percentage

performance_fee

Performance fee percentage

denomination_decimals

Denomination (reserve) token ERC-20 decimals, e.g.

minimum_deposit

Minimum deposit in decimal denomination-token units.

minimum_redemption

Minimum redemption in decimal vault-share units.

deposit_manager

Static support for this library's deposit/redemption manager, or None.

deposit_permission

Vault-wide KYC or manual identity-approval policy.

whitelist

Structured vault-wide account-admission status.

share_token_decimals

Share token ERC-20 decimals (the vault's own ERC-4626 token).

other_data

Protocol-specific extension data (Morpho flags, etc.)

core3

Compact Core3 risk summary for the vault's protocol, or None when no Core3 data is available.

xerberus

Compact Xerberus risk summary for this vault (pool score preferred), or None when no Xerberus data is available.

denomination_token_rate

Stablecoin rate data for the vault denomination token.

period_results

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 None for ordinary EVM vaults.

For now this is populated for Lighter so consumers can distinguish the original ethereum deployment from Lighter on robinhood while 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=9998 because 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". None when 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. 6 for USDC. Consumers use this to convert human amounts to raw uint256; a missing value must NOT be defaulted to 18 (see denomination_token_address).

minimum_deposit: Optional[float]

Minimum deposit in decimal denomination-token units.

0 means the scanner verified that this vault has no minimum. None means the value is unavailable; it must not be interpreted as a zero minimum.

minimum_redemption: Optional[float]

Minimum redemption in decimal vault-share units.

0 means the scanner verified that this vault has no minimum. None means 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.

whitelisted normally means deposits require prior KYC or manual identity approval, permissionless means no such approval applies and unknown means 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. Consult whitelist.notes for explicitly documented operating assumptions.

whitelist: eth_defi.research.vault_metrics.VaultWhitelist

Structured vault-wide account-admission status.

status mirrors deposit_permission. notes contains 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 None when no Core3 data is available. See Core3VaultSection.

xerberus: Optional[eth_defi.xerberus.vault_export.XerberusVaultSection]

Compact Xerberus risk summary for this vault (pool score preferred), or None when no Xerberus data is available. Unlike core3, this is primarily a per-vault rating when the pool is scored. See XerberusVaultSection.

denomination_token_rate: eth_defi.feed.stablecoin_rate.DenominationTokenRate

Stablecoin rate data for the vault denomination token.

period_results: list[dict]

Per-period tearsheet results

__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.