erc_4626.vault_protocol.nara.deposit_redeem
Documentation for eth_defi.erc_4626.vault_protocol.nara.deposit_redeem Python module.
NaraUSD+ synchronous deposits and cooldown-based redemptions.
Classes
NaraUSD+ manager with direct deposits and claimed cooldown redemptions. |
|
Parse a completed NaraUSD+ |
|
Persist a NaraUSD+ cooldown redemption request. |
- class NaraRedemptionTicket
Bases:
eth_defi.vault.deposit_redeem.RedemptionTicketPersist a NaraUSD+ cooldown redemption request.
The vault keeps one active cooldown per owner and does not assign request identifiers, so the request transaction hash provides a stable identity. The observed cooldown state binds the ticket to that specific request.
- cooldown_end: datetime.datetime
Naive UTC deadline recorded by the vault after
cooldownShares.
- get_request_id()
Return the request transaction hash as an integer identity.
- Returns
Unique integer derived from the request transaction hash.
- Return type
- __init__(vault_address, owner, to, raw_shares, tx_hash, cooldown_end, raw_assets)
- 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) –
cooldown_end (datetime.datetime) –
raw_assets (int) –
- Return type
None
- class NaraRedemptionRequest
Bases:
eth_defi.vault.deposit_redeem.RedemptionRequestParse a completed NaraUSD+
cooldownSharestransaction.- parse_redeem_transaction(tx_hashes)
Create a persistent ticket after the request succeeds.
- Parameters
tx_hashes (list[hexbytes.main.HexBytes]) – Broadcast transaction hashes; the final hash is
cooldownShares.- Returns
Persistable ticket for the later
unstakeclaim.- Return type
eth_defi.erc_4626.vault_protocol.nara.deposit_redeem.NaraRedemptionTicket
- __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 NaraDepositManager
Bases:
eth_defi.erc_4626.deposit_redeem.ERC4626DepositManagerNaraUSD+ manager with direct deposits and claimed cooldown redemptions.
- create_redemption_request(owner, to=None, shares=None, raw_shares=None, check_max_deposit=True, check_enough_token=True)
Start the owner-specific NaraUSD+ share cooldown.
- Parameters
owner (eth_typing.evm.HexAddress) – NaraUSD+ share owner initiating the cooldown.
to (Optional[eth_typing.evm.HexAddress]) – Final NaraUSD receiver, defaulting to the share owner.
shares (Optional[decimal.Decimal]) – Decimal NaraUSD+ share amount, exclusive with
raw_shares.raw_shares (Optional[int]) – Raw NaraUSD+ share amount, exclusive with
shares.check_max_deposit (bool) – Retained inherited argument; Nara controls redemption through cooldown state.
check_enough_token (bool) – Check the owner’s current NaraUSD+ balance.
- Returns
One-call cooldown request to settle through
finish_redemption().- Return type
eth_defi.erc_4626.vault_protocol.nara.deposit_redeem.NaraRedemptionRequest
- has_synchronous_redemption()
Return whether NaraUSD+ redemptions settle immediately.
- Returns
Always
Falsebecause the owner must complete a cooldown first.- Return type
- is_redemption_in_progress(owner)
Check whether an owner has an unclaimed NaraUSD+ cooldown.
- Parameters
owner (eth_typing.evm.HexAddress) – Share owner to inspect.
- Returns
Truewhen the vault records a non-zero cooldown deadline.- Return type
- can_create_deposit_request(owner)
Check NaraUSD+’s current ERC-4626 deposit maximum.
- Parameters
owner (eth_typing.evm.HexAddress) – Prospective deposit receiver.
- Returns
Truewhen the current maximum is positive.- Return type
- can_create_redemption_request(owner)
Check whether the owner can start a NaraUSD+ cooldown.
- Parameters
owner (eth_typing.evm.HexAddress) – Share owner to inspect.
- Returns
Truewhen the owner has shares and no active cooldown.- Return type
- estimate_redemption_delay()
Read the currently configured NaraUSD+ cooldown duration.
- Returns
Current cooldown as a timedelta.
- Return type
- fetch_cooldown(address)
Read an owner’s current NaraUSD+ cooldown state.
- get_redemption_delay_over(address)
Return an owner’s cooldown expiry, when one exists.
- Parameters
address (Union[eth_typing.evm.HexAddress, str]) – NaraUSD+ share owner.
- Returns
Naive UTC cooldown expiry, or
Nonewhen no claim is pending.- Return type
- can_finish_redeem(redemption_ticket)
Check whether a NaraUSD+ cooldown claim can now be submitted.
- Parameters
redemption_ticket (eth_defi.erc_4626.vault_protocol.nara.deposit_redeem.NaraRedemptionTicket) – Persisted cooldown request.
- Returns
Truewhen the current chain timestamp has reached the deadline.- Return type
- reconstruct_redemption_ticket(data)
Reconstruct a NaraUSD+ cooldown ticket after a process restart.
- Parameters
data (dict) – Data produced by
serialize_redemption_ticket().- Returns
NaraUSD+ cooldown ticket.
- Return type
eth_defi.erc_4626.vault_protocol.nara.deposit_redeem.NaraRedemptionTicket
- serialize_redemption_ticket(ticket)
Serialise a NaraUSD+ ticket with its exact cooldown identity.
- Parameters
ticket (eth_defi.erc_4626.vault_protocol.nara.deposit_redeem.NaraRedemptionTicket) – NaraUSD+ cooldown ticket.
- Returns
JSON-compatible persistent ticket data.
- Return type
- get_redemption_request_status(ticket)
Report whether a NaraUSD+ cooldown is pending or claimable.
- Parameters
ticket (eth_defi.erc_4626.vault_protocol.nara.deposit_redeem.NaraRedemptionTicket) – NaraUSD+ cooldown ticket.
- Returns
pendingbefore maturity,claimableafterwards, ornonewhen the cooldown was claimed, removed, or superseded by another cooldown for the same owner.- Return type
- finish_redemption(redemption_ticket)
Build the NaraUSD+ post-cooldown claim transaction.
- Parameters
redemption_ticket (eth_defi.erc_4626.vault_protocol.nara.deposit_redeem.NaraRedemptionTicket) – Matured cooldown ticket.
- Returns
unstakecontract call that sends NaraUSD to the requested receiver.- Return type
web3.contract.contract.ContractFunction
- __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
claim_tx_hash (Union[hexbytes.main.HexBytes, str]) – Mined deposit transaction hash.
deposit_ticket (Optional[eth_defi.vault.deposit_redeem.DepositTicket]) – Optional ticket whose owner identifies a guarded wrapper.
- 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
Withdrawevent must still originate from this vault.- Parameters
claim_tx_hash (Union[hexbytes.main.HexBytes, str]) – Mined redemption transaction hash.
redemption_ticket (Optional[eth_defi.vault.deposit_redeem.RedemptionTicket]) – Optional ticket whose owner identifies a guarded wrapper.
- 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
owner (eth_typing.evm.HexAddress) –
amount (decimal.Decimal) –
block_identifier (Union[Literal['latest', 'earliest', 'pending', 'safe', 'finalized'], eth_typing.evm.BlockNumber, eth_typing.evm.Hash32, eth_typing.encoding.HexStr, int]) –
- Return type
- estimate_redeem(owner, shares, block_identifier='latest')
How many denomination tokens we get for a redeem.
- Parameters
owner (eth_typing.evm.HexAddress) –
shares (decimal.Decimal) –
block_identifier (Union[Literal['latest', 'earliest', 'pending', 'safe', 'finalized'], eth_typing.evm.BlockNumber, eth_typing.evm.Hash32, eth_typing.encoding.HexStr, int]) –
- 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]
- fetch_vault_flow_events(hypersync_client, start_block, end_block)
Fetch asynchronous vault request events from an indexed backend.
The base implementation returns no events for vault managers that do not have a two-phase deposit or redemption flow.
- Parameters
- Returns
Iterator of protocol-neutral pending vault flow events.
- Return type
collections.abc.Iterator[eth_defi.vault.flow_events.PendingVaultFlow]
- 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
- 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_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. distinguishingreclaimablefrompending).- Parameters
ticket (eth_defi.vault.deposit_redeem.DepositTicket) –
- Return type
- get_max_deposit(owner)
How much we can deposit
- Parameters
owner (eth_typing.evm.HexAddress) –
- Return type
- has_synchronous_deposit()
Does this vault support synchronous deposits?
E.g. ERC-4626 vaults
- Return type
- is_deposit_in_progress(owner)
Check if the owner has an active deposit request.
- Parameters
owner (eth_typing.evm.HexAddress) – Owner of the shares
- Returns
True if there is an active redemption request
- 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]
- reclaim_withdrawal(ticket)
Return a function to recover shares after a failed async withdrawal settlement.
Returns
Noneif the protocol does not support reclaim.- Parameters
- 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
- serialize_deposit_ticket(ticket)
Serialise a deposit ticket to a dict for persistence.
The trade-executor stores this in
trade.other_dataso that the settlement retry module can reconstruct the ticket after a process restart.Default implementation stores base
DepositTicketfields. Subclasses override to add protocol-specific fields (e.g.settlement_idfor Ostium,requestIdfor ERC-7540).- Parameters
ticket (eth_defi.vault.deposit_redeem.DepositTicket) –
- Return type