3.2 KiB
nim-eth2-official-tests
This repo reformats the official Ethereum 2 tests to a format suitable for Nimbus/nim-beacon-chain.
Cloning the repo
Due to upstream usage of Git LFS to store the large test vectors, there is an extra step after cloning the repo:
git clone https://github.com/status-im/nim-eth2-official-tests
cd nim-eth2-official-tests
git lfs install
git submodule update --init --recursive
Usage in nim-beacon-chain
This repository is meant to be submoduled in nim-beacon-chain/tests/official/
with the fixtures
name.
From the nim-beacon-chain project folder:
git submodule add https://github.com/status-im/nim-eth2-official-tests ./tests/official/fixtures
This repository allows use to workaround the current following limitations:
- no YAML support in nim-serialization library which allows well-tested serialization and deserialization into and from Ethereum types.
- NimYAML uses int by default for numerals and cannot deserialize 18446744073709551615 (2^64-1), the FAR_FUTURE_SLOT constant.
- Eth2.0 tests currently uses an invalid BLS signature https://github.com/ethereum/eth2.0-tests/issues/27
- All those workarounds requires an intermediate reformatted JSON file, but the tests are huge (100k+ lines) and will cause review issues in the main repo.
Only state tests are worked on at the moment.
State tests conversion.
Note on serialization hacks:
FAR_FUTURE_SLOT (18446744073709551615)
The FAR_FUTURE_SLOT (18446744073709551615) has been rewritten as a string in the YAML file as it's 2^64-1 and Nim by default try to parse it into a int64 (which can represents up to 2^63-1).
The YAML file is then converted to JSON for easy input to the json serialization/deserialization with beacon chain type support.
"18446744073709551615" is then replaced again by uint64 18446744073709551615.
Compressed signature
In latest_block_header
field, the signatures and randao_reveals are
"0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
but that is not a valid compressed BLS signature, the zero signature should be:
"0xc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
Commands
You can compile and run the batch_convert.nim
file to convert the supported tests.
It needs to be run from the root of this project directory.
You can also convert individual files directly from the fixture_utils.nim
file with the following format:
fixture_utils path/to/input.yam path/to/output.json
Due to limitation in NimYAML library you might need to stringify 2^64 - 1
as NimYAML interprets
all numbers as int
(int64
on 64-bit platforms) while we need uint64
.
You can use the following comment in an UNIX environment
sed 's/18446744073709551615/"18446744073709551615"/g' path/to/original.yaml > path/to/stringified.yaml