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.

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.

deposit_manager

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

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.

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

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

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.

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.

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.