UmamiDepositManager
Documentation for eth_defi.erc_4626.vault_protocol.umami.vault.UmamiDepositManager Python class.
- class UmamiDepositManager
Bases:
eth_defi.erc_4626.deposit_redeem.ERC4626DepositManagerUmami deposit manager with custom logic.
Attributes summary
web3Methods summary
__init__(vault)analyse_deposit(claim_tx_hash, deposit_ticket)Analyse the transaction where we claim shares
analyse_redemption(claim_tx_hash, ...)Analyse the transaction where we claim our capital back.
can_create_deposit_request(owner)Can we start depositing now.
Gains allows request redepetion only two first days of three days epoch.
can_finish_deposit(deposit_ticket)Synchronous deposits can be finished immediately.
can_finish_redeem(redemption_ticket)Synchronous redemptions can be finished immediately.
create_deposit_request(owner[, to, amount, ...])Umami has a slippage tolerance on deposits.
create_redemption_request(owner[, to, ...])Create a redemption request.
estimate_deposit(owner, amount[, ...])How many shares we get for a deposit.
estimate_redeem(owner, shares[, ...])How many denomination tokens we get for a redeem.
Get the redemption delay for this vault.
finish_deposit(deposit_ticket)Can we finish the deposit process in async vault.
finish_redemption(redemption_ticket)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)Get the redemption timer left for an address.
get_redemption_request_status(ticket)Query the current status of an async redemption request.
Does this vault support synchronous deposits?
Does this vault support synchronous deposits?
is_deposit_in_progress(owner)Check if the owner has an active deposit request.
is_redemption_in_progress(owner)Check if the owner has an active redemption request.
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 a deposit ticket from a serialised dict.
Reconstruct a redemption ticket from a serialised dict.
serialize_deposit_ticket(ticket)Serialise a deposit ticket to a dict for persistence.
serialize_redemption_ticket(ticket)Serialise a redemption ticket to a dict for persistence.
- __init__(vault)
- Parameters
vault (eth_defi.erc_4626.vault.ERC4626Vault) –
- analyse_deposit(claim_tx_hash, deposit_ticket)
Analyse the transaction where we claim shares
Return information of the actual executed price for which we got the shares for
- Parameters
deposit_ticket (Optional[eth_defi.vault.deposit_redeem.DepositTicket]) –
- Return type
Union[eth_defi.vault.deposit_redeem.DepositRedeemEventAnalysis, eth_defi.vault.deposit_redeem.DepositRedeemEventFailure]
- analyse_redemption(claim_tx_hash, redemption_ticket)
Analyse the transaction where we claim our capital back.
Return information of the actual executed price for which we got the shares for
- Parameters
redemption_ticket (Optional[eth_defi.vault.deposit_redeem.RedemptionTicket]) –
- Return type
Union[eth_defi.vault.deposit_redeem.DepositRedeemEventAnalysis, eth_defi.vault.deposit_redeem.DepositRedeemEventFailure]
- can_create_deposit_request(owner)
Can we start depositing now.
Vault can be full?
- Parameters
owner (eth_typing.evm.HexAddress) –
- Return type
- can_create_redemption_request(owner)
Gains allows request redepetion only two first days of three days epoch.
- Returns
True if can create a redemption request now
- Parameters
owner (eth_typing.evm.HexAddress) –
- Return type
- can_finish_deposit(deposit_ticket)
Synchronous deposits can be finished immediately.
- Parameters
deposit_ticket (eth_defi.erc_4626.deposit_redeem.ERC4626DepositTicket) –
- can_finish_redeem(redemption_ticket)
Synchronous redemptions can be finished immediately.
- Parameters
redemption_ticket (eth_defi.erc_4626.deposit_redeem.ERC4626RedemptionTicket) –
- create_deposit_request(owner, to=None, amount=None, raw_amount=None, check_max_deposit=True, check_enough_token=True, max_slippage=0.01, gas=30000000)
Umami has a slippage tolerance on deposits.
Umami has a 0.15% deposit fee taken from the shares minted.
Umami deposit is gas hungry
Umami deposit must have ETH attached to the transaction as something spends it there
// DEPOSIT & WITHDRAW // ------------------------------------------------------------------------------------------ /** * @notice Deposit a specified amount of assets and mint corresponding shares to the receiver * @param assets The amount of assets to deposit * @param minOutAfterFees Minimum amount out after fees * @param receiver The address to receive the minted shares * @return shares The estimate amount of shares minted for the deposited assets */ function deposit(uint256 assets, uint256 minOutAfterFees, address receiver) public payable override whenDepositNotPaused nonReentrant returns (uint256 shares) { // Check for rounding error since we round down in previewDeposit. require((shares = previewDeposit(assets)) != 0, "ZERO_SHARES"); require( totalAssets() + assets <= previewVaultCap() + asset.balanceOf(address(this)), "AssetVault: over vault cap" ); // Transfer assets to aggregate vault, transfer before minting or ERC777s could reenter. asset.safeTransferFrom(msg.sender, address(this), assets); aggregateVault.handleDeposit{ value: msg.value }(assets, minOutAfterFees, receiver, msg.sender, address(0)); emit Deposit(msg.sender, receiver, assets, shares); }
ETH spend:
/** * @notice Handles a deposit of a specified amount of an ERC20 asset into the AggregateVault from an account, with a deposit fee deducted. * @param assets The amount of the asset to be deposited. * @param account The address of the account from which the deposit will be made. */ function handleDeposit(uint256 assets, uint256 minOutAfterFees, address account, address sender, address callback) external payable onlyAssetVault { if (assets == 0) revert AmountEqualsZero(); if (account == address(0)) revert ZeroAddress(); AVStorage storage stg = _getStorage(); uint256 gas = _gasRequirement(callback != address(0)); if (msg.value < gas * tx.gasprice) revert MinGasRequirement(); // store request data uint256 key = _saveRequest(sender, account, msg.sender, callback, true, assets, minOutAfterFees); // send execution gas cost TransferUtils.transferNativeAsset(stg.rebalanceKeeper, msg.value); _executeHook(HookType.DEPOSIT_HOOK, msg.data[4:]); // emit request event Emitter(stg.emitter).emitDepositRequest(key, account, msg.sender); }
- Parameters
owner (eth_typing.evm.HexAddress) –
to (eth_typing.evm.HexAddress) –
amount (decimal.Decimal) –
raw_amount (int) –
- Return type
- create_redemption_request(owner, to=None, shares=None, raw_shares=None, check_max_deposit=True, check_enough_token=True)
Create a redemption request.
Abstracts IPOR, Lagoon, Gains, other vault redemption flow.
See
eth_defi.gains.vault.GainsVaultfor an example usage.Flow
create_redemption_request
sign and broadcast the transaction
parse success and redemption request id from the transaction
wait until the redemption delay is over
settle the redemption request
- Parameters
owner (eth_typing.evm.HexAddress) – Deposit owner.
shares (decimal.Decimal) –
Share amount in decimal.
Will be converted to raw_shares using share_token decimals.
raw_shares (int) – Raw amount in share token
to (eth_typing.evm.HexAddress) –
- Returns
Redemption request wrapper.
- Return type
- 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
- estimate_redemption_delay()
Get the redemption delay for this vault.
What is overall redemption delay: not related to the current moment
How long it takes before a redemption request is allowed
This is not specific for any address, but the general vault rule
E.g. you get 0xa592703b is an IPOR Fusion error code AccountIsLocked, if you try to instantly redeem from IPOR vaults
- Returns
Redemption delay as a
datetime.timedelta- Raises
NotImplementedError – If not implemented for this vault protocoll.
- Return type
- 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_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
- get_redemption_delay_over(address)
Get the redemption timer left for an address.
How long it takes before a redemption request is allowed
This is not specific for any address, but the general vault rule
E.g. you get 0xa592703b is an IPOR Fusion error code AccountIsLocked, if you try to instantly redeem from IPOR vaults
- Returns
UTC timestamp when the account can redeem.
Naive datetime.
- Raises
NotImplementedError – If not implemented for this vault protocoll.
- Parameters
address (Union[eth_typing.evm.HexAddress, str]) –
- Return type
- get_redemption_request_status(ticket)
Query the current status of an async redemption request.
Default implementation probes via
can_finish_redeem(). Subclasses should override for more accurate status reporting.- Parameters
- Return type
- has_synchronous_deposit()
Does this vault support synchronous deposits?
E.g. ERC-4626 vaults
- Return type
- has_synchronous_redemption()
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
- is_redemption_in_progress(owner)
Check if the owner has an active redemption 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
- reconstruct_redemption_ticket(data)
Reconstruct a redemption ticket from a serialised dict.
Async vault managers must override this to return their protocol-specific ticket subclass. The base implementation raises
NotImplementedErrorbecauseRedemptionTickethas abstract methods.- 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
- serialize_redemption_ticket(ticket)
Serialise a redemption ticket to a dict for persistence.
Default implementation stores base
RedemptionTicketfields. Subclasses override to add protocol-specific fields.- Parameters
- Return type