* Add RandaoRevealSlashing for early Randao reveals * add some randao reveal slashing tests * Unifying RANDAO reveal slashing and Custody reveal slashing; implemented more lenient penalty for not-to-early reveals * Fix custody reveal domain * Also test exposed_randao_reveals * Re-add exposed_randao_reveals to validator initialization * Fix tests * Unified Randao Reveal slashing mechanism and Custody Reveal, CUSTODY_PERIOD_TO_RANDAO_PADDING = EPOCHS_PER_CUSTODY_PERIOD * Move exposed_randao_reveals into separate data structure to keep validator record clean * new shiny staggered custody periods * Fixes style and type hinting * removes whitespace * Cleans up multi-line conditionals * Make RANDAO key reveal penalties proportional to block rewards * Minor typos * Minor typos * Fixes off-by one error * Removes unnecicary whitepsace * Clean up comments; add test for key reveal too far in the future * Reduce the CUSTODY_PERIOD_TO_RANDAO_PADDING again * Fix max_proposer_slot_reward * Fix types * Move test * Fix RandaoKeyReveal tests * Move all RANDAO key reveal to phase 1 * Factor out signature checking * Some fixes * Update specs/core/1_custody-game.md Co-Authored-By: dankrad <dankrad@ethereum.org> * Addressing Vitalik's suggestions: Separate RANDAO and Custody key reveals; append the cleanup of RANDAO reveals instead of adding a new function * Remove remnants of verify_custody_key * RandaoKeyReveal -> EarlyDerivedSecretReveal * Make penalty proportional to number of secrets already exposed * Update specs/core/1_custody-game.md Co-Authored-By: dankrad <dankrad@ethereum.org> * Update specs/core/1_custody-game.md Co-Authored-By: dankrad <dankrad@ethereum.org> * Update specs/core/1_custody-game.md Co-Authored-By: dankrad <dankrad@ethereum.org>
ETH 2.0 PySpec
The Python executable spec is built from the ETH 2.0 specification, complemented with the necessary helper functions for hashing, BLS, and more.
With this executable spec, test-generators can easily create test-vectors for client implementations, and the spec itself can be verified to be consistent and coherent, through sanity tests implemented with pytest.
Building
All the dynamic parts of the spec can be build at once with make pyspec
.
Alternatively, you can build a sub-set of the pyspec: make phase0
.
Or, to build a single file, specify the path, e.g. make test_libs/pyspec/eth2spec/phase0/spec.py
Py-tests
After building, you can install the dependencies for running the pyspec
tests with make install_test
These tests are not intended for client-consumption. These tests are sanity tests, to verify if the spec itself is consistent.
How to run tests
Automated
Run make test
from the root of the spec repository.
Manual
From within the pyspec
folder:
Install dependencies:
python3 -m venv venv
. venv/bin/activate
pip3 install -r requirements-testing.txt
Note: make sure to run make -B pyspec
from the root of the specs repository,
to build the parts of the pyspec module derived from the markdown specs.
The -B
flag may be helpful to force-overwrite the pyspec
output after you made a change to the markdown source files.
Run the tests:
pytest --config=minimal
Contributing
Contributions are welcome, but consider implementing your idea as part of the spec itself first. The pyspec is not a replacement.
License
Same as the spec itself, see LICENSE file in spec repository root.