erc_7540.deposit_redeem
Documentation for eth_defi.erc_7540.deposit_redeem Python module.
Protocol-neutral ERC-7540 deposit and redemption flows.
Classes
Protocol-neutral ERC-7540 asynchronous deposit and redemption flow. |
|
Asynchronous deposit request for ERC-7540 vaults. |
|
Asynchronous deposit request for ERC-7540 vaults. |
|
Asynchronous redemption request for ERC-7540 vaults. |
|
Asynchronous redemption request for ERC-7540 vaults. |
- class ERC7540DepositManager
Bases:
eth_defi.vault.deposit_redeem.VaultDepositManagerProtocol-neutral ERC-7540 asynchronous deposit and redemption flow.
Supported simulation path
This manager builds standard ERC-7540 request and claim calls. Settlement is operator-specific, so the generic implementation deliberately has no Anvil settlement driver. Protocol adapters such as Lagoon may subclass the manager and implement
force_settle().Known limitations
The generic manager does not model protocol-specific access policies, settlement roles, partial settlements, cancellation or reclaim.
See the canonical ERC-7540 specification for the request lifecycle.
Initialise the manager for an ERC-7540 vault adapter.
Protocol-specific subclasses may reuse this constructor after validating a narrower vault type.
- Parameters
vault – Protocol adapter implementing the ERC-7540 vault interface.
- deposit_request_class
Request wrapper used for deposits. Protocol subclasses may replace it.
alias of
eth_defi.erc_7540.deposit_redeem.ERC7540DepositRequest
- redemption_request_class
Request wrapper used for redemptions. Protocol subclasses may replace it.
alias of
eth_defi.erc_7540.deposit_redeem.ERC7540RedemptionRequest
- __init__(vault)
Initialise the manager for an ERC-7540 vault adapter.
Protocol-specific subclasses may reuse this constructor after validating a narrower vault type.
- Parameters
vault (eth_defi.erc_7540.vault.ERC7540Vault) – Protocol adapter implementing the ERC-7540 vault interface.
- fetch_vault_flow_events(hypersync_client, start_block, end_block)
Fetch standard ERC-7540 request events using Hypersync.
ERC-7540 vaults emit
DepositRequestfor deposit requests andRedeemRequestfor redemption requests. Protocol-specific legacy events must be handled by a protocol manager subclass.- Parameters
- Returns
Iterator of indexed pending vault flow events in chain order.
- Return type
collections.abc.Iterator[eth_defi.vault.flow_events.PendingVaultFlow]
- create_deposit_request(owner, to=None, amount=None, raw_amount=None, check_max_deposit=True, check_enough_token=True)
Build the standard ERC-7540
requestDeposittransaction.- Parameters
owner (eth_typing.evm.HexAddress) – Controller and owner of the request.
to (eth_typing.evm.HexAddress) – Unsupported separate receiver; ERC-7540 requests use
owner.amount (decimal.Decimal) – Human-readable denomination-token amount.
raw_amount (int) – Raw denomination-token amount, overriding
amount.check_max_deposit – Reserved for parity with the common manager API.
check_enough_token – Reserved for parity with the common manager API.
- Returns
Request wrapper ready for signing and parsing.
- Raises
VaultFlowUnavailable – If the vault’s optional pause view reports that requests are paused.
- Return type
- create_redemption_request(owner, to=None, shares=None, raw_shares=None, check_max_deposit=True, check_enough_token=True)
Build the standard ERC-7540
requestRedeemtransaction.- Parameters
owner (eth_typing.evm.HexAddress) – Controller and owner of the request.
to (eth_typing.evm.HexAddress) – Unsupported separate receiver; ERC-7540 requests use
owner.shares (decimal.Decimal) – Human-readable vault-share amount.
raw_shares (int) – Raw vault-share amount, overriding
shares.check_max_deposit – Reserved for parity with the common manager API.
check_enough_token – Whether to verify that the owner still holds the requested shares.
- Returns
Request wrapper ready for signing and parsing.
- Return type
- finish_deposit(deposit_ticket)
Build the ERC-7540 transaction that claims deposit shares.
The request must already be settled. The ticket supplies the controller, receiver and settled asset amount.
- Parameters
deposit_ticket (eth_defi.vault.deposit_redeem.DepositTicket) – Settled asynchronous deposit ticket.
- Returns
Bound three-argument
depositclaim function.- Return type
web3.contract.contract.ContractFunction
- can_finish_deposit(deposit_ticket)
Check whether a deposit request is ready to claim.
The ERC-7540
claimableDepositRequestview returns a positive asset amount after the operator has settled the request.- Parameters
deposit_ticket (eth_defi.erc_7540.deposit_redeem.ERC7540DepositTicket) – Deposit request to inspect.
- Returns
Truewhen the request has claimable assets.- Return type
- can_finish_redeem(redemption_ticket)
Check whether a redemption request is ready to claim.
The ERC-7540
claimableRedeemRequestview returns a positive share amount after the operator has settled the request.- Parameters
redemption_ticket (eth_defi.erc_7540.deposit_redeem.ERC7540RedemptionTicket) – Redemption request to inspect.
- Returns
Truewhen the request has claimable shares.- Return type
- serialize_deposit_ticket(ticket)
Serialise an ERC-7540 deposit ticket.
The generic base ticket payload is extended with the ERC-7540 request identifier needed for later status checks.
- Parameters
ticket (eth_defi.erc_7540.deposit_redeem.ERC7540DepositTicket) – Deposit ticket to serialise.
- Returns
Persistent ticket data including
vault_request_id.- Return type
- reconstruct_deposit_ticket(data)
Reconstruct a deposit ticket from persistent data.
Both the current string form and the legacy integer form of raw token amounts are accepted for backwards compatibility.
- Parameters
data (dict) – Data produced by
serialize_deposit_ticket().- Returns
Reconstructed ERC-7540 deposit ticket.
- Return type
- serialize_redemption_ticket(ticket)
Serialise an ERC-7540 redemption ticket.
The ERC-7540 request identifier is retained so a restarted process can query the request-specific claimable amount.
- Parameters
ticket (eth_defi.erc_7540.deposit_redeem.ERC7540RedemptionTicket) – Redemption ticket to serialise.
- Returns
Persistent ticket data including
vault_request_id.- Return type
- reconstruct_redemption_ticket(data)
Reconstruct a redemption ticket from persistent data.
Both the current string form and the legacy integer form of raw share amounts are accepted for backwards compatibility.
- Parameters
data (dict) – Data produced by
serialize_redemption_ticket().- Returns
Reconstructed ERC-7540 redemption ticket.
- Return type
- get_deposit_request_status(ticket)
Map ERC-7540 deposit state to the generic status enum.
Check the request-specific claimable amount first: an aggregate
pendingDepositRequest(0, owner)query lumps together all of the owner’s requests, so probing it first would report an already-settled request as still pending whenever another request is outstanding. The generic interface has no reclaim signal, soreclaimableis never returned.- Parameters
ticket (eth_defi.erc_7540.deposit_redeem.ERC7540DepositTicket) – Deposit request to inspect.
- Returns
Claimable, pending or empty request status.
- Return type
- get_redemption_request_status(ticket)
Map ERC-7540 redemption state to the generic status enum.
Request-specific claimable is checked before the aggregate pending query for the same reason as
get_deposit_request_status().- Parameters
ticket (eth_defi.erc_7540.deposit_redeem.ERC7540RedemptionTicket) – Redemption request to inspect.
- Returns
Claimable, pending or empty request status.
- Return type
- can_create_deposit_request(owner)
Return whether the vault is currently open for a deposit request.
The generic ERC-7540 layer checks only the optional pause flag. Protocol-specific admission policies belong in manager subclasses.
- Parameters
owner (eth_typing.evm.HexAddress) – Request owner and controller used by
requestDeposit.- Returns
Falsewhen the vault reports that requests are paused.- Return type
- can_create_redemption_request(owner)
Return whether the vault is currently open for a redemption request.
The generic ERC-7540 layer checks only the optional pause flag; protocol-specific redemption rules belong in manager subclasses.
- Parameters
owner (eth_typing.evm.HexAddress) – Request owner and controller.
- Returns
Falsewhen the vault reports that requests are paused.- Return type
- has_synchronous_deposit()
Report that deposits use the asynchronous request lifecycle.
- Returns
Always
Falsefor ERC-7540.- Return type
- has_synchronous_redemption()
Report that redemptions use the asynchronous request lifecycle.
- Returns
Always
Falsefor ERC-7540.- Return type
- estimate_redemption_delay()
Return no deterministic protocol-level redemption delay.
Settlement timing is controlled by each vault operator and is outside the ERC-7540 standard.
- Returns
Zero-duration sentinel for an unspecified delay.
- Return type
- get_redemption_delay_over(address)
Return the legacy sentinel for an unknown account deadline.
Generic ERC-7540 vaults do not expose a deterministic per-account settlement deadline.
- Parameters
address (Union[eth_typing.evm.HexAddress, str]) – Request controller.
- Returns
Naive Unix epoch sentinel retained for backwards compatibility.
- Return type
- is_redemption_in_progress(owner)
Check whether a controller has pending redemption shares.
Request identifier zero aggregates the controller’s pending redemption shares under ERC-7540.
- Parameters
owner (eth_typing.evm.HexAddress) – Controller address to inspect.
- Returns
Trueif the controller has pending redemption shares.- Return type
- is_deposit_in_progress(owner)
Check pending ERC-7540 request.
Query
pendingDepositRequest(0, owner)when the request identifier is not known. Per ERC-7540, request identifier zero aggregates the controller’s pending deposit assets. A value greater than zero means at least one request remains unsettled.- Parameters
owner (eth_typing.evm.HexAddress) – Controller address to inspect.
- Returns
Trueif the controller has pending deposit assets.- Return type
- finish_redemption(redemption_ticket)
Build the ERC-7540 transaction that claims redeemed assets.
The request must already be settled. The ticket supplies the controller, receiver and settled share amount.
- Parameters
redemption_ticket (eth_defi.vault.deposit_redeem.RedemptionTicket) – Settled asynchronous redemption ticket.
- Returns
Bound three-argument
redeemclaim function.- Return type
web3.contract.contract.ContractFunction
- estimate_deposit(owner, amount, block_identifier='latest')
Estimate shares for a denomination-token amount.
ERC-7540 retains the ERC-4626
convertToSharespreview used here; the estimate does not imply that the request is currently admissible.- Parameters
owner (eth_typing.evm.HexAddress) – Request controller. The standard preview is not owner-specific.
amount (decimal.Decimal) – Human-readable denomination-token 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 the conversion rate.
- Returns
Estimated human-readable share amount.
- Return type
- estimate_redeem(owner, shares, block_identifier='latest')
Estimate denomination tokens for a vault-share amount.
ERC-7540 retains the ERC-4626
convertToAssetspreview used here; the estimate does not imply that the request is currently admissible.- Parameters
owner (eth_typing.evm.HexAddress) – Request controller. The standard preview is not owner-specific.
shares (decimal.Decimal) – Human-readable vault-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 the conversion rate.
- Returns
Estimated human-readable denomination-token amount.
- Return type
- analyse_deposit(claim_tx_hash, deposit_ticket)
Analyse a completed ERC-7540 deposit claim.
The method decodes the ERC-4626
Depositevent emitted by the second-stage claim transaction. Protocol subclasses may extend the accepted event signatures for legacy deployments.- Parameters
claim_tx_hash (Union[hexbytes.main.HexBytes, str]) – Deposit-claim transaction hash.
deposit_ticket (Optional[eth_defi.vault.deposit_redeem.DepositTicket]) – Original asynchronous request ticket.
- Returns
Decoded token movement, or a failed-transaction diagnostic.
- Raises
RuntimeError – If a successful receipt does not contain an accepted event.
- Return type
Union[eth_defi.vault.deposit_redeem.DepositRedeemEventAnalysis, eth_defi.vault.deposit_redeem.DepositRedeemEventFailure]
- get_deposit_event_signatures()
Return accepted claim-deposit event signatures.
ERC-7540 claims retain the ERC-4626
Depositevent shape.- Returns
Standard ERC-4626
Deposittopic emitted by ERC-7540 claims.- Return type
- analyse_redemption(claim_tx_hash, redemption_ticket)
Analyse a completed ERC-7540 redemption claim.
The method decodes the ERC-4626
Withdrawevent emitted by the second-stage claim transaction. Protocol subclasses may extend the accepted event signatures for legacy deployments.- Parameters
claim_tx_hash (Union[hexbytes.main.HexBytes, str]) – Redemption-claim transaction hash.
redemption_ticket (Optional[eth_defi.vault.deposit_redeem.RedemptionTicket]) – Original asynchronous request ticket.
- Returns
Decoded token movement, or a failed-transaction diagnostic.
- Raises
RuntimeError – If a successful receipt does not contain an accepted event.
- Return type
Union[eth_defi.vault.deposit_redeem.DepositRedeemEventAnalysis, eth_defi.vault.deposit_redeem.DepositRedeemEventFailure]
- get_redemption_event_signatures()
Return accepted claim-redemption event signatures.
ERC-7540 claims retain the ERC-4626
Withdrawevent shape.- Returns
Standard ERC-4626
Withdrawtopic emitted by ERC-7540 claims.- Return type
- 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
Noneif the protocol has not observed one yet.- Return type
Optional[hexbytes.main.HexBytes]
- force_settle(ticket)
Force the selected ticket forward on an Anvil simulation.
Synchronous managers do not require settlement and return a no-op result when called with None. Asynchronous managers must override this method and supply their request ticket.
- Parameters
ticket (Optional[Union[eth_defi.vault.deposit_redeem.DepositTicket, eth_defi.vault.deposit_redeem.RedemptionTicket]]) – Pending async request ticket, or None for a synchronous flow.
- Returns
Settlement outcome with before/after status and transaction hashes.
- Raises
UnsupportedVaultSimulation – If the provider is not Anvil or an async manager lacks a driver.
- Return type
- 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
- 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-uitable).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
Nonewhen no on-chain estimate is available.- Return type
- get_max_deposit(owner)
How much we can deposit
- Parameters
owner (eth_typing.evm.HexAddress) –
- Return type
- reclaim_deposit(ticket)
Return a function to recover funds after a failed async deposit settlement.
Returns
Noneif the protocol does not support reclaim.- Parameters
ticket (eth_defi.vault.deposit_redeem.DepositTicket) –
- Return type
Optional[web3.contract.contract.ContractFunction]
- class ERC7540DepositRequest
Bases:
eth_defi.vault.deposit_redeem.DepositRequestAsynchronous deposit request for ERC-7540 vaults.
- parse_deposit_transaction(tx_hashes)
Parse one standard ERC-7540 deposit-request transaction.
The final receipt must contain exactly one standard
DepositRequestevent from which the request identifier is read.- Parameters
tx_hashes (list[hexbytes.main.HexBytes]) – Transaction hashes belonging to the request.
- Returns
Parsed request ticket with its ERC-7540 request identifier.
- Raises
CannotParseRedemptionTransaction – If the receipt does not contain exactly one
DepositRequestevent.- Return type
- __init__(vault, owner, to, amount, raw_amount, funcs, gas=None, value=None)
- Parameters
vault (VaultBase) –
owner (eth_typing.evm.HexAddress) –
to (eth_typing.evm.HexAddress) –
amount (decimal.Decimal) –
raw_amount (int) –
funcs (list[web3.contract.contract.ContractFunction]) –
value (Optional[decimal.Decimal]) –
- Return type
None
- broadcast(from_=None, gas=None, check_value=True)
Broadcast all the transactions in this request.
- Parameters
from – Address to send the transactions from
from_ (eth_typing.evm.HexAddress) –
- Returns
List of transaction hashes
- Raises
TransactionAssertionError – If any of the transactions revert
- Return type
- class ERC7540DepositTicket
Bases:
eth_defi.vault.deposit_redeem.DepositTicketAsynchronous deposit request for ERC-7540 vaults.
- __init__(vault_address, owner, to, raw_amount, tx_hash, gas_used, block_number, block_timestamp, request_id)
- Parameters
vault_address (eth_typing.evm.HexAddress) –
owner (eth_typing.evm.HexAddress) –
to (eth_typing.evm.HexAddress) –
raw_amount (int) –
tx_hash (hexbytes.main.HexBytes) –
gas_used (int) –
block_number (int) –
block_timestamp (datetime.datetime) –
request_id (int) –
- Return type
None
- class ERC7540RedemptionRequest
Bases:
eth_defi.vault.deposit_redeem.RedemptionRequestAsynchronous redemption request for ERC-7540 vaults.
- parse_redeem_transaction(tx_hashes)
Parse one standard ERC-7540 redemption-request transaction.
The final receipt must contain exactly one standard
RedeemRequestevent from which the request identifier is read.- Parameters
tx_hashes (list[hexbytes.main.HexBytes]) – Transaction hashes belonging to the request.
- Returns
Parsed request ticket with its ERC-7540 request identifier.
- Raises
CannotParseRedemptionTransaction – If the receipt does not contain exactly one
RedeemRequestevent.- Return type
- __init__(vault, owner, to, shares, raw_shares, funcs)
- Parameters
vault (VaultBase) –
owner (eth_typing.evm.HexAddress) –
to (eth_typing.evm.HexAddress) –
shares (decimal.Decimal) –
raw_shares (int) –
funcs (list[web3.contract.contract.ContractFunction]) –
- Return type
None
- broadcast(from_=None, gas=1000000)
Broadcast all the transactions in this request.
- Parameters
from – Address to send the transactions from
gas (int) – Gas limit to use for each transaction
from_ (eth_typing.evm.HexAddress) –
- Returns
List of transaction hashes
- Return type
list[hexbytes.main.HexBytes]
- class ERC7540RedemptionTicket
Bases:
eth_defi.vault.deposit_redeem.RedemptionTicketAsynchronous redemption request for ERC-7540 vaults.
- __init__(vault_address, owner, to, raw_shares, tx_hash, request_id)
- Parameters
vault_address (eth_typing.evm.HexAddress) –
owner (eth_typing.evm.HexAddress) –
to (eth_typing.evm.HexAddress) –
raw_shares (int) –
tx_hash (hexbytes.main.HexBytes) –
request_id (int) –
- Return type
None