Smart contracts are unforgiving: once deployed, mistakes can be expensive and irreversible. An audit helps, but it is not a guarantee, and it works best when the code is already in good shape. Use this checklist before you book one.
Design and architecture
- Write a threat model. List who could attack the system, what they gain and which assumptions you rely on (oracles, admins, bridges).
- Keep it simple. Less code means fewer bugs. Remove features you do not need for launch.
- Use audited libraries. Prefer OpenZeppelin or similar for tokens, access control and upgrade patterns instead of rewriting them.
Code-level checks
- Access control. Every privileged function should have explicit roles. Use a multisig (such as Safe) for admin keys and consider a timelock for sensitive changes.
- Reentrancy and external calls. Follow the checks-effects-interactions pattern and use reentrancy guards where value moves.
- Oracles and prices. Never rely on a single manipulable spot price. Use reputable price feeds with sanity checks and staleness limits.
- Upgradeability. If you use proxies, validate storage layouts, protect initialisers and document who can upgrade and how.
Testing
- Unit and integration tests that cover failure paths, not only the happy path. Aim for high branch coverage on critical logic.
- Fuzz and invariant tests. Tools such as Foundry let you assert properties like “total supply never exceeds the cap” across thousands of random inputs.
- Static analysis and fork tests. Run tools like Slither and test against a fork of mainnet to catch real-world integration issues.
Launch and operations
- Independent audit, then fix and re-review. Share a frozen commit, documentation and tests with the auditor. Re-audit significant changes.
- Monitoring, bug bounty and incident plan. Set up alerts on key events, define a pause or emergency process and publish a way for researchers to report issues responsibly.
Don’t forget the front-end and keys
- Protect your domain and DNS with two-factor authentication and registry locks.
- Use a strict Content Security Policy and pin third-party scripts.
- Store deployer and admin keys on hardware wallets; never in a shared chat or repository.
- Show users exactly what they are signing, in plain language.
Pre-launch gate
| Gate | Evidence you should have |
| Design | Threat model, architecture diagram, roles list |
| Code | Frozen commit, library versions pinned, natspec docs |
| Testing | Coverage report, fuzz/invariant results, fork tests |
| Review | Audit report with findings resolved |
| Operations | Multisig, monitoring, runbook, bug bounty |