Audits
v2-core
v2-periphery
Security Model
Dual Merkle Hook Validation
All keeper operations are gated by a dual Merkle tree system. A hook can only execute if the exact combination of hook address + parameters matches a leaf in one of two onchain roots:| Root | Controlled By | Timelock | Scope |
|---|---|---|---|
| Global hooks root | SuperGovernor (governance) | 15 minutes | Protocol-wide hooks without beneficiary-specific arguments |
| Strategy hooks root | Curator (primary strategist) | 7 days | Vault-specific hooks including beneficiary-specific arguments |
PPS Oracle Security
Price-per-share updates pass through multiple validation layers before acceptance:- ECDSAPPSOracle validates EIP-712 signatures, quorum (≥ 2/3 weighted stake), and nonce binding
- SuperVaultAggregator checks future timestamps, pause state, and staleness
- Strategy-level checks enforce monotonicity, rate limiting, deviation bounds, dispersion thresholds, and upkeep balance
- PPS dispersion exceeds threshold (high standard deviation among validator submissions)
- PPS deviation is too large (absolute change from current onchain value)
- Validator participation rate falls below minimum
- Updates are stale beyond the configured window
Access Controls
| Role | Permission |
|---|---|
| SuperGovernor | Protocol governance with strategy-level overrides; updates global hook root |
| Primary Strategist | Full vault control: hook whitelisting, fees, deposit/redemption processing |
| Secondary Strategists | Day-to-day operations, everything except hook whitelisting and fees |
| Guardians | Threat monitoring network; veto powers for hook root updates |
| Validators | $UP stakers that attest to PPS updates; subject to slashing for misreporting |
Timelock Protections
| Change Type | Timelock |
|---|---|
| Primary strategist updates | 7 days |
| Strategy hooks root | 7 days |
| Global hooks root | 15 minutes |
| Fee configuration changes | 7 days |
| Emergency withdrawal activation | 7 days |
| Post-unpause skim | 12 hours |