I've put a lot of thought into managing the storage growth, the chain grows proportionally to system activity, but I've implemented several optimizations to keep it manageable:
1. Efficient proof encoding: Each proof is typically 128 bytes (64-byte operation hash + 64-byte signature). For context, a 1GB system performing ~1000 operations/second would generate roughly 10MB of proof data per minute before optimizations.
2. Smart pruning strategies:
- Automatic pruning of validated proof chains after state transitions
- Configurable retention windows (default: 1 hour) for non-critical proofs
- Merkle tree summarization of older proofs (keeping root hashes only)
In practice, a typical desktop workload generates about 100-200MB of proof data per day after optimizations. High-security environments can keep full chains (roughly 1-2GB/day), while standard deployments can use pruned chains (~100MB/day).
I'm also working on implementing selective proof generation where you can choose which operations require verification, allowing even finer control over storage growth.
The code in proof_storage.rs shows the implementation details if you're interested in the specifics.