AccountableDepositManager

Documentation for eth_defi.erc_4626.vault_protocol.accountable.deposit_redeem.AccountableDepositManager Python class.

class AccountableDepositManager

Bases: eth_defi.erc_4626.deposit_redeem.ERC4626DepositManager

Accountable adapter with synchronous deposits and claimed redemptions.

Attributes summary

web3

Methods summary

__init__(vault)

analyse_deposit(claim_tx_hash, deposit_ticket)

Analyse a mined ERC-4626 deposit or guarded SimpleVault wrapper.

analyse_redemption(claim_tx_hash, ...)

Analyse a mined ERC-4626 redemption or guarded SimpleVault wrapper.

can_create_deposit_request(owner)

Return the advisory standard ERC-4626 deposit availability.

can_create_redemption_request(owner)

Check that no aggregate request exists and the owner has shares.

can_finish_deposit(deposit_ticket)

Synchronous deposits can be finished immediately.

can_finish_redeem(redemption_ticket)

Check current aggregate claimability.

create_deposit_request(owner[, to, amount, ...])

Build one standard ERC-4626 deposit with an explicit receiver.

create_redemption_request(owner[, to, ...])

Build a request that transfers shares into Accountable's queue.

estimate_deposit(owner, amount[, ...])

How many shares we get for a deposit.

estimate_redeem(owner, shares[, ...])

Estimate assets using Accountable's non-reverting conversion method.

estimate_redemption_delay()

Return no deterministic Accountable queue deadline.

fetch_completed_redemption_tx_hash(ticket)

Find an operator-owned terminal redemption transaction when available.

fetch_vault_flow_events(hypersync_client, ...)

Fetch historical Accountable RedeemRequest logs.

finish_deposit(deposit_ticket)

Can we finish the deposit process in async vault.

finish_redemption(redemption_ticket)

Build a self-controlled claim for current claimable shares.

get_deposit_approval_target()

Return the ERC-20 spender required for a deposit request.

get_deposit_delay_over(address)

Estimate when a pending async deposit request will settle.

get_deposit_request_status(ticket)

Query the current status of an async deposit request.

get_max_deposit(owner)

How much we can deposit

get_redemption_delay_over(address)

Return no deterministic claimability deadline.

get_redemption_request_status(ticket)

Map Accountable aggregate balances to the generic request status.

has_synchronous_deposit()

Return Accountable deposit completion mode.

has_synchronous_redemption()

Return Accountable redemption completion mode.

is_deposit_in_progress(owner)

Report Accountable deposit queue state.

is_redemption_in_progress(owner)

Check aggregate pending or claimable shares for a controller.

reclaim_deposit(ticket)

Return a function to recover funds after a failed async deposit settlement.

reclaim_withdrawal(ticket)

Return a function to recover shares after a failed async withdrawal settlement.

reconstruct_deposit_ticket(data)

Reconstruct a deposit ticket from a serialised dict.

reconstruct_redemption_ticket(data)

Rebuild an Accountable ticket from persisted data.

serialize_deposit_ticket(ticket)

Serialise a deposit ticket to a dict for persistence.

serialize_redemption_ticket(ticket)

Serialise Accountable request identity for restart-safe claims.

create_deposit_request(owner, to=None, amount=None, raw_amount=None, check_max_deposit=True, check_enough_token=True)

Build one standard ERC-4626 deposit with an explicit receiver.

Parameters
Returns

One-call synchronous deposit request.

Return type

eth_defi.erc_4626.deposit_redeem.ERC4626DepositRequest

create_redemption_request(owner, to=None, shares=None, raw_shares=None, check_max_deposit=True, check_enough_token=True)

Build a request that transfers shares into Accountable’s queue.

Accountable uses owner as controller and does not require a share-token allowance: requestRedeem itself escrows the shares. Its aggregate getters make two concurrent tickets ambiguous, so an existing pending or claimable request blocks a further request for this owner.

Parameters
Returns

One-call redemption request.

Return type

eth_defi.erc_4626.vault_protocol.accountable.deposit_redeem.AccountableRedemptionRequest

has_synchronous_deposit()

Return Accountable deposit completion mode.

Returns

Always True.

Return type

bool

has_synchronous_redemption()

Return Accountable redemption completion mode.

Returns

Always False because claims wait for settlement.

Return type

bool

is_deposit_in_progress(owner)

Report Accountable deposit queue state.

Parameters

owner (eth_typing.evm.HexAddress) – Ignored because deposits are synchronous.

Returns

Always False.

Return type

bool

is_redemption_in_progress(owner)

Check aggregate pending or claimable shares for a controller.

Parameters

owner (eth_typing.evm.HexAddress) – Accountable controller address.

Returns

True when an aggregate request or claim remains.

Return type

bool

can_create_deposit_request(owner)

Return the advisory standard ERC-4626 deposit availability.

Parameters

owner (eth_typing.evm.HexAddress) – Prospective deposit receiver.

Returns

Whether the current maximum deposit is positive.

Return type

bool

can_create_redemption_request(owner)

Check that no aggregate request exists and the owner has shares.

Parameters

owner (eth_typing.evm.HexAddress) – Prospective controller and share owner.

Returns

True when a new request is not locally precluded.

Return type

bool

estimate_redemption_delay()

Return no deterministic Accountable queue deadline.

Returns

Zero duration because settlement timing is strategy controlled.

Return type

datetime.timedelta

get_redemption_delay_over(address)

Return no deterministic claimability deadline.

Parameters

address (Union[eth_typing.evm.HexAddress, str]) – Ignored controller address.

Returns

Always None.

Return type

Optional[datetime.datetime]

get_redemption_request_status(ticket)

Map Accountable aggregate balances to the generic request status.

Claimability must be checked before pending status, because immediate settlement may leave a request id of zero and a non-zero claimable aggregate in the same transaction.

Parameters

ticket (eth_defi.erc_4626.vault_protocol.accountable.deposit_redeem.AccountableRedemptionTicket) – Persisted Accountable ticket.

Returns

Claimable, pending, or absent aggregate state.

Return type

eth_defi.vault.deposit_redeem.AsyncVaultRequestStatus

can_finish_redeem(redemption_ticket)

Check current aggregate claimability.

Parameters

redemption_ticket (eth_defi.erc_4626.vault_protocol.accountable.deposit_redeem.AccountableRedemptionTicket) – Accountable request ticket.

Returns

Whether this safe self-controlled ticket has claimable shares.

Return type

bool

finish_redemption(redemption_ticket)

Build a self-controlled claim for current claimable shares.

Accountable exposes a controller aggregate rather than a per-request claim balance. The public manager therefore only claims self-controlled tickets back to their share owner. It never directs an aggregate claim to a custom receiver or auto-claims a delegated-controller ticket. A settlement can make only part of the ticket claimable; claim the current amount, then repeat after the remaining shares settle.

Parameters

redemption_ticket (eth_defi.erc_4626.vault_protocol.accountable.deposit_redeem.AccountableRedemptionTicket) – Accountable request ticket.

Returns

Current-claimable redeem function call.

Raises

ValueError – If this ticket is delegated, has a custom receiver, or has no claimable shares.

Return type

web3.contract.contract.ContractFunction

estimate_redeem(owner, shares, block_identifier='latest')

Estimate assets using Accountable’s non-reverting conversion method.

Accountable intentionally makes previewRedeem revert, while convertToAssets reflects its current share price.

Parameters
  • owner (eth_typing.evm.HexAddress) – Ignored owner retained for the common manager API.

  • shares (decimal.Decimal) – Decimal share amount.

  • block_identifier (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 conversion.

Returns

Estimated denomination assets.

Return type

decimal.Decimal

serialize_redemption_ticket(ticket)

Serialise Accountable request identity for restart-safe claims.

Parameters

ticket (eth_defi.erc_4626.vault_protocol.accountable.deposit_redeem.AccountableRedemptionTicket) – Ticket to serialise.

Returns

JSON-compatible ticket data.

Return type

dict

reconstruct_redemption_ticket(data)

Rebuild an Accountable ticket from persisted data.

Parameters

data (dict) – JSON-compatible serialised ticket data.

Returns

Restored Accountable ticket.

Return type

eth_defi.erc_4626.vault_protocol.accountable.deposit_redeem.AccountableRedemptionTicket

fetch_vault_flow_events(hypersync_client, start_block, end_block)

Fetch historical Accountable RedeemRequest logs.

Parameters
  • hypersync_client (hypersync.HypersyncClient) – Configured Monad Hypersync client.

  • start_block (int) – Inclusive request-event range start.

  • end_block (int) – Inclusive request-event range end.

Returns

Event-derived pending redemption discovery hints.

Return type

collections.abc.Iterator[eth_defi.vault.flow_events.PendingVaultFlow]

__init__(vault)
Parameters

vault (ERC4626Vault) –

analyse_deposit(claim_tx_hash, deposit_ticket)

Analyse a mined ERC-4626 deposit or guarded SimpleVault wrapper.

A ticket identifies an expected SimpleVault wrapper by address. The event analyser still filters events by the underlying vault address.

Parameters
Returns

Decoded executed deposit quantities or a revert description.

Return type

Union[eth_defi.vault.deposit_redeem.DepositRedeemEventAnalysis, eth_defi.vault.deposit_redeem.DepositRedeemEventFailure]

analyse_redemption(claim_tx_hash, redemption_ticket)

Analyse a mined ERC-4626 redemption or guarded SimpleVault wrapper.

A ticket identifies the wrapper only for the transaction-target check; the decoded Withdraw event must still originate from this vault.

Parameters
Returns

Decoded executed redemption quantities or a revert description.

Return type

Union[eth_defi.vault.deposit_redeem.DepositRedeemEventAnalysis, eth_defi.vault.deposit_redeem.DepositRedeemEventFailure]

can_finish_deposit(deposit_ticket)

Synchronous deposits can be finished immediately.

Parameters

deposit_ticket (eth_defi.erc_4626.deposit_redeem.ERC4626DepositTicket) –

estimate_deposit(owner, amount, block_identifier='latest')

How many shares we get for a deposit.

Parameters
Return type

decimal.Decimal

fetch_completed_redemption_tx_hash(ticket)

Find an operator-owned terminal redemption transaction when available.

Claim-based protocols finish through finish_redemption() and do not need this lookup. Operator-finalised protocols override the hook to find and validate the transaction that paid the requested receiver.

Parameters

ticket (eth_defi.vault.deposit_redeem.RedemptionTicket) – Persisted redemption request to locate.

Returns

Terminal transaction hash, or None if the protocol has not observed one yet.

Return type

Optional[hexbytes.main.HexBytes]

finish_deposit(deposit_ticket)

Can we finish the deposit process in async vault.

  • We can claim our shares from the vault now

Parameters

deposit_ticket (eth_defi.vault.deposit_redeem.DepositTicket) –

Return type

web3.contract.contract.ContractFunction

get_deposit_approval_target()

Return the ERC-20 spender required for a deposit request.

Standard ERC-4626 and the currently supported async adapters pull denomination tokens from the vault address itself. An adapter using a different router or silo must override this method; guarded callers use it to whitelist and validate the exact approval calldata.

Returns

ERC-20 approval spender address.

Return type

eth_typing.evm.HexAddress

get_deposit_delay_over(address)

Estimate when a pending async deposit request will settle.

  • Mirror of get_redemption_delay_over() for the deposit side.

  • Used to show an estimated settlement time for unsettled deposits (e.g. in the trade-executor trade-ui table).

  • Default returns None: the protocol has no deterministic on-chain settlement schedule (e.g. operator-driven ERC-7540 vaults like Lagoon). Subclasses with a predictable settlement cadence (e.g. Ostium V1.5) override this to return an estimated UTC timestamp.

Parameters

address (Union[eth_typing.evm.HexAddress, str]) – Owner of the pending deposit request.

Returns

Naive UTC timestamp when the deposit is expected to settle, or None when no on-chain estimate is available.

Return type

Optional[datetime.datetime]

get_deposit_request_status(ticket)

Query the current status of an async deposit request.

Default implementation probes via can_finish_deposit(). Subclasses should override for more accurate status reporting (e.g. distinguishing reclaimable from pending).

Parameters

ticket (eth_defi.vault.deposit_redeem.DepositTicket) –

Return type

eth_defi.vault.deposit_redeem.AsyncVaultRequestStatus

get_max_deposit(owner)

How much we can deposit

Parameters

owner (eth_typing.evm.HexAddress) –

Return type

Optional[decimal.Decimal]

reclaim_deposit(ticket)

Return a function to recover funds after a failed async deposit settlement.

Returns None if the protocol does not support reclaim.

Parameters

ticket (eth_defi.vault.deposit_redeem.DepositTicket) –

Return type

Optional[web3.contract.contract.ContractFunction]

reclaim_withdrawal(ticket)

Return a function to recover shares after a failed async withdrawal settlement.

Returns None if the protocol does not support reclaim.

Parameters

ticket (eth_defi.vault.deposit_redeem.RedemptionTicket) –

Return type

Optional[web3.contract.contract.ContractFunction]

reconstruct_deposit_ticket(data)

Reconstruct a deposit ticket from a serialised dict.

Default returns a base DepositTicket. Subclasses override for protocol-specific ticket types.

Parameters

data (dict) –

Return type

eth_defi.vault.deposit_redeem.DepositTicket

serialize_deposit_ticket(ticket)

Serialise a deposit ticket to a dict for persistence.

The trade-executor stores this in trade.other_data so that the settlement retry module can reconstruct the ticket after a process restart.

Default implementation stores base DepositTicket fields. Subclasses override to add protocol-specific fields (e.g. settlement_id for Ostium, requestId for ERC-7540).

Parameters

ticket (eth_defi.vault.deposit_redeem.DepositTicket) –

Return type

dict