awesome-advanced-smart-contracts-testing-and-verification icon indicating copy to clipboard operation
awesome-advanced-smart-contracts-testing-and-verification copied to clipboard

A curated collection of tools, frameworks, and methodologies for testing and verifying Solidity smart contracts.

Awesome Advanced Smart Contracts Testing and Verification Awesome

A curated collection of tools, frameworks, and resources for testing and verifying Solidity smart contracts. Meant to be used by blockchain developers and security researchers as a knowledge source.

Contents

  • Tools
  • Fuzzing
    • Property-based Fuzz Testing
    • Differential Fuzz Testing
  • Formal Verification
  • Mutation Testing
  • Branching Tree Technique
  • Contribute

Tools

Arsenal of fuzzing and verification tools, tailor-made for probing and dissecting the inner workings of smart contracts.

Fuzzing

Fuzzing or fuzz testing is an automated software testing technique that involves providing invalid, unexpected, or randomly generated data as inputs to a computer program.

Property-based Fuzz Testing

Property-based testing aims to identify and test invariants. Invariants are conditions expressions that should always hold true over the course of a fuzzing campaign. Invariants are about properties of the system as a whole, rather than specific reactions to specific inputs.

Differential Fuzz Testing

Differential testing is used to ensure identical behavior between two or more implementations of equivalent code. Useful if you are upgrading/updating code, or have written a more optimized version but you want to verify congruence among implementations.

Formal Verification

Formal Verification is an approach to assessing the correctness of software by checking whether a formal model of the program matches the formal specification. Unlike testing, formal verification can verify a smart contract's execution satisfies a formal specification for all executions without needing to execute it with sample data.

Mutation Testing

Mutation testing is a technique for evaluating and improving test suites. The key idea is to introduce faults, called mutants, to the program under test and measure a test suite’s ability to detect these mutants.

Branching Tree Technique

Specification framework for writing structured Solidity tests.

Contribute

Contributions welcome! Read the contribution guidelines first.