← Blog

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:

  1. Pubkeys are highly repetitive (93% hit rate on a 100K pubkey registry)
  2. Log prefixes are nearly identical across transactions
  3. Account key ordering follows predictable patterns
  4. 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.