Six readings.
Two per risk.
A single detector that reports everything it sees is noise. Six of them are six times the noise. Quorum pairs its lenses two per risk, and each pair reasons from different evidence.
quorum run
Agreement is signal.$ quorum run --targets fixtures/VulnerableVault.sol fixtures/OpenFeeSetter.sol QUORUM VulnerableVault.sol:withdraw reentrancy corroborated by callorder-lens, guard-lens QUORUM OpenFeeSetter.sol:setFeeRate unguarded-state-write corroborated by modifier-lens, sender-lens scanned 12 lens-units | confirmed 2 | recalled 1 | candidates 5
What a lens may not do
No lens can publish a finding on its own. A lens records what it saw and reads nothing about what its peers saw; the tally of who agreed lives on the finding in memory, not inside any agent. A second lens that reaches the same (contract, function, risk) from a different reading is what turns a sighting into a finding.
The lenses are deliberately simple. They are regex-and-brace-matching heuristics over source text, not a compiler front end. The point of this project is the coordination and memory layer; the lenses are the honest minimum needed to have something real to coordinate about.
callorder-lens
reentrancyAn external call precedes a state write in the same function.
- Evidence
- call ordering
- Pair
- guard-lens
guard-lens
reentrancyThe function moves value out and carries no reentrancy guard.
- Evidence
- guard absence
- Pair
- callorder-lens
On audited production code
Run Quorum against audited production contracts and it mostly holds its tongue. On Aerodrome’s Router, WETH9 and a Compound proxy it confirms nothing and files fourteen candidates. That is the intended behaviour, not a failure to find bugs.
Disagreement is kept as a candidate and never published.
modifier-lens
unguarded-state-writeExternally callable, writes storage, carries no modifier at all.
- Evidence
- declaration
- Pair
- sender-lens
sender-lens
unguarded-state-writeWrites a privileged-looking variable with no msg.sender check anywhere on the path.
- Evidence
- reachability
- Pair
- modifier-lens
Not a vulnerability scanner that proves exploits
Quorum publishes corroborated idioms worth review, not confirmed vulnerabilities. A quorum means two independent lenses agreed on a shape, nothing more. The Friend.tech recall on the front page is a pattern match on a call idiom, not an allegation about that contract.
The fixtures in fixtures/ are vulnerable on purpose and are not deployed anywhere.
wrap-lens
unsafe-mathThe compiler lets this storage arithmetic wrap: a pre-0.8 pragma, or an unchecked block.
- Evidence
- compiler context
- Pair
- bound-lens
bound-lens
unsafe-mathNothing in the function bounds the operands before the write.
- Evidence
- guard absence
- Pair
- wrap-lens
Where the count lives
Corroboration is accumulated across lenses, processes and sessions on the finding entity in the WARM tier. A lens has no idea who else agreed with it; memory does.
The memory