CentrifugeTrancheVault

Documentation for eth_defi.tokenised_fund.centrifuge.vault.CentrifugeTrancheVault Python class.

class CentrifugeTrancheVault

Bases: eth_defi.vault.base.VaultBase

Read-only adapter for direct Centrifuge permissioned share tokens.

It reads ERC-20 metadata and the live compliance hook address. It neither infers NAV from supply nor exposes a deposit manager, because mint/burn are authorised accounting operations and vault(asset) points elsewhere.

Create an address-scoped Tranche token adapter.

Parameters
  • web3 – Web3 connection for the token’s chain.

  • spec – Chain and direct Tranche token address.

  • token_cache – Shared ERC-20 metadata cache.

  • features – Classification features, expected to contain ERC4626Feature.centrifuge_tranche_like.

  • default_block_identifier – Optional default block for reads.

  • require_denomination_token – Retained for the shared adapter signature; no denomination token is exposed by the Tranche token.

Attributes summary

address

Return the direct Tranche ERC-20 token address.

chain_id

Return the product's EVM chain id.

denomination_token

Get the token which denominates the vault valuation

deposit_manager

Deposit manager assocaited with this vault

description

Return the product-level description.

flow_manager

Flow manager associated with this vault

info

Get info dictionary related to this vault deployment.

manager_name

Return the verified fund sub-investment manager.

name

Return on-chain name with the reviewed product name fallback.

share_token

ERC-20 that presents vault shares.

short_description

Return a concise token structure description.

symbol

Return on-chain symbol with the reviewed product symbol fallback.

vault_address

Return the scanner-compatible identifier for this share token.

Methods summary

__init__(web3, spec[, token_cache, ...])

Create an address-scoped Tranche token adapter.

fetch_available_liquidity([block_identifier])

Get the amount of denomination token available for immediate withdrawal.

fetch_compliance_hook([block_identifier])

Read the live transfer-compliance hook.

fetch_denomination_token()

Return no denomination token metadata.

fetch_denomination_token_address()

Return no denomination token for the direct share token.

fetch_deposit_closed_reason()

Explain why public subscriptions remain unavailable.

fetch_deposit_next_open()

Get when deposits will next be open.

fetch_info()

Return direct-token scan metadata.

fetch_linked_vault(asset[, block_identifier])

Read the vault associated with a specific subscription asset.

fetch_nav([block_identifier])

Reject direct-token NAV calculation.

fetch_portfolio(universe[, block_identifier])

Return no token-contract portfolio.

fetch_redemption_closed_reason()

Explain why public redemptions remain unavailable.

fetch_redemption_next_open()

Get when withdrawals/redemptions will next be open.

fetch_scan_record_extra_data()

Return explicit diagnostics for the deliberately unpriced token.

fetch_share_price([block_identifier])

Reject NAV estimation from the direct share-token surface.

fetch_share_token()

Fetch direct Tranche ERC-20 metadata.

fetch_share_token_address([block_identifier])

Return the direct Tranche token address.

fetch_total_assets([block_identifier])

Reject TVL calculation without an authoritative NAV.

fetch_total_supply([block_identifier])

Fetch the human-readable outstanding share supply.

fetch_utilisation_percent([block_identifier])

Get the percentage of assets currently lent out.

get_deposit_fee(block_identifier)

Deposit fee is set to zero by default as vaults usually do not have deposit fees.

get_deposit_manager()

Reject public subscription/redemption operations.

get_deposit_manager_capability()

Return static public transaction-adapter support, if any.

get_estimated_lock_up()

Return no inferred lock-up.

get_fee_data()

Return unavailable fund-fee data.

get_fee_mode()

Get how this vault accounts its fees.

get_flags()

Get various vault state flags from the smart contract.

get_flow_manager()

Reject unimplemented direct-token flow accounting.

get_historical_reader(stateful)

Create the supply-only history reader.

get_link([referral])

Return the official JTRSY fund page.

get_management_fee(block_identifier)

Return no token-level management fee.

get_notes()

Get a human readable message if we know somethign special is going on with this vault.

get_performance_fee(block_identifier)

Return no token-level performance fee.

get_protocol_name()

Return the name of the vault protocol.

get_risk()

Get risk profile of this vault.

get_spec()

get_withdraw_fee(block_identifier)

Withdraw fee is set to zero by default as vaults usually do not have withdraw fees.

has_block_range_event_support()

Return whether public flow accounting is supported.

has_custom_fees()

Does this vault have fees outside the shared fee model.

has_deposit_distribution_to_all_positions()

Return whether token deposits distribute to on-chain positions.

__init__(web3, spec, token_cache=None, features=None, default_block_identifier=None, require_denomination_token=False)

Create an address-scoped Tranche token adapter.

Parameters
  • web3 (web3.main.Web3) – Web3 connection for the token’s chain.

  • spec (eth_defi.vault.base.VaultSpec) – Chain and direct Tranche token address.

  • token_cache (Optional[dict]) – Shared ERC-20 metadata cache.

  • features (Optional[set[eth_defi.erc_4626.core.ERC4626Feature]]) – Classification features, expected to contain ERC4626Feature.centrifuge_tranche_like.

  • default_block_identifier (Optional[Union[Literal['latest', 'earliest', 'pending', 'safe', 'finalized'], eth_typing.evm.BlockNumber, eth_typing.evm.Hash32, eth_typing.encoding.HexStr, int]]) – Optional default block for reads.

  • require_denomination_token (bool) – Retained for the shared adapter signature; no denomination token is exposed by the Tranche token.

property chain_id: int

Return the product’s EVM chain id.

property address: eth_typing.evm.HexAddress

Return the direct Tranche ERC-20 token address.

property vault_address: eth_typing.evm.HexAddress

Return the scanner-compatible identifier for this share token.

property name: str

Return on-chain name with the reviewed product name fallback.

property symbol: str

Return on-chain symbol with the reviewed product symbol fallback.

property description: str

Return the product-level description.

property short_description: str

Return a concise token structure description.

property manager_name: str

Return the verified fund sub-investment manager.

fetch_share_token_address(block_identifier='latest')

Return the direct Tranche token address.

Parameters

block_identifier (Union[Literal['latest', 'earliest', 'pending', 'safe', 'finalized'], eth_typing.evm.BlockNumber, eth_typing.evm.Hash32, eth_typing.encoding.HexStr, int]) – Accepted for shared scanner compatibility.

Returns

Tranche token address.

Return type

eth_typing.evm.HexAddress

fetch_share_token()

Fetch direct Tranche ERC-20 metadata.

Returns

Token details for JTRSY.

Return type

eth_defi.token.TokenDetails

fetch_denomination_token_address()

Return no denomination token for the direct share token.

Returns

Always None: subscription assets belong to a linked vault.

Return type

Optional[eth_typing.evm.HexAddress]

fetch_denomination_token()

Return no denomination token metadata.

Returns

Always None.

Return type

Optional[eth_defi.token.TokenDetails]

fetch_compliance_hook(block_identifier=None)

Read the live transfer-compliance hook.

Parameters

block_identifier (Optional[Union[Literal['latest', 'earliest', 'pending', 'safe', 'finalized'], eth_typing.evm.BlockNumber, eth_typing.evm.Hash32, eth_typing.encoding.HexStr, int]]) – Block at which to read the configured hook.

Returns

Checksum hook address, including the zero address when disabled.

Return type

eth_typing.evm.HexAddress

fetch_linked_vault(asset, block_identifier=None)

Read the vault associated with a specific subscription asset.

This low-level relationship does not certify that the returned vault is publicly accessible or that it accepts a caller. It must not be used as a replacement for a tested Centrifuge subscription/redemption manager.

Parameters
  • asset (eth_typing.evm.HexAddress) – Asset address whose linked vault is queried.

  • block_identifier (Optional[Union[Literal['latest', 'earliest', 'pending', 'safe', 'finalized'], eth_typing.evm.BlockNumber, eth_typing.evm.Hash32, eth_typing.encoding.HexStr, int]]) – Block at which to read the association.

Returns

Checksum linked-vault address, possibly the zero address.

Return type

eth_typing.evm.HexAddress

fetch_share_price(block_identifier='latest')

Reject NAV estimation from the direct share-token surface.

Parameters

block_identifier (Union[Literal['latest', 'earliest', 'pending', 'safe', 'finalized'], eth_typing.evm.BlockNumber, eth_typing.evm.Hash32, eth_typing.encoding.HexStr, int]) – Requested block, retained for API compatibility.

Raises

NotImplementedError – Always: the Tranche token exposes no valuation method.

Return type

decimal.Decimal

fetch_total_supply(block_identifier='latest')

Fetch the human-readable outstanding share supply.

Parameters

block_identifier (Union[Literal['latest', 'earliest', 'pending', 'safe', 'finalized'], eth_typing.evm.BlockNumber, eth_typing.evm.Hash32, eth_typing.encoding.HexStr, int]) – Historical or latest block identifier.

Returns

Direct Tranche ERC-20 supply.

Return type

decimal.Decimal

fetch_total_assets(block_identifier='latest')

Reject TVL calculation without an authoritative NAV.

Parameters

block_identifier (Union[Literal['latest', 'earliest', 'pending', 'safe', 'finalized'], eth_typing.evm.BlockNumber, eth_typing.evm.Hash32, eth_typing.encoding.HexStr, int]) – Requested block, retained for API compatibility.

Raises

NotImplementedError – Always: supply is not NAV.

Return type

decimal.Decimal

fetch_nav(block_identifier='latest')

Reject direct-token NAV calculation.

Parameters

block_identifier (Union[Literal['latest', 'earliest', 'pending', 'safe', 'finalized'], eth_typing.evm.BlockNumber, eth_typing.evm.Hash32, eth_typing.encoding.HexStr, int]) – Requested block, retained for API compatibility.

Raises

NotImplementedError – Always: valuation belongs to the linked pool route.

Return type

decimal.Decimal

fetch_info()

Return direct-token scan metadata.

Returns

Token, chain, hook and valuation-source details.

Return type

eth_defi.tokenised_fund.centrifuge.vault.CentrifugeTrancheVaultInfo

fetch_scan_record_extra_data()

Return explicit diagnostics for the deliberately unpriced token.

Returns

Scanner extra fields which prevent accidental public-flow claims.

Return type

dict[str, object]

fetch_portfolio(universe, block_identifier=None)

Return no token-contract portfolio.

Parameters
  • universe (eth_defi.vault.base.TradingUniverse) – Ignored because fund assets are not token holdings.

  • block_identifier (Optional[Union[Literal['latest', 'earliest', 'pending', 'safe', 'finalized'], eth_typing.evm.BlockNumber, eth_typing.evm.Hash32, eth_typing.encoding.HexStr, int]]) – Ignored because fund assets are not token holdings.

Returns

Empty spot portfolio.

Return type

eth_defi.vault.base.VaultPortfolio

has_block_range_event_support()

Return whether public flow accounting is supported.

Returns

False because token mint/burn is authorised accounting.

Return type

bool

has_deposit_distribution_to_all_positions()

Return whether token deposits distribute to on-chain positions.

Returns

False because the Tranche token is not the fund vault.

Return type

bool

get_flow_manager()

Reject unimplemented direct-token flow accounting.

Raises

NotImplementedError – Always, because the token is not the dealing vault.

Return type

eth_defi.vault.base.VaultFlowManager

get_deposit_manager()

Reject public subscription/redemption operations.

Raises

NotImplementedError – Always, because public dealing must use a separately supported linked Centrifuge vault route.

Return type

eth_defi.vault.deposit_redeem.VaultDepositManager

fetch_deposit_closed_reason()

Explain why public subscriptions remain unavailable.

Returns

Direct-token flow safety reason.

Return type

str

fetch_redemption_closed_reason()

Explain why public redemptions remain unavailable.

Returns

Direct-token flow safety reason.

Return type

str

get_historical_reader(stateful)

Create the supply-only history reader.

Parameters

stateful (bool) – Requested reader state behaviour.

Returns

Historical reader that leaves NAV and TVL unavailable.

Return type

eth_defi.vault.base.VaultHistoricalReader

get_fee_data()

Return unavailable fund-fee data.

Returns

Broken fee data because the share token has no fund fee surface.

Return type

eth_defi.vault.fee.FeeData

get_management_fee(block_identifier)

Return no token-level management fee.

Parameters

block_identifier (Union[Literal['latest', 'earliest', 'pending', 'safe', 'finalized'], eth_typing.evm.BlockNumber, eth_typing.evm.Hash32, eth_typing.encoding.HexStr, int]) – Ignored because fees are not token contract fields.

Returns

None.

Return type

Optional[float]

get_performance_fee(block_identifier)

Return no token-level performance fee.

Parameters

block_identifier (Union[Literal['latest', 'earliest', 'pending', 'safe', 'finalized'], eth_typing.evm.BlockNumber, eth_typing.evm.Hash32, eth_typing.encoding.HexStr, int]) – Ignored because fees are not token contract fields.

Returns

None.

Return type

Optional[float]

get_estimated_lock_up()

Return no inferred lock-up.

Returns

None because dealing terms belong to the linked vault.

Return type

Optional[datetime.timedelta]

get_link(referral=None)

Return the official JTRSY fund page.

Parameters

referral (Optional[str]) – Ignored.

Returns

Product homepage.

Return type

str

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

None results 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

Optional[decimal.Decimal]

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

Optional[datetime.datetime]

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

Optional[datetime.datetime]

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

Optional[float]

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

Parameters

block_identifier (Union[Literal['latest', 'earliest', 'pending', 'safe', 'finalized'], eth_typing.evm.BlockNumber, eth_typing.evm.Hash32, eth_typing.encoding.HexStr, int]) –

Return type

Optional[float]

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. None is therefore the safe default for unknown and protocol-specific vaults.

Returns

Adapter-specific capability object, or None when unsupported.

Return type

Optional[eth_defi.vault.deposit_redeem.VaultDepositManagerCapability]

get_fee_mode()

Get how this vault accounts its fees.

Return type

Optional[eth_defi.vault.fee.VaultFeeMode]

get_flags()

Get various vault state flags from the smart contract.

Returns

Flag set.

Do not modify in place.

Return type

set[eth_defi.vault.flag.VaultFlag]

get_notes()

Get a human readable message if we know somethign special is going on with this vault.

Return type

Optional[str]

get_protocol_name()

Return the name of the vault protocol.

Return type

str

get_risk()

Get risk profile of this vault.

Return type

Optional[eth_defi.vault.risk.VaultTechnicalRisk]

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

Parameters

block_identifier (Union[Literal['latest', 'earliest', 'pending', 'safe', 'finalized'], eth_typing.evm.BlockNumber, eth_typing.evm.Hash32, eth_typing.encoding.HexStr, int]) –

Return type

float

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 True merely because a vault implements custom accessors for ordinary management, performance, deposit, or withdraw fees. Return True only when some vault fee cannot be reflected in those standard fields as a fee-like value.

Returns

True if the vault has fees outside the shared fee model.

Return type

bool

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

property share_token: eth_defi.token.TokenDetails

ERC-20 that presents vault shares.

  • User gets shares on deposit and burns them on redemption