# Pantheon Ethereum Client · [![License](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](LICENSE) ## Pantheon Users The process for building and running Pantheon as a user is different to when developing. All user documentation is on our Wiki and some processes are different to those described in this Readme. ### Build, Install, and Run Pantheon Building, installing, and running Pantheon is described in the Wiki: * [Build and Install](https://github.com/PegaSysEng/pantheon/wiki/Installation) * [Quickstart](https://github.com/PegaSysEng/pantheon/wiki/Quickstart) ### Documentation User and reference documentation available on the Wiki includes: * [Command Line Options](https://github.com/PegaSysEng/pantheon/wiki/Pantheon-CLI-Syntax) * [JSON-RPC API](https://github.com/PegaSysEng/pantheon/wiki/JSON-RPC-API) * [Docker Quickstart Tutorial](https://github.com/PegaSysEng/pantheon/wiki/Docker-Quickstart) ## Pantheon Developers ## Build Instructions To build, clone this repo and run with `./gradlew` like so: ``` git clone --recursive https://github.com/PegaSysEng/pantheon.git cd pantheon ./gradlew ``` After a successful build, distribution packages will be available in `build/distribution`. ## Code Style We use Google's Java coding conventions for the project. To reformat code, run: ``` ./gradlew spotlessApply ``` Code style will be checked automatically during a build. ## Testing All the unit tests are run as part of the build, but can be explicitly triggered with: ``` ./gradlew test ``` The integration tests can be triggered with: ``` ./gradlew integrationTest ``` The reference tests (described below) can be triggered with: ``` ./gradlew referenceTest ``` The system tests can be triggered with: ``` ./gradlew smokeTest ``` ## Running Pantheon You can build and run Pantheon with default options via: ``` ./gradlew run ``` By default this stores all persistent data in `build/pantheon`. If you want to set custom CLI arguments for the Pantheon execution, you can use the property `pantheon.run.args` like e.g.: ```sh ./gradlew run -Ppantheon.run.args="--discovery=false --home=/tmp/pantheontmp" ``` which will pass `--discovery=false` and `--home=/tmp/pantheontmp` to the invocation. ### Ethereum reference tests On top of the project proper unit tests, specific unit tests are provided to run the Ethereum reference tests available at https://github.com/ethereum/tests and described at http://ethereum-tests.readthedocs.io/en/latest/. Those are run as part of the unit test suite as described above, but for debugging, it is often convenient to run only a subset of those tests, for which a few convenience as provided. For instance, one can run only "Frontier" general state tests with ``` ./gradlew :ethereum:net.consensys.pantheon.ethereum.vm:referenceTest -Dtest.single=GeneralStateTest -Dtest.ethereum.state.eip=Frontier ``` or only the tests that match a particular pattern with something like: ``` gradle :ethereum:net.consensys.pantheon.ethereum.vm:test -Dtest.single=GeneralStateTest -Dtest.ethereum.include='^CALLCODE.*-Frontier' ``` Please see the comment on the `test` target in the top level `build.gradle` file for more details. ### Logging This project employs the logging utility [Apache Log4j](https://logging.apache.org/log4j/2.x/), accordingly levels of detail can be specified as follows: ``` ALL: All levels including custom levels. DEBUG: Designates fine-grained informational events that are most useful to debug an application. ERROR: Designates error events that might still allow the application to continue running. FATAL: Designates very severe error events that will presumably lead the application to abort. INFO: Designates informational messages that highlight the progress of the application at coarse-grained level. OFF: The highest possible rank and is intended to turn off logging. TRACE: Designates finer-grained informational events than the DEBUG. WARN: Designates potentially harmful situations. ``` One mechanism of globally effecting the log output of a running client is though modification the file `/pantheon/src/main/resources/log4j2.xml`, where it can be specified under the ``. As such, corresponding instances of information logs throughout the codebase, e.g. `log.fatal("Fatal Message!");`, will be rendered to the console while the client is in use. ## Contribution Welcome to the Pantheon Ethereum project repo. If you would like to help contribute code to the project, please fork, commit and send us a pull request. Please read the [Contribution guidelines](docs/CONTRIBUTORS.md) for this project.