flowchart TD
UltraVault --> BaseControlledAsyncRedeem
BaseControlledAsyncRedeem --> AccessControl
BaseControlledAsyncRedeem --> ERC4626
ERC4626 --> ERC20
BaseControlledAsyncRedeem --> Pausable
BaseControlledAsyncRedeem --> RedeemQueue
BaseControlledAsyncRedeem --> TimelockedUUPS
TimelockedUUPS --> UUPSUpgradeable
UltraVault inherits from BaseControlledAsyncRedeem.
BaseControlledAsyncRedeemprovides:- ERC-4626-compatible deposit/mint interfaces
- async redeem request/fulfillment/claim accounting
- support for multi-asset deposits and withdrawals
- role-based access control
- pause controls
- upgrade management
UltraVaultadds:- holding assets on
fundsHolderaddress instead of in the vault itself - oracle-driven
totalAssetscalculation based on the published share price - fee configuration and collection
- holding assets on
Both contracts use explicit ERC-7201-style storage slots. This is relevant for upgrade safety and clear storage ownership per module.
- User entry points:
deposit,mint,requestRedeem,withdraw,redeem. - Redeem accounting: pending vs claimable tracked via
RedeemQueue. - Asset conversion: base asset <-> supported assets through
rateProvider. - Valuation: share-to-asset quote through vault oracle.
- Fee engine: management/performance/withdrawal logic in
UltraVault.
BaseControlledAsyncRedeem exposes hooks:
-
beforeDeposit/afterDeposit -
beforeWithdraw/afterWithdraw -
beforeRequestRedeem -
beforeFulfillRedeem/afterFulfillRedeem -
UltraVaultusesafterDeposithook to transfer assets tofundsHolderright after deposit. -
UltraVaultusesbeforeFulfillRedeemhook to transfer assets in fromfundsHolderright before redeem fulfillment.
Redeem lifecycle keeps two states per controller + asset:
- Pending redeem: requested, not yet settled.
- Claimable redeem: settled by operator, available for withdrawal/redeem.
This enables batched operational settlement while keeping user claim accounting on-chain.
- Upgradeability uses timelocked UUPS pattern.
- Critical address updates (rate provider/oracle/funds holder) follow propose/accept windows.
- Accepting critical updates pauses the vault to require operational verification before reopening deposits.