Implementation of the Ethereum 2.0 Beacon Chain.
Based on the (evolving) specification.
To build, clone this repo and run with gradle
like so:
$ git clone --recursive https://github.com/PegaSysEng/artemis.git
$ cd artemis
$ ./gradlew
After a successful build, distribution packages will be available in build/distributions
.
After building, follow these instructions:
$ cd scripts
$ sh run.sh [NUMBER OF NODES]
Note: You will need tmux installed for this demo to work
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.
All the unit tests are run as part of the build, but can be explicitly triggered with:
$ ./gradlew test
To view the run menu:
$ ./gradlew run --args='-h'
Usage: Artemis [-fhV] [-s] [-c=<FILENAME>] [-l=<LOG VERBOSITY LEVEL>]
[-o=<FILENAME>] [-p=<PROVIDER TYPE>] [<EVENT>...]
[<EVENT>...] Output selector for specific events
-c, --config=<FILENAME> Path/filename of the config file
-f, --format Output of JSON file is serial or formatted
-h, --help Show this help message and exit.
-l, --logging=<LOG VERBOSITY LEVEL>
Logging verbosity levels: OFF, FATAL, WARN, INFO, DEBUG,
TRACE, ALL (default: INFO).
-o, --output=<FILENAME> Path/filename of the output file. Path can be followed
by events the user wishes to output example:
-o=artemis.json Eth2Genesis TimeSeriesRecord
-p, --provider=<PROVIDER TYPE>
Output provider types: CSV, JSON (default: JSON).
-s, --sim PoW simulation flag, w/ optional input file
-V, --version Print version information and exit.
You can run the executable from the CLI with this command:
$ ./gradlew run
To run and send formatted output to a json file
$ ./gradlew run --args='-p=JSON -o=artemis.json'
NOTE: If no -p isn't provided then it defaults to JSON
To run and send formatted output to a csv file
$ ./gradlew run --args='-p=CSV -o=artemis.csv'
To run with loggin level set to DEBUG
$ ./gradlew run --args='-l=DEBUG'
To run and generate flow diagrams for Artemis
$ ./gradlew run -PgenerateFlow
Note: You must be running flow