Ethereum has long been at the forefront of blockchain innovation, but as network usage grows, so does the need for scalability. One of the most promising solutions to this challenge is sharding—a technique designed to increase transaction throughput by splitting the network into smaller, more manageable pieces. This article dives deep into Ethereum’s sharding design, focusing on its first phase: quadratic sharding with stateless clients.
We'll explore how sharding works, the role of the Validator Manager Contract (VMC), collation structure, and the revolutionary concept of stateless clients. Whether you're a developer or a tech enthusiast, this guide will help you understand how Ethereum plans to scale efficiently while maintaining decentralization and security.
👉 Discover how next-gen blockchain platforms are implementing scalable architectures like sharding.
Understanding Ethereum's Scalability Challenge
Blockchain networks like Ethereum face a fundamental limitation: every node must process every transaction. This ensures security and consensus but limits scalability. If each node uses computational capacity c, then total network throughput is bounded by O(c)—a major bottleneck as demand rises.
Sharding addresses this by introducing a two-layer architecture, boosting capacity to O(c²)—a quadratic improvement. Instead of processing all transactions, nodes only handle data relevant to their assigned shard. This allows parallel processing across 100+ shards, dramatically increasing throughput without requiring every participant to store or verify the entire chain.
This approach doesn't require an immediate hard fork. The main chain remains intact, while a special smart contract—the Validator Manager Contract (VMC)—coordinates the sharded system. Validators register through the VMC and can be assigned to any shard, creating a shared validator pool that enhances both flexibility and security.
Core Components of Ethereum Sharding
Constants and Parameters
The sharding model operates under several predefined constants:
LOOKAHEAD_PERIODS: 4PERIOD_LENGTH: 5 blocksCOLLATION_GASLIMIT: 10,000,000 gasSHARD_COUNT: 100 shardsSIG_GASLIMIT: 40,000 gasCOLLATOR_REWARD: 0.001 ETH
These values define timing, capacity, and incentives within the system. For example, each shard produces a new collation roughly every 25 blocks (5 blocks per period × 4 lookahead periods), allowing time for proposer selection and preparation.
Validator Manager Contract (VMC)
The VMC acts as the central coordination point for the sharding system. Deployed on the main chain, it manages validator registration, shard assignment, and collation validation.
Key functions include:
deposit(): Adds a validator with a stake (in ETH) and returns their index.withdraw(validator_index): Allows validators to exit after meeting requirements.get_eligible_proposer(shard_id, period): Selects the next collation proposer using a block hash as a randomness source. Selection probability is proportional to stake.add_header(): Validates and records a new collation header.get_shard_head(shard_id): Returns the current head of a given shard.
The VMC emits a CollationAdded event whenever a valid header is added, enabling clients to track shard progress in real time.
Collation Header Structure
In sharding, a collation replaces the traditional block within a shard. It consists of a collation header and a list of transactions.
A collation header includes:
shard_id: Identifies the shard (0–99).expected_period_number: Derived fromfloor(block.number / PERIOD_LENGTH).period_start_prevhash: Hash of the last block before the current period starts.parent_hash: Hash of the previous collation in the same shard.transaction_root,state_root,receipt_root: Merkle roots for transactions, post-execution state, and receipts.coinbase: Address receiving the collator reward.number: Sequential number used in fork choice rules.
A collation header is valid only if:
- It belongs to an existing shard.
- The period matches the current one.
- Its parent has already been accepted.
- No duplicate collation exists in the same period.
- The proposer is correctly selected via
get_eligible_proposer.
Once validated, the full collation must execute correctly on the parent state, consuming no more than the gas limit.
The Role of Stateless Clients
One of the biggest challenges in sharding is enabling validators to create collations without storing the full state—otherwise, resource demands would scale quadratically.
Stateless clients solve this by shifting responsibility: instead of nodes holding all state data, transaction senders provide witness data—Merkle proofs proving access to required account states.
Transaction Format with Access Lists
Transactions now include an access list specifying which accounts and storage keys they intend to read or write. Any attempt to access data outside this list results in failure.
Additionally, transactions carry witness data—a set of Merkle branches proving pre-state values. This allows collators to validate transactions using only the state root.
For example:
access_list = [
{ address: 0x..., storage_keys: [0x..., 0x...] },
...
]
witness = [rlp(node1), rlp(node2), ...]This design prevents denial-of-service attacks where malicious actors force validators to load uncached state data.
State Transition Function
In traditional systems: stf(state, tx) → state'
In stateless models: apply_transaction(state_obj, witness, tx) → (new_state_obj, read_set, write_set)
Where:
state_objcontains the state root and metadata.witnessprovides necessary Merkle proofs.- Outputs include updated state root, accessed objects (for building new collations), and modified nodes.
This makes state transitions pure functions over small data objects—ideal for distributed environments.
Client Behavior and Head Selection
Clients can operate in various modes:
- Full node on main chain (O(c) resources)
- Light client on main chain (O(log c))
- Shard observer or validator client
When monitoring a shard, clients:
- Use
fetch_candidate_head()to retrieve potential heads fromCollationAddedlogs. - Prioritize by score (highest first), then by age (oldest first).
- Download and verify collations starting from known valid parents.
Validators preparing to propose use:
GUESS_HEAD(shard_id)to find the best chain tip.- Collect pending transactions.
- Update witnesses using local trie node cache (
recent_trie_nodes_db). - Execute transactions and compute new state root.
- Include collator reward by fetching their own Merkle branch.
Final output: (header, transactions, witness) bundle ready for submission.
Protocol Changes for Sharding Support
Several core protocol upgrades enable sharding:
Dual-Layer Trie Redesign
The current account model separates balances, code, and storage across different trees. Sharding replaces this with a single-level trie:
- Balance:
sha3(address) ++ 0x00 - Code:
sha3(address) ++ 0x01 - Storage key K:
sha3(address) ++ 0x02 ++ K
This simplifies proof generation and improves efficiency in stateless environments.
Access List Enforcement
EVM execution now checks every operation against the access list:
- Direct calls (
CALL,STATICCALL) - Storage reads/writes (
SLOAD,SSTORE) - Opcodes like
BALANCE,EXTCODESIZE
Any unauthorized access throws an exception—ensuring predictable execution costs and preventing abuse.
Future Phases of Ethereum Sharding
This document covers only Phase 1: basic sharding with loose coupling and stateless clients. Future phases will enhance integration and security:
Phase 2: Two-Way Pegging
Enable secure asset transfers between main chain and shards using receipt verification (USED_RECEIPT_STORE).
Phase 3 Options
- Option A: Include collation headers as uncles rather than transactions.
- Option B: Embed headers in a fixed-size array within main chain blocks (soft fork upgrade).
Phase 4: Tight Coupling
Introduce data availability checks—if a collation is invalid or unavailable, referencing main chain blocks become invalid too. This closes major attack vectors and strengthens finality.
Each phase builds toward full quadratic scaling—100x throughput gains—without sacrificing decentralization.
Frequently Asked Questions
Q: What is sharding in Ethereum?
A: Sharding splits the Ethereum network into 100+ parallel chains (shards), each processing its own transactions and states. This enables massive scalability by allowing simultaneous processing across shards.
Q: How does sharding improve scalability?
A: Instead of every node processing every transaction (O(c)), nodes only handle their assigned shard’s data (O(c²)). This quadratic scaling allows Ethereum to support far more users and dApps efficiently.
Q: What is a collation?
A: A collation is a shard-level block containing transactions, a header, and witness data. It's proposed by a validator and recorded on the main chain via the Validator Manager Contract.
Q: Why are stateless clients important?
A: They allow validators to create collations without storing full state data. Senders provide Merkle proofs (witnesses), reducing node requirements and enabling wider participation.
Q: Can shards communicate with each other?
A: Not in Phase 1. Cross-shard communication is planned for later phases using receipts and bridges, ensuring secure inter-shard messaging and asset transfers.
Q: Is sharding live on Ethereum today?
A: Not yet. While research and testing continue (especially via Ethereum Research forums), sharding remains part of future upgrades following proof-of-stake transition.
👉 Stay updated on emerging blockchain scalability solutions shaping Web3’s future.
Conclusion
Ethereum’s sharding roadmap represents one of the most ambitious technical undertakings in decentralized systems. By combining quadratic scaling, stateless execution, and layered protocol design, it aims to deliver high throughput without compromising security or decentralization.
Though still evolving, the foundation laid in Phase 1—especially around collations, access lists, and witness-based validation—sets the stage for a scalable, sustainable blockchain ecosystem. As development progresses toward tight coupling and cross-shard communication, Ethereum moves closer to becoming a truly global computational platform.
Developers interested in contributing should explore resources on EthResearch and engage with ongoing discussions around trie optimizations, fraud proofs, and light client protocols—all critical pieces of the sharding puzzle.