require()/revert() is used without a descriptive reason. Failures surface as opaque reverts, complicating debugging, off-chain monitoring, and user-facing error handling.
// require(ok); // reverts with no reason // integrators and users see only 'execution reverted' — hard to diagnose // which invariant failed during an incident.
require(cond, "descriptive reason");
// or a custom error: error NotOwner(); if (msg.sender != owner) revert NotOwner();
Largest recorded losses in the same failure class — related, not the same bug:
The SaferICO scanner runs 201 detectors over your Solidity source, SAFE-0306 among them. Paste an address or the source itself — a small per-scan fee, shown before you sign, or unlimited on any plan.