Onchain Atlas

Tornado Cash

A non-custodial zkSNARK mixer on Ethereum that broke the on-chain link between depositor and withdrawer, using fixed-denomination pools and burned admin keys to make the core contracts technically unstoppable.

▶ Run interactive simulation animated mechanism with editable parameters

Statuspartial success
Launched2019-08
ChainsEthereum, BNB Chain, Polygon, Arbitrum, Optimism, Avalanche, Gnosis
Mechanismsfixed-denomination-pools, zkSNARK-membership-proofs, commitment-nullifier-scheme, merkle-tree-accumulator, relayer-network, trusted-setup-ceremony, immutable-contracts, governance-token, anonymity-mining
Official sitehttps://tornado.cash/
Project X@TornadoCash (strongly_inferred)
FoundersRoman Storm, Roman Semenov, Alexey Pertsev

How it works onchain

Diagram of how Tornado Cash's mechanism worksOpen full-size diagram
Original diagram derived from this entry’s researched mechanism description.

Summary

Tornado Cash is a non-custodial privacy protocol on Ethereum, launched in August 2019 by the PepperSec team — Roman Storm, Roman Semenov, and Alexey Pertsev — building on Zcash-lineage zero-knowledge research. Users deposit fixed denominations of ETH (or ERC-20s) into shared pools and later withdraw to a fresh address by presenting a zkSNARK proof of deposit membership, severing the public link between source and destination. In May 2020 the team completed a large multi-party trusted-setup ceremony and burned their admin keys, rendering the core pools immutable, with no owner, pause switch, or upgrade path. By August 2022 it had mixed roughly $7.6 billion of ETH, a meaningful share of it illicit (an estimated $455M+ tied to North Korea's Lazarus Group). The protocol's addresses were sanctioned in August 2022, which cut off front-end access and crushed usage, but the immutable pools themselves kept running throughout and still run today.

Design (Mechanism)

  • Fixed-denomination pools. Separate contracts per amount (0.1 / 1 / 10 / 100 ETH, plus stablecoin pools). Uniform deposits are what create fungible anonymity — a withdrawal of 10 ETH could be any of the pool's 10 ETH deposits.
  • Commitment–nullifier scheme. A depositor locally generates a secret and a nullifier, and submits only their hash (the commitment), which is inserted into an on-chain incremental Merkle tree (MiMC hash, depth 20).
  • zkSNARK withdrawal. To withdraw, the user submits a Groth16 proof that they know a secret behind some leaf in the tree, plus the nullifier hash — revealing neither which leaf nor the secret. The contract records the nullifier hash to prevent double-spends. The circuit was parameterized in a public trusted-setup ceremony (May 2020, over a thousand contributors); one honest participant suffices for soundness.
  • Relayers. Because a fresh withdrawal address has no ETH for gas, third-party relayers submit the withdrawal transaction for a fee taken from the note — closing the classic "gas funding" deanonymization hole.
  • Immutability. After the ceremony, the team destroyed their upgrade capability; the pools have no owner, pause switch, or upgrade path.
  • TORN governance (Dec 2020). A retroactively airdropped governance token with "anonymity mining" — privacy-preserving rewards for leaving deposits in pools longer, deliberately deepening the anonymity set. Governance controls peripherals (relayer registry, treasury), not the core pools.

Outcome

Technically and as a mechanism, Tornado Cash worked: it processed billions in volume, became Ethereum's default privacy layer (used both by Vitalik Buterin for legitimate privacy and by the largest hacking groups on earth), and its core pools have never been exploited or halted. Chainalysis-era estimates put cumulative volume near $7.6B by mid-2022, with roughly 30% tied to illicit sources. Following the August 2022 sanctioning of the protocol's addresses, the website and GitHub were taken down, USDC held in the pools was frozen by Circle, front-end access collapsed, and monthly inflows fell as much as 93%. The contracts themselves kept running throughout via IPFS mirrors and direct interaction, and the sanctions were later lifted. The mechanism itself never broke; the surrounding infrastructure did — hence "partial_success."

Why it worked

  • Correct cryptography, minimal surface. A small, audited circuit and contract set (commitment tree + nullifier set) with no oracle, price, or governance dependency in the core path.
  • Fixed denominations and relayers attacked the two real-world deanonymization vectors (amount correlation and gas-funding trails) rather than just the ledger link.
  • Credible neutrality via immutability. Burning the keys removed both the rug-pull vector and any plausible claim that a person "controlled" the protocol going forward. Immutability was the security model itself.
  • Incentivized anonymity sets. Anonymity mining recognized that a mixer's product is its crowd, and paid users to be the crowd.

Where the design broke

  • No illicit-flow mitigation. The protocol offered no native mechanism (until a late, bolt-on "compliance tool" for voluntary provenance proofs) to let honest users distance themselves from stolen funds, making the whole anonymity set attractive to Lazarus-scale launderers and painting every user with the same brush.
  • The human layer was the attack surface. External pressure targeted the developers, front-end, relayers, and token — everything mutable around the immutable core — and that was enough to crush usage by ~90%+, even though the core contracts kept running.
  • Anonymity-set collapse after usage fell. Privacy degrades with volume; once compliant users fled, remaining flows skewed further illicit, worsening both privacy and optics in a doom loop.

Lessons

  • Immutability changes the whole threat model. Once admin keys are burned, "no one controls it" is literally true, not just a security posture — it removes any lever for future coercion or unilateral change.
  • A privacy system's economics must account for adversarial users. Without in-protocol tools for provenance attestation or illicit-deposit friction, the worst users impose externalities on the entire anonymity set.
  • Decentralize the periphery before you need to. Front-ends, relayer registries, GitHub repos, and tokens were the real chokepoints; the core contract being unstoppable did not make the product unstoppable.
  • Anonymity sets are a commons. Paying users to stay deposited (anonymity mining) is a genuine innovation: it treats privacy as a public good requiring subsidy.

Redesign (EDITORIAL — hypothesis, not fact)

This section is editorial hypothesis, not established fact. A redesigned Tornado would keep the immutable commitment/nullifier core but ship compliance-aware privacy from day one, in the spirit of the later Privacy Pools research (Buterin et al., 2023): withdrawals carry an optional zero-knowledge "association proof" that the note belongs to a user-chosen subset of deposits excluding flagged sources — letting honest users prove dissociation from stolen funds without revealing their deposit, and letting front-ends require such proofs while the base layer stays neutral. Add deposit-side friction for hot stolen funds (e.g., a time-delayed entry window during which watchers can publish exclusion lists that only affect association sets, never custody). Decentralize the periphery pre-launch: multiple independent front-ends on IPFS/ENS, a permissionless relayer marketplace, and no founder-operated infrastructure or fee flows concentrating control in identifiable individuals. Finally, fund development via a retroactive grant or fully distributed token rather than founder-held allocations, so no individual is the protocol's economic beneficiary of record. The hypothesis: most of Tornado's legitimate demand (payroll privacy, donation privacy, whale opsec) was separable from Lazarus-style laundering, and a mechanism that made that separation provable could have kept the anonymity set large and the mechanism's legitimate use undiminished.

Sources

  1. tornado-core (verified protocol source, README + whitepaper links) — primary (contract)
  2. Etherscan — Tornado.Cash 0.1 ETH pool (verified contract) — primary (contract)
  3. Introducing Private Transactions On Ethereum NOW! (team launch post) — primary (docs)
  4. Chainalysis — OFAC Sanctions Tornado Cash (Aug 2022 designation analysis) (analysis)
  5. CoinDesk — Developers of Ethereum Privacy Tool Tornado Cash Smash Their Keys (May 2020) (news)
  6. Steptoe — Treasury Delists Tornado Cash Following the Fifth Circuit's Decision (analysis)
  7. CoinDesk — Roman Storm Guilty of Unlicensed Money Transmitting Conspiracy in Partial Verdict (Aug 2025) (news)
  8. Mayer Brown — The Tornado Cash Trial's Mixed Verdict: Implications for Developer Liability (analysis)
  9. Wikipedia — Tornado Cash (timeline aggregation) (archive)

Related experiments

Last verified: 2026-07-26 · Spot an error? Suggest a correction