Act is a formal specification language for constructing exhaustive, mathematically rigorous descriptions of EVM smart contracts.
Act specifications are written in a high-level, human-readable language that can be proved equivalent to EVM bytecode, currently via the hevm symbolic execution engine.
Specifications can be extracted to a proof assistant (currently Rocq), accurately modeling contract behavior as a state transition system and enabling verification of complex properties and invariants.
The core vision of Act is to provide a provably correct mapping from EVM bytecode to a high-level mathematical model that can be embedded into a variety of analysis and verification tools.
In-depth documentation is available in The Act Book.
Act builds on the previous Act project.
You can build the project with Nix. If you do not have Nix installed, try the Determinate Nix installer.
Build the act executable from the repository root:
nix buildThis produces bin/act, which you can run as described in the Act Book.
For a quick overview of available options:
bin/act --helpEnter a Nix shell with all dependencies installed:
nix developThen use cabal from the project root:
cabal build # build the project
cabal repl # enter a replTo execute unit tests:
make test # run all tests
cabal v2-test # run Haskell testsTo update project dependencies:
nix flake updateOnce you are in the Nix shell, you can use Act backends for equiv and rocq as follows:
cabal run act -- <OPTIONS>Run the following command to see options and configuration flags:
cabal run act -- --helpIf you have questions, open an issue or reach out on our Matrix Channel. The act development team is happy to help you use Act for smart contract verification.