Back to Tools
CHECKLIST12 min read2025-06-23

Smart Contract Pre-Launch Security Checklist — 50-Point Audit Readiness Tool

Run this checklist before submitting your contracts to a security audit. Resolving these issues before the audit saves audit time (cost) and avoids findings that would otherwise delay your launch.

Enterprise Ready

Built for production environments.

Fast Results

Save hours of manual planning.

Professional

Trusted by blockchain teams.

Blockchain Tool

Interactive planning, estimation, calculations and enterprise-grade blockchain utilities.

AI

Assisted

24/7

Available

Tool Assistance

Need Help Preparing for Your Security Audit?

Get expert guidance on smart contract security and audit preparation.

Tool Workspace

Use, understand, and apply the results

Tool Overview

Run this checklist before submitting your contracts to a security audit. Resolving these issues before the audit saves audit time and avoids findings that would otherwise delay your launch.

Key Result

A 50-point smart contract security checklist organized into 10 sections: Code Quality (10 checks — pinned Solidity, NatSpec, no unused imports), Access Control (8 checks — multisig admin, timelocks, emergency pause), Reentrancy (6 checks — nonReentrant, CEI pattern, SafeERC20), Arithmetic (5 checks — Solidity 0.8+, division safety), Oracle Security (5 checks — TWAP, staleness, divergence threshold), Flash Loan Protection (4 checks — internal accounting, same-block restrictions), Upgradeability (5 checks — proxy pattern, storage layout, initializer), Testing (7 checks — 95% coverage, fuzz tests, invariants), Deployment Readiness (5 checks), Documentation (5 checks). Score 45-50: audit-ready.

SECTION 1: CODE QUALITY (10 checks)

01

Solidity version is pinned (e.g., `pragma solidity 0.8.24;` not `^0.8.0`)

02

Named imports used (`import {ERC20} from "@openzeppelin/..."` not `import "@openzeppelin/..."`)

03

All functions have NatSpec documentation (`@notice`, `@param`, `@return`)

04

No unused imports or state variables

05

All state variables have explicit visibility (`public`, `private`, `internal`)

06

Events emitted for all state changes

07

Custom errors used instead of `require(bool, string)` for gas efficiency

08

No `tx.origin` used for authorization (use `msg.sender`)

09

No `block.timestamp` used for randomness (use Chainlink VRF)

10

No `block.number` used for time calculations (timestamps only)

SECTION 2: ACCESS CONTROL (8 checks)

01

All admin functions require appropriate role or ownership check

02

Admin key is a multisig (Gnosis Safe), not a single EOA

03

Ownership cannot be transferred to address(0) accidentally

04

Role assignments emit events

05

`DEFAULT_ADMIN_ROLE` is not assigned to deployer in production (use specific roles)

06

Time-lock on sensitive admin operations (upgrade, fee change, parameter change)

07

Emergency pause implemented (Pausable from OpenZeppelin)

08

Pause key held separately from upgrade key

SECTION 3: REENTRANCY (6 checks)

01

`nonReentrant` modifier on all external functions that transfer ETH or tokens

02

Check-Effects-Interactions pattern followed throughout

03

No `.call{value:}` without nonReentrant guard

04

No `.transfer()` or `.send()` (use `.call{value:}` with check)

05

Token transfers use SafeERC20 (`safeTransfer`, `safeTransferFrom`)

06

No external calls in constructor

SECTION 4: ARITHMETIC (5 checks)

01

Solidity 0.8.x used (built-in overflow protection) OR explicit SafeMath

02

Division before multiplication avoided (precision loss)

03

No division by zero possible (denominator validated)

04

Fixed-point arithmetic uses consistent precision (1e18 throughout)

05

`unchecked` blocks only used where overflow is provably impossible

SECTION 5: ORACLE SECURITY (5 checks)

01

No spot price used for liquidations or collateral calculation

02

TWAP or Chainlink price feed used for all financial calculations

03

Oracle staleness check implemented (reject prices older than X minutes)

04

Oracle manipulation protection (divergence threshold between two oracles)

05

Fallback oracle configured for when primary oracle fails

SECTION 6: FLASH LOAN PROTECTION (4 checks)

01

Internal accounting used (not `token.balanceOf(address(this))`)

02

Same-block action restriction where applicable

03

No functions that allow manipulation of stored values within one transaction

04

Donation attack prevention (surplus tokens don't affect accounting)

SECTION 7: UPGRADEABILITY (5 checks, if applicable)

01

Proxy pattern is one of: UUPS, Transparent, or Diamond (no custom pattern)

02

Storage layout documented and will not change in upgrades

03

Initializer function cannot be called twice (`initializer` modifier)

04

Upgrade function requires timelock + multisig

05

`_disableInitializers()` called in implementation constructor

SECTION 8: TESTING (7 checks)

01

Line coverage ≥ 95% (run `forge coverage`)

02

Branch coverage ≥ 88%

03

Fuzz tests implemented for all critical mathematical functions

04

Invariant tests implemented (key protocol invariants cannot be violated)

05

Fork tests against mainnet state for any integration with existing DeFi

06

All edge cases tested: zero amounts, max amounts, single user, empty state

07

Negative test cases: unauthorized callers, invalid inputs, over-limit values

SECTION 9: DEPLOYMENT READINESS (5 checks)

01

Deployment script tested on testnet (not just local)

02

Constructor arguments documented and validated

03

Contract verified on Etherscan (source code visible)

04

Multisig has been set up and tested before deployment

05

Emergency contact plan (who to call if exploit detected)

SECTION 10: DOCUMENTATION (5 checks)

01

README explains what the protocol does and how it works

02

Architecture diagram included

03

All external function interfaces documented

04

Known limitations and trust assumptions documented

05

Links to all deployed contract addresses

SCORING

01

45–50: Audit-ready. Submit to auditor.

02

40–44: Minor issues. Fix before submitting.

03

35–39: Moderate issues. Address section failures before auditing.

04

Below 35: Significant gaps. Audit will find many issues — resolve first to reduce cost.

Tool Assistance

Need Help Preparing for Your Security Audit?

Get expert guidance on smart contract security and audit preparation.