Verkle Trees — The Future of Blockchain State
Verkle Trees replace Merkle Patricia Tries in Ethereum and promise to shrink state proofs from 15KB down to 150 bytes — a 100× improvement. This guide explains the cryptographic magic behind them, why they matter, and how they compare to every other blockchain storage structure.
🌿 1. What are Verkle Trees?
The Name: Verkle = Vector + Merkle
The term was coined by John Kuszmaul at MIT. "Vector commitment" is the cryptographic primitive used instead of hashing, and it's combined with the tree structure of a Merkle tree. The paper was published in 2018 and Ethereum researchers (Vitalik Buterin, Dankrad Feist, and others) began adapting it for Ethereum state in 2021.
- • Proof = sibling hashes
- • 16-way branching
- • Proof size grows with tree width
- • 5-15KB per account proof
- • Proof = polynomial evaluation proof
- • 256-way branching
- • Proof size independent of tree width
- • ~150-200 bytes per account proof
🔐 2. Hash Commitments vs Polynomial Commitments
Hash Commitments (used in Merkle trees)
1// HASH COMMITMENT (Merkle Tree)2// Parent node commits to 16 children by hashing them all:3parent_hash = Hash(child_0 | child_1 | ... | child_15)45// To PROVE child_3 is genuine:6// Verifier needs:7// - value of child_38// - hashes of child_0, child_1, child_2, child_4, ... child_159// (all 15 OTHER children)10// Verifier computes:11// recomputed = Hash(c0 | c1 | c2 | CHILD_3 | c4 | ... | c15)12// check: recomputed == parent_hash1314// Cost: 15 × 32 bytes = 480 bytes of proof data PER NODE15// With 15 nodes in path: 15 × 480 = 7,200 bytes minimum16// Plus RLP encoding overhead: 10-15KB total
Polynomial Commitments (used in Verkle trees)
1// POLYNOMIAL COMMITMENT (Verkle Tree — IPA/KZG scheme)2//3// SETUP (mathematical):4// Think of 256 children as points on a polynomial curve:5// f(0) = child_0, f(1) = child_1, ..., f(255) = child_2556// The "commitment" C is a compact encoding of this polynomial:7// C = commit(f) → 32-48 bytes regardless of f's size8//9// To PROVE child_42 is genuine:10// Prover produces an "evaluation proof":11// π = prove(f, 42, f(42)) → 32-48 bytes12//13// Verifier checks:14// verify(C, 42, child_42, π) → true/false15//16// CRITICAL: π is the SAME SIZE regardless of the number of children!17// 256 children → same 32-48 byte proof as 2 children18// No sibling data needed at all19//20// Full proof for an account:21// depth × (commitment + evaluation_proof) = depth × ~64 bytes22// For depth 8: 8 × 64 = 512 bytes23// Compare: Merkle depth 15: 15 × 480 = 7,200 bytes
🧮 3. Pedersen Commitments — The Math Made Simple
The Core Idea — Hiding a Number in a Point
1// PEDERSEN COMMITMENT — Intuition (not exact code)2//3// Setup: we have fixed public elliptic curve points:4// G_0, G_1, G_2, ..., G_255 (256 "basis points", public)5//6// To commit to 256 values [v_0, v_1, ..., v_255]:7// C = v_0 × G_0 + v_1 × G_1 + ... + v_255 × G_2558//9// C is a single elliptic curve point — 32-48 bytes10// It "encodes" all 256 values cryptographically11//12// BINDING: You cannot change any v_i without changing C13// HIDING: C alone reveals nothing about individual values14//15// To prove "v_42 = X":16// The IPA (Inner Product Argument) protocol lets you prove:17// "C commits to a polynomial f where f(42) = X"18// in O(log n) rounds, producing a proof of size O(log n)19//20// For n=256: log(256) = 8 rounds → proof is ~8 × 32 bytes = 256 bytes21// vs Merkle: 255 sibling hashes × 32 bytes = 8,160 bytes22//23// The ratio: 8,160 / 256 ≈ 32× smaller just from this one node24// Across the whole tree: 100× smaller overall
IPA vs KZG — Two Flavours
- What it is: A proof system that proves "these two vectors, when multiplied together element-by-element and summed, give this value." Used to prove polynomial evaluations.
- Trusted setup: No trusted setup needed. Security relies only on the discrete log problem.
- Proof size: O(log n) — for 256 children, this is ~8 group elements = ~256 bytes per node in the path.
- Verification cost: O(log n) scalar multiplications — fast on modern CPUs.
- Why Ethereum chose IPA over KZG for Verkle: No trusted setup ceremony required. Simpler security assumptions.
🌲 4. Verkle Tree Structure
Key Layout Change: EIP-6800 Address Space
1// EIP-6800 defines a new key structure for Verkle trees:2// Key = 32 bytes = stem (31 bytes) + suffix (1 byte)3//4// STEM identifies an account:5stem = keccak256(address)[0:31] // first 31 bytes of address hash6// All data for ONE account shares the SAME stem!7//8// SUFFIX identifies what type of data:9// suffix = 0 → account version10// suffix = 1 → account balance11// suffix = 2 → account nonce12// suffix = 3 → code hash13// suffix = 4 → code size14// suffix = 64-127 → code chunks (contract bytecode)15// suffix = 128-255 → storage slots 0-1271617// This is a HUGE change from current MPT:18// Current: account metadata and storage are in SEPARATE tries19// → account trie + storage trie = 2 separate proofs20// Verkle: account metadata AND nearby storage are in the SAME tree21// → one proof covers balance + nonce + first 128 storage slots2223// Example: proving Alice's balance24// Current Ethereum: prove path in account trie (15KB)25// Verkle: prove stem=hash(alice)[0:31], suffix=1 (~150 bytes)
Tree Depth Comparison
Why 256-way branching works with Verkle but not Merkle
📦 5. Why Proofs are 100× Smaller
1// ETHEREUM MPT PROOF (current):2// Path depth: ~15 nodes3// Each node proof:4// - 15 sibling hashes × 32 bytes = 480 bytes5// - RLP length prefixes: ~20 bytes6// - Node type tag: ~5 bytes7// Per node: ~505 bytes × 15 nodes = 7,575 bytes8// Plus leaf value (RLP-encoded account): ~100-200 bytes9// Total: 7,700 - 15,000 bytes (7-15KB)10//11// ─────────────────────────────────────────────────────12//13// VERKLE TREE PROOF (proposed):14// Path depth: ~4 nodes15// Each node proof:16// - 1 Pedersen commitment C: 32 bytes17// - 1 IPA evaluation proof π: 8 × 32 bytes = 256 bytes18// (IPA rounds: log₂(256) = 8 rounds)19// But! IPA proofs AGGREGATE across nodes:20// - Total proof for full path: ~576 bytes (non-aggregated)21// - With aggregation across multiple keys: ~150-200 bytes/key22//23// The magic of aggregation:24// When proving 10 leaves from the same block:25// MPT: 10 × 10KB = 100KB of proof data26// Verkle: ~10 × 150 + shared_parts ≈ 2-3KB total27// Ratio: 100KB → 2-3KB = 33-50× better with aggregation
Proof Size Visual
Bar length is proportional to proof size. Smaller bar = better.
🚀 6. Stateless Clients — The Game Changer
Stateless Ethereum node: "When you send me a block, include the 150-byte proofs for every account touched by that block. I'll verify the proofs against the state root in the block header. I don't need to store anything!"
How Stateless Validation Works
Impact on Decentralisation
📋 7. EIP-6800: Ethereum's Verkle Migration
Key Changes in EIP-6800
All account data (balance, nonce, code, storage) is reorganised into Verkle tree key-value pairs using the stem+suffix scheme. Account data and first 128 storage slots share the same stem — enabling single-proof coverage.
SLOAD and SSTORE opcodes get new gas costs based on Verkle witness costs. Accessing a slot in the same stem as the account is cheaper (already covered by account witness) than accessing a distant storage slot.
Rather than a big-bang migration, Ethereum will use an overlay approach. New writes go to the Verkle tree immediately. Old accounts are migrated lazily (when first accessed after the fork). Full migration expected over 1-2 years.
Stores recent block hashes in the Verkle state to allow smart contracts to access them via witness proofs rather than hard-coded BLOCKHASH opcode.
The Migration Challenge
1// CHALLENGE: Migrating ~200M state objects without downtime2//3// Current Ethereum state (as of 2024):4// - ~180M accounts (incl. contracts)5// - ~100B+ storage slots (mainly in large contracts)6// - MPT has ~1.5B+ nodes in LevelDB7//8// Naive migration: hash all accounts → build Verkle tree9// Time estimate: several days of downtime10// → Completely unacceptable11//12// ACTUAL PLAN: Lazy/Overlay Migration13// Phase 1: At fork block, NEW writes go to Verkle tree14// Old state remains in MPT temporarily15// Dual tree maintained briefly16//17// Phase 2: When old MPT account is FIRST ACCESSED after fork:18// → Migrate it to Verkle tree19// → Delete from MPT20// → Record that it was migrated21//22// Phase 3: After 1-2 years, assume all accessed accounts migrated23// Background process migrates remaining rarely-used accounts24// MPT retired entirely25//26// Risk: During dual-tree period, nodes must maintain both structures27// Memory and storage overhead: ~50% during transition
✍️ 8. Write Cost Analysis
1// WRITE COST COMPARISON (approximate)23// Per-node write operations:45Ethereum MPT (current):6 keccak256(node data) → ~30ns per call7 RLP encoding → ~50ns per node8 Total per node write: → ~80-120ns910Verkle Tree (proposed):11 Pedersen commitment update → ~2-5μs per node12 (elliptic curve scalar mul)13 IPA proof generation (prover)→ ~50-200ms for full block witness14 Total per node write: → ~2-6μs (25-50× slower than keccak)1516Substrate Patricia:17 Blake2b-256(node) → ~20ns per call18 SCALE encoding → ~20ns per node19 Total per node write: → ~40-60ns2021// KEY MITIGATION:22// Write path (commitment update) and proof path (witness gen) are SEPARATE:23// - Commitment update happens at each block end (~2-6μs/node × depth)24// → Acceptable: 10,000 state changes × 4 nodes deep × 4μs = 160ms25// → Current MPT: 10,000 × 15 nodes × 0.1μs = 15ms26// → Verkle write: ~10× slower than MPT27//28// - Witness generation (for stateless): only done by BLOCK PROPOSERS29// → Other nodes just verify witnesses (very fast, ~few ms)30// → Block proposers have extra time to generate witnesses
Relative cost per node write operation. Verkle writes are slower but the shallower tree (4 vs 15 levels) partially compensates.
📊 9. All Storage Structures Compared
| Property | Verkle | ETH MPT | Substrate | Cosmos IAVL | Bitcoin | Solana |
|---|---|---|---|---|---|---|
| Branching | 256 | 16 | 2-16 | 2 | 2 | None |
| Tree depth | 3-5 | 15-20 | ~10-15 | ~20 | ~20 | N/A |
| Proof type | Poly. commit. | Hash chain | Hash chain | Hash chain | Hash chain | N/A |
| Proof size | ~150B | 5-15KB | 2-8KB | 3-8KB | ~1KB | N/A |
| Write cost | High (EC ops) | Medium | Low | Medium-High | Low | Very Low |
| Read cost | Fast (shallow) | Slow | Fast | Medium | Fast | Fastest |
| Stateless node | ✅ Planned | ❌ | ❌ | ❌ | ❌ | N/A |
| History | Same as ETH | Archive only | Archive only | Built-in | No | N/A |
| Self-balancing | No | No | No | AVL ✅ | No | N/A |
| Node storage (full) | ~200GB* | ~800GB | ~100GB | ~800GB+ | ~10GB | ~100GB |
| Hash function | Pedersen/IPA | keccak256 | Blake2b | SHA256 | SHA256 | SHA256 |
| Encoding | Custom | RLP | SCALE | Protobuf | Custom | Custom |
| Aggregated proofs | ✅ | ❌ | ❌ | ❌ | ❌ | N/A |
⚖️ 10. Trade-offs & Challenges
Is Verkle coming to Substrate or Cosmos?
No current plans. Polkadot uses BEEFY bridges for cross-chain light clients, which uses a different approach (BLS signatures + Merkle). Substrate's existing trie design is already quite efficient for its use case.
There are discussions about moving from IAVL to SMT (Sparse Merkle Tree) first as an intermediate step. Verkle is further ahead on the roadmap. IBC requires proofs, so Cosmos is very interested in smaller proofs — but the migration complexity is daunting.
EIP-6800 is actively developed by core researchers. Expected in a major Ethereum upgrade around 2025-2026. This is the most concrete Verkle deployment plan in production blockchains.
⏳ 11. Ethereum Verkle Rollout Timeline
John Kuszmaul publishes "Verkle Trie for Ethereum State" at MIT.
Vitalik Buterin, Dankrad Feist propose adapting Verkle trees for Ethereum state.
Formal EIP written describing the Verkle transition. Detailed key layout (stem+suffix) specified.
First Verkle test networks launched. Go-ethereum and Besu implement Verkle state. Performance benchmarks collected.
Multiple Kaustinen test networks deployed with Verkle state. Cross-client compatibility tested. EIP-4762 gas repricing finalised.
Verkle targeted for inclusion in a major Ethereum upgrade. Migration tooling and overlay strategy finalised. EIP-6800 expected to be included.
Overlay migration runs: new writes to Verkle, old state migrated on access. Dual tree maintained.
MPT retired. All state in Verkle. Stateless clients become practical. Light clients on mobile become reliable.
🎯 12. Final Summary
Verkle trees replace the core primitive from hashing to polynomial commitments. This single change unlocks proof aggregation, width-independent proof sizes, and eventually stateless client operation. It's not just an optimisation — it's a foundational redesign that changes what kind of clients can participate in the Ethereum network.
One-Line Summaries
Replace SHA256 hashing with elliptic curve polynomial commitments to make proofs 100× smaller and enable stateless clients — a foundational upgrade that trades higher write cost for dramatically better proof generation, enabling mobile light clients and more decentralised validation.
Secure and battle-tested but heavy — 16-way branching with RLP encoding means 15KB proofs and 800GB full nodes. The Verkle transition is Ethereum's answer to these limitations.
High-throughput and compact — structured keys with SCALE encoding give good write performance and 2-8KB proofs. A pragmatic choice that doesn't need Verkle's complexity for its cross-chain model (Polkadot BEEFY).
Immutable versioning enables IBC light clients natively — but write amplification, storage bloat, and pruning complexity are real costs. Potential future migration to SMT or Verkle is discussed but not planned.