Securityintermediatearticle25 min read

Proofs as small as a phone scratch card

Why ZK proof size matters: a Groth16 SNARK proof is ~128-200 bytes — the size of a phone scratch card — and how proof size drives on-chain cost.

Vietcardano teamTeam

Đội ngũ biên tập VietCardanoCommunity — các chuyên gia blockchain và Cardano, cung cấp nội dung giáo dục và nghiên cứu chuyên sâu cho cộng đồng.

Published August 31, 2026Updated August 30, 2026

Walk into any Vietnamese convenience store and you'll see them by the counter: phone scratch cards (thẻ cào). Thin, palm-sized, worth a few thousand đồng. You scratch off the silver film, read the code, and top up your phone in seconds. Nobody weighs them. Nobody worries about shipping them. A scratch card is so small that its transport cost is effectively zero — the value is in the code, not the cardboard.

Now imagine that a cryptographic proof — the mathematical evidence that a zk-rollup processed 10,000 transactions correctly, or that your income statement is real without revealing the numbers — could be just as small. That's the promise behind the smallest proofs in zero-knowledge cryptography: kích thước proof zk (ZK proof size) measured in hundreds of bytes, not kilobytes or megabytes.

A Groth16 SNARK proof — the workhorse of privacy coins and zk-rollups — is just 3 group elements, roughly 128–200 bytes. That's literally the size of a phone scratch card's printed code. It verifies in milliseconds and costs almost nothing to post on-chain.

This article explains how a proof gets that small, why proof size is a price tag (every byte you send on-chain costs gas), and when a tiny proof beats a bulky one — and when it doesn't.


What "proof size" actually means

Every zero-knowledge proof is a message: the prover sends data to the verifier that proves "this computation was executed correctly" without revealing the secret inputs. Proof size is simply the number of bytes in that message.

Three things scale with proof size, and they're the reason this article matters:

  1. On-chain cost. On Ethereum, sending calldata costs 16 gas per non-zero byte (EIP-2028). A 200-byte proof costs ~3,200 gas just to deliver — trivial. A 100 KB proof costs ~1.6 million gas. For a rollup, proof size is literally transaction cost.
  2. Verification speed. The verifier must read and process the proof. Smaller proofs are typically faster to check (a Groth16 proof checks in ~1-5 ms with three pairing equations).
  3. Storage and bandwidth. On-chain data lives forever. Mobile wallets and light clients must download and store it. A 128-byte proof syncs instantly on a budget Android phone; a 100 KB proof is a burden.

The punchline: proof size is not an aesthetic detail — it's a cost line.


Groth16: The proof that fits in a scratch card

The smallest practical proofs come from Groth16, a SNARK scheme introduced by Jens Groth in 2016 and used by Zcash, Tornado Cash, and early zk-rollups.

The anatomy: exactly 3 group elements

A Groth16 proof is precisely three group elements, conventionally labeled A, B, and C:

` Proof = (A, B, C)

A ∈ G₁ (32 bytes compressed) — encodes the witness B ∈ G₂ (64 bytes compressed) — encodes the witness (second group) C ∈ G₁ (32 bytes compressed) — enforces the computation constraints

Total: ~128 bytes raw, ~200 bytes with encoding overhead `

  • A and C are points on one elliptic curve group (G₁); B is a point on a second group (G₂). Using two groups is what makes the pairing-based verification work.
  • The verifier checks one pairing equation that ties A, B, C to the public inputs. If the equation balances, the proof is valid.
  • The 128–200 byte range covers every Groth16 proof regardless of the size of the underlying computation — that's what "succinct" means. Proving 1 transaction or 10,000 transactions produces the same tiny proof.

Where the size comes from

Groth16's smallness is a deliberate design choice:

  • Constant-size: proof size depends only on the scheme, not the computation. A giant circuit still yields 3 group elements.
  • Pairing-based verification: the verifier does a fixed number of pairing operations, independent of the computation's complexity.

This is why "zk proof 128 byte" is not marketing hype — it's the mathematical output of the scheme.


Phone scratch card analogy: tiny SNARK proof vs bulky STARK proof

Figure 1: Proof size — a scratch card (SNARK) vs a notebook (STARK)


The tradeoff: why STARK proofs are bulky

If Groth16 proofs are scratch cards, STARK proofs are thick notebooks. A STARK proof for a large computation is typically 10–100 KB — 50 to 500 times bigger than a Groth16 proof.

Why? STARK achieves something Groth16 doesn't: transparency (no trusted setup ceremony, no secret parameter to leak). It does this by replacing the single secret-based commitment with a Merkle tree of polynomial evaluations (the FRI protocol). The proof must include:

  • The Merkle root committing to the execution trace
  • Authentication paths for every queried position
  • Folded polynomials across many FRI rounds

All of that is much larger than three group elements. The scalability in "STARK" refers to proving (huge computations) — but the proof itself balloons.

The size tradeoff, honestly stated

PropertyGroth16 SNARKSTARK (FRI)
Proof size~128-200 bytes10-100 KB+
Verification~1-5 ms (3 pairings)~10-50 ms (hash-based)
Trusted setupYesNo
Quantum resistanceNo (pairings)Yes (hashing)

Smaller proof ≠ better proof. STARK is bigger because it removed the trusted setup. Proof size is a tradeoff axis, not a universal winner. A 200-byte proof with a trusted setup may be the wrong choice if the setup ceremony is unacceptable.


Why size matters on-chain: the gas math

The most concrete place proof size bites is on-chain verification. Let's do the arithmetic.

Calldata: 16 gas per byte

On Ethereum, each non-zero byte of calldata costs 16 gas (EIP-2028). A proof must be delivered as calldata to the verifying smart contract:

` Proof size Calldata cost (at ~10 gwei, ETH ≈ $2,000) ──────────────────────────────────────────────────────────── 128 bytes ~2,048 gas ≈ $0.04 (a scratch card!) 200 bytes ~3,200 gas ≈ $0.06 1 KB ~16,000 gas ≈ $0.32 100 KB (STARK) ~1.6M gas ≈ $32 (a notebook) `

That's the difference between a fee your grandma wouldn't notice and a fee that eats the entire rollup's profit margin.

Verification: another price tag

Beyond delivery, the contract must check the proof:

  • Groth16 on-chain: ~200k gas (~$4 at the same rates) — uses Ethereum's precompiles for pairings.
  • Raw STARK on-chain: ~5M gas (~$100) — FRI verification is not EVM-friendly.

Combined, verifying a Groth16 proof on Ethereum costs roughly ~$4-5. Verifying a raw STARK costs ~$130. For a rollup posting proofs every few minutes, this is a decisive business decision.

Why rollups compress

A zk-rollup batches thousands of transactions into one proof. If that proof were 100 KB, calldata alone would make the rollup uneconomical. So production rollups use a hybrid pipeline:

`

  1. Prove the batch with STARK (transparent, scalable prover)
  2. Compress the STARK into a SNARK (recursive proof composition)
  3. Post the tiny SNARK (~200 bytes) on-chain — the scratch card
`

This is exactly what StarkNet (SHARP → Groth16) and zkSync Era (STARK → PLONK) do. They get STARK's transparent proving and SNARK's scratch-card-sized settlement proof.


On-chain cost: proof size drives calldata gas and rollup settlement economics

Figure 4: The gas math — why proof size matters on-chain


Groth16 proof anatomy: three group elements A, B, C compose the proof

Figure 2: Groth16 proof anatomy — 3 group elements (~128-200 bytes)


When proof size matters most

Proof size is a constraint, and constraints only matter in constrained environments. Here's when it decides everything:

Size matters:

  1. On-chain settlement — calldata + verification gas dominate (the math above).
  2. Mobile and light clients — a 128-byte proof syncs instantly and verifies in microseconds on a low-end phone.
  3. Frequent proofs — if you post many proofs (every rollup batch, every oracle update), size compounds.
  4. Limited bandwidth — rural areas, slow connections, tiny devices.

Size matters less:

  1. Off-chain verification — a server can verify a 100 KB STARK comfortably.
  2. One-time or rare proofs — a periodic compliance report, a settlement every few hours.
  3. When blobs are used — EIP-4844 introduced ~128 KB blob data at a much lower cost, softening the calldata penalty for data (though verification still prefers small proofs).

The mental model

Ask: "Where is this proof verified, and how often?" If the answer is "on-chain, frequently" → tiny proofs win. If it's "off-chain, occasionally" → size barely matters and transparency/quantum-resistance may matter more.


The scratch-card decision framework

ScenarioBest choiceWhy
zk-rollup settling on Ethereum every few minutesSNARK (Groth16/PLONK)Scratch-card calldata + fast verification
Privacy coin (Zcash-style)SNARKTiny proofs in normal transactions
Huge VM execution, no trusted setup allowedSTARK (+ SNARK wrapper for settlement)Transparent proving, compress at the end
Quantum-resistant long-term archivesSTARKHash-based security
Mobile-first consumer appSNARKInstant sync, negligible bandwidth

ZK proof size comparison: SNARK vs STARK across setup, size, verification, tradeoff

Figure 3: ZK proof size comparison — SNARK vs STARK


FAQ: Your Questions Answered

Q: Is a ZK proof really just 128 bytes?

A: A Groth16 proof is exactly 3 group elements: ~128 bytes raw, ~200 bytes once encoded into a transaction. Yes — that's the actual output of the scheme, and it's independent of how large the computation being proven is.

Q: Why do people say "zk proof 128 byte" instead of larger numbers?

A: Because Groth16 (the most widely deployed SNARK) produces ~128 bytes. Other schemes — PLONK (~1-2 KB), Halo2 (~5-10 KB), STARK (10-100 KB) — are larger because they trade proof size for other properties like universal or transparent setup.

Q: Does bigger proof size mean more secure?

A: No. Security comes from the underlying assumptions (pairing hardness for SNARK, hash collision resistance for STARK), not from byte count. STARK is bigger for transparency, not for security.

Q: How much does proof size cost on Ethereum?

A: Calldata costs 16 gas per non-zero byte. A ~200-byte Groth16 proof costs ~3,200 gas to deliver and ~200k gas to verify (roughly $4-5 total). A 100 KB STARK costs ~1.6M gas to deliver and ~5M gas to verify (roughly $130+).

Q: Do zk-rollups actually use tiny proofs?

A: Yes. StarkNet and zkSync Era prove with STARKs but compress to Groth16/PLONK SNARKs before posting on-chain. The on-chain proof — the scratch card — is what users and L1 contracts see.

Q: Is a small proof always better?

A: No. A tiny Groth16 proof requires a trusted setup. If you can't accept that ceremony (or need quantum resistance), the larger STARK proof is the right trade. Choose based on where the proof is verified and how often.

Summary: The scratch card principle

A phone scratch card works because it's small enough to be worthless to ship and quick enough to redeem on the spot. ZK proofs work the same way: kích thước proof zk determines whether proving something is a rounding error in your fee budget or a line item that breaks your product.

The smallest proofs — Groth16's 3 group elements, ~128–200 bytes — are the cryptography equivalent of a scratch card. They're cheap to deliver, instant to verify, and they're why zk-rollups can settle thousands of transactions for pocket change. Bigger, transparent STARK proofs earn their bulk when trust and quantum-resistance matter more than bytes.

The next time you top up a phone with a thẻ cào, remember: the code on that card is roughly the size of a zero-knowledge proof — and the proof might be the most valuable tiny thing on the blockchain.


Word count: ~1,700 | Primary keyword: "kích thước proof zk" | Secondary: "zk proof 128 byte", "snark proof size"

Tags:

kích thước proof zkzk proof 128 bytesnark proof size