Zero-knowledge proofs

zkEVM

A zkEVM is a zero-knowledge proof system that proves the correct execution of the Ethereum Virtual Machine. Every time a rollup processes a batch of transactions, a zkEVM produces a validity proof attesting that the new state root is the genuine result of running those transactions under EVM rules. The payoff is that Ethereum's verifier contract checks one succinct proof instead of re-executing the batch, so the rollup inherits Ethereum's security while doing the heavy computation off-chain — the core of a zk-rollup.

The hard part is that the EVM was never designed to be proven. Its 256-bit words, Keccak hashing, storage as a Merkle Patricia trie, gas accounting, and quirky opcodes are all expensive to express as arithmetic circuits. Vitalik Buterin's well-known taxonomy ranks zkEVMs by how faithfully they match Ethereum: Type 1 is fully Ethereum-equivalent (proves real L1 blocks, slowest); Type 2 is EVM-equivalent (identical to developers, minor internal changes); Type 3 is almost-EVM-equivalent (a few unsupported precompiles or behaviors, easier to build); and Type 4 compiles high-level Solidity down to a different, ZK-friendly VM (fastest to prove, least bytecode-compatible). Lower numbers mean more compatible but slower and harder to prove.

Real systems span the spectrum: Polygon zkEVM and Scroll target Type 2/2.5 bytecode equivalence, zkSync Era and Starknet take the Type-4 language-equivalent route, and Taiko pursues Type 1. All of them combine an arithmetization of EVM execution (often PLONKish with heavy use of lookup arguments for opcodes and byte operations) with recursive aggregation, frequently wrapping the final proof in a small SNARK for cheap on-chain verification.

"EVM-equivalent" and "Ethereum-equivalent" are not the same. A Type-4 zkEVM can run the same Solidity source yet differ at the bytecode and gas level, which can break tools, debuggers, or contracts that depend on exact EVM semantics. Compatibility is a spectrum, not a checkbox.