xerberus.mappings

Documentation for eth_defi.xerberus.mappings Python module.

Mapping between our vault protocol slugs and Xerberus protocol entity ids.

Pools match by (chain_id, address) and need no mapping. Protocol-level fallback and the top-level xerberus_protocols export use this table.

Unmapped protocols (value None) have no known Xerberus equivalent after an agent review of the live registry. Missing keys are treated as unmapped by callers that use .get(slug).

Do not invent mappings with regex, normalised string equality, or fuzzy name matching. Xerberus entity ids (morpho-v1, spark-savings-v2, usd-ai, …) are curated identifiers; agents must inspect registry rows (and product identity) before editing this table. See README-xerberus.md (Protocol mappings).

Module Attributes

XERBERUS_PROTOCOL_MAPPINGS

Mapping from our vault protocol slug to Xerberus protocol entity_id.

XERBERUS_UNMAPPED_PROTOCOL_REASONS

Xerberus registry protocol entity_id values we intentionally do not map to any of our vault protocol metadata slugs, with the reason.

Functions

reverse_xerberus_protocol_mappings()

Build Xerberus entity id → our protocol slug reverse map.

XERBERUS_PROTOCOL_MAPPINGS: dict[str, str | None] = {'aave': 'aave-v3', 'altura': 'altura-v1', 'cap': 'cap-v1', 'd2-finance': 'd2-finance', 'dolomite': 'dolomite', 'ember': 'ember-v1', 'ethena': 'ethena-v1', 'euler': 'euler-v2', 'fluid': 'fluid-v1', 'frankencoin': 'frankencoin', 'gearbox': 'gearbox-v3', 'infinifi': 'infinifi-v1', 'ipor-fusion': 'ipor-fusion-v1', 'lagoon-finance': 'lagoon-v0', 'maple': 'maple-v2', 'midas': 'midas-v1', 'morpho': 'morpho-v1', 'ostium': 'ostium', 'royco': 'royco-dawn-v1', 'securitize': 'securitize-v1', 'silo-finance': 'silo-v2', 'spark': 'spark-v1', 'spiko': 'spiko', 'usdai': 'usd-ai', 'yearn': None}

Mapping from our vault protocol slug to Xerberus protocol entity_id.

  • None means the registry was inspected and no Xerberus equivalent is known.

  • A string value is the Xerberus registry protocol id from GET /registry/scores?type=protocol.

  • Each mapping has a comment with the date and how it was confirmed.

Reviewed against live registry 2026-07-25 (50 protocol entities).

XERBERUS_UNMAPPED_PROTOCOL_REASONS: dict[str, str] = {'across-v3': 'Cross-chain bridge; we have no Across vault-protocol metadata slug.', 'chainlink': 'Oracle / data infrastructure; not a vault protocol in our metadata set.', 'circle': 'Circle issuer entity; our circle-usyc / usyc metadata is the USYC product, not generic Circle, so we do not map either slug to this registry row.', 'compound-v3': 'Compound v3; we have no compound vault-protocol metadata slug.', 'convex-v1': 'Convex Finance; we have no convex vault-protocol metadata slug.', 'curve-v2': 'Curve Finance; we have no curve vault-protocol metadata slug (llama-lend is a different product and must not be aliased here).', 'digift-v1': 'DigiFT; we have no digift vault-protocol metadata slug.', 'ebisu-v1': 'Ebisu Finance; we have no ebisu vault-protocol metadata slug.', 'eigenlayer': 'Restaking infrastructure; we have no EigenLayer vault-protocol metadata slug.', 'gmx-v2': 'GMX V2; we have no gmx vault-protocol metadata YAML in this repository.', 'hop-protocol': 'Cross-chain bridge; we have no Hop vault-protocol metadata slug.', 'kelp': 'Kelp liquid restaking; we have no kelp vault-protocol metadata slug.', 'knox-finance': 'Knox; we have no knox vault-protocol metadata slug.', 'layerzero-v2': 'Messaging / interoperability infrastructure; not a vault protocol slug we track.', 'lido-v2': 'Lido liquid staking; we have no lido vault-protocol metadata slug.', 'makina-finance': 'Makina Finance; we have no makina vault-protocol metadata slug.', 'moonwell-v1': 'Moonwell; we have no moonwell vault-protocol metadata slug.', 'morpho-v2': 'Secondary Morpho listing (Morpho V2); our slug morpho maps to morpho-v1 as the primary Morpho registry score.', 'pendle-v2': 'Pendle v2; we have no pendle vault-protocol metadata slug.', 'polygon-pos-bridge': 'Chain bridge infrastructure; not a vault protocol in our metadata set.', 'reservoir-v1': 'Reservoir; we have no reservoir vault-protocol metadata slug.', 'spark-savings-v2': 'Spark Savings product line; our slug spark maps to spark-v1 (Spark Lend / core), not the savings-specific entity.', 'stake-dao-v2': 'Stake DAO v2; we have no stake-dao vault-protocol metadata slug.', 'stargate-v2': 'Cross-chain bridge; we have no Stargate vault-protocol metadata slug.', 'strata-v1': 'Strata; we have no strata vault-protocol metadata slug.', 'wormhole': 'Cross-chain messaging / bridge; we have no Wormhole vault-protocol metadata slug.'}

Xerberus registry protocol entity_id values we intentionally do not map to any of our vault protocol metadata slugs, with the reason.

Keys must be entity ids from GET /registry/scores?type=protocol that are absent from XERBERUS_PROTOCOL_MAPPINGS values. Revisit when we add a matching vault protocol YAML or Xerberus renames the entity.

Reviewed 2026-07-25 against 50 registry protocols (24 mapped, 26 unmapped).

reverse_xerberus_protocol_mappings()

Build Xerberus entity id → our protocol slug reverse map.

Returns

Reverse mapping for non-null forward entries.

Return type

dict[str, str]