Overview
MellowAccountV1 is a minimal smart account for curators. It is owned by a single address, which can execute a batch of calls in one transaction.
Its main use is as the curator entity of a vault. You grant the account the roles a curator needs, such as the verifier CALLER_ROLE, PUSH_LIQUIDITY_ROLE or PULL_LIQUIDITY_ROLE. The owner then combines operations like Vault.pushAssets, Subvault.call and Vault.pullAssets into a single atomic transaction.
Deployment
MellowAccountV1 is an upgradeable factory entity. Instances are created through an account factory as proxies, and the implementation disables initializers in its constructor.
data is abi.encode(address owner). The function sets the owner, initializes the reentrancy guard and emits Initialized(data).
Function: multicall
- Executes each call in order, as a regular call from the account to
targetwithdata. - Returns the return data of every call.
- Reverts the whole batch if any call reverts, bubbling up the original revert reason.
- Emits
Executed(caller).
receive function.
Ownership
Ownership uses OpenZeppelinOwnableUpgradeable. The owner can transfer or renounce ownership with the standard functions. Renouncing ownership leaves the account with no one who can call multicall.
Events
Security considerations
- The account can do anything its roles allow, so protect the owner key accordingly. A multisig is recommended for production vaults.
- The account adds no checks of its own. All permission checks happen in the vault, subvault and verifier it calls.