UserVault
UserVault extends BaseVault to support permissionless, curator-managed funds. Anyone can create a UserVault through the UserVaultFactory.
Key Features
Curator Governance
The vault creator (curator) manages target weights with a time-lock mechanism:- Curator calls
proposeWeights()with new token/weight arrays - The proposal is recorded on-chain with a timestamp
- After the time-lock delay,
executeWeightChange()makes the new weights active - Curator can then trigger
rebalance()to align holdings
Approved Tokens Only
UserVaults can only hold tokens from the factory’s approved token list. This prevents curators from adding unpriced, illiquid, or malicious tokens to their portfolio.Curator Fees
The curator earns a configurable share of all fees (up to 80%). The fee share is set at vault creation and cannot be changed.Idle Cash Support
Target weights can sum to less than 100% (10,000 BPS). The unallocated portion remains as idle tiltUSDC in the vault. Weights must sum to between 1 and 10,000 BPS.UserVaultFactory
The factory deploys UserVault instances as BeaconProxy clones. It handles:- Validation: ensures valid weights, approved tokens, and minimum seed deposit
- Deployment: creates the BeaconProxy and initializes the vault
- Registration: adds the vault to
VaultRegistry - Authorization: registers the vault on
RebalanceEngine - Fee setup: configures the curator fee split in
FeeManager
Creation Requirements
| Parameter | Description |
|---|---|
| Name | Fund display name |
| Symbol | Share token symbol (auto-prefixed with “tilt”) |
| Tokens | Array of approved token addresses |
| Weights | Array of weights in BPS (must sum to 1-10000) |
| Curator Fee | BPS share of fees for curator (max enforced by factory) |
| Seed Deposit | Minimum tiltUSDC deposit to initialize |
| Creation Fee | ETH fee paid to the protocol |
Beacon Upgrades
All UserVaults share a single implementation viaUpgradeableBeacon. The protocol owner can upgrade the implementation, and all existing vaults inherit the new logic while preserving their state.