# Ethereum Client Database Overview ## Why This Matters Growing gas limits drive faster state growth, making the database layer a critical bottleneck. At 60M gas: ~124 GiB/year state growth; at 100M gas: ~197 GiB/year. Consequences include longer sync times, degraded access latency, and higher hardware requirements for node operators. ## Current Client DBs | Client | DB Engine | Approach | Roadmap | |--------|-----------|----------|---------| | Geth | Pebble | LSM-tree | [PBSS approach](https://geth.ethereum.org/docs/fundamentals/archive#how-it-works) - archive data offloaded to flat files | | Reth | MDBX | B-tree | **[triedb integration](https://github.com/paradigmxyz/reth/pull/20945)** + [RocksDB experiments](https://github.com/paradigmxyz/reth/pull/21620) | | Nethermind | RocksDB | LSM-tree | **[Paprika integration](https://github.com/NethermindEth/nethermind/pull/9853)** in progress | | Erigon | MDBX | B-tree | [Erigon 4](https://erigon.tech/big-release-and-renaming-of-erigon-2-2-2-3-into-erigon-3-4/) prototyping new state storage | | Besu | RocksDB | LSM-tree | Bonsai optimizations | | Ethrex | RocksDB | LSM-tree | - | ## Customised solutions Given that the snapshot is hard to optimize and well suited to a normal KV database, most solutions tackle optimizing storage for trie nodes. | Project | Links | Lang | License | Activity | Main Idea | Consensus Compatible | |---------|-------|------|---------|----------|-----------|----------------------| | triedb | [repo](https://github.com/base/triedb) | Rust | MIT | 🟒 | Trie-native disk layout, O(log N) lookups | βœ… | | Paprika | [repo](https://github.com/NethermindEth/Paprika) | C# | LGPL-3.0 | 🟑 | Patricia tree with separate Merkleization | βœ… | | MonadDb | [repo](https://github.com/category-labs/monad) | C++ | GPL-3.0 | 🟒 | Native Patricia Trie on disk, async I/O | βœ… Claims identical roots | | Carmen | [repo](https://github.com/0xsoniclabs/carmen) | Go | BSL-1.1 β†’ LGPL 2028 | 🟑 | Flat storage with optional MPT schema | ⚠️ Sonic uses flat storage mode | | Firewood | [repo](https://github.com/ava-labs/firewood) | Rust | Ecosystem License | 🟒 | Trie-as-index, memory-mapped | ⚠️ Needs `ethhash`; license restricts to Avalanche | | SeiDb | [repo](https://github.com/sei-protocol/sei-chain) | Go | Apache-2.0 | 🟒 | AVL-tree with incremental roots | ❌ [Different state root](https://docs.sei.io/evm/differences-with-ethereum) | | QMDB | [repo](https://github.com/LayerZero-Labs/qmdb) | Rust | Apache-2.0 | πŸ”΄ | Append-only with no in-place updates | ❌ No MPT support | Activity: 🟒 commits in last week | 🟑 commits in last 2 months | πŸ”΄ stale/archived ## Benchmarks **Realistic state loads:** - [Bloatnet](https://cperezz.github.io/bloatnet-website/): Stress tests at 500GB, 1TB, 2TB+ state sizes, tracks client degradation at scale - [Ethpandaops Lab](https://lab.ethpandaops.io/ethereum/execution/timings): Measuring engine API timings on mainnet nodes **KV engine level:** - [goleveldb-bench](https://github.com/fjl/goleveldb-bench): Geth's LevelDB benchmarks - [Pebble benchmarks](https://hackmd.io/@jsvisa/geth-pebble-grant-report): Grant report comparing Pebble read/write performance **Gap:** No public benchmark for **state root computation** in isolation. Existing suites focus on opcode throughput or KV ops, not trie/DB performance. This is the key metric for evaluating custom DB solutions. ## Evaluation Criteria - Consensus compatible (identical state roots) - Block execution throughput at scale - State root computation latency - Sync performance with large state - License compatibility for client integration ## Next Steps - Talk to project teams and ask about their confidence in the idea - Define benchmark suite - Survey client teams on integration appetite