{
  "type": "failure-mode",
  "name": "Over-constrained circuits and completeness failures",
  "slug": "over-constrained-circuits-and-completeness-failures",
  "section": {
    "id": "audit",
    "number": "03",
    "title": "Auditing a ZK protocol",
    "url": "https://zkpick.com/audit/"
  },
  "url": "https://zkpick.com/audit/failure-modes/over-constrained-circuits-and-completeness-failures/",
  "markdown": "https://zkpick.com/md/audit/failure-modes/over-constrained-circuits-and-completeness-failures.md",
  "detail": "The circuit rejects witnesses that correspond to correct executions: a range check tighter than the specification, an edge case such as zero or the field's maximum value, or a constraint that assumes an invariant the honest prover does not always satisfy. No forged proof results, so the bug is invisible to soundness tooling, but a user with a legitimate claim cannot produce a proof — funds are stuck, a withdrawal path is dead, or a rollup cannot progress until the circuit is redeployed.",
  "mitigation": "Test completeness deliberately: generate valid witnesses across boundary values and assert the proof is produced, fuzz against a reference implementation for rejected-but-valid inputs, and include completeness in the bug-bounty scope. Tools that vet completeness as well as soundness exist for zkVMs and some circuit pipelines.",
  "relatedOptions": [
    {
      "name": "Bug bounties",
      "url": "https://zkpick.com/audit/bug-bounties/"
    }
  ],
  "updated": "2026-09-12",
  "version": "1.3",
  "canonical": "https://zkpick.com/audit/failure-modes/over-constrained-circuits-and-completeness-failures/",
  "license": "https://creativecommons.org/licenses/by/4.0/",
  "authors": [
    "MarketComp"
  ]
}