Open Index Protocol Architecture
Sections
1. Overview
Open Index Protocol is a Solana-native index fund engine that allows users or DAOs to create tokenized indexes. Each index represents a basket of SPL tokens. Users can mint and redeem index tokens based on the composition, and rebalancing logic is modularized for future extensions.
The protocol follows an SPL-style architecture, with clearly separated state accounts and support for plug-in modules such as rebalancers, swap executors and DeFI strategies . This design enables strategy-specific customization while remaining secure and composable.
2. Core Protocol
Features Implemented
InitProtocol
: Initializes global protocol configInitController
: Sets up authority that can create indexes. Has a one to many relationship with protocol configCreateIndex
: Creates an index tied to a controllerAddIndexComponents
: Adds SPL token components and weightsMint
/Redeem
: Mints and burns index tokens using underlying tokensInitModule
: Registers external programs for advanced features eg Rebalancing, Amm Swap, DEFI Strategies
2.1. Key Accounts
Protocol
["open_index"]
Global protocol settings, initialization guard
ControllerGlobalConfig
["open_index_controller_global"]
Stores authority and global controller settings
Controller
["open_index_controller", controller_id]
Stores settings for the controller and its indexes
Index
["open_index_index", controller_key, index_id]
Main state object representing an index
Component
["open_index_component", index_id, mint]
Represents each token component in the index
IndexMints
["open_index_mints_data", controller_id, index_id]
Tracks index mints and associated metadata
Module
["open_index_module", module_signer]
Holds registration & status (active/paused) for a plug-in program allowed to CPI into the core open index protocol
2.2 Roles & Access
Protocol Admin
Initialize protocol and global configs
Controller Owner
A controller is an administrative domain that can own multiple indexes and has its own configuration and governance. Create indexes, assign index managers , manage index components
User
Mint/redeem index tokens
Future DAO
Replace controller owner, vote on rebalance triggers
A high-level view of user interactions with the protocol instructions and resulting accounts

Figure 1 – High level view of Open Index protocol instructions implemented in Phase 1
1 init_protocol
init_protocol
Initializes the top-level protocol state
Called once by the deployer or initializer
2 init_controller
init_controller
Creates a controller for a specific index set - A controller is an administrative domain that can own multiple indexes and has its own configuration and governance.
Tied to an index ID
3 init_controller_global_config
init_controller_global_config
Sets up controller-wide configuration (authority, parameters)
4 create_index
create_index
Creates a new index
Defines its component tokens and initial composition
5 add_index_components
add_index_components
Adds component tokens under an index created at step 4
6 mint
mint
Mints index tokens by depositing the proportional component tokens into their vaults
7redeem
redeem
Burns index tokens and returns proportional amounts of underlying component tokens
Registers an external module / program (like the Trade Module) to be used by the protocol or a specific index
rebalance
(planned)
rebalance
(planned)To be called (by authority or DAO) to adjust vaults based on price drift and unit ratio
Relies on the Trade Module to execute token swaps via CPI to DEX routers
3. Modules (Coming Soon)
Open Index Protocol's extensibility is achieved through Solana programs (modules) registered via the core protocol's init_module
instruction. This instruction (implemented in the main open_index
program) authorizes external modules to perform CPI calls into protocol functions while enforcing PDAs and authority checks.
3.1 Issuance Module
Pre-Issuance Hooks
Whitelist Verification: Supports address allowlists ( could also include NFT ownership checks, or DAO vote verification)
Fee Pre-Calculation: Computes protocol/manager fees before minting
Custom Business Logic: Developers can register additional pre-issuance checks
Post-Redemption Hooks
Execute after tokens are redeemed but before assets are released
Figure 2: Issuance module registration & hooks registration

3.2 Rebalance Architecture - Rebalance & Trade Modules
This section explains how rebalancing is achieved using two stand-alone programs (rebalancer module & Trade Module) that plug into the core Open Index protocol via CPI calls after they have been registered using the init_module
instruction (see instruction 8 in figure 1
) and authorized to invoke the index.

3.2.1 Rebalance Module
Deployed per-index or shared across indexes (configurable)
A separate on-chain program registered via
init_module
on the core protocolReads vault balances and oracle prices
Computes rebalance plan (which tokens to sell/buy)
Does not perform swaps directly
Triggers Trade Module via CPI to execute
3.2.2 Trade Module
Also registered via
init_module
Handles DEX routing via a supported DEX e.g Raydium , Orca etc
Executes swaps securely
Deposits swapped tokens into index vaults
3.2.3 Oracle Integration
Price feed addresses registered in init_oracle_accounts
(future instruction)
Pyth or Switchboard feeds
Prices used to calculate USD value of each component
Confidence interval and freshness checks enforced
3.3 Governance Architecture
Open Index Protocol supports multi-tier governance, where both the protocol and controllers can define their own rules and constraints.
3.3.1 Protocol-Level Governance
Managed by a global DAO, multisig, or protocol council.
Responsibilities:
Initialize the protocol
Whitelist or restrict modules via
init_module
Approve upgrades or feature flags
Set global rate limits or constraints (optional)
pub struct ProtocolGovernanceConfig {
pub global_paused: bool,
pub allowed_modules: Vec<Pubkey>, // Could be accounts for registered modules
pub protocol_admin: Pubkey,
}
3.3.2 Controller-Level Governance
Managed by the controller owner (a wallet, multisig, or DAO).
Responsibilities:
Manage index creation, component updates, rebalancing
Set controller-level access policies
Pause or resume minting/redeeming
Define rebalancing logic and authorities
pub struct ControllerGovernanceConfig {
pub paused: bool,
pub rebalance_authority: Pubkey,
pub mint_authority: Pubkey,
pub max_components: u32,
pub rebalance_interval: u64,
}
This config is stored directly in the Controller
account. Each instruction (e.g. mint
, redeem
, rebalance
) checks this configuration before proceeding.
4 Design Principles
4.1 Modular:
Programs can be added, upgraded, or replaced via
init_module
4.2 Composable:
Supports DAO plug-ins and custom strategies
4.3 Secure:
Vaults and critical instructions protected by PDA validation and authority checks
4.4 Public Good:
All logic open-source and designed for DAO use
5. Code Repository
License: MIT / Apache-2.0
Last updated