Test generation for Solidity in Foundry format (https://github.com/foundry-rs/foundry).
Project description
SolTG+
SolTG+ is a test case generator for Solidity smart contracts, building upon the original implementation of SolTG by Konstantin Britikov.
How to Install
Before installing SolTG+, ensure all dependencies are installed.
Instructions to install dependencies on Ubuntu 24.04
pip and python
sudo apt update
sudo apt install python3.12 python3-pip python3.12-venv
Foundry
curl -L https://foundry.paradigm.xyz | bash
source ~/.bashrc
foundryup
solc (0.8.xx)
sudo apt install curl gnupg software-properties-common
sudo add-apt-repository ppa:ethereum/ethereum
sudo apt update
sudo apt install solc
GenHTML or lcov
sudo apt update
sudo apt install lcov
Z3 (4.12.1)
Building Z3 from source. cd to an appropriate directory to clone Z3 repo.
sudo apt update
sudo apt install build-essential python3 cmake
git clone https://github.com/Z3Prover/z3.git
cd z3
git checkout z3-4.12.1
python scripts/mk_make.py
cd build
make -j$(nproc)
sudo make install
Installation Options
Option 1
Once all dependencies have been installed, install the pip package by running (after switching to a virtual environment if necessary):
pip install soltg-plus
Option 2
Or clone the git repo
git clone git@github.com:zuru-zuru/soltgfrontend.git
cd soltgfrontend
and run (after switching to a virtual environment if necessary):
pip install .
Foundry dependency
For foundry to generate the coverage report, forge-std must be present inside ./lib/forge-std in the current directory. This can be installed by running:
forge install foundry-rs/forge-std --no-commit
Note that the above command need not be run if ./lib/forge-std is already present in the current directory (for e.g. its already present in soltgfrontend/lib/forge-std so SolTG+ can be directly run from the soltgfrontend directory).
To run SolTG+ use the following command:
solTg-plus -i <path to input file/directory> -t <timeout in seconds>
Example directory structure
Current_Directory/
├── input
│ └── Example.sol
└── lib
└── forge-std
running:
solTg-plus -i ./input/Example.sol -t 60
will generate the output in Current_Directory/test
tgnonlin and solc
Precompiled binaries for modified versions of tgnonlin and solc are included in the deps folder (compiled on Ubuntu 24.04). If they are incompatible with your system, replace them with binaries compiled from the soltgbackend repo.
Install Docker image
Alternatively SolTG+ can be installed as a docker image. The only dependency needed to be installed for this is Docker
Also don't forget to get your user permission to interact with docker: https://stackoverflow.com/questions/48957195/how-to-fix-docker-got-permission-denied-issue
Once docker has been installed, download the image by running:
docker pull cs74/soltg-plus:latest
And run the following command to use the docker image:
docker run -v <input directory>:/app/input -v <output directory>:/app/test cs74/soltg-plus:latest -i ./input/<path to input file> -t <timeout in seconds>
here <input directory> and <output directory> are absolute paths to the input and output directory on the host system while <path to input file> is the relative path from the input directory to the input file on the host system. Make sure that the input file and any other file it imports are inside <input directory> or its subdirectories so that they are accessible inside the docker container.
e.g. command
sudo docker run -v /home/username/input_dir:/app/input -v /home/username/output_dir:/app/test soltg-plus:latest -i ./input/Example.sol -t 60
where path to Example.sol is /home/username/input_dir/Example.sol on the host system. All previous contents of the output_dir will be cleared.
Usage Notes
-
Requirements for SolCMC to generate the CHC Encoding:
- Contracts must not be abstract.
- There must be least one
assertstatement (e.g.,assert(true);) in the contract. - SolTG+ will notify if the CHC encoding is not generated.
-
Input File Compatibility:
- Input files must be compatible with the precompiled
solcbinary in thedepsfolder (0.8.29). - If installed via pip or from source, input files must ALSO be compatible with the system's
solc. - If using Docker, input files must ALSO be compatible with
solc(0.8.29).
- Input files must be compatible with the precompiled
Example of Contract under Test:
contract C {
uint x;
function f(uint _x) public {}
function g(uint _x, uint _y) public {}
function w(uint _x) public {}
function i(uint _x) internal {}
}
Expected results of Test Generation:
import "forge-std/Test.sol";
import "../src/contract_under_test.sol";
contract contract_under_test_Test is Test {
C c0, c1, c2, ... cN;
function setUp() public {
c0 = new C(); c1 = new C(); ... cN = new C();
}
function test_0() public {
c0.f();
c0.g();
....
c0.w();
}
........
function test_n() public {
cN.g();
cN.w();
....
cN.w();
}
}
Example taken from the README.md file of SolTG's repository.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file solTg-plus-0.2.0.tar.gz.
File metadata
- Download URL: solTg-plus-0.2.0.tar.gz
- Upload date:
- Size: 7.8 MB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.0.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
597e61ce7d78671db7432ea6465563d3ee766c2bf107d38da2c7f03ab85cf9a7
|
|
| MD5 |
20af0ee3db6bca2c4fd6f3c95b538e8e
|
|
| BLAKE2b-256 |
621796d7135eedab501937e72c086ee95d13840f7cc9de05713609d355047997
|
File details
Details for the file solTg_plus-0.2.0-py3-none-any.whl.
File metadata
- Download URL: solTg_plus-0.2.0-py3-none-any.whl
- Upload date:
- Size: 7.8 MB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.0.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
24874355710bdca7ec3c79da1df2ed006539ab48ddd0389a154314fb62d7a243
|
|
| MD5 |
05f1eb1e7f7269d8fed0ee7cbe875e27
|
|
| BLAKE2b-256 |
3be89ce4556c48fbeeeea49b7d59a5f13685b60d38674b2771b6ddd7c563bc92
|