Skip to main content

Smart contract security checklist

smart contracts
security
solidity
Intermediate
Trailofbits
September 7, 2020
2 minute read

Smart contract development checklist

Here's a high-level process we recommend following while you write your smart contracts.

Check for known security issues:

  • Review your contracts with Slither (opens in a new tab). It has over 100 built-in detectors for common vulnerabilities. Run it on every check-in with new code and ensure it gets a clean report (or use triage mode to silence certain issues).
  • Run Slither in CI, for example with slither-action (opens in a new tab) on GitHub, so security issues surface in pull requests.

Consider special features of your contract:

Visually inspect critical security features of your code:

Document critical security properties and use automated test generators to evaluate them:

  • Learn to document security properties for your code. It's tough as first, but it's the single most important activity for achieving a good outcome. It's also a prerequisite for using any of the advanced techniques in this tutorial.
  • Define security properties in Solidity, for use with fuzzers such as Echidna (opens in a new tab) and Medusa (opens in a new tab), and with symbolic execution tools such as hevm (opens in a new tab). Focus on your state machine, access controls, arithmetic operations, external interactions, and standards conformance.
  • Define security properties with Slither's Python API. Focus on inheritance, variable dependencies, access controls, and other structural issues.
  • Run your property tests on every commit in CI (for example, GitHub Actions) so everyone on your team can easily see that they pass. Failing tests can block merges.

Finally, be mindful of issues that automated tools cannot easily find:

  • Lack of privacy: everyone else can see your transactions while they're queued in the pool
  • Front running transactions
  • Cryptographic operations
  • Risky interactions with external DeFi components

Ask for help

Ethereum office hours (opens in a new tab) run every Tuesday afternoon. These 1-hour, 1-on-1 sessions are an opportunity to ask us any questions you have about security, troubleshoot using our tools, and get feedback from experts about your current approach. We will help you work through this guide.

Join our Slack: Empire Hacking (opens in a new tab). We're always available in the #crytic and #ethereum channels if you have any questions.