Anatomy of a Solana block: where the bytes actually go
A current Solana block is roughly 5 MB of JSON when you call getBlock. Compressed with SolPack’s 8-stream architecture, it shrinks to ~400 KB. That’s a 12x gap — and the breakdown of where those bytes go is not what most people expect.
The raw breakdown
From a measured sample of recent blocks:
- 26% — Signatures (64 bytes of cryptographic randomness per transaction, completely incompressible)
- 15% — Logs (
Program X invoke,Program X success, consumed compute units) - 12% — Inner instructions (CPI call traces)
- 7% — Actual instructions (the part that does useful work)
- 40% — Everything else: account keys, headers, recent blockhash, metadata
The single biggest consumer of space is Ed25519 signatures. At ~1,900 vote transactions per second plus ~1,100 non-vote, that’s roughly 190 KB/sec of pure entropy. No compression algorithm can touch it. This is the storage floor.
Logs are 77% boilerplate
The log situation is particularly wasteful. Analyzing every log line in a recent block (22,161 lines):
- 28% are
"Program X invoke [N]" - 26% are
"Program X success" - 23% are
"Program X consumed N of M compute units"
That’s 77% structural boilerplate. Only about 10% of log bytes contain actual useful data — the rest is the CPI cascade. One Jupiter swap triggers 30+ program invocations, each generating its own invoke/success/consumed triple.
The compression opportunity
SolPack’s approach splits the block into 8 separate streams — signatures, pubkeys, instructions, logs, etc. — and compresses each independently with a trained zstd dictionary. This works because:
- Pubkeys are highly repetitive (93% hit rate on a 100K pubkey registry)
- Log prefixes are nearly identical across transactions
- Account key ordering follows predictable patterns
- Only signatures resist compression entirely
The result: ~400 KB per block vs ~5 MB raw JSON. The 12x gap is where all the infrastructure money goes.
What this means for builders
If you’re running an indexer, the first question is: do you actually need all of this data? Most DeFi analytics can skip vote transactions entirely (60% of volume, 26% of storage), drop the CPI boilerplate logs, and store only the instruction data plus account keys.
A filtered, compressed archive on R2 costs $735/month vs $7,000 for the raw CAR files. Know which bytes you need before you decide what to pay for.