---
title: "Unconstrained hints not re-checked by the caller"
description: "Modern DSLs let you compute a value outside the constraint system for efficiency — an unconstrained function, an unsafe block, a witness hint — on the…"
type: "failure-mode"
url: "https://zkpick.com/audit/failure-modes/unconstrained-hints-not-re-checked-by-the-caller/"
section: "03 Auditing a ZK protocol"
authors:
  - "MarketComp"
publisher: "MarketComp"
version: "1.3"
updated: "2026-09-12"
license: "CC-BY-4.0"
json: "https://zkpick.com/data/audit/failure-modes/unconstrained-hints-not-re-checked-by-the-caller.json"
---

*By MarketComp. Updated 2026-09-12. Version 1.3. CC BY 4.0.*

# Unconstrained hints not re-checked by the caller

Modern DSLs let you compute a value outside the constraint system for efficiency — an unconstrained function, an unsafe block, a witness hint — on the understanding that the caller will constrain the result afterwards. Nothing in the language enforces that obligation, and the comment conventions surrounding it are advisory. A hint that is used but never re-constrained is an underconstrained circuit with a friendlier syntax.

**Mitigation:** Treat every unconstrained or unsafe block as a review checkpoint with an explicit written obligation: what the caller must verify, and where that verification happens. Grep for them and enumerate them in the audit scope rather than trusting the accompanying comment.
