/ethereum_formal_verification_overview

Overview of the formal verification projects in the Ethereum ecosystem.

GNU General Public License v3.0GPL-3.0

Ethereum Formal Verification

This page tries to give an overview of the formal verification (and related) projects in the Ethereum ecosystem, extending and updating https://github.com/pirapira/ethereum-formal-verification-overview.

The focus here is formal verification of smart contracts, while attempting to also gather information about formal verification of protocols and compilers.

The lists are not complete and you are encouraged to visit the project pages to know more about them.

Please do not hesitate and open an issue/PR if you have information not present here or if you find a mistake.

You might also want to visit the Ethereum Formal Methods Gitter channel.

Compilers

Solidity

  • Yul-K: The semantics of the IR Yul formalized in the K framework.
  • Yul-Isabelle. The semantics of the IR Yul formalized in Isabelle.

Ethereum 2.0

Phase 0

Smart Contracts

Projects / Tools

There are several projects aiming at formal specification and verification of smart contracts. The list given here is separated by target language and then sorted alphabetically. A few resource links are given with each project. For more resources on a specific project please visit the project's page.

There is also an overwhelming amount of papers describing techniques related to formal verification of smart contracts. For example, visit https://ntu-srslab.github.io/smart-contract-publications/ and type 2020 into the search box. For that reason I am not listing anymore papers describing techniques for which I could not find the actual tool.

Specification

  • Act: Act allows specification of storage updates, pre/post conditions and contract invariants. Its tool suite also has proof backends able to prove many properties via Coq, SMT solvers, or hevm.
  • Scribble: Scribble is a runtime verification tool for Solidity that transforms annotations in the Scribble specification language into concrete assertions that check the specification.

EVM Bytecode

Solidity

Vyper

  • FVyper: A collection of useful Vyper contracts developed with formal methods (KEVM).
  • KVyper: Semantics of Vyper in K.