Libeara API
The adapter covers the Ethereum CMTAT CUMIU and BELIF shares and the Arbitrum ULTRA deployment. CMTAT products expose issuer-maintained NAV, while ULTRA is reported as supply-only because it has no verified public NAV/share source.
Read-only adapter for reviewed Libeara tokenised fund shares.
The reviewed CUMIU and BELIF Ethereum proxies use CMTA’s CMTAT framework. They provide an issuer-maintained NAV record but their transfer rule engine and off-chain eligibility process mean that neither public subscriptions nor redemptions are implemented here. ULTRA on Arbitrum is tracked as supply-only because no verified public NAV/share source has been identified.
- class LibearaVaultInfo
Bases:
eth_defi.vault.base.VaultInfoLibeara fund scan metadata.
- __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 LibearaVault
Bases:
eth_defi.vault.base.VaultBaseRead supply and any reviewed NAV for Libeara fund shares.
Create a CMTAT fund-share adapter.
- Parameters
web3 – Web3 connection to the deployment chain.
spec – Chain and reviewed fund-share address.
token_cache – Optional ERC-20 metadata cache.
features – Shared classification features.
default_block_identifier – Default archive block for metadata reads.
require_denomination_token – Retained shared-adapter compatibility flag.
- __init__(web3, spec, token_cache=None, features=None, default_block_identifier=None, require_denomination_token=False)
Create a CMTAT fund-share adapter.
- Parameters
web3 (web3.main.Web3) – Web3 connection to the deployment chain.
spec (eth_defi.vault.base.VaultSpec) – Chain and reviewed fund-share address.
token_cache (Optional[dict]) – Optional ERC-20 metadata cache.
features (Optional[set[eth_defi.erc_4626.core.ERC4626Feature]]) – Shared classification features.
default_block_identifier (Optional[Union[Literal['latest', 'earliest', 'pending', 'safe', 'finalized'], eth_typing.evm.BlockNumber, eth_typing.evm.Hash32, eth_typing.encoding.HexStr, int]]) – Default archive block for metadata reads.
require_denomination_token (bool) – Retained shared-adapter compatibility flag.
- property address: eth_typing.evm.HexAddress
Return the fund-share token address.
- property vault_address: eth_typing.evm.HexAddress
Return the scanner-compatible token address.
- property cmtat_contract: web3.contract.contract.Contract
Return the stable CMTAT NAV interface.
The ABI is sourced from the verified CUMIU proxy implementation and reference CMTAT contract family documented at https://github.com/CMTA/CMTAT.
Return the fund share token.
Fetch ERC-20 share-token metadata.
- Returns
Fund-share token details.
- Return type
- fetch_denomination_token_address()
Return no transferable denomination token.
- Returns
Nonebecause the public dealing asset is not exposed.- Return type
- fetch_denomination_token()
Return no public denomination token.
- Returns
None.- Return type
Read CMTAT’s issuer-maintained NAV/share.
- Parameters
block_identifier (Union[Literal['latest', 'earliest', 'pending', 'safe', 'finalized'], eth_typing.evm.BlockNumber, eth_typing.evm.Hash32, eth_typing.encoding.HexStr, int]) – EVM archive block.
- Returns
NAV divided by the contract-declared scale.
- Raises
ValueError – If the reported scale is zero.
- Return type
- fetch_total_supply(block_identifier='latest')
Read outstanding human-readable fund shares.
- fetch_total_assets(block_identifier='latest')
Calculate USD value from CMTAT NAV and supply.
Return NAV-derived total assets.
- fetch_info()
Export integration metadata.
- Returns
Token identity and issuer-NAV source information.
- Return type
- fetch_scan_record_extra_data()
Export restricted-flow and valuation diagnostics.
- fetch_portfolio(universe, block_identifier=None)
Return no token-held on-chain portfolio.
- Parameters
universe (eth_defi.vault.base.TradingUniverse) – Ignored.
block_identifier (Optional[Union[Literal['latest', 'earliest', 'pending', 'safe', 'finalized'], eth_typing.evm.BlockNumber, eth_typing.evm.Hash32, eth_typing.encoding.HexStr, int]]) – Ignored.
- Returns
Empty spot portfolio.
- Return type
- has_block_range_event_support()
Return whether servicing-flow event accounting is implemented.
- Returns
Always
False.- Return type
- has_deposit_distribution_to_all_positions()
Return whether deposits reach an on-chain portfolio.
- Returns
Always
False.- Return type
- get_flow_manager()
Reject unimplemented issuer servicing flows.
- Raises
NotImplementedError – Always.
- Return type
- get_deposit_manager()
Reject public dealing operations.
- Raises
NotImplementedError – Always.
- Return type
- fetch_deposit_closed_reason()
Explain unavailable subscriptions.
- Returns
Compliance restriction description.
- Return type
- fetch_redemption_closed_reason()
Explain unavailable redemptions.
- Returns
Compliance restriction description.
- Return type
- get_historical_reader(stateful)
Create the product-specific supply and valuation reader.
- Parameters
stateful (bool) – Retained shared-reader API parameter.
- Returns
Libeara historical reader.
- Return type
- get_fee_data()
Return unavailable product fee data.
- Returns
Broken fee data placeholder.
- Return type
- get_management_fee(block_identifier)
Return no on-chain management fee.
- get_performance_fee(block_identifier)
Return no on-chain performance fee.
- get_notes()
Describe the integration boundary.
- Returns
Valuation and transfer-compliance caveat.
- Return type
- get_link(referral=None)
Return Libeara’s platform URL.
- property denomination_token: Optional[eth_defi.token.TokenDetails]
Get the token which denominates the vault valuation
Used in deposits and redemptions
Used in NAV calculation
Used in profit benchmarks
Usually USDC
- Returns
Token wrapper instance.
Maybe None for broken vaults like https://arbiscan.io/address/0x9d0fbc852deccb7dcdd6cb224fa7561efda74411#code
Note
Noneresults are not cached — the next access will retry the on-chain call. This avoids permanently caching a transient RPC failure.
- property deposit_manager: eth_defi.vault.deposit_redeem.VaultDepositManager
Deposit manager assocaited with this vault
- fetch_available_liquidity(block_identifier='latest')
Get the amount of denomination token available for immediate withdrawal.
Only applicable to lending protocol vaults (IPOR, Euler, Morpho, Gearbox, etc.). Non-lending protocols should leave this method unimplemented.
Note: maxRedeem(address(0)) does NOT work as a proxy for available liquidity because it requires a specific address that has already deposited shares. For address(0), balanceOf is always 0, so maxRedeem returns 0 regardless of actual liquidity.
- Parameters
block_identifier (Union[Literal['latest', 'earliest', 'pending', 'safe', 'finalized'], eth_typing.evm.BlockNumber, eth_typing.evm.Hash32, eth_typing.encoding.HexStr, int]) – Block to query. Defaults to “latest”.
- Raises
NotImplementedError – For non-lending protocol vaults.
- Returns
Amount in denomination token units (human-readable Decimal).
- Return type
- fetch_deposit_next_open()
Get when deposits will next be open.
For epoch-based vaults (Ostium, D2), return calculated window open time
For non-epoch vaults (Plutus, IPOR, Morpho), return None
Override in protocol-specific subclasses
- Returns
Naive UTC datetime when deposits will next be available, or None if:
Deposits are currently open
Timing is unpredictable (manually controlled)
Protocol does not support timing information
- Return type
- fetch_redemption_next_open()
Get when withdrawals/redemptions will next be open.
For epoch-based vaults (Ostium, D2), return calculated window open time
For non-epoch vaults (Plutus, IPOR, Morpho), return None
Override in protocol-specific subclasses
- Returns
Naive UTC datetime when withdrawals will next be available, or None if:
Withdrawals are currently open
Timing is unpredictable (manually controlled)
Protocol does not support timing information
- Return type
- fetch_utilisation_percent(block_identifier='latest')
Get the percentage of assets currently lent out.
Only applicable to lending protocol vaults (IPOR, Euler, Morpho, Gearbox, etc.). Non-lending protocols should leave this method unimplemented.
- Parameters
block_identifier (Union[Literal['latest', 'earliest', 'pending', 'safe', 'finalized'], eth_typing.evm.BlockNumber, eth_typing.evm.Hash32, eth_typing.encoding.HexStr, int]) – Block to query. Defaults to “latest”.
- Raises
NotImplementedError – For non-lending protocol vaults.
- Returns
Utilisation as float between 0.0 and 1.0 (0% to 100%).
- Return type
- property flow_manager: eth_defi.vault.base.VaultFlowManager
Flow manager associated with this vault
- get_deposit_fee(block_identifier)
Deposit fee is set to zero by default as vaults usually do not have deposit fees.
Internal: Use
get_fee_data().
- get_deposit_manager_capability()
Return static public transaction-adapter support, if any.
This method deliberately does not attempt to construct a manager or query live pause, cap, epoch, balance, allow-list, or liquidity state. Adapters opt in only after their complete deposit and redemption lifecycles have focused coverage.
Noneis therefore the safe default for unknown and protocol-specific vaults.- Returns
Adapter-specific capability object, or
Nonewhen unsupported.- Return type
Optional[eth_defi.vault.deposit_redeem.VaultDepositManagerCapability]
- get_estimated_lock_up()
What is the estimated lock-up period for this vault.
- Returns
None if not know
- Return type
- get_fee_mode()
Get how this vault accounts its fees.
- Return type
- get_flags()
Get various vault state flags from the smart contract.
Override to add status flags
Also add flags from our manual flag list in
eth_defi.vault.flag
- Returns
Flag set.
Do not modify in place.
- Return type
- get_risk()
Get risk profile of this vault.
- Return type
- get_withdraw_fee(block_identifier)
Withdraw fee is set to zero by default as vaults usually do not have withdraw fees.
Internal: Use
get_fee_data().
- has_custom_fees()
Does this vault have fees outside the shared fee model.
Custom fees cause risk in vault comparison because the shared management/performance/deposit/withdraw fee fields cannot describe the full fee structure.
Do not return
Truemerely because a vault implements custom accessors for ordinary management, performance, deposit, or withdraw fees. ReturnTrueonly when some vault fee cannot be reflected in those standard fields as a fee-like value.- Returns
Trueif the vault has fees outside the shared fee model.- Return type
- property info: eth_defi.vault.base.VaultInfo
Get info dictionary related to this vault deployment.
Get cached data on the various vault parameters
- Returns
Vault protocol specific information dictionary
ERC-20 that presents vault shares.
User gets shares on deposit and burns them on redemption
Reviewed Libeara CMTAT fund-share deployments on Ethereum.
- class LibearaProduct
Bases:
objectOne reviewed Libeara platform tokenised-fund share.
- Parameters
chain_id – EVM chain hosting the proxy.
token – CMTAT proxy address.
symbol – ERC-20 token symbol.
product_name – Issuer-provided product name.
description – Short public product description.
first_seen_at_block – First block with proxy bytecode.
first_seen_at – Proxy deployment timestamp as naive UTC.
- __init__(chain_id, token, symbol, product_name, description, first_seen_at_block, first_seen_at)
- Parameters
chain_id (int) –
token (eth_typing.evm.HexAddress) –
symbol (str) –
product_name (str) –
description (str) –
first_seen_at_block (int) –
first_seen_at (datetime.datetime) –
- Return type
None
- CUMIU_ETHEREUM = LibearaProduct(chain_id=1, token='0x85d38585c3ac08268f598282a84b7c0ddfc0d04f', symbol='CUMIU', product_name='ChinaAMC USD Digital Money Market Fund Class I USD', description="Permissioned tokenised shares in ChinaAMC's USD digital money market fund.", first_seen_at_block=23038326, first_seen_at=datetime.datetime(2025, 7, 31, 6, 34, 35))
ChinaAMC USD Digital Money Market Fund Class I USD. Source: https://etherscan.io/token/0x85d38585c3ac08268f598282a84b7c0ddfc0d04f
- BELIF_ETHEREUM = LibearaProduct(chain_id=1, token='0x237c717df1b60501f8d029d3fe7385fd090df180', symbol='BELIF', product_name='Bosera Liquidity Income Fund SP', description="Permissioned tokenised shares in Bosera's liquidity income fund.", first_seen_at_block=23595754, first_seen_at=datetime.datetime(2025, 10, 17, 9, 1, 23))
Bosera Liquidity Income Fund SP. Source: https://etherscan.io/token/0x237c717df1b60501f8d029d3fe7385fd090df180
- LIBEARA_ULTRA_ARBITRUM = LibearaProduct(chain_id=42161, token='0xc26af85ede9cc25d449bcebef866bb85afd5d346', symbol='ULTRA', product_name='Delta Wellington Ultra Short Treasury On-Chain Fund', description='Permissioned tokenised units in the Delta Wellington ultra-short Treasury fund.', first_seen_at_block=358954981, first_seen_at=datetime.datetime(2025, 7, 18, 7, 9, 32))
Delta Wellington Ultra Short Treasury On-Chain Fund on Arbitrum.
Backfill only reviewed Libeara CMTAT fund histories.
This migration preserves all unrelated vault metadata, discovery cursors,
reader states and raw/cleaned Parquet histories. It only replaces CUMIU and
BELIF rows after their known deployment blocks. It defaults to DRY_RUN;
set DRY_RUN=false only after reviewing the displayed plan.
- upsert_libeara_metadata_preserving_discovery_cursor(vault_db, leads, rows)
Upsert reviewed rows without changing the Ethereum discovery cursor.
VaultDatabase.update_leads_and_rowsis intentionally unsuitable here: it advances the chain-wide discovery watermark, which would skip unrelated vault discovery after a targeted repair. Updating these known addresses directly preserves both an existing cursor and an absent cursor.- Parameters
vault_db (eth_defi.vault.vaultdb.VaultDatabase) – Existing vault metadata database.
leads (dict) – CUMIU and BELIF hardcoded leads keyed by token address.
rows (dict) – Fresh CUMIU and BELIF scan rows keyed by
VaultSpec.
- Returns
None.
- Return type
None
- backfill_cmtat()
Run the address-scoped metadata and price-history migration.
- Returns
None.
- Return type
None
- main()
Backfill all reviewed Libeara products.
CUMIU and BELIF use their reviewed CMTAT NAV history. ULTRA is registered separately because no verified public NAV/share source is available.
- Returns
None.
- Return type
None