Rule
circuit-cost
Expanded source-operation estimate exceeds the review threshold; this is not a proof-row estimate.
Specimen 02 of 96 · Audit-default ordinary rules
- Severity
- info
- Confidence
- high
- Maturity
- experimental
- Selection
- Audit default
- Policy intent
- not required
- Release
- v0.1.1
- Engine facts used
cfgresolved-callsstatic-loop-bounds
Selection and scope#
Selected by the default audit profile, so an ordinary scan runs it.
./.nightshade/node_modules/.bin/nightshade ./contracts --detectors circuit-cost
./.nightshade/node_modules/.bin/nightshade detector show circuit-costThe 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 |
|---|---|---|---|---|
| 1/1 | 1/1 | 1/1 | 0/0 | 0 |
No deviations were recorded for this rule.
These are behavior checks on synthetic fixtures, not a precision or recall estimate. See evaluation.
Rule documentation#
From docs/detectors/circuit-cost.md at v0.1.1.
Availability: default-on; no policy required. Severity info, confidence high for the source estimate. Use --min-severity low to hide informational findings, or --detectors circuit-cost to select only this rule.
Reports analyzed program entries whose expanded source-operation upper bound exceeds 10,000 units. Static loops and callees contribute repeated work; both branch alternatives are counted conservatively.
Example and review scenario#
The compiler-0.34.0-qualified owned Counter fixture nests ranges 0..40 and 0..64, repeating the increment 2,560 times. Its correction performs one increment. Review accidental repeated work or an unexpectedly large expanded circuit before deciding whether optimization is needed.
Recommendation: inspect loop sizes and repeated callees, then measure actual compiler/prover cost. Use circuit-work-budget for project-specific policy thresholds.
False positives and limitations#
Large circuits can be intentional; the fixed threshold is an informational review aid. Units are not proof rows, optimized compiler cost, memory usage, runtime or prover time. A match is not a denial-of-service finding. An unavailable finite estimate or exhausted visit allowance emits an incomplete diagnostic.
Source examples#
These short regression examples are included here for installed-package readers. Rule-specific policy requirements and limits above still apply.
Example 1#
Counter fixture (source: tests/corpus/informational/circuit-cost-positive.compact).
// This file is part of midnightntwrk/example-counter.
// Copyright (C) Midnight Foundation
// SPDX-License-Identifier: Apache-2.0
// Licensed under the Apache License, Version 2.0 (the "License");
// You may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
pragma language_version >= 0.20;
import CompactStandardLibrary;
// public state
export ledger round: Counter;
// Nightshade owned informational regression; adapted from example-counter.
export circuit increment(): [] {
for (const i of 0..40) { for (const j of 0..64) { round.increment(1); } }
}Example 2#
Correction (source: tests/corpus/informational/circuit-cost-corrected.compact).
// This file is part of midnightntwrk/example-counter.
// Copyright (C) Midnight Foundation
// SPDX-License-Identifier: Apache-2.0
// Licensed under the Apache License, Version 2.0 (the "License");
// You may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
pragma language_version >= 0.20;
import CompactStandardLibrary;
// public state
export ledger round: Counter;
// Nightshade owned informational regression; adapted from example-counter.
export circuit increment(): [] {
round.increment(1);
}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 circuit-cost -- 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.