use blockchain_compression::presets::solana::{SolanaCompressor, SolanaPreset};
use blockchain_compression::core::traits::CompressionStrategy;
fn main() -> Result<(), Box<dyn std::error::Error>> {
println!("🚀 Blockchain Compression Library - Basic Usage Example");
println!("========================================================\n");
basic_compression_example()?;
compare_presets_example()?;
solana_patterns_example()?;
Ok(())
}
fn basic_compression_example() -> Result<(), Box<dyn std::error::Error>> {
println!("📦 Example 1: Basic Compression");
println!("--------------------------------");
let mut compressor = SolanaCompressor::new(SolanaPreset::Transactions);
let original_data = b"Hello, blockchain compression! This is a test.".repeat(20);
println!("Original size: {} bytes", original_data.len());
let compressed = compressor.compress(&original_data)?;
println!("Compressed size: {} bytes", compressed.len());
let decompressed = compressor.decompress(&compressed)?;
if original_data == decompressed {
println!("✅ Perfect data integrity verified!");
} else {
println!("❌ Data integrity check failed!");
return Err("Data integrity check failed".into());
}
let ratio = original_data.len() as f64 / compressed.len() as f64;
println!("Compression ratio: {:.2}:1\n", ratio);
Ok(())
}
fn compare_presets_example() -> Result<(), Box<dyn std::error::Error>> {
println!("🔍 Example 2: Comparing Different Presets");
println!("------------------------------------------");
let test_data = b"Sample blockchain data with repetitive patterns and common structures".repeat(50);
let presets = vec![
("Fast Compression", SolanaPreset::FastCompression),
("Transactions", SolanaPreset::Transactions),
("Accounts", SolanaPreset::Accounts),
("Mixed Data", SolanaPreset::Mixed),
("Max Compression", SolanaPreset::MaxCompression),
];
println!("Test data size: {} bytes\n", test_data.len());
for (name, preset) in presets {
let mut compressor = SolanaCompressor::new(preset);
let compressed = compressor.compress(&test_data)?;
let decompressed = compressor.decompress(&compressed)?;
assert_eq!(test_data.as_slice(), decompressed.as_slice());
let ratio = test_data.len() as f64 / compressed.len() as f64;
println!("{:15}: {:4} bytes ({:5.2}:1)", name, compressed.len(), ratio);
}
println!();
Ok(())
}
fn solana_patterns_example() -> Result<(), Box<dyn std::error::Error>> {
println!("🌐 Example 3: Real Solana Data Patterns");
println!("---------------------------------------");
let mut compressor = SolanaCompressor::new(SolanaPreset::Transactions);
let mut solana_data = Vec::new();
for _ in 0..10 {
solana_data.extend_from_slice("TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA".as_bytes()); solana_data.extend_from_slice("11111111111111111111111111111112".as_bytes()); solana_data.extend_from_slice("ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL".as_bytes()); }
for _ in 0..5 {
solana_data.extend_from_slice(&1_000_000_000u64.to_le_bytes()); solana_data.extend_from_slice(&100_000_000u64.to_le_bytes()); }
for _ in 0..10 {
solana_data.extend_from_slice(&[0x00, 0x00, 0x00, 0x00]); solana_data.extend_from_slice(&[0x01, 0x00, 0x00, 0x00]); }
println!("Solana data size: {} bytes", solana_data.len());
let compressed = compressor.compress(&solana_data)?;
println!("Compressed size: {} bytes", compressed.len());
let decompressed = compressor.decompress(&compressed)?;
assert_eq!(solana_data, decompressed);
println!("✅ Perfect data integrity verified!");
let ratio = solana_data.len() as f64 / compressed.len() as f64;
println!("Solana data compression ratio: {:.2}:1", ratio);
let stats = compressor.stats();
println!("\n📊 Compression Statistics:");
println!("- Total compressions: {}", stats.compressions);
println!("- Average ratio: {:.2}:1", stats.average_ratio);
println!("- Best ratio achieved: {:.2}:1", stats.best_ratio);
Ok(())
}