The definitive browser demo of Groth16 vs PLONK, trusted setup vs universal setup.
ZK Proof Lab introduces Schnorr and Fiat-Shamir. SNARK Arena goes deeper into the two systems that power production zero-knowledge systems.
Groth16 (Groth 2016) and PLONK (Gabizon, Williamson, Ciobotaru 2019) are shown side by side with setup assumptions, proof sizes, and verification behavior.
Simulated: Parameters from snarkjs benchmark data.
Awaiting verification...
Trusted Setup Ceremony Visualizer
Security holds if at least one participant destroys toxic waste.
One honest participant: the ceremony is secure if even one participant honestly deletes their randomness. No one can retroactively extract another participant's contribution from the final SRS.
Why this matters: Groth16's tiny proofs and fast verification are ideal when every byte and millisecond matters, but each circuit needs its own phase-2 ceremony.
EXHIBIT 03PLONK Universal Setup
PLONK: Universal Trusted Setup
PLONK uses polynomial commitments and a permutation argument in Lagrange form (ePrint 2019/953).
One universal setup (Powers of Tau) can support many circuits up to a maximum size.
Proofs are larger than Groth16 (typically around 400-500 bytes) with still-fast verification.
Workflow
Powers of Tau (once)
Any circuit under SRS bound
prove -> verify
Simulated: Parameters from snarkjs benchmark data.
Contrast with Groth16: Groth16 requires a new phase-2 ceremony for every circuit. PLONK reuses the same universal SRS — write your circuit today, no ceremony needed.
PLONK Variants
PLONK (original): KZG commitments.
TurboPlonk: custom gates (Aztec).
UltraPlonk: lookups and richer gate systems.
Halo2: no trusted setup via IPA commitments, used in Zcash Orchard and Scroll proving systems.
Why this matters: universal setup lowers deployment friction by removing per-circuit ceremonies for new applications.
EXHIBIT 04Head-to-Head
Groth16 vs PLONK on the Same Circuit
Groth16: x^2 = y
Proof bytes:
Proof size: 128 bytes (BN254)
Verification time: 1.5 ms
Setup type: per-circuit
PLONK: x^2 = y
Proof bytes:
Proof size: 448 bytes
Verification time: 3.9 ms
Setup type: universal
Simulated: byte strings are generated for visualization, with size and timing ranges aligned to snarkjs benchmark conventions.
Comparison Table
Comparison of Groth16 and PLONK proving systems
Property
Groth16
PLONK
Setup type
Per-circuit
Universal (once)
Proof size
128 bytes (BN254)
~400-500 bytes
Verification time
~1-2ms
~3-5ms
Proving time
Fast
Slightly slower
Circuit language
R1CS / circom
PLONKish / Halo2
Trusted setup risk
Circuit-specific
Universal SRS
Recursive SNARKs
Complex
Native in Halo2 variants
Post-quantum safe
No (pairing-based)
No (pairing-based)
Used in
Zcash, Semaphore
Aztec, Polygon zkEVM
Decision Tree
I need smallest proof for fixed circuit -> Groth16.
I need circuit flexibility without new ceremonies -> PLONK.
I need recursive composition -> Halo2.
I cannot run trusted setup -> Halo2 or STARKs.
I need post-quantum security -> STARKs.
Cross-link: Neither Groth16 nor PLONK is post-quantum secure — both rely on pairing-based assumptions. For the post-quantum alternative, see STARK Tower.
Toxic waste is setup randomness. If retained, forged proofs for false statements become possible and soundness collapses.
Verification keys cannot detect forgeries made by a party holding toxic waste. This is a catastrophic failure mode.
MPC ceremonies chain contributions from many participants; security holds if at least one honest participant deletes their randomness.
Groth16 compromise is circuit-scoped to the affected phase-2 setup, while universal setup compromise can affect all circuits using that SRS.
5-Participant Ceremony Simulation
Press a simulation button.
Ceremony Timeline
Zcash Sprout (2016): 6 collocated participants.
Zcash Sapling (2018): 88 participants over 6 weeks.
Hermez 1.0 (2021): 214 participants.
Semaphore: open participation, thousands of contributors.
Ethereum KZG Ceremony for EIP-4844 (2023): approximately 141,000 contributors.
Why this matters: trusted setup is an operational security cornerstone. If it fails, proof security fails completely.
EXHIBIT 06Production Deployments
SNARK Applications in Production
A. Zcash Shielded Transactions (Groth16)
Every shielded transaction proves: "I know a spending key and note commitment that authorizes spending this amount" without revealing either.
Circuit: Sapling circuit, ~4 million constraints. Proof: 192 bytes (BLS12-381), generated in ~2–3 seconds on mobile. Verification: ~10 ms on a full node. Same circuit since 2018 Sapling upgrade.
B. Polygon zkEVM (PLONK/FFLONK)
Proves correct execution of Ethereum EVM bytecode. The proof allows Ethereum mainnet to verify L2 transactions without re-executing them — this is how zkRollups achieve scalability.
Circuit: millions of constraints for EVM opcode coverage. FFLONK (Fast PLONK variant): ~800 byte proofs, ~200 ms verification on-chain.
C. WorldID / Semaphore (Groth16)
Proves: "I am a unique human who has not already voted in this poll" without revealing which human. Uses Groth16 with the Semaphore ceremony.
Enables anonymous, sybil-resistant voting and credential systems.
D. zkLogin (Sui Network, Groth16)
Proves: "I own this OAuth account (Google/Apple)" without revealing which account or its credentials. Enables blockchain accounts controlled by OAuth credentials.
Generates proofs client-side in ~2 seconds.
Why this matters: SNARKs are deployed infrastructure for privacy, identity, and scaling, not only research artifacts.