#[cfg(feature = "vault-integration")]
mod vault_integration {
use vault_core::compression::{
BlockchainCompressionAdapter,
CompressionStrategy,
CompressionVersion,
create_block_compressor,
create_account_compressor,
create_general_compressor,
create_archival_compressor,
};
pub fn main() -> Result<(), Box<dyn std::error::Error>> {
println!("🏦 SolanaVault Integration Example");
println!("==================================\n");
using_preconfigured_adapters()?;
custom_adapter_configuration()?;
adapter_statistics_example()?;
Ok(())
}
fn using_preconfigured_adapters() -> Result<(), Box<dyn std::error::Error>> {
println!("📦 Example 1: Pre-configured Adapters");
println!("-------------------------------------");
let block_compressor = create_block_compressor();
let account_compressor = create_account_compressor();
let general_compressor = create_general_compressor();
let archival_compressor = create_archival_compressor();
let test_data = b"Sample blockchain data for compression testing".repeat(20);
println!("Original data size: {} bytes\n", test_data.len());
let adapters = vec![
("Block Compressor", &block_compressor),
("Account Compressor", &account_compressor),
("General Compressor", &general_compressor),
("Archival Compressor", &archival_compressor),
];
for (name, adapter) in adapters {
let compressed = adapter.compress(&test_data)?;
let decompressed = adapter.decompress(&compressed)?;
assert_eq!(test_data.as_slice(), decompressed.as_slice());
let ratio = test_data.len() as f64 / compressed.len() as f64;
println!("{:18}: {} bytes ({:.2}:1)", name, compressed.len(), ratio);
}
println!();
Ok(())
}
fn custom_adapter_configuration() -> Result<(), Box<dyn std::error::Error>> {
println!("⚙️ Example 2: Custom Adapter Configuration");
println!("--------------------------------------------");
let transaction_adapter = BlockchainCompressionAdapter::for_transactions();
let account_adapter = BlockchainCompressionAdapter::for_accounts();
let mixed_adapter = BlockchainCompressionAdapter::for_mixed_data();
let archival_adapter = BlockchainCompressionAdapter::for_archival();
let blockchain_data = create_realistic_blockchain_data();
println!("Blockchain data size: {} bytes", blockchain_data.len());
println!("Testing different adapter configurations:\n");
let configurations = vec![
("Transactions", &transaction_adapter),
("Accounts", &account_adapter),
("Mixed Data", &mixed_adapter),
("Archival", &archival_adapter),
];
for (config_name, adapter) in configurations {
let compressed = adapter.compress(&blockchain_data)?;
let decompressed = adapter.decompress(&compressed)?;
assert_eq!(blockchain_data, decompressed);
let ratio = blockchain_data.len() as f64 / compressed.len() as f64;
let version = adapter.version();
println!("{:12}: {} bytes ({:5.2}:1) [Version: {:?}]",
config_name, compressed.len(), ratio, version);
}
println!();
Ok(())
}
fn adapter_statistics_example() -> Result<(), Box<dyn std::error::Error>> {
println!("📊 Example 3: Adapter Statistics and Metadata");
println!("---------------------------------------------");
let mut adapter = BlockchainCompressionAdapter::for_transactions();
let datasets = vec![
create_transaction_data(),
create_program_data(),
create_mixed_blockchain_data(),
];
for (i, data) in datasets.iter().enumerate() {
let compressed = adapter.compress(data)?;
let ratio = data.len() as f64 / compressed.len() as f64;
println!("Dataset {}: {:.2}:1 compression ratio", i + 1, ratio);
}
let stats = adapter.get_stats()?;
println!("\nCompression Statistics:");
println!("- Total compressions: {}", stats.compressions);
println!("- Total input bytes: {}", stats.total_input_bytes);
println!("- Total output bytes: {}", stats.total_output_bytes);
println!("- Average ratio: {:.2}:1", stats.average_ratio);
println!("- Best ratio: {:.2}:1", stats.best_ratio);
let metadata = adapter.get_metadata()?;
println!("\nAdapter Metadata:");
println!("- Algorithm: {}", metadata.name);
println!("- Version: {}", metadata.version);
println!("- Description: {}", metadata.description);
println!("- Deterministic: {}", metadata.deterministic);
println!("- Memory usage: ~{} bytes", metadata.memory_usage);
adapter.reset()?;
println!("\n✅ Adapter state reset successfully");
Ok(())
}
fn create_realistic_blockchain_data() -> Vec<u8> {
let mut data = Vec::new();
for _ in 0..10 {
data.extend_from_slice("TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA".as_bytes());
data.extend_from_slice("11111111111111111111111111111112".as_bytes());
}
for _ in 0..5 {
data.extend_from_slice(&1_000_000_000u64.to_le_bytes()); data.extend_from_slice(&100_000_000u64.to_le_bytes()); }
for _ in 0..8 {
data.extend_from_slice(&[0x00, 0x00, 0x00, 0x00]); data.extend_from_slice(&[0x01, 0x00, 0x00, 0x00]); }
data
}
fn create_transaction_data() -> Vec<u8> {
let mut data = Vec::new();
for _ in 0..15 {
data.extend_from_slice("TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA".as_bytes());
data.extend_from_slice(&1_000_000_000u64.to_le_bytes());
}
data
}
fn create_program_data() -> Vec<u8> {
let mut data = Vec::new();
let programs = [
"11111111111111111111111111111112",
"ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL",
"BPFLoaderUpgradeab1e11111111111111111111111",
];
for _ in 0..20 {
for program in &programs {
data.extend_from_slice(program.as_bytes());
}
}
data
}
fn create_mixed_blockchain_data() -> Vec<u8> {
let mut data = Vec::new();
for _ in 0..10 {
data.extend_from_slice("TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA".as_bytes());
data.extend_from_slice(&[0x00, 0x01, 0x02, 0x03]);
data.extend_from_slice(&500_000_000u64.to_le_bytes());
}
data
}
}
fn main() -> Result<(), Box<dyn std::error::Error>> {
println!("🔗 Blockchain Compression - SolanaVault Integration Concepts");
println!("============================================================\n");
use blockchain_compression::presets::solana::{SolanaCompressor, SolanaPreset};
use blockchain_compression::core::traits::CompressionStrategy;
println!("This example shows how blockchain-compression integrates with SolanaVault.");
println!("The actual integration uses the BlockchainCompressionAdapter wrapper.\n");
let presets = vec![
("Transactions (for blocks)", SolanaPreset::Transactions),
("Accounts (for state)", SolanaPreset::Accounts),
("Mixed (general purpose)", SolanaPreset::Mixed),
("Max Compression (archival)", SolanaPreset::MaxCompression),
];
let test_data = create_sample_solana_data();
println!("Sample Solana data size: {} bytes\n", test_data.len());
for (description, preset) in presets {
let mut compressor = SolanaCompressor::new(preset);
let compressed = compressor.compress(&test_data)?;
let decompressed = compressor.decompress(&compressed)?;
assert_eq!(test_data, decompressed);
let ratio = test_data.len() as f64 / compressed.len() as f64;
println!("{:30}: {:.2}:1 ratio ({} bytes)", description, ratio, compressed.len());
}
println!("\n✅ All compression operations completed with perfect data integrity!");
println!("\n💡 In SolanaVault, these same operations are wrapped in the");
println!(" BlockchainCompressionAdapter for seamless integration.");
Ok(())
}
fn create_sample_solana_data() -> Vec<u8> {
let mut data = Vec::new();
for _ in 0..20 {
data.extend_from_slice("TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA".as_bytes());
data.extend_from_slice("11111111111111111111111111111112".as_bytes());
data.extend_from_slice(&1_000_000_000u64.to_le_bytes());
data.extend_from_slice(&[0x00, 0x00, 0x00, 0x00]); }
data
}