Technical Architecture
On-chain data structures and stroage architecture
The Validator History Program employs technical architecture designed for efficient on-chain storage and retrieval of historical validator data.
Core Account Structure
Config Account
The Config account defines the global configuration of validator history program.
- Admin Management: Tracks administrative authorities
- Oracle Permissions: Manages data upload permissions
- Program Integration: Links to tip distribution program
- Counter Tracking: Monitors total ValidatorHistory accounts
ValidatorHistory Account
The ValidatorHistory account serves as the primary data container for each validator.
Key Components:
- Size: 65,848 bytes per validator account
- Storage Capacity: Up to 512 epochs of historical data
- Zero-Copy Design: Implements
bytemuck::{Pod, Zeroable}traits for efficient memory management - Unique Identifier: Each account is indexed and linked to a specific vote account
Circular Buffer Implementation
At the heart of each ValidatorHistory account lies the CircBuf - a circular buffer that efficiently manages historical data storage:
Buffer Characteristics:
- Fixed Size: 512 entries maximum (
MAX_ITEMS = 512) - Wrap-Around Behavior: Automatically overwrites oldest data when capacity is reached
- Index Tracking: Maintains current position with
idxpointer - Empty State Management: Tracks buffer state to handle initialization
Memory Efficiency: The circular buffer prevents account bloat by maintaining a constant size regardless of how much historical data has been collected. When new epochs are added beyond the 512-entry limit, the oldest entries are automatically overwritten.
Data Structure Design
ValidatorHistoryEntry
Each epoch's data is stored in a ValidatorHistoryEntry struct (128 bytes) containing:
Performance Metrics:
pub epoch_credits: u32, // Vote credits earned
pub commission: u8, // Validator commission percentage
pub mev_commission: u16, // MEV commission in basis points
pub mev_earned: u32, // MEV rewards (stored as 1/100th SOL)
Validator Information:
pub ip: [u8; 4], // IPv4 address
pub version: ClientVersion, // Software version (major.minor.patch)
pub client_type: u8, // Client type
Stake Data:
pub activated_stake_lamports: u64, // Total active stake
pub rank: u32, // Validator rank by stake
pub is_superminority: u8, // Superminority status (0/1)
Metadata:
pub epoch: u16, // Epoch number
pub vote_account_last_update_slot: u64, // Last update slot
ClusterHistory Account
The ClusterHistory account serves as the primary data for cluster.
- Network Metrics: Stores cluster-wide statistics
- Block Production: Tracks total blocks per epoch
- Timestamp Data: Records epoch start times
- Same Architecture: Uses identical circular buffer design
Data Structure Design
ClusterHistoryEntry
Each epoch's data is stored in a ClusterHistoryEntry struct containing:
Cluster Information
pub total_blocks: u32, // Total blocks
pub epoch: u16, // Epoch number
pub epoch_start_timestamp: u64 // Timestamp number
Memory and Performance Optimizations
Zero-Copy Architecture: Eliminates runtime memory allocation overhead by using fixed-size structures that can be directly mapped to account data.
Efficient Storage Layout: C-style struct alignment ensures optimal memory usage and prevents compiler-added padding.
Batch Operations: Support for bulk updates of historical data without individual transaction overhead.
Normalized Data Access: Built-in handling for network changes like Timely Vote Credits (TVC) activation.
This architecture enables the Validator History Program to provide comprehensive historical data access while maintaining the performance and cost-efficiency required for on-chain operations.