A Linea tracing implementation for Hyperledger Besu based on an existing implementation in Go.
- compile linea-plugins
gradlew installDist - copy jar file to besu runtime plugins/ directory (where you will run besu from, not where you're building besu)
- add
ROLLUPto besu config to enable the plugin RPC methods- rpc-http-api=["ADMIN","ETH","NET","WEB3","ROLLUP"]
- start besu (command line or from IDE) and you should see plugins registered at startup
- call the RPC endpoint eg
curl --location --request POST 'http://localhost:8545' --data-raw '{
"jsonrpc": "2.0",
"method": "rollup_generateConflatedTracesToFileV0",
"params": [0, 0, "6.16.0"],
"id": 1
}'brew install openjdk@17
Linux/MacOs
- Install the relevant CGo compiler for your platform
- Install the Go toolchain
Windows
- Requirement Docker Desktop WSL 2 backend on Windows
On release native libs are build for all the supported platforms,
if you want to test this process locally run ./gradlew -PreleaseNativeLibs jar,
jar is generated in arithmetization/build/libs.
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://[email protected]/Consensys/corsetUpdate Constraints Submodule
git submodule update --init --recursiveInstall 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
# Run EVM test suite BlockchainTests
./gradlew clean referenceBlockchainTests
# 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, than 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 zkevm-constraints/zkevm.binPlugins are documented here.
Here are the steps for releasing a new version of the plugins:
- Create a tag with the release version number in the format vX.Y.Z (e.g., v0.2.0 creates a release version 0.2.0).
- Push the tag to the repository.
- GitHub Actions will automatically create a draft release for the release tag.
- Once the release workflow completes, update the release notes, uncheck "Draft", and publish the release.
Note: Release tags (of the form v*) are protected and can only be pushed by organization and/or repository owners.

