Soundness Coverage looks at a ZK circuit the way an attacker does: it asks which signals the constraints actually pin down, and which ones a malicious prover could still choose freely. You run coverage over the circuit, and it reports the signals that diverged — the places where the constraint system leaves a witness under-determined.
Why it exists
The dominant bug class in zero-knowledge circuits is not a leak or an overflow — it is a missing constraint. A signal that is computed but never constrained lets a prover substitute any value and still produce a valid proof, which breaks soundness completely. These gaps are invisible in a passing test suite, because honest inputs never exercise them. Soundness Coverage surfaces them directly by measuring which signals the constraints hold down and which they do not.
Who uses it
- Circuit auditor — checks a circuit for under-constrained signals before it is trusted with real value.
- ZK researcher — compares a suspect circuit against a well-constrained baseline to isolate where soundness breaks.
How to open it
- Sidebar → Analysis → Soundness Coverage.
- Direct URL —
/zk-coverage.
Running coverage
- Run coverage over the circuit’s constraints.
- Read the result: signals that are fully constrained versus those that diverged — the under-constrained ones an attacker could exploit.
- Compare against a reference with Load well-constrained sample, or explore the feature with Load demo data.
- Export the findings as CSV or JSON, or take the full session JSON for your own tooling.
Limits
- Coverage identifies where constraints are missing; deciding whether a given gap is exploitable still needs a human reading the circuit’s intent.
- It analyses the constraint system’s structure — it is a soundness check, not a proof of overall circuit correctness.
Related pages
- ZK Studio — inspect and work with the circuit the coverage runs against.
- ZK Verifier — analyse the on-chain verifier that accepts the circuit’s proofs.