Shares
MORE Vault shares are standard ERC‑20 tokens that represent a pro‑rata claim on the vault’s Net Asset Value (NAV). The generic core mints and burns shares. Strategy facets only book gains or losses that flow into the NAV calculation.
How deposits and withdrawals are handled at a glance:
Deposits
Assets are transferred to the vault and in return newly minted shares are transferred to the user.
Withdrawals
A two‑step process, requestRedeem()
then redeem()
, guarantees withdrawal price integrity, provides strategists with a timelock window for exiting positions and defends against flash‑loan arbitrage.
Share Price
The share price of all MORE Vaults is expressed in the vault’s underlying accounting asset, defined at vault creation.
sharePrice = totalAssets / totalSupply
The core recalculates sharePrice
in real-time. It is updated:
Upon reallocation or reabalance
submitActions()
: the composition of the vault and its assets are updated on third party protocols.Upon passive yield generation
totalAssets()
: as rewards or yield accrues, a view function accounts for profit or loss automatically.
Deposits
Strategists may choose how deposits are handled on a per-vault basis. Most choose to batch deposits for two reasons:
Prevent MEV: depositors cannot front‑run a strategy rebalance to scoop a free NAV increase.
Reduce gas: hundreds of deposits mint in one loop rather than individually.
Deposits are handled in a single step, but may be handled in two ways:
Deposit
deposit(amount, receiver)
in underlying asset,Deposit in any asset
deposit(address[] tokens, uint256[] assets, address receiver)
if the assets are enabled as depositable. Depositors can specify an array of tokens and amountsassets
.
Rounding follows ERC‑4626 guidelines – round‑down for mints, round‑up for burns – to ensure the vault never over‑issues claims.
Withdrawals
Withdrawals can only be initiated for the underlying asset. The vault separates intent from settlement to protect long‑term LPs.
Timelock
Every vault owner specifies withdrawTimelock
(e.g., 4 hours) upon vault creation. Once a new strategy facet is added or a strategy update occurs, withdrawals remain open so users can exit. Timelocks can be updated by Vault Owners or Curators, but this action itself is timelocked by the previous timelock.
RequestRedeem
Burns no shares yet — only records
RedeemRequest{shares, owner, minRedeemTime}
whereminRedeemTime
=block.timestamp
+withdrawTimelock
.Free to cancel or increase shares while pending.
If withdrawal amount is increased during the timelock, the previous request is canceled and the withdrawal timelock resets.
Redeem
After the timelock expires, a user must call redeem(uint256 shares, address receiver, address owner)
in order to complete the withdrawal process. When redeem is called:
Calculates
assetsOut = shares × sharePrice
.Burns
shares
from the owner.Transfers
assetsOut
to the receiver.
If the vault’s liquid balance < assetsOut
, the transaction reverts.
Last updated