Audit tooling

Pre-audit checklists

Pick a protocol category. You get the root causes that killed similar protocols, the protocols they killed, and the checks that find them.

Bridges & Cross-chain

01

Validator threshold inverted

require(v >= threshold) written backwards — any single validator can sign withdrawals.

KilledRonin ($625M)

Checks

  • Read every multisig/validator check literally: is the comparison direction correct?
  • grep -rn "require.*>=\|require.*<=" <repo> in signature/multisig code
02

Unverified message acceptance

A zero-hash or default-proved path lets any message pass verification and mint on the destination.

KilledNomad ($190M)

Checks

  • Trace the "verified root" path: is there a branch where an empty/unverified root is accepted?
  • Test: call the execute path with a forged/empty proof
03

Uninitialized proxy

The bridge implementation's initialize() was never called (or is callable by anyone) — anyone becomes owner of the bridge.

KilledWormhole ($326M)Qubit (tokenAddress=0)

Checks

  • For every deployed proxy: check the initialized flag on-chain
  • Test: call initialize() from a random EOA
04

Replay / nonce handling

Messages can be replayed across chains, or the same hash executes twice because the nonce is missing/wrong.

KilledChainswapPoly Network

Checks

  • Is there a consumed-message mapping keyed by hash+chain?
  • Test: submit the same message twice
05

Token/amount validation gaps

A zero-address token, a fake token with the right name, or an amount that does not exist passes validation and mints/credits.

KilledQubit ($80M)

Checks

  • Is tokenAddress validated against a whitelist, not just != 0?
  • Test: deposit with address(0) or a minted clone token
06

Single-verifier / single-DVN trust

One verifier (or a config shared by many apps) is the whole security boundary — compromise or misconfig drains everything.

KilledKelpDAO ($292M)LayerZero 47% shared config

Checks

  • Map the trust boundary: how many independent parties must collude to mint?
  • Check the verifier-set config is not shared across unrelated apps
07

Numeric truncation / overflow in wrapping

u256→u128 or cross-VM integer truncation on the bridge mints depegged wrapped assets.

KilledAstarMoonbeam/Acala (Frontier)

Checks

  • Every cross-chain amount conversion: explicit bounds checks?
  • grep -rn "toUint128\|uint128(" <repo>