Core contractsCreatorOVault
CreatorOVault
The per-creator ERC-4626 vault that holds the creator coin, mints vault claims, and allocates idle funds to yield strategies.
Each creator gets one CreatorOVault. It holds deposited creator coins, mints vault claims (), and tracks price per share as strategies earn. Most holders never touch it directly: they use the wrapper, which turns vault claims into the tradable ShareOFT ().
At a glance
| Role | Holds the creator coin, mints , allocates to strategies, reports profit and loss |
| Deployed | Per creator, on Base |
| Standard(s) | ERC-4626 with protocol extensions (Yearn V3-style strategy accounting), ERC-20 Permit |
| Key relationships | CreatorOVaultWrapper, CreatorShareOFT, Registry4626, Gauge controller |
This is not a vanilla drop-in ERC-4626 vault. Read ERC-4626 deviations and the integration guide before routing to it.
How it works
- Someone deposits the creator coin and receives vault claims ().
- The keeper deploys idle funds to strategies and calls
report()to book profit or loss, which moves price per share. - Holders redeem for the creator coin. Large exits go through a queue.
New vaults use the Phase 3 earn mix of Charm 90% · idle 10%. Charm is the yield leg; the auction and LP are arms, not strategies. The first deposit funds the vault itself, not these legs. See Earn mix.
Ajna strategy code still exists and can be added with addStrategy, but new launches do not use it (Ajna weight 0).
First deposit
The vault cannot activate or finalize until it receives a first deposit of 100,000,000 creator coins (MINIMUM_FIRST_DEPOSIT = 100,000,000e18). Anything smaller reverts FirstDepositTooSmall. The activation batcher accepts only that amount.
The $499 launch fee unlocks deploy; it does not replace this deposit. See Strategy bundle and Activate vault.
Key functions
Holders
| Function | What it does | Who can call |
|---|---|---|
deposit(assets, receiver) / mint(shares, receiver) | Deposit creator coin for | Anyone, when not paused or shut down, whitelisted if the whitelist is on |
redeem(shares, receiver, owner) / withdraw(assets, receiver, owner) | Exit below the large-withdrawal threshold | Share owner or approved spender |
redeem(..., maxLoss) / withdraw(..., maxLoss) | Same, with a Yearn-style loss cap in bps | Share owner or approved spender |
queueWithdrawal / claimQueuedWithdrawal / cancelQueuedWithdrawal | Queued path for large exits | Share owner |
Views
| Function | What it returns |
|---|---|
pricePerShare() | Assets per vault claim |
totalAssets() | Idle balance plus strategy marks |
previewRedeem(shares) | Redeem quote that accounts for queued shares |
maxDeposit / maxMint / maxWithdraw / maxRedeem | Honest capacity checks |
withdrawalEta(user, shares) / positionOf(user) | Exit timing and a holder's full position |
Strategy and admin
| Function | What it does | Who can call |
|---|---|---|
addStrategy(strategy, weight, addToQueue) / removeStrategy(strategy) | Manage strategies and weights | Management or owner |
deployToStrategies() | Move idle funds to strategies by weight | Keeper, management, or owner |
report() | Book profit and loss | Keeper, management, or owner |
tend() | Strategy upkeep | Keeper, management, or owner |
shutdownVault() | Stop new deposits | Owner, management, emergency admin, or impairment guardian |
Security features
| Feature | What it does |
|---|---|
| Virtual shares | _decimalsOffset() = 3 (1000 virtual shares) blocks inflation attacks |
| Minimum first deposit | 50M creator coins, as above |
| Price limits | At most 10% price change per transaction (MAX_PRICE_CHANGE_BPS) |
| Block delay | withdrawDelayBlocks (default 1) blocks same-block deposit then exit, including via transfer |
| Strict transfer accounting | Reverts if the vault does not receive the exact requested amount |
Access control
| Role | Permissions |
|---|---|
| Owner | Full control, emergency shutdown |
| Management | Strategy configuration, fees, impairment admin |
| Keeper | report, tend, deployToStrategies |
| Emergency admin | Emergency shutdown and strategy pulls |
Gotchas
- Units: the vault mints about 1000 per creator coin at bootstrap. The wrapper converts at 1000 per 1 , so and are never 1:1. See Token units.
- Only standard ERC-20 assets work. Fee-on-transfer, deflationary, and rebasing tokens revert.
- Exits at or above
largeWithdrawalThreshold(default 100,000 tokens) must be queued. - When a strategy impairment trips, the vault enters
Suspectmode and deposits and sync exits revert. See Impairment state machine. - ERC-7575
share()is intended to be the vault itself (), not ShareOFT. Live vaults do not advertise ERC-7575 yet because of the EIP-170 size limit. See Vault capabilities. - Activated is not the same as trading live. See Lifecycle.