MIP 8 - Page-ified Storage State

MIP 8 - Page-ified Storage State

This proposal makes storage page-aware.

Today, the EVM exposes 32-byte slots, but hardware works in ~4KB pages. Reading one slot pulls in an entire page, so most of the bandwidth is unused. Hashing keys also destroys locality, so related data ends up scattered.

We instead treat a 4096-byte (128 slot) page as the unit of access and commitment. Storage is grouped into pages, and each page is committed with a binary tree.

Gas follows access patterns. The first touch to a page is expensive. Once loaded, all slots in that page are warm. This makes contiguous layouts (arrays, structs) naturally cheaper, without breaking sparse ones.

Any feedback or discussion is appreciated on:

  • exact gas schedule for page-level SLOAD / SSTORE and how to track net state growth
  • commitment scheme details especially single-slot proof size under the BLAKE3 tree
  • worst-case read amplification if logical pages do not align with physical I/O
  • how this changes Solidity storage patterns in practice
4 Likes

This is exciting.

From prior discussion, once one slot in the page has been loaded, then all other slots in that page would be charged the low warm access storage load cost, rather than the high cold access cost.

This is bringing some exciting new possibilities. With a little bit of assembly magic, page-aware arrays, and mappings to arrays or structs will definitely unlock some new patterns.