brew install openjdk@25
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
# Use local git executable to fetch from repos (needed for private repos)
echo "net.git-fetch-with-cli=true" >> .cargo/config.toml
cargo install --git ssh://git@github.com/Consensys/corset --locked --forceThe constraint system lives in-tree at tracer-constraints/ (previously the Consensys/linea-constraints submodule, now merged into this monorepo). No additional setup is required — it is checked out alongside the rest of the monorepo.
Note: Windows users may need to run git config core.protectNTFS false within the tracer-constraints/ folder to bypass CON.* file names being reserved.
Step 6: Install pre-commit
pip install --user pre-commit
# For macOS users.
brew install pre-commitThen run pre-commit install to set up git hook scripts.
Used hooks can be found here.
NOTE
pre-commitaids in running checks (end of file fixing, markdown linting, linting, runs tests, json validation, etc.) before you perform your git commits.
# Run all tests
./gradlew clean test
# Run only unit tests
./gradlew clean unitTests
# Run only acceptance tests
./gradlew clean acceptanceTests
# Generate EVM test suite BlockchainTests
./gradlew :reference-tests:generateBlockchainReferenceTests
# Run EVM test suite BlockchainTests
./gradlew clean referenceBlockchainTests
# Generate EVM test suite GeneralStateTests
./gradlew :reference-tests:generateGeneralStateReferenceTests
# Run EVM test suite GeneralStateTests
./gradlew clean referenceGeneralStateTests
# Run all EVM test suite reference tests
./gradlew clean referenceTests
# Run single reference test via gradle, e.g for net.consensys.linea.generated.blockchain.BlockchainReferenceTest_583
./gradlew :reference-tests:referenceTests --tests "net.consensys.linea.generated.blockchain.BlockchainReferenceTest_583"NOTE
Please be aware if the reference test code generation tasks
blockchainReferenceTestsandgeneralStateReferenceTestsdo not generate any Java code, then probably you are missing the Ethereum tests submodule which you can clone viagit submodule update --init --recursive.
For debugging and inspection purposes, it is possible to capture a replay, i.e. all the minimal information required to replay a series of blocks as they played on the blockchain, which is done with scripts/capture.pl.
A typical invocation would be:
scripts/capture.pl --start 1300923
which would capture a replay of block #1300923 and store it in arithmetization/src/test/resources/replays. More options are available, refer to scripts/capture.pl -h.
-
Go to
Settings | Build, Execution, Deployment | Compiler | Annotation Processorsand tick the following checkbox:
NOTE
This setting is required to avoid IDE compilation errors because of the Lombok library used for code generation of boilerplate Java code such as:
- Getters/Setters (via
@Getter/@Setter)- Class log instances (via
@Slf4j)- Builder classes (via
@Builder)- Constructors ( via
@NoArgsConstructor/@RequiredArgsConstructor/@AllArgsConstructor)- etc.
Learn more about how Java annotation processing works here.
-
Install Checkstyle plugin and set IDE code reformatting to comply with the project's Checkstyle configuration:
- Install Spotless Gradle plugin to re-format through the IDE according to spotless configuration.
- JSON files can be debugged with the following command:
corset check -T <JSON_FILE> -v linea-constraints/zkevm.binCorset expansion means that generated traces are checked as accurately as possible. However, this slows testing down to some extent. It can be easily disabled in IntelliJ:
- Go to
Run | Edit Configurations
and add CORSET_FLAGS= under Environment Variables. This turns
off all expansion modes, including field arithmetic.


