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_max_deposit(owner)How much we can deposit
get_redemption_delay_over(address)Get the redemption timer left for an address.
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.
- 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
- __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
claim_tx_hash (hexbytes.main.HexBytes | str) –
deposit_ticket (eth_defi.vault.deposit_redeem.DepositTicket | None) –
- Return type
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
claim_tx_hash (hexbytes.main.HexBytes | str) –
redemption_ticket (eth_defi.vault.deposit_redeem.RedemptionTicket | None) –
- Return type
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_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_max_deposit(owner)
How much we can deposit
- Parameters
owner (eth_typing.evm.HexAddress) –
- Return type
decimal.Decimal | None
- 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
- 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