Fees and Points
Fee Model
Oblivion uses a share-dilution fee model, similar to traditional ETFs. Fees are not deducted from the vault's assets directly — instead, new shares are minted to the fee recipient, diluting existing shareholders proportionally.
Fee Structure
| Fee | Who earns | How it works |
|---|---|---|
| Management fee | Curator + protocol | Annual fee on AUM, accrued over time, collected periodically |
| Keeper incentive | Keeper | Deducted from each deposit before share minting |
Management Fee Tiers
The annual management fee is linked to the vault's rebalance cadence:
| Cadence | Annual Fee |
|---|---|
| Weekly | 90 bps (0.90%) |
| Monthly | 75 bps (0.75%) |
| Quarterly | 50 bps (0.50%) |
More frequent rebalancing justifies higher fees due to increased operational costs.
Fee Collection
The keeper calls collect_fees periodically. The process:
- Calculate time elapsed since last collection
- Compute annualized fee:
fee_shares = total_shares * fee_bps * elapsed / (10000 * seconds_per_year) - Split between curator and protocol. The protocol takes the greater of its floor (half the cadence's base fee) and 30% of the fee charged; the curator receives the rest. The share is derived from the vault's fee and cadence at collection time, not stored. The curator's cut floors and the treasury takes the remainder, so the two always sum to exactly what was minted
- Mint new shares to the curator and protocol treasury
- Requires fresh oracle valuation (prevents fee collection on stale NAV)
Performance Fees
A vault may also charge a share of gains above a high-water mark, up to 10%, set at creation and
immutable after. collect_performance_fee is permissionless:
pnl = total_value_usd - net_external_flow_usd, so deposits are not mistaken for gainschargeable = max(0, pnl - high_water_pnl_usd)fee_usd = chargeable * performance_fee_bps / 10000, floored- Minted as shares and split on the same derived share as the management fee
- The high-water mark advances only if a fee was actually taken, so a charge that floors to zero is a no-op and cannot be used to walk the mark past uncharged gains
The mark makes the total path-independent: charging at every new high comes to exactly what one charge at the end would, so no minimum interval is needed.
A vault may charge it only while performance_fee_eligible is set, which requires that no single
non-default underlying_mint exceeds 50% of target weight. The flag fails closed — it starts at
zero and is cleared whenever allocations are applied, so it must be re-proven by the
permissionless refresh_performance_fee_eligibility before charging resumes.
Curator Incentives
Curators earn fees by creating and managing successful vaults:
- Fee share: the management fee less the protocol's cut. The share is not stored and not a
create_vaultargument — it is derived from the vault's fee and cadence every time fees are collected, so a curator cannot choose it and no stored copy can drift from the fee it describes - Curator points: when points are enabled, curators earn points proportional to depositor activity —
curator_points_bpsof what depositors accrue, minted on top rather than taken out of it. A depositor's points are never reduced to pay a curator - Performance tracking: on-chain fields track cumulative PnL, unrealized gains, and IRR/APY metrics
The curator's economic incentive is to attract deposits (grows AUM and fee base) and generate returns (attracts more depositors).
Keeper Incentive
Keepers earn a small fee on each deposit they process:
incentive = deposit_amount * keeper_incentive_bps / 10000
This is deducted before share pricing, so the depositor receives shares based on the net deposit amount. The incentive is transferred from the reserve treasury to the keeper's token account.
Fee Caps
The protocol enforces a max_management_fee_bps cap. Curators cannot set fees above this limit. This protects depositors from predatory fee structures.
Points System
Oblivion has a loyalty points system that rewards depositors for holding vault shares over time.
How Points Accrue
Points are time-weighted: the longer you hold shares, the more points you earn. The formula:
points = depositor_position.shares * elapsed_seconds * depositor_points_per_usdc / POINTS_SCALE
Points accrue automatically during deposits, withdrawals, and DCA executions. They can also be triggered manually via the permissionless accrue_points instruction (anyone can call it for any depositor).
Point Types
| Type | Who earns | Based on |
|---|---|---|
| Loyalty points | Depositor | Time-weighted share holdings |
| Curator points | Curator | curator_points_bps of depositor accrual, minted additionally — not deducted from the depositor |
Depositor Account
Each wallet has a global Depositor account that aggregates total_loyalty_points across all vault positions. This enables protocol-wide loyalty tracking regardless of how many vaults a user participates in.
Points Configuration
The protocol authority controls:
points_enabled: master switch for the points systemdepositor_points_per_usdc: points accrual ratecurator_points_bps: curator points minted per unit of depositor accrual, currently 10000 (1:1). Additive, so enabling it costs depositors nothing