Storage Architecture
Y Protocol uses RocksDB with column families for storage, atomic operations, and crash recovery capabilities.
RocksDB Implementation
pub const CF_METADATA: &str = "metadata"; // Chain metadata
pub const CF_ACCOUNTS: &str = "accounts"; // Account states
pub const CF_TRANSACTIONS: &str = "transactions"; // Transaction data
pub const CF_VALIDATORS: &str = "validators"; // Validator info
pub const CF_BLOCKS: &str = "blocks"; // Block data
pub const CF_CONSENSUS: &str = "consensus"; // Consensus stateNetwork configuration and chain state information
Account balances, nonces, and transaction history
Transaction history with status and block references
Validator information, stakes, and performance metrics
Blockchain data with headers and transaction lists
Consensus state, validator votes, and proposal tracking
Key Encoding Strategy
impl BinaryCodec {
/// Encode block key for height-based ordering
pub fn encode_block_key(height: u64) -> Vec<u8> {
format!("block_{:020}", height).into_bytes()
}
/// Encode transaction key for lookups
pub fn encode_transaction_key(tx_id: &str) -> StorageResult<Vec<u8>> {
Ok(format!("tx_{}", tx_id).into_bytes())
}
/// Encode validator key for validator operations
pub fn encode_validator_key(validator_id: &str) -> StorageResult<Vec<u8>> {
Ok(format!("val_{}", validator_id).into_bytes())
}
}Block keys use zero-padded height for range scans
Transaction and validator keys use prefixes for fast filtering
Key design enables iterator-based processing
Storage Features
Optimized for both read and write performance with configurable caching.
Data protection with crash recovery and backup capabilities.
Data Encoding
Deterministic binary encoding ensures consistent storage across nodes.
Handles protocol upgrades while maintaining data integrity.
Performance Characteristics
Configuration
[database]
cache_size = "512MB"
max_open_files = 1000
compression = "lz4"
enable_wal = true
wal_size_limit = "64MB"
max_background_jobs = 4
[column_families.blocks]
block_cache_size = "128MB"
bloom_filter_bits = 10
compaction_style = "level"
[column_families.transactions]
block_cache_size = "256MB"
bloom_filter_bits = 12
compaction_style = "universal"