Rule
zero-amount-set-consumption-review
Review exact surviving Set absence consumption before a zero-inclusive canonical unshielded payout.
Specimen 24 of 96 · Audit-default ordinary rules
- Severity
- info
- Confidence
- varies
- Maturity
- experimental
- Selection
- Audit default
- Policy intent
- not required
- Release
- v0.1.1
- Engine facts used
canonical-invocation-snapshotscollection-observationsall-predicatesexact-numeric-operandscompleted-entries
Selection and scope#
Selected by the default audit profile, so an ordinary scan runs it.
./.nightshade/node_modules/.bin/nightshade ./contracts --detectors zero-amount-set-consumption-review
./.nightshade/node_modules/.bin/nightshade detector show zero-amount-set-consumption-reviewThe first command runs only this rule; --detectors takes a comma-separated list. The second prints the rule's metadata from your installed version.
Severity is review priority. It does not express exploitability or impact. Confidence is detector metadata, not a probability. All built-in rules are experimental.
Compiler scope: the engine supports the pinned profiles 0.28.0, 0.29.0, 0.30.0, 0.31.1, 0.33.0-rc.2, 0.34.0, 0.35.0-rc.1 and 0.35.0, with ZKIR2 by default. Support for this rule can be narrower; the rule documentation below states any narrower scope.
Corpus checks#
Synthetic corpus checks for this rule in the 0.1.1 proof run. A check counts only with compiler acceptance and complete analysis.
| Positive detected | Corrected quiet | Lookalike quiet | Other negative quiet | Incomplete |
|---|---|---|---|---|
| 2/2 | 2/2 | 4/5 | 8/8 | 0 |
Deviations recorded for this rule:
| Case | Kind | Expected to observed lines | Issue |
|---|---|---|---|
| manifest.json / zeroAmountSetConsumptionReview40/drafts/consumption40/intentional-zero-consumption.compact | lookalike | [15] to [15] | control hit |
These are behavior checks on synthetic fixtures, not a precision or recall estimate. See evaluation.
Rule documentation#
From docs/detectors/zero-amount-set-consumption-review.md at v0.1.1.
Availability: default-on informational review. Requires complete ordinary histories with exact collection, invocation and numeric evidence; gaps remain explicit.
This default informational rule reports a canonical unshielded send whose exact modeled amount retains zero, on the same ordinary successful history as an earlier required Set absence and exact-key insertion. The absence is enforced before insertion, its collection revision remains current until insertion, and that insertion survives through completion. Later removal or replacement followed by reinsertion cannot restore the earlier certificate.
Resolved canonical calls and types select applicability. Immutable key and collection-address evidence establishes equality; names, shared wildcard storage paths and exclusive-branch effect unions do not. The rule reuses shared collection consumption and numeric transfers. Matching work is bounded; unavailable histories, operands and exhausted budgets diagnose incomplete analysis.
Zero-value sends and Set consumption can be intentional protocol no-ops. The rule does not infer economic value or replay policy; review the purpose of the send and key before treating the observation as a defect.
Suppress a match#
If a match is intentional, suppress it on the line before with the exact rule ID and a reason of at least eight characters:
// nightshade-disable-next-line zero-amount-set-consumption-review -- Reason this match is intentionalDiagnostics cannot be suppressed, and an unmatched directive for a selected rule makes analysis incomplete. See configuration for fingerprint suppressions and baselines.