Skip to main content

Protocol Overview

Oblivion is a permissionless portfolio protocol on Solana.

  • On-chain account term: Vault
  • User-facing product term: Portfolio

Core Accounts

  • Protocol: global config, fee caps, keeper incentives, points config
  • Vault: strategy state, allocations, pending allocation queue, fee/rebalance/performance metadata
  • GlobalAssetReserve: shared protocol reserve per (mint, reserve_index) — holds treasury + adapter balance
  • VaultReservePosition: per-vault reserve share ledger (entitlement over a GlobalAssetReserve)
  • DepositorPosition: shares + loyalty points per depositor per vault
  • Depositor: global account aggregating cross-vault loyalty points
  • DcaSchedule: recurring deposit schedule state
  • Allocation: per-vault target weights referencing market_reserve_id

Instruction Surface

Protocol / vault lifecycle

  • initialize_protocol
  • create_vault
  • update_allocation (with orphan guard: removed allocations must have zero reserve shares)
  • apply_allocation_update (validation-only; activation is on rebalance)
  • pause_vault / set_protocol_pause

Global reserve management

  • init_global_asset_reserve
  • set_allocation_market_reserve
  • init_vault_reserve_position
  • sync_global_asset_reserve_assets
  • refresh_global_vault_valuations (oracle-priced NAV refresh)
  • refresh_performance_snapshot

Deposits / withdrawals

  • register_deposit_address
  • process_deposit_vault (multi-mint, oracle-priced NAV)
  • withdraw_vault (pro-rata proportional burns across all reserves)
  • accrue_points (permissionless time-weighted point accrual)

Rebalance

  • rebalance (cadence-gated, applies pending allocations)
  • move_vault_reserve_liquidity (same-mint between reserve classes)
  • rebalance_swap_begin / rebalance_swap_end (cross-mint via router)

Reserve yield

  • deposit_reserve_to_yield / withdraw_reserve_from_yield
  • refresh_reserve_yield_balance

DCA

  • create_dca / execute_dca / update_dca / cancel_dca

Fees

  • collect_fees (dilution/mint-shares model, valuation staleness check)

Key Invariants

  • Allocation weights must sum to 10000 bps.
  • Rebalance cadence and annual fee tier are linked and enforced on-chain.
  • Value-sensitive operations require fresh oracle state (last_oracle_update staleness check).
  • Pending allocation updates are timelocked and activate on rebalance.
  • sum(VaultReservePosition.shares) == GlobalAssetReserve.total_shares per reserve.
  • Points accrue on oracle-priced USD deposit value after keeper incentive deduction.