bitearnings

Smart contract audit service reports: a step-by-step guide

Between January 2022 and March 2026, 218 documented Web3 exploits drained $7.76 billion from users and protocols. The eight largest incidents account for 50.6% of that cumulative loss.

Smart contract audit service reports: a step-by-step guide

The audit report is the document most yield strategies rely on to bound that exposure, but reading it wrong — or stopping at the cover page — is how capital gets mispriced. The report is a structured argument about a specific version of code, evaluated with bounded tools, over a finite period, by a counterparty paid by the project. It is a useful input, not a guarantee.

Roughly 79% to 84% of every public audit finding lives inside Solidity and EVM-compatible codebases. That figure is a useful anchor for the strategist: it tells you where the empirical signal is deepest, where the tooling is most mature, and where your baseline confidence in a clean audit should be highest. The remaining footprint — Rust on Solana, Move on Aptos and Sui, FunC on TON — sits on a thinner dataset with a shorter track record. Knowing which ecosystem you are allocating into changes the calibration of every audit report you read.

The freshness check: matching audit reports to deployed bytecode

The single highest-leverage action in audit reading is also the most routinely skipped: confirm the on-chain deployment matches the audited commit hash. Each report identifies a specific Git commit — a unique fingerprint of the exact source code the auditor reviewed. The deployed contract on Etherscan, Basescan, or the relevant block explorer has its own verifiable bytecode. If those two identifiers do not line up, the protocol has shipped code the auditor never touched, and every finding in the report — Critical, High, Low, and Informational — applied to a different system than the one you are about to interact with.

The freshness check is mechanical and takes under five minutes:

  • Locate the commit hash on the first two pages of the report, usually in the "Scope" or "Revision" section.
  • Pull the deployed contract address from the protocol's official documentation — never from a tweet, a Discord link, or a third-party tracker.
  • Match the source code on the explorer against the audited commit line by line, or use a bytecode diff tool to compare the on-chain artifact against the deployment.
  • If the audit predates the current deployment by more than a few weeks, treat that as a structural red flag. The audit is now analytical only, not operational.

Protocols that ship upgrades after the audit — frequently without a second review — effectively reset the freshness counter to zero. A one-year-old audit with a "fixed in PR #412" annotation, applied to a forked contract, is barely worth the disk space it occupies. From a position-sizing perspective, the commit hash is the variable with the tightest correlation to realized risk.

A clean audit on stale code is a worse signal than a moderate audit on the exact bytecode you are about to interact with.

Decoding severity levels: from critical vulnerabilities to informational notes

Audit firms apply a tiered classification to findings, and the distribution between buckets tells you more about the protocol than the raw count of issues. The standard ladder, used consistently across reputable firms, runs as follows:

SeverityOperational meaningCapital impact
CriticalImmediate threat to solvency or user fundsDirect loss path; cannot proceed
HighSevere impact under specific conditionsConditional drain; depends on state or price action
MediumSystemic risk or logic errors that compoundIndirect exposure; often interacts with governance
LowMinor bugs, deprecated syntax, gas inefficiencyNegligible economic risk in isolation
InformationalCode style, naming, best-practice commentaryNo directional risk

The empirical distribution from 2022 through 2026 is informative. Critical and High-severity findings consistently make up 15% to 17% of all reported issues, while Low-severity findings now represent 37.5% — the largest single bucket. The reading is that the easy wins have been found: what remains is concentrated, technical, and frequently requires a deep understanding of the protocol's economic logic to surface. Old-school reentrancy, once the canonical Web3 vulnerability, accounts for only 2.1% of public audit findings over the same period — not because it has disappeared, but because developers and modern compilers catch it long before the auditor opens the file.

For a yield strategist, the math is straightforward. Count the Critical and High findings, verify they are remediated, and treat the rest as informational noise. A protocol with 30 Low findings and zero Critical items is structurally safer than one with 8 Low findings and a single unpatched High. Headline finding counts, the way protocols advertise them in marketing copy, are a misleading variable — and a giveaway that the team is selling the report instead of underwriting it.

The hidden risks: why audits often miss private key and social engineering threats

This is the section that should reframe how you think about allocating into "audited" protocols.

Between 2022 and 2026, private-key compromises, phishing, and social engineering accounted for 49.6% of cumulative Web3 exploit losses. That figure is roughly equal to the entire universe of code-level vulnerabilities combined. Audits do not surface these threats because they are not present in the audit-able code path — they live in the operational layer around the protocol: the multisig configuration, the admin key distribution, the front-end's DNS records, the Discord admin's password hygiene, the bridge relayer's infrastructure. Smart contract audits are scoped to the bytecode; the loss surface is not.

Reentrancy went from 100% of the conversation in 2016 to 2.1% of audit findings in 2026. That is a positive signal about Solidity's maturity and the hardening of compiler-level protections. The dominance of operational risk in the loss ledger is the opposite signal — it is the failure mode that has not been solved. For the yield-seeking allocator, this reframes the question. A protocol with a flawless audit and a 3-of-5 multisig controlled by pseudonymous team members with private keys stored on hot wallets is structurally exposed to a loss category the audit never touched. The audit's contribution to your risk model for that protocol is bounded; the operational gaps are not.

Threats to price explicitly beyond the audit document:

  • Multisig configuration and signer identity: public, reputable, or anonymous?
  • Admin key custody: hardware wallet, hot wallet, institutional custody, or worse?
  • DNS and front-end infrastructure: who controls the domain, is there a registrar lock, is the front-end pinned to IPFS or Arweave?
  • Bridge relayer architecture and validator diversity, including the geographic and jurisdictional distribution of operators.
  • Governance attack surface: does the timelock duration match the size of the exposure being protected, or can a quorum drain the contract on a Sunday night?
Half of every dollar lost in Web3 over the past four years was taken without touching the smart contract at all.

Analyzing remediation status: distinguishing fixed issues from accepted risks

The remediation column is where the audit report separates operational signal from marketing theatre. Each finding should resolve into one of four states:

1. Resolved — the protocol's code reflects the fix described in the report.

2. Acknowledged / Accepted — the team formally accepts the risk and does not patch it. Sometimes a legitimate engineering trade-off, but it must be visible to the allocator.

3. Partially resolved — the fix is in flight but not complete.

4. Disputed — the team rejects the auditor's classification or diagnosis.

Accepted findings are the most underappreciated category. A protocol can legitimately decide that a Low-severity finding about a deprecated function is not worth the migration cost and leave it unpatched. That is a defensible engineering decision. What is not defensible is publishing an audit report that lists a Medium or High finding as "acknowledged" without a written explanation, while marketing the report as a clean bill of health. When you see remediation status as "accepted" on anything above Low severity, you are looking at a protocol that has chosen a risk profile you must explicitly underwrite — and your position sizing should reflect that.

The "disputed" status is the rarest and most consequential. Auditors do not enjoy public disputes — they damage future engagement pipelines. When a team disputes a finding, the auditor is usually pointing at something structural about the protocol's economic assumptions, not a stylistic code preference. Read those pages first.

The auditor's economic alignment is also worth pricing directly. The project pays the audit firm; that is a structural incentive. The premium firms — Trail of Bits, OpenZeppelin, ChainSecurity, Spearbit, Cantina — have sufficient reputation capital that walking away from a compressed contract is a survivable decision. The long tail of smaller shops does not have that margin. A 1,000-line Solidity contract reviewed in three days for a flat fee should be sized proportionally to the engagement intensity, not to the report's marketing weight. Cross-reference any post-audit exploits involving the firm: the track record is a leading indicator of how the auditor benchmarks against the next zero-day.

EVM dominance and the evolving landscape of smart contract security

The empirical anchor for nearly every audit quality benchmark is Solidity and EVM-compatible code. Between 79% and 84% of public findings annually originate from these ecosystems, which means the bulk of security tooling — Slither, Mythril, formal verification frameworks, fuzzing harnesses — has been optimized for them. The auditor pool is also concentrated here: the firms with the deepest public track records operate predominantly in EVM, and the dataset of historical vulnerabilities is richer and more uniform.

For an investor allocating into Solana-based protocols, Move-powered chains, or TON, the audit landscape is materially thinner. The auditors are fewer, the tooling is younger, and the history of publicly studied exploits is shorter. That does not mean these ecosystems are inherently riskier — they are simply less statistically settled. A "clean" audit on a Rust-based Solana program is a less empirically grounded signal than a clean audit on a Solidity contract of equivalent scope, because the dataset against which the audit firm calibrated its detection heuristics is smaller and the peg stability of its tooling against the target language is less proven.

For portfolio construction, the practical implication is to weight EVM audits more heavily than non-EVM audits when sizing positions, and to demand additional layers of mitigation — protocol-native insurance coverage, smaller initial allocations, faster exit ramps — when the underlying chain sits outside the EVM data-rich zone. The historical distribution of audit findings is not just a stylistic fact; it is a confidence interval you can apply directly to your position sizing.

A reading order for every audit report

The sequence below compresses the entire framework into a workflow you can run before any allocation decision:

1. Verify the audited commit hash matches the deployed bytecode on the relevant block explorer. If they diverge, stop.

2. Read the severity distribution. Critical and High should be 0% of the finding count after remediation. If they are not, dig into the remediation status.

3. Confirm the remediation status of every finding above Low severity. Any "accepted" item is a position-sizing variable, not a footnote.

4. Identify the auditor and their track record on similar codebases. Cross-reference any post-audit exploits involving that firm.

5. Discount the audit's coverage of operational risks by the empirical 49.6% factor. Insist on multisig specs, timelock duration, and admin key custody as separate diligence.

6. Adjust confidence interval based on chain. EVM audits carry heavier empirical weight than non-EVM audits at equivalent scope.

The audit report is a bounded, time-stamped, peer-evaluated argument about a specific version of code. Its value is real but partial. The yield strategist who treats it as one input — alongside multisig configuration, oracle quality, governance attack surface, and historical incident data — will allocate more accurately than the one who treats the report itself as a moat. The most expensive lesson in the dataset is the one the audit never had a chance to flag. Pricing that risk explicitly, instead of folding it into a generic "audited = safe" assumption, is the only durable edge.

FAQ

How do I verify if an audit report is still relevant to a protocol?
You must confirm that the on-chain bytecode matches the specific Git commit hash listed in the audit report. If the protocol has shipped updates or upgrades since that commit, the audit is no longer operationally valid.
Why do some protocols have 'accepted' findings in their audit reports?
Protocols may formally accept certain risks, such as minor bugs or deprecated syntax, if they decide the cost of fixing them outweighs the benefit. However, any 'accepted' finding above Low severity should be treated as a risk factor that influences your position sizing.
Do smart contract audits cover risks like phishing or private key theft?
No, audits are scoped to the bytecode and do not cover operational risks. Factors like multisig configuration, admin key custody, and front-end security are separate from the smart contract code and represent a significant portion of potential losses.
Should I trust a protocol more if it has a large number of Low-severity findings?
Not necessarily. A protocol with many Low-severity findings and zero Critical or High-severity issues is generally safer than one with fewer Low-severity findings but an unpatched Critical or High-severity vulnerability.
Does the choice of blockchain affect how I should interpret an audit?
Yes. EVM-compatible codebases have more mature tooling and larger historical datasets, making audit signals more empirically grounded. Audits for non-EVM chains like Solana or TON are based on thinner datasets and should be weighted with more caution.