The system separates:
- Vault valuation layer: share value and
totalAssetspricing. - Asset conversion layer: conversion between base asset and supported input/output assets.
This allows independent control of NAV pricing and token conversion logic.
Provides base/quote prices and quote retrieval:
setPrice: instant updatesscheduleLinearPriceUpdate: gradual linear updates over a vesting periodgetQuote: compute quote amount using current (possibly vested) price
UltraVault.totalAssets() relies on oracle quote of:
inAmount = totalSupply()base = share tokenquote = vault asset
Operational controller that updates oracle prices and enforces guardrails:
- per-vault
jumplimit (max update-to-update move) - per-vault
drawdownlimit (max fall from high-water mark) - admin-per-vault authorization model
If update breaches limits, manager attempts to pause the vault.
Operationally, share price updates are expected to be vested in almost all cases.
- linear vesting updates are the default path
- instant updates are expected to remain mainly for drawdown handling
- this supports smoother user experience while preserving fast downside reflection
Maps each supported asset to either:
- pegged conversion (decimals normalization only), or
- external
IRateProviderconversion contract
Used by vault conversion paths:
_convertToUnderlying(asset, assets)_convertFromUnderlying(asset, baseAssets)
This supports multi-asset deposits/redeems while preserving base accounting.
- User can deposit/redeem in supported asset.
- Vault converts asset amount to/from base accounting units using rate provider.
- Vault share valuation uses oracle price feed for
totalAssets. - Price manager can enforce movement limits and pause on suspicious moves.
- Vault operators perform internal strategy PnL and yield calculations, then publish updated share prices regularly.
- Oracle values may include off-chain assessments and conservative estimates.
- Conversion correctness depends on each configured external rate provider.