Skip to content

Block Rotation

Block rotation on a SKALE Chain limits the disk space used by consensus and full-sync nodes by pruning old blocks, ensuring efficient storage and performance.

Each SKALE Chain reserves 12.6 GB of storage for core blockchain data on consensus and full-sync nodes. This includes:

  • blocks
  • transactions and their receipts
  • log blooms (for efficient event filtering)
  • "best" — latest block info (lastBlockHash)
  • "chainStart" — earliest available block (firstBlockHash, useful after importing snapshots)

To stay within the 12.6 GB limit, SKALE Chains maintain a dynamic range of block data:

  • Only the most recent 80–100% of data is retained.
  • The oldest 20% is pruned as new blocks are added.
  • The rotation is based on data size, not block count.

If block storage nears the 12.6 GB cap:

  • The chain deletes the oldest blocks until usage returns to ~80% of the cap.
  • Only recent blocks remain accessible on consensus and full-sync nodes.

This sliding-window model ensures that the chain operates efficiently without growing indefinitely in size.

  • Efficient resource use — prevents storage bloat.
  • High performance — reduces read/write overhead.
  • Scalability — supports many lightweight SKALE Chains running in parallel.

If your app or service requires the entire blockchain history (e.g. for analytics, block explorers, or archival indexing), use a SKALE Archive Node, which:

  • Stores all past blocks
  • Maintains full transaction and log history
  • Is not affected by block rotation

Want to run a SKALE Archive Node or build on top of historical data? Reach out on SKALE’s Discord or explore the developer docs.

CallsChanges
eth_getBlockByNumber/eth_getBlockByHashmay return null
eth_getBlockTransactionCountByNumbermay return null
eth_getBlockTransactionCountByHashmay return null
eth_getUncleCountByBlockNumbermay return null
eth_getUncleCountByBlockHashmay return null
eth_getTransactionByBlockHashAndIndexmay return null
eth_getTransactionByBlockNumberAndIndexmay return null
eth_getUncleByBlockHashAndIndexmay return null
eth_getUncleByBlockNumberAndIndexmay return null
eth_getTransactionByHashmay return null
eth_getTransactionReceiptmay return null
eth_getFilterLogswill treat removed blocks as if they have 0 logs
eth_getLogswill treat removed blocks as if they have 0 logs