01 — Proof system · The decision everything else depends on

Choosing a proof system

A proof system in practice is not one choice but three semi-independent ones: an arithmetisation, an interactive protocol, and a commitment scheme. Most of the properties engineers actually care about — proof size, on-chain gas, prover memory, field constraints, post-quantum posture — are set by the commitment layer and the field, not by the name of the SNARK. Getting this decision right first is what makes the rest of the project tractable; getting it wrong is what makes teams rewrite circuits a year in.

Proof size versus on-chain verifier cost A poster-like positioning chart of eight proof families. A red wrapping path carries large FRI-based STARK proofs to compact Groth16 settlement proofs. SMALL LARGE PROOF SIZE CHEAP EXPENSIVE ON-CHAIN VERIFIER COST GROTH16 PLONK FAMILY FFLONK HALO2 + KZG HALO2 + IPA BULLETPROOFS STIR / WHIR FRI-BASED STARKS WRAPPED FOR SETTLEMENT
Fig. 2 · Proof size against on-chain verifier cost · schematic, not benchmarked
The three layers, and which one actually decides things

Think of the stack as arithmetisation (R1CS, PLONKish, AIR, CCS, multilinear) → protocol (polynomial IOP, sumcheck/GKR, folding) → commitment (KZG, FRI, IPA, Merkle plus linear code). Teams argue about the middle layer and are then surprised by consequences that came from the bottom one. If you want to predict proof size, verifier cost and post-quantum posture, look at the commitment scheme and the field first.

The landscape is bimodal, and hybrid by default

Pairing-based systems over BN254 still dominate final on-chain verification, because Ethereum has had a cheap pairing precompile for that curve since 2017 and every deployed verifier targets it; BLS12-381 precompiles (EIP-2537) have been live since the 2025 Pectra upgrade, so a 128-bit-security pairing curve is now also affordable on-chain, but the tooling and the deployed base have not moved yet. Hash-based small-field systems dominate bulk proving. Most production systems therefore use both: prove with a transparent hash-based system, then wrap the result in a pairing-based proof for settlement. Recognise this early — it means "we chose a transparent system" and "we need a trusted setup" are routinely both true. See §04.

Where the benchmarks are, and how to read them

This document does not reproduce benchmark numbers, because they change monthly and depend on hardware, security parameters and workload. It does say where the live ones are. For zkVMs, ethproofs.org publishes per-prover proving time, cost and cluster size on real Ethereum blocks, continuously and with the parameters stated — it is the closest thing to a neutral scoreboard the field has. For fixed programs across zkVMs, the a16z zkVM benchmark harness and the Delendum benchmarking suite compare implementations on identical workloads. Read every figure with its security level, field, hardware, and whether it includes the recursion and wrapping step. The prover-profile table below says, per family, where credible measurements exist and who maintains the implementations.

Two things to check before quoting anyone's security level

First, hash-based systems are configurable across soundness regimes, and vendors routinely ship 96–100 bits rather than 128 — a deliberate, documented performance tradeoff that is easy to miss in a benchmark table. Second, the aggressive "up-to-capacity" proximity-gap conjectures that justified the most optimistic FRI parameters were disproved in late 2025 — with an important qualification: the published counterexamples need fields exponentially large relative to blocklength, and the authors state the results do not apply to the small fields actually used in deployed systems. The practical effect is therefore not that deployed parameters are broken, but that a conjecture people were relying on turned out to be false as stated, and the corrected version costs something. Always demand a written parameter statement rather than a bit count.

Decision criteria · 10

Where the proof is finally verified, and what that costs

This is the hardest constraint in the whole document and it eliminates most of the design space immediately. On a gas-metered chain, verifier cost is dominated by which precompiles the verifier can use; hash-based verifiers get none, so a native FRI verifier on-chain is impractical.

How to evaluateWrite the verifier down as a concrete gas number at a stated instance size, not as a complexity class. For pairing-based systems on Ethereum, budget the pairing precompile plus a per-public-input cost for the input commitment. If the answer is "we will wrap it", price the wrapper — it is the real verifier.

Setup trust model

A circuit-specific setup must be re-run for every circuit change. A universal, updatable SRS is generated once per size bound and reused. A transparent system needs none. This single property determines whether §04 is a workstream or a paragraph.

How to evaluateAsk how often the circuit will change and who runs the ceremony each time. If a setup is required, check whether a reusable public artefact already exists on your curve at sufficient degree — running your own phase 1 is almost never the right answer.

Proof size and verifier work

Proof size drives calldata and data-availability cost, mobile bandwidth, and whether a proof can be gossiped or embedded in another message. The spread across systems is roughly three orders of magnitude.

How to evaluateInsist on numbers at a stated security level and stated instance size, because for hash-based systems proof size is a tunable dial traded against query count and grinding. A size quoted without its security parameters is not a number.

Prover time, memory, and the hardware envelope

Client-side proving — browser, phone, wallet — is usually memory-bound before it is time-bound. A prover needing an SRS proportional to circuit size resident in RAM cannot run where a small-field hash-based prover can.

How to evaluateMeasure peak resident memory, not just wall time, on the actual target device and at the security level you will ship. Ask whether the system supports streaming, chunking or continuation-based proving — folding schemes and continuation-based zkVMs do; a monolithic prover over a huge constraint system does not. Start from the prover-profile table below and the public benchmark suites it points to, then confirm on your own workload.

Recursion and aggregation strategy

Nearly every production system is recursive somewhere: to compress a large proof for settlement, to aggregate many proofs, or to make proving incremental. Recursion friendliness reduces to whether the verifier is cheap to express in the prover's own field.

How to evaluateAsk three concrete questions. Is there an in-circuit verifier already implemented and audited, or would you be writing one? How large is that verifier circuit — this sets your minimum useful step size. Does the design require non-native field arithmetic, which typically dominates the cost?

Field and curve constraints imposed by the statement

If the statement verifies existing signatures or commitments, that arithmetic is non-native in almost every proof system and will dominate cost. If the statement is hashing or bit manipulation, small prime or binary fields with strong lookup support win decisively.

How to evaluateProfile the statement by operation class before choosing a backend, then check the field menu the backend actually offers. Some toolkits expose several fields behind one interface, making this a configuration choice rather than a rewrite.

Statement shape: uniform, non-uniform, lookups and memory

A zkVM proving arbitrary execution has different needs from a fixed membership circuit. Heavy table lookups — bit operations, range checks, instruction decoding — often dominate prover time more than the choice of headline proof system does.

How to evaluateCount lookups and memory operations, not just gates. If lookups dominate, the lookup argument matters more than the choice between one PLONK variant and another. If the machine is non-uniform, check whether you pay for the union of all instructions at every step.

Post-quantum posture, and how much you actually need it

Pairing- and discrete-log-based systems fall to a cryptographically relevant quantum computer; hash-based systems are plausibly post-quantum. But the urgency differs sharply depending on which property you need to survive.

How to evaluateSeparate confidentiality from soundness. If the proof hides a long-lived secret, harvest-now-decrypt-later applies and the zero-knowledge property must be statistical or post-quantum. If only soundness matters, a proof verified and settled today cannot be retroactively forged, so the requirement is much weaker. Note also that a pairing-based wrapper removes the inner system's PQ posture.

Soundness regime and the actual security parameter

Benchmarks are routinely published at different security levels, and hash-based systems can be configured in provable or conjectural regimes. The conjectural regime buys meaningful performance, and the conjectures are not all still standing.

How to evaluateDemand a written parameter statement: field and extension degree, hash output length, rate, number of queries, grinding bits, decoding regime, and explicitly whether the claim is provable or conjectured. Shared calculators now exist for this; use one rather than accepting a bespoke bit count.

Maturity, audit surface and independent implementations

Cryptographic elegance does not survive contact with an underconstrained circuit. The dominant real-world failure mode is not a broken proof system but a broken circuit, transcript or deployment — and mature systems are the ones where those mistakes have already been made and documented.

How to evaluateLook for an independent second implementation of the verifier, which is a strong maturity signal; published audit reports; and presence in neutral catalogues of deployed verifiers. Check repository health directly rather than trusting a launch post.

Selection matrix · 17

Proof system selection matrix

Filter by hard constraint
Proof system families by structural properties
FamilySetupProof sizeOn-chain verificationPQRecursionMaturity
Groth16Circuit-specific3 group elements: 128 B compressed, 256 B as EVM calldataCheapest deployed optionNoVia curve cycles; awkwardProduction since 2016
PLONK familyUniversal, updatableSub-kilobytePractical; above Groth16NoWell-exercisedProduction; most common deployed family
fflonkUniversal~768 B as deployedFewer verifier group ops than PLONKNoAs PLONKWas production in one stack, since retired
Marlin / VarunaUniversal, updatableConstant, above Groth16PracticalNoLimitedProduction in one ecosystem; little greenfield use
Halo2 + IPANoneLogarithmicImpractical — verifier linear in circuit sizeNoNative, via accumulation on a curve cycleYears in production; gadget-layer bug in 2026
Halo2 + KZGUniversal, updatableConstantPracticalNoSupportedProduction; central maintenance declining
FRI-based STARKsNoneTens to hundreds of KBImpractical directly — wrapper is standardPlausiblyWell-exercisedHeavily production
STIR / WHIRNoneMarkedly smaller than FRI at equal securityImpractical directlyPlausiblyInherits FRI approachesResearch maturing into implementation
Binius (binary fields)NoneHash-based scaleImpractical directlyPlausiblyDevelopingEarly production; fast-moving codebase
Ligero / BrakedownNoneSquare-root — largeNot viablePlausiblyUsed as an inner layerEstablished; mostly used as a component
BasefoldNoneBetween Brakedown and FRIImpractical directlyPlausiblyAs a commitment layerResearch-to-production transition
SpartanNone (commitment-dependent)Depends on commitmentNot a settlement candidate aloneCommitment-dependentUsed inside larger systemsEstablished construction, widely built upon
GKR / sumcheck systemsNone (commitment-dependent)Grows with circuit depthWrapper neededCommitment-dependentDevelopingProduction via at least one major zkVM
HyperPlonkCommitment-dependentLarger than univariate PLONK with KZGMore expensive than PLONKCommitment-dependentSupportedInfluential; fewer deployments under its own name
Nova / folding schemesNone in the folding layerAccumulator, not a proof — needs final compressionVia the compressing SNARK onlyNoThis is the whole pointResearch to early production
BulletproofsNoneLogarithmic; small for rangesLinear in circuit size — not succinctNoPoorProduction for range proofs since 2018
LatticeFoldNoneResearch-stageResearch-stageYes (lattice)Designed for itResearch only — not a 2026 production choice
Reading this table

These are structural properties of each design, not benchmark results — implementation performance depends on hardware, circuit shape and optimisation effort and goes stale within months. Proof sizes are order-of-magnitude and assume typical deployed parameters; for hash-based systems size is a dial traded against security, so treat any figure without its parameters as indicative only. "PQ" means the design rests only on hash assumptions, and it is forfeited if you wrap the proof in a pairing-based SNARK.

Prover profile · 17

Prover profile, implementations and benchmarks

Filter
Proof system families by prover cost, memory, off-chain verifier, maintainers and where they are measured
FamilyProver cost profilePeak prover memoryOff-chain verifierImplementations and maintainersWhere it is measured
Groth16256-bit-field MSMs and FFTs; roughly linear in constraints with a high constant. Mature GPU provers exist.Proving key resident in RAM, growing with circuit size — the usual browser and mobile limitMilliseconds: three pairingssnarkjs and rapidsnark (iden3), gnark (Consensys), arkworks, bellman (Zcash lineage), ICICLE GPU backends (Ingonyama)Delendum zk-benchmarking; wrapper cost inside every zkVM benchmark on ethproofs.org
PLONK family256-bit-field FFTs dominate; custom gates and lookups trade prover work for constraint countSRS and witness polynomials resident; comparable to Groth16 at equal sizeMillisecondsBarretenberg / UltraHonk (Aztec), gnark (Consensys), plonky2 (Polygon Zero lineage), Kimchi (o1Labs), Halo2 forksVendor-published only; no neutral cross-implementation suite
fflonkHeavier than PLONK: polynomials are combined to shrink the verifierAs PLONKMillisecondssnarkjs (iden3); formerly Polygon zkEVMHistorical Polygon zkEVM figures only
Marlin / VarunaUniversal-SRS R1CS prover; slower than Groth16 at equal sizeSRS residentMillisecondsarkworks marlin (research), Varuna in snarkVM (Provable / Aleo)Aleo ecosystem figures only
Halo2 + IPAMSM-dominated over the Pasta curve cycle; no pairing-curve FFT bottleneckProportional to circuit size; moderateLinear in circuit size — tens to hundreds of milliseconds for large circuitszcash/halo2 (Electric Coin Company)Zcash Orchard figures; no neutral suite
Halo2 + KZG256-bit-field FFTs over BN254; the largest gadget ecosystem of any PLONKish frontendSRS resident; large circuits need tens of gigabytesMillisecondsprivacy-ethereum/halo2 (Ethereum Foundation PSE, maintenance mode), halo2-lib (Axiom), Scroll's forkScroll and Axiom published figures; no neutral suite
FRI-based STARKsSmall-field hashing and NTTs; the fastest bulk provers on CPU and GPU, and the basis of most zkVMsTrace-proportional, but small fields keep it low; continuations bound itMilliseconds to tens of milliseconds — hashing onlyStone and Stwo (StarkWare), Plonky3 (Polygon Zero lineage; beneath SP1 Turbo, OpenVM, Ziren, Pico), RISC Zero, Miden, ZKsync Airbender (Matter Labs), Winterfellethproofs.org real-time Ethereum block proving; a16z zkvm-benchmarks
STIR / WHIRComparable to FRI; the WHIR prover is somewhat heavierAs FRISub-millisecond for WHIR in the authors' reported settingsReference implementations by the authors; integrations into production hash-based stacks under wayAuthors' comparisons only; measure on your own parameters
Binius (binary fields)Binary-field arithmetic maps to hardware bit operations; strongest on hashing and bitwise workloadsLow — tiny field elements, no embedding overheadMillisecondsBinius64 (Irreducible); the original binius repository is archivedIrreducible's published figures; few independent measurements
Ligero / BrakedownLinear-time encoding — the cheapest commitment prover, paid for in proof sizeLowSublinear, but large proofs to hashLigero (Ligero Inc.), Brakedown in the Lasso and Jolt lineage (a16z crypto), arkworksComponent-level measurements only
BasefoldLinear-time encoding plus a FRI-like fold; between Brakedown and FRILowPolylogarithmicCeno (Scroll) and research implementationsComponent-level measurements only
SpartanSumcheck over sparse R1CS; no FFT; linear in non-zero constraint entriesLow and streaming-friendlySublinear after preprocessing; commitment-dependentSpartan (Microsoft Research), inside Jolt (a16z crypto) and NexusOnly inside zkVM benchmarks
GKR / sumcheck systemsLinear-time; commits only to the input layerLow relative to trace sizeGrows with circuit depthExpander (Polyhedra), Ceno (Scroll), SP1 Hypercube's sumcheck design (Succinct)ethproofs.org for the zkVMs built on it; Polyhedra's published figures
HyperPlonkSumcheck-based, linear-time, no FFT; high-degree gates are cheapLowHigher than univariate PLONKEspresso Systems research implementation; ideas absorbed into other stacksPaper figures only
Nova / folding schemesTwo MSMs per step — the cheapest incremental step knownBounded by one step plus the accumulatorOnly after final compressionNova (Microsoft Research), Sonobe (Ethereum Foundation lineage), arecibo (Argument Computer)Repository benchmarks only; no neutral suite
BulletproofsLinear MSMs; slow for general circuitsLowLinear in circuit size; batchabledalek bulletproofs (Rust), Monero, Bulletproofs+ in several walletsRange-proof figures in Monero and dalek benchmarks
LatticeFoldResearch-stageResearch-stageResearch-stageResearch prototypes; a lattice-based Jolt variant was announced by a16z crypto in September 2026None neutral
Reading this table

Prover cost and memory are stated as profiles — what dominates and how it scales — rather than as numbers, which belong in the benchmark suites named in the last column. "Off-chain verifier" is the cost of a native verifier on a server or client, the number that matters when no gas-metered contract is involved. "Implementations" names who maintains the code you would actually run; a construction with one implementation and one maintainer is a different risk from one with five.

Commitment schemes · 10

Commitment schemes — the layer that decides most of it

Filter
Polynomial commitment schemes by setup, cost and field requirements
SchemeAssumptionSetupOpening sizeVerifier costField constraint
KZGPairingsStructured, universalConstantConstant; precompile-backedPairing-friendly curve, 256-bit scalar field
Multilinear KZG (PST, Zeromorph, HyperKZG)PairingsStructured, universalLogarithmic — hundreds of bytesConstant pairings plus a logarithmic number of group operations; EVM-practicalPairing-friendly curve, 256-bit scalar field
HyraxDiscrete log (Pedersen)NoneSquare-rootSquare-root MSMAny prime-order group
DoryPairings, transparent (no trapdoor)None — public generatorsLogarithmicLogarithmic, with pairingsPairing-friendly curve
FRIHash (collision resistance)NonePolylogarithmic but large in absolute termsPolylogarithmic; expensive on-chainHigh two-adicity; extension for challenges
IPA / Bulletproofs-styleDiscrete logNoneLogarithmicLinear unless amortised by accumulationAny prime-order group; enables curve cycles
Brakedown / LigeroHash + linear codesNoneSquare-root — largeSublinear, not polylogarithmicField-agnostic
BasefoldHash + foldable codesNoneBetween Brakedown and FRIPolylogarithmicField-agnostic — no two-adicity requirement
WHIRHash + constrained RS codesNoneSmaller than FRI at equal securityReported in hundreds of microsecondsReed-Solomon-friendly
Binius commitmentsHash over binary fieldsNoneHash-based scalePolylogarithmicBinary field towers
Reading this table

Two systems built on the same commitment scheme will resemble each other on proof size, verifier cost and post-quantum posture far more than two systems sharing a protocol name but differing here. When comparing proof systems, check this table first. Sumcheck-based systems — Spartan, HyperPlonk, Jolt, GKR stacks — need a multilinear commitment, which is why the multilinear KZG variants, Hyrax and Dory appear here alongside the univariate schemes.

Systems, commitments and lookup arguments · 11 pages

Groth16 Pairing-based SNARK A stable circuit verified on-chain at high frequency where gas is the binding constraint. Also the standard final compression layer for STARK-based systems. PLONK and the PLONKish family Pairing-based SNARK, universal SRS General-purpose circuits where churn is expected and a per-circuit ceremony would be painful, and where on-chain verification is required but need not be absolutely… FRI-based STARKs Transparent hash-based proof system High-throughput server-side proving of large computations, especially zkVM execution, where a final wrapper handles settlement. Halo2 with IPA, and Halo2 with KZG PLONKish SNARK — two distinct trust models IPA: systems verified on a node rather than in a gas-metered contract, where trusted setup is unacceptable. Nova, SuperNova and HyperNova Folding schemes / IVC Long, repetitive computations and memory-constrained provers, where the final compression step happens once. Binius and binary-field systems Transparent hash-based, binary fields Hash- and bitwise-heavy workloads, and client-side proving, for teams able to track a fast-moving codebase. STIR and WHIR Hash-based low-degree tests Replacing FRI where hash-based proof size or verifier latency is the binding constraint, for teams who will follow the literature. GKR-based systems Sumcheck / interactive proofs Wide, shallow, highly parallel workloads — bulk hashing, signature aggregation, inference — and zkVMs using a multilinear arithmetisation. Spartan Transparent SNARK for R1CS An intermediate proof layer, or the theoretical core of a zkVM — particularly when you want to change commitment schemes without changing arithmetisation. Bulletproofs Transparent discrete-log argument Range proofs and small confidential-transaction statements verified by full nodes. Lookup arguments: Plookup, LogUp, cq, Lasso/Shout/Twist Cross-cutting — often the real cost driver Evaluate the lookup argument explicitly whenever range checks, bitwise operations or instruction decoding dominate your constraint count.

How to run the selection · 8 steps

  1. Write down the verification environment as a number

    Where is the proof verified, and what is the budget — gas, milliseconds, bytes? This single constraint eliminates most of the design space, and it is the one teams most often leave qualitative.

  2. Classify the statement by operation mix

    Count foreign-field operations, hash invocations, range checks and memory accesses separately. The dominant class determines whether a small-field, binary-field or 256-bit-field system is right, far more than the protocol name does.

  3. Decide the setup posture deliberately

    Is a trusted setup acceptable to your users and governance? Will the circuit change after launch? Answer these before comparing performance, because they cut the field decisively and they are the hardest to reverse.

  4. Choose the commitment scheme, then the protocol

    Work bottom-up. The commitment scheme and field fix proof size, verifier cost and post-quantum posture; the protocol layered on top is a comparatively free choice among those that fit.

  5. Design the recursion and wrapping strategy now, not later

    Decide whether you will wrap for settlement, what the wrapper costs, and what setup the wrapper needs. Teams that defer this discover late that their transparent system depends on a ceremony after all.

  6. Write the security parameter statement

    Record field and extension degree, hash output length, rate, query count, grinding bits, decoding regime, and whether the claim is provable or conjectured. Use a shared soundness calculator rather than a bespoke derivation. This document is an audit artefact — see §03.

  7. Prototype the dominant cost, at the shipping parameters

    Build the most expensive component in the top two candidates and measure prover time, peak memory and verifier cost at the security level you will actually deploy — not at benchmark parameters.

  8. Record the decision, its assumptions and its expiry conditions

    State what would force a revisit: a conjecture falling, a wrapper cost change, a field requirement shifting. This decision has the longest half-life in the project and deserves an explicit record.

Where proof system decisions go wrong · 10

Sources for this section · 40

  1. Groth16 — On the size of pairing-based non-interactive argumentspaper
  2. PLONK — permutations over Lagrange bases for oecumenical noninteractive argumentspaper
  3. fflonk — a fast-Fourier inspired verifier efficient variant of PLONKpaper
  4. Marlin — preprocessing zkSNARKs with universal and updatable SRSpaper
  5. Halo — recursive proof composition without a trusted setuppaper
  6. Nova — recursive zero-knowledge arguments from folding schemespaper
  7. Spartan — efficient and general-purpose zkSNARKs without trusted setuppaper
  8. Bulletproofs — short proofs for confidential transactions and morepaper
  9. Scalable, transparent, and post-quantum secure computational integrity (STARKs)paper
  10. Proximity gaps for Reed–Solomon codespaper
  11. Circle STARKs — making Mersenne-31 usable for FRI-based systemspaper
  12. ethSTARK documentation — concrete soundness parameterspaper
  13. Binius — succinct arguments over towers of binary fieldspaper
  14. Basefold — field-agnostic multilinear polynomial commitmentpaper
  15. Brakedown — linear-time and field-agnostic SNARKs for R1CSpaper
  16. STIR — Reed–Solomon proximity testing with fewer queriespaper
  17. WHIR — Reed–Solomon proximity testing with super-fast verificationpaper
  18. Libra — succinct zero-knowledge proofs with optimal prover computation (GKR)paper
  19. HyperPlonk — PLONK with linear-time prover and high-degree custom gatespaper
  20. Signatures of correct computation (PST) — the original multilinear KZG commitmentpaper
  21. Zeromorph — multilinear evaluation proofs from univariate KZGpaper
  22. Hyrax — doubly-efficient zkSNARKs without trusted setup (square-root Pedersen commitment)paper
  23. Dory — transparent logarithmic-size arguments for inner products and polynomial commitmentspaper
  24. LatticeFold+ — post-quantum folding from latticespaper
  25. Plookup — a simplified polynomial protocol for lookup tablespaper
  26. Multivariate lookups based on logarithmic derivatives (LogUp)paper
  27. cq — cached quotients for fast lookupspaper
  28. Twist and Shout — memory checking arguments for zkVMspaper
  29. SoK: Trusted setups for powers-of-tau stringspaper
  30. EIP-1108 — reduced gas cost for alt_bn128 precompilesspec
  31. EIP-2537 — BLS12-381 curve operations precompilespec
  32. EIP-4844 — shard blob transactions and the KZG commitment schemespec
  33. soundcalc — soundness parameter calculator for hash-based systemstool
  34. L2BEAT ZK Catalog — catalogue of deployed on-chain verifierscatalogue
  35. ethproofs.org — continuous real-time proving benchmarks on Ethereum blocks, per prover, with cost and hardwarebenchmark
  36. a16z zkvm-benchmarks — fixed-program comparison harness across zkVMsbenchmark
  37. Delendum zk-benchmarking — cross-implementation benchmarks of proof systems and zkVMsbenchmark
  38. ZKProof Community Reference — terminology and security recommendationsreference
  39. Plonky3 — polynomial IOP toolkit over small fieldsproject
  40. Wrapping up the KZG ceremony — the largest deployed universal SRSrecord
Cite this page
MarketComp (2026). Choosing a proof system. The ZK Field Manual (Version 1.3). MarketComp. https://zkpick.com/proof-systems/
@misc{zkfieldmanual-choosing-a-proof-system,
  title        = {Choosing a proof system — The ZK Field Manual},
  author       = {MarketComp},
  year         = {2026},
  version      = {1.3},
  howpublished = {\url{https://zkpick.com/proof-systems/}},
  note         = {Accessed: YYYY-MM-DD}
}