A smart contract audit is an external review of code before deployment: a security firm reads the contracts, tests attack scenarios, and publishes findings with severity ratings. Audits catch real classes of bugs and are table stakes for any serious protocol. What they are not is a warranty — the review is time-boxed, scoped to a specific commit of the code, and silent about everything outside the scope, which is where many of the largest losses in the industry's history actually lived. Treating an audit badge as proof of safety has repeatedly proven expensive.
Bitcoin Trader publishes information, not investment advice. Protocol usage carries risks including total loss; this is an explainer about security practice.
What does an audit actually cover?
The unit of work is a review of named contract files at a named commit hash. Auditors trace fund flows, model privileged roles, look for the standard bug classes — reentrancy, access-control errors, integer issues, oracle misuse, front-running vectors — and manually reason about the protocol's economic assumptions. Findings arrive graded by severity, with fixes verified in a follow-up or a re-review, and the final report is typically published.
Everything in that description limits what the report proves. Time-boxed means a fixed number of analyst-weeks, prioritized. Commit-scoped means any later change voids coverage unless re-reviewed — and protocols deploy changes constantly. Source-scoped means the report says nothing about the deployment itself, the keys that control upgrades, the off-chain infrastructure, or the humans operating it.
What falls outside the scope?
Four categories, each with a named catastrophe. First, operational keys: the Ronin bridge lost roughly 600 million dollars in March 2022 not through its contract logic but through compromised validator keys — a component audits do not examine. Second, upgrades and governance: a contract that audited clean can be replaced by a malicious or emergency upgrade through admin keys — the mechanics of change, not the audited state, is the risk. Third, dependencies: audited code calling unaudited libraries, oracles, or external protocols inherits their failures. Fourth, economic assumptions: code that functions exactly as written can still be economically broken — incentive designs that reward attackers are logic-correct and economically fatal.
The historical archetype is instructive: the DAO hack of June 2016, which drained about a third of the fund — around 3.6 million ether — exploited a reentrancy pattern that lived in code the community had already scrutinized intensively. The lesson encoded into practice since: public scrutiny, even extensive scrutiny, is not the same thing as verification of the properties that matter.
What are audits good at, then?
Raising the floor. Audits reliably eliminate the known bug patterns and the careless errors — the classes of failure that require only diligence to find. For a protocol, the audit process also forces documentation, threat modeling and clearer privilege maps, which are worth as much as the findings. The observable market fact is that unaudited deployments fail at much higher rates from mundane causes; audits remove the mundane, leaving only the interesting risks — which is exactly where the interesting losses come from.
The mature reading of an audit report, therefore, checks four things: which firm, and does its reputation price its rigor; which commit, and does it match what actually deployed; what findings were noted and how each was resolved — a report with zero findings is rare and slightly suspicious; and how much time passed between the report and the current code, since every week since is unaudited drift.
What complements audits?
A layered stack, because no single layer covers the gaps of the others. Bug bounties pay continuously for what a time-boxed review misses — the largest platforms host five-to-eight-figure programs for DeFi protocols. Formal verification mathematically proves narrow properties of critical functions and suits the highest-value invariants. Monitoring and circuit breakers assume breach detection matters as much as prevention — pausing a protocol during an anomaly is damage control audits cannot provide. Timelocks on upgrades make governance changes visible before they execute, converting silent admin risk into a public countdown. And audits repeated after every material change keep coverage aligned with the code rather than its ancestor.
This layering mirrors how mature software and infrastructure assurance evolved elsewhere — the U.S. National Institute of Standards and Technology's frameworks for software assurance and supply-chain security make the same point for conventional systems: security is a property of process over time, not of a document issued once.
How should a user weigh audit status?
As one input in a short checklist, never as the conclusion. Audit present and matching deployment, with named fixes — better. Multiple independent audits plus a standing bounty and timelocked upgrades — the profile of a protocol taking security seriously as an ongoing practice. No audit, or an audit that does not match the deployed code — the market's shorthand for 'not yet serious', and history's most reliable predictor of mundane failure.
The honest summary for readers: an audit is a snapshot of diligence, not a property of the system. Systems are what their code, keys, operators and incentives do over time — and every large loss in this industry was, in retrospect, a component the snapshot didn't cover.
How do testing, fuzzing and formal verification differ?
Audits sit inside a hierarchy of assurance techniques, and knowing the rungs clarifies what a report's findings mean. Unit and integration tests check specific cases the author thought of — necessary, cheap, and bounded by imagination. Fuzzing generates thousands of randomized inputs and invariant checks — property tests that assert things like 'no one can withdraw more than the pool holds' and then try to break the assertion mechanically; fuzzing finds what tests miss, but only within the properties someone bothered to state. Formal verification treats the contract as mathematics: a proof that, for all possible inputs and states, specified properties hold — the strongest statement available, applied to precisely scoped properties at proportionate cost.
The rungs answer different questions, and the failure cases interleave: a function can be proven correct against a wrong specification; a fuzzer can exhaust a budget without reaching the state that breaks an invariant; a test suite can pass while a privileged role quietly drains everything the tests never exercised. The practical reading of any security claim is therefore two questions — which technique, and against which stated properties — because 'verified' and 'tested' and 'audited' are three different promises wearing similar badge shapes.
For more context, read How DeFi Lending and Collateral Actually Work.
For more context, read what are rollups.
For more context, read How AMM Liquidity Pools and Impermanent Loss Work.




