This is a repository focused on smart contract security. It includes a docker container with all the tools you need and a few example contracts to help you get started.
- Slither
- Static analysis from Trail of Bits.
- Echidna
- Fuzzing from Trail of Bits.
- Manticore
- Symbolic execution tool from Trail of Bits.
- MythX
- Paid service for smart contract security.
- Mythrill
- MythX free edition.
- ETH Security Toolbox
- Script to create docker containers configured with Trail of Bits security tools.
- ethersplay
- ETH Disassembler
- Consensys Security Tools
- A list of Consensys tools.
- Ethernaut (This is a must play!)
- Damn Vulnerable Defi (This is a must play!)
- rekt
- A blog that keeps up with all the "best" hacks in the industry.
- Trail of bits blog
- Learn from one of the best auditors in the space.
- Openzeppelin Blog
- Another blog of one of the best auditors in the space.
- Smart Contract Security Best Practices
- Consensys blog on security vulnerabilities. Also check out their tools.
- Chainlink X Certik Blog on Security
- More attacks
- Git
- You'll know you did it right if you can run
git --version
and you see a response likegit version x.x.x
- You'll know you did it right if you can run
- Nodejs
- You'll know you've installed nodejs right if you can run:
node --version
and get an ouput like:vx.x.x
- You'll know you've installed nodejs right if you can run:
- Docker
- You'll know you've installed docker right if you can run:
docker --version
and get an ouput likeDocker version xx.xx.xx, build xxxxx
git clone https://github.com/0x963D/hardhat-security
cd hardhat-security
npm install
Open the docker shell:
npm run toolbox
Then, run:
slither /src/contracts/ --solc-remaps @openzeppelin=/src/node_modules/@openzeppelin --exclude naming-convention,external-function,low-level-calls
To exit:
exit
Open the docker shell:
npm run toolbox
Then, run this:
echidna-test /src/contracts/mock/test/fuzzing/VaultFuzzTest.sol --contract VaultFuzzTest --config /src/contracts/mock/test/fuzzing/config.yaml
To exit:
exit
To check linting / code formatting:
npm run lint
or, to fix:
npm run lint:fix
npm run format