erc_4626.vault_protocol.ember.offchain_metadata

Documentation for eth_defi.erc_4626.vault_protocol.ember.offchain_metadata Python module.

Ember vault offchain metadata.

  • Ember stores vault descriptions, fees, and manager info in their web app, not on-chain

  • Official API spec

  • Open-source contracts

  • The vault listing endpoint /api/v2/vaults?chain=ethereum returns all EVM vaults with metadata including descriptions, fee parameters, APY, tags, and manager info

  • We fetch and cache this data locally to avoid repeated API calls

  • Two-level caching: disk (2-day TTL) + in-process dictionary

API base: https://vaults.api.sui-prod.bluefin.io

Numeric encoding convention:

  • E9 suffix: value multiplied by 10^9

  • E18 suffix: value multiplied by 10^18

  • weeklyPerformanceFeeBpsE9: bps value in E9 format

Functions

fetch_ember_vault_metadata(web3, vault_address)

Fetch vault metadata from Ember's offchain API.

fetch_ember_vaults([cache_path, ...])

Fetch and cache all Ember offchain vault metadata.

Classes

EmberRewardToken

A reward token distributed by an Ember vault.

EmberVaultMetadata

Metadata about an Ember vault from offchain source.

class EmberRewardToken

Bases: TypedDict

A reward token distributed by an Ember vault.

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

class EmberVaultMetadata

Bases: TypedDict

Metadata about an Ember vault from offchain source.

Fetched from the Bluefin vaults API at vaults.api.sui-prod.bluefin.io. Official API spec at SwaggerHub.

  • Listing endpoint: GET /api/v2/vaults?chain=ethereum

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

fetch_ember_vault_metadata(web3, vault_address)

Fetch vault metadata from Ember’s offchain API.

  • Do both in-process and disk cache to avoid repeated fetches

Parameters
  • web3 (web3.main.Web3) – Web3 instance (used to checksum address)

  • vault_address (eth_typing.evm.HexAddress) – Vault contract address

Returns

Metadata dict or None if the vault is not in Ember’s database

Return type

Optional[eth_defi.erc_4626.vault_protocol.ember.offchain_metadata.EmberVaultMetadata]

fetch_ember_vaults(cache_path=PosixPath('/home/runner/.tradingstrategy/cache/ember'), api_base_url='https://vaults.api.sui-prod.bluefin.io/api/v2', chain='ethereum', now_=None, max_cache_duration=datetime.timedelta(days=2))

Fetch and cache all Ember offchain vault metadata.

  • Fetches vaults for the given chain from a single API call

  • Single JSON cache file for all Ember EVM vaults (~9 total)

  • Multiprocess safe via file lock

Parameters
  • cache_path (pathlib.Path) – Directory for cache files (default ~/.tradingstrategy/cache/ember/)

  • api_base_url (str) – Ember API base URL

  • chain (str) – Chain name as used by the Ember API (e.g. "ethereum")

  • now – Override current time (for testing)

  • max_cache_duration (datetime.timedelta) – How long before refreshing cache (default 2 days)

  • now_ (Optional[datetime.datetime]) –

Returns

Dict mapping checksummed vault address to EmberVaultMetadata

Return type

dict[str, eth_defi.erc_4626.vault_protocol.ember.offchain_metadata.EmberVaultMetadata]