Verkle trees replace Ethereum's MPT with KZG polynomial commitments. The result: proofs 100× smaller. This enables stateless Ethereum clients — verify state without storing 100+ GB.
The Problem with MPT Proofs
Current Ethereum (MPT)
- 📏 Prove 1 account → provide all hashes along the trie path
- 📦 1 account proof ≈ 10KB
- 📦 1,000 accounts ≈ 10MB
- 🖥️ Full node must store ~100+ GB
- ❌ Light clients can't fully verify state
Future Ethereum (Verkle)
- 📏 Prove 1 account → 1 polynomial commitment + opening
- 📦 1 account proof ≈ 150 bytes
- 📦 1,000 accounts ≈ 200KB (not 10MB!)
- 🖥️ Stateless: verify without storing state
- ✅ Mobile clients can verify state
MPT vs Verkle Comparison
| Property | MPT (Current) | Verkle (Future) |
|---|---|---|
| Proof type | Hash list | KZG polynomial |
| Single account proof | ~10 KB | ~150 bytes |
| 1,000 accounts proof | ~10 MB | ~200 KB |
| Tree width | 16-way | 256-way |
| Tree depth | 64 (nibbles) | 32 (bytes) |
| Commitment size | 32 bytes (hash) | 48 bytes (G1) |
| Verification time | Fast (just hashes) | Slower (pairings) |
| Batch proofs | Linear growth | Near-constant size |
| Trusted setup needed | No | Yes (KZG ceremony) |
| Stateless clients | Impractical | ✅ Practical |
| Deployed on mainnet | ✅ Current | 🔜 Future |
The Core Comparison
1// MPT (Current Ethereum) vs Verkle Trees (EIP-6800)23// ─── CURRENT: Merkle Patricia Trie ───────────────────4// Proof structure: list of hashes along the path5// Proof element: a 32-byte hash6// Depth: up to 64 nibbles = up to 64 proof elements7// Size: 64 elements × 32 bytes = 2,048 bytes8// + Node data overhead → typically 10–40 KB per account proof910// ─── FUTURE: Verkle Tree ────────────────────────────11// Proof structure: polynomial commitment + opening proof12// Uses: KZG polynomial commitments13// Key magic: prove MANY values with ONE small proof!1415// Single-value proof sizes:16// MPT: ~600 bytes per node × many nodes = ~10KB17// Verkle: ~150 bytes total (compressed)1819// Batch proof (proving many accounts at once):20// MPT: proof grows linearly with number of accounts21// Verkle: proof stays nearly constant size!22// → Proving 1,000 accounts: MPT ~10MB, Verkle ~200KB
KZG Polynomial Commitments — The Math
1// KZG Polynomial Commitments — the magic behind Verkle2// Named after Kate, Zaverucha, Goldberg (2010)34// CONCEPT:5// 1. Encode your data as a polynomial p(x)6// If you have 256 values v_0...v_255:7// p(0) = v_0, p(1) = v_1, ..., p(255) = v_25589// 2. Commit to the polynomial:10// commitment C = commit(p(x)) ← just 48 bytes!1112// 3. Prove a single value:13// prove_at(i) → proof_π ← just 48 bytes!14// (prove that p(i) = v_i)1516// 4. Verify:17// verify(C, i, v_i, proof_π) ← using elliptic curve pairing18// → O(1) verification time!1920// Why this beats hashes:21// Hash-based (MPT): need all sibling hashes along the path22// KZG: just ONE commitment + ONE proof = 48+48 = 96 bytes2324// Trusted setup requirement:25// KZG needs a "powers of tau" ceremony26// Ethereum did this: the KZG ceremony (EIP-4844 used it too)27// Someone in the ceremony must delete their secret —28// if even ONE person deleted it, the system is secure
What is KZG?
KZG = a way to commit to a polynomialin 48 bytes, then prove any single evaluation point in another 48 bytes.
The polynomial encodes all your data values. The commitment is like a fingerprint — changing any value changes the fingerprint.
Trusted Setup
KZG needs a trusted setup ceremony — a one-time event where random secrets are generated and then deleted. Ethereum ran this ceremony in 2023 with 140,000+ participants. If even ONE person deleted their secret, the system is secure.
EIP-4844 Already Uses KZG!
EIP-4844 (Proto-Danksharding) — already live on Ethereum — uses KZG commitments for blob data. Verkle trees will use the SAME trusted setup.
Verkle Tree Node Structure
1// Verkle Tree Structure2// Similar to a trie but uses KZG commitments instead of hashes34// Node structure:5struct VerkleNode {6 commitment: G1Point, // 48-byte KZG commitment (vs 32-byte hash)7 children: [Option<VerkleNodeRef>; 256], // 256-way (not 16-way!)8}910// Why 256-way instead of 16-way (MPT)?11// With KZG, wider branching = smaller proof (not larger!)12// MPT: 16-way, depth 64 nibbles13// Verkle: 256-way, depth 32 bytes (same key length)14// Less depth → fewer proof elements needed1516// Key mapping (EIP-6800):17// Everything keyed by: account_address ++ sub_key18// No more storage tries! Flat key space:19// account_version: hash(address, 0)20// account_balance: hash(address, 1)21// account_nonce: hash(address, 2)22// account_code_hash: hash(address, 3)23// contract_slot_X: hash(address, trie_key_to_stem(slot))
EIP-6800 — The Actual Ethereum Proposal
1// EIP-6800: Ethereum state tree using a Verkle trie2// (The actual Ethereum upgrade proposal)34// New storage (replaces MPT):5type VerkleStem = [u8; 31] // 31-byte stem (address-derived)6type VerkleKey = [u8; 32] // 32-byte key (stem ++ suffix)78// Account data (no more separate storage trie!):9stem(alice) = keccak256(alice_address)[..31] // first 31 bytes1011// Account header stored at:12BASIC_DATA_KEY = stem ++ [0] // version, balance, nonce, code_size13CODE_HASH_KEY = stem ++ [1] // code hash1415// Contract storage at:16STORAGE_OFFSET = 25617slot_key = stem ++ [STORAGE_OFFSET + slot_mod_256]1819// HUGE CHANGE: storage and account in the SAME tree!20// No more separate "storage trie" per contract21// All state in one Verkle trie22// Simpler + more uniform proofs
Stateless Ethereum
1// Stateless Ethereum — enabled by Verkle Trees23// CURRENT (with MPT):4// To run a transaction, validators need:5// → Full state (currently ~100+ GB)6// → Every validator must store everything7// → High hardware requirements = centralization pressure89// FUTURE (with Verkle):10// "Witness" = proof of all state accessed by a transaction11// A block's witness proves: all accounts/storage accessed1213// Current witness size (MPT): ~10-40 MB per block14// Verkle witness size: ~200-500 KB per block (100× smaller!)1516// Stateless client workflow:17// 1. Receiver gets: block_header + transactions + witness18// 2. Verify witness against state_root (KZG proofs)19// 3. Execute transactions using witness as "portable state"20// 4. No need to store full state!2122// This enables:23// → Mobile clients that verify state without storage24// → Light validators that don't need 100+ GB25// → Better decentralization
How Verkle Trees Change Ethereum
100× smaller proofsBlock witnesses shrink from ~10MB to ~200KB. Light clients and mobile devices can verify Ethereum state.
Stateless clients enabledValidators no longer need to store full state. Lowers hardware requirements → better decentralization.
KZG pairing-based cryptographyVerification is slower than hash-based MPT. New cryptographic assumptions (not just hashes).
Flat key space (no storage sub-trie)Simpler storage model. All state (account + contract storage) in one uniform tree. Easier to reason about.
256-way branchingShallower tree than MPT. Fewer proof steps needed — key enabler for smaller proof sizes.
Trusted setup requirementKZG needs the powers-of-tau ceremony. Already done for EIP-4844, so Verkle can reuse it.