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.

EXHIBIT 01Definition and Properties

What is a zk-SNARK?

SNARK means Succinct Non-interactive ARgument of Knowledge.

Succinct: proof is small (often hundreds of bytes) regardless of computation size.

Non-interactive: prover sends one message; no back-and-forth transcript.

Argument of Knowledge: verifier is convinced prover knows a witness satisfying the circuit.

Completeness: honest prover with valid witness is accepted.

Soundness: cheating prover without witness is rejected except negligible probability.

Zero-knowledge: proof reveals nothing about the witness beyond validity.

A circuit is an arithmetic constraint system over a finite field. Example for x^3 + x + 5 = 35:

v1 = x * x, v2 = v1 * x, v2 + x + 5 = 35.

Groth16 is per-circuit setup with smallest proofs and fastest verification. PLONK is universal setup with more circuit flexibility.

For foundational Schnorr, Fiat-Shamir, and commitment mechanics, see ZK Proof Lab.

Why this matters: zk-SNARKs underpin Zcash private transfers, zkEVM rollups, zkLogin, Semaphore identity proofs, and anonymous credential systems.
EXHIBIT 02Groth16 Per-Circuit Setup

Groth16: Per-Circuit Trusted Setup

Groth16 is a pairing-based SNARK over curves like BN254 and BLS12-381 using QAP-style encodings (Groth, EUROCRYPT 2016).

Setup has Powers of Tau plus a circuit-specific phase 2 that emits proving key and verification key.

Proof has three group elements (A, B, C). On BN254 this is 128 bytes; on BLS12-381 this is 192 bytes.

Workflow
Circuit definition
Powers of Tau (universal)
Phase 2 (circuit-specific)
proving key + verification key
prove -> verify
Sample Parameters: x^2 = 9

Constraint count: 2

Proving key size: 42 KB (simulated educational profile)

Verification key size: 1.6 KB (simulated educational profile)

Proof size: 128 bytes (BN254)

Proof bytes (hex, truncated):

Verification time: 1.4 ms

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.

Examples: Zcash Sapling (88 participants, 2018), Hermez (214 participants, 2021), Semaphore (open participation, thousands of contributors).

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.
Sample Parameters: x^2 = 9

Proof size: 448 bytes

Proof bytes (hex, truncated):

Verification time: 3.8 ms

Awaiting verification...
Universal Setup Visualizer
Circuit A -> same universal SRS
Circuit B -> same universal SRS
Circuit C -> same universal SRS

SRS examples: 2^14 constraints ≈ 256 MB, 2^21 constraints ≈ 2 GB.

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
PropertyGroth16PLONK
Setup typePer-circuitUniversal (once)
Proof size128 bytes (BN254)~400-500 bytes
Verification time~1-2ms~3-5ms
Proving timeFastSlightly slower
Circuit languageR1CS / circomPLONKish / Halo2
Trusted setup riskCircuit-specificUniversal SRS
Recursive SNARKsComplexNative in Halo2 variants
Post-quantum safeNo (pairing-based)No (pairing-based)
Used inZcash, SemaphoreAztec, 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.
STARK Tower (post-quantum alternative)
EXHIBIT 05Trusted Setup Security

Trusted Setup Problem in Depth

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.