Hook
Three blocks. That’s all it took to shatter the illusion of zk-rollup immutability. On August 3, 2023, Linea — ConsenSys’s zkEVM — suffered a chain reorganization. Not a classic 51% attack. Not a deep uncle bankruptcy. A 3-block reorg triggered by a single MEV bot that extracted $800k from a Velocore pool. The sequencer, acting on a manual kill switch, rewrote history. The code doesn’t lie. Block #2,080,765 was replaced. The chain state was surgically altered. This wasn’t a bug. It was a design choice. And it exposes the fault line running through every Layer 2 that prioritizes throughput over trust-minimization.
Context
Linea launched on mainnet in July 2023 as a zkEVM rollup. Its architecture mirrors Arbitrum’s timeline: a centralized sequencer with a fraud proof window swapped for validity proofs. The sequencer orders transactions, produces batches, and submits them to Ethereum L1. Users trust the sequencer to include their txs and finalize state. The team retains a "force inclusion" mechanism — but it’s gated by a 7-day delay. That asymmetry is the core issue. On August 3, a MEV bot exploited a Velocore pool via a flashloan sandwich attack. The exploit netted $800k. Linea’s operators froze the bridge, paused the sequencer, and manually reorganized the last 3 blocks to remove the exploit transaction. The reorg was executed via a sequencer restart with a modified state. The L1 proof submission continued, but the L2 chain now diverged from what had been broadcast.
Core Analysis
The attack vector was straightforward. Velocore used a constant product pool with a price oracle vulnerability. The MEV bot called sync() to manipulate reserves, then extracted profit via swap(). Standard flashloan attack. But the reorg is the story.
Sequencer Design Flaw
Linea’s sequencer is a single binary running on ConsenSys infrastructure. It has the authority to reorder, drop, or replace transactions before finalization. In this case, the team detected the exploit and issued a direct command to the sequencer node: roll back the chain by 3 blocks. The command was not a protocol parameter — it was a hot patch applied to the running software. This is equivalent to a database admin rolling back a MySQL transaction after a buggy insert. In a decentralized system, such control should be impossible without a governance vote.
Reorg Mechanics
The reorg was executed by restarting the sequencer with a new genesis block at height 2,080,766. All subsequent blocks (2,080,767, 768, 769) were rebuilt from the new state, excluding the exploit tx. The old blocks still exist on archival nodes. But the canonical chain shifted. Users who transacted in those blocks saw their state reversed. Nonces reset. Token balances restored to pre-exploit levels. The L1 rollup contract still holds the proof for the original state — but the L2 view now disagrees. This creates a fork on L1: the proof proves a state that is no longer considered canonical by the team. The system’s security relies on social consensus, not cryptographic finality.
Code Evidence
Linea’s bridge contract has a function forceIncludeTransaction which is callable by the admin multisig. But the reorg itself wasn’t executed via a bridge transaction. It was a sequencer-level modification. The source code for the sequencer is not fully open — only partial implementations are available. However, the reorg was visible on chain explorers. Block #2,080,765 was marked as "uncled" after the reorg. The new block #2,080,765 has a different state root.