The Certora Prover is the state-of-the-art security tool for automated formal verification of smart contracts running on EVM-based chains, Solana and Stellar
See the codeThe Certora Prover is a tool for formally verifying smart contracts. This document is intended for those who would like to contribute to the tool.
If you are interested to use the tool on our cloud platform without having to locally build it, we recommend following the documentation here: https://docs.certora.com/en/latest/docs/user-guide/install.html.
The instructions here are for users on Mac OS and Linux.
JDK 19+
SMT solvers:
PATH.Python 3
Solidity compiler -- https://github.com/ethereum/solidity/releases.
Pick the version(s) that is used by the contracts you want to verify.
Since we often use many versions, it is recommended to rename each solc executable
to, e.g., solc5.12, and place all versions into a directory in your systems PATH like so: export PATH="/path/to/dir/with/executables:$PATH"
Rust (tested on Version 1.81.0+) -- https://www.rust-lang.org/tools/install
llvm-symbolizer and llvm-dwarfdump,
which are installed as part of LLVM.
Graphviz:
Graphviz is an optional dependency required for rendering visual elements, dot in particular.
If not installed, some features may not work properly, such as Tac Reports.
NOTE Remember to put dot in your system's PATH, by running: export PATH="/usr/local/bin:$PATH".
Create a directory anywhere to store build outputs.
Add an environment variable CERTORA whose value is the path to this directory.
Add this directory to PATH as well. For example if you are using a bash shell, you can edit your ~/.bashrc file like so:
export CERTORA="preferred/path/for/storing/build/outputs"
export PATH="$CERTORA:$PATH"
cd into a directory you want to store the CertoraProver source and clone the repo:
git clone --recurse-submodules https://github.com/Certora/CertoraProver.git
Compile the code by running: ./gradlew assemble
If you want to clean up all artifacts of the project, run: ./gradlew clean
Make sure the path you used to set the variable CERTORA has important jars, scripts, and binaries like emv.jar, certoraRun.py, tac_optimizer.
cd CertoraProver
python -m venv .venv
source .venv/bin/activate
pip install -r scripts/certora_cli_requirements.txt
Crypto installed, you may first need to uninstall (pip uninstall crypto) before installing pycryptodometac_optimizer builds correctly by cding in to the fried-egg directory and running cargo build --release. Also make sure tac_optimizer is in your path (set using CERTORA).You can run the tool by running certoraRun.py -h to see all the options.
Public/TestEVM. For example, you can run one of these like so: cd Public/TestEVM/CVLCompilation/OptionalFunction
certoraRun.py Default.conf
You can run unit tests directly from IDEs like IntelliJ, or from the command line with ./gradlew test --tests <name_of_test_with_wildcards>
CertoraProver/src/test (and also in the test directories of the various subprojects)Copyright (C) 2025 Certora Ltd. The Certora Prover is released under the GNU General Public License, Version 3, as published by the Free Software Foundation. For more information, see the file LICENSE.
Kotlin
85.6%
Python
5.4%
WebAssembly
3.9%
Solidity
2.5%
The Certora Prover is the state-of-the-art security tool for automated formal verification of smart contracts running on EVM-based chains, Solana and Stellar
See the codeThe Certora Prover is a tool for formally verifying smart contracts. This document is intended for those who would like to contribute to the tool.
If you are interested to use the tool on our cloud platform without having to locally build it, we recommend following the documentation here: https://docs.certora.com/en/latest/docs/user-guide/install.html.
The instructions here are for users on Mac OS and Linux.
JDK 19+
SMT solvers:
PATH.Python 3
Solidity compiler -- https://github.com/ethereum/solidity/releases.
Pick the version(s) that is used by the contracts you want to verify.
Since we often use many versions, it is recommended to rename each solc executable
to, e.g., solc5.12, and place all versions into a directory in your systems PATH like so: export PATH="/path/to/dir/with/executables:$PATH"
Rust (tested on Version 1.81.0+) -- https://www.rust-lang.org/tools/install
llvm-symbolizer and llvm-dwarfdump,
which are installed as part of LLVM.
Graphviz:
Graphviz is an optional dependency required for rendering visual elements, dot in particular.
If not installed, some features may not work properly, such as Tac Reports.
NOTE Remember to put dot in your system's PATH, by running: export PATH="/usr/local/bin:$PATH".
Create a directory anywhere to store build outputs.
Add an environment variable CERTORA whose value is the path to this directory.
Add this directory to PATH as well. For example if you are using a bash shell, you can edit your ~/.bashrc file like so:
export CERTORA="preferred/path/for/storing/build/outputs"
export PATH="$CERTORA:$PATH"
cd into a directory you want to store the CertoraProver source and clone the repo:
git clone --recurse-submodules https://github.com/Certora/CertoraProver.git
Compile the code by running: ./gradlew assemble
If you want to clean up all artifacts of the project, run: ./gradlew clean
Make sure the path you used to set the variable CERTORA has important jars, scripts, and binaries like emv.jar, certoraRun.py, tac_optimizer.
cd CertoraProver
python -m venv .venv
source .venv/bin/activate
pip install -r scripts/certora_cli_requirements.txt
Crypto installed, you may first need to uninstall (pip uninstall crypto) before installing pycryptodometac_optimizer builds correctly by cding in to the fried-egg directory and running cargo build --release. Also make sure tac_optimizer is in your path (set using CERTORA).You can run the tool by running certoraRun.py -h to see all the options.
Public/TestEVM. For example, you can run one of these like so: cd Public/TestEVM/CVLCompilation/OptionalFunction
certoraRun.py Default.conf
You can run unit tests directly from IDEs like IntelliJ, or from the command line with ./gradlew test --tests <name_of_test_with_wildcards>
CertoraProver/src/test (and also in the test directories of the various subprojects)Copyright (C) 2025 Certora Ltd. The Certora Prover is released under the GNU General Public License, Version 3, as published by the Free Software Foundation. For more information, see the file LICENSE.
Kotlin
85.6%
Python
5.4%
WebAssembly
3.9%
Solidity
2.5%