nimbus-eth2/ncli
Jacek Sieka aabdd34704
e2store: add era format (#2382)
Era files contain 8192 blocks and a state corresponding to the length of
the array holding block roots in the state, meaning that each block is
verifiable using the pubkeys and block roots from the state. Of course,
one would need to know the root of the state as well, which is available
in the first block of the _next_ file - or known from outside.

This PR also adds an implementation to write e2s, e2i and era files, as
well as a python script to inspect them.

All in all, the format is very similar to what goes on in the network
requests meaning it can trivially serve as a backing format for serving
said requests.

Mainnet, up to the first 671k slots, take up 3.5gb - in each era file,
the BeaconState contributes about 9mb at current validator set sizes, up
from ~3mb in the early blocks, for a grand total of ~558mb for the 82 eras
tested - this overhead could potentially be calculated but one would lose
the ability to verify individual blocks (eras could still be verified using
historical roots).

```
-rw-rw-r--. 1 arnetheduck arnetheduck   16  5 mar 11.47 ethereum2-mainnet-00000000-00000001.e2i
-rw-rw-r--. 1 arnetheduck arnetheduck 1,8M  5 mar 11.47 ethereum2-mainnet-00000000-00000001.e2s
-rw-rw-r--. 1 arnetheduck arnetheduck  65K  5 mar 11.47 ethereum2-mainnet-00000001-00000001.e2i
-rw-rw-r--. 1 arnetheduck arnetheduck  18M  5 mar 11.47 ethereum2-mainnet-00000001-00000001.e2s
...
-rw-rw-r--. 1 arnetheduck arnetheduck  65K  5 mar 11.52 ethereum2-mainnet-00000051-00000001.e2i
-rw-rw-r--. 1 arnetheduck arnetheduck  68M  5 mar 11.52 ethereum2-mainnet-00000051-00000001.e2s
-rw-rw-r--. 1 arnetheduck arnetheduck  61K  5 mar 11.11 ethereum2-mainnet-00000052-00000001.e2i
-rw-rw-r--. 1 arnetheduck arnetheduck  62M  5 mar 11.11 ethereum2-mainnet-00000052-00000001.e2s
```
2021-03-15 11:31:39 +01:00
..
.gitignore rm ncli_signing_root 2019-12-17 00:06:03 +02:00
README.md update nim-beacon-chain to nimbus-eth2 in beacon_chain/, ncli/, tests/, and README.md (#1843) 2020-10-08 19:02:05 +00:00
e2store.nim e2store: add era format (#2382) 2021-03-15 11:31:39 +01:00
e2store.py e2store: add era format (#2382) 2021-03-15 11:31:39 +01:00
inspector.nim Use setupAddress for better IP and ports configuration 2021-03-06 00:09:09 +02:00
inspector.nim.cfg Move tools (#2370) 2021-03-02 15:02:10 +01:00
logtrace.nim Move tools (#2370) 2021-03-02 15:02:10 +01:00
ncli.nim Reorg (5/5) (#2377) 2021-03-05 14:12:00 +01:00
ncli_db.nim e2store: add era format (#2382) 2021-03-15 11:31:39 +01:00
ncli_query.nim 12x speedup on state sim with 100k validators sans BLS by caching get_beacon_proposer_index(...) 2020-06-04 17:07:51 +00:00
ncli_slashing.nim Consolidate modules by areas [part 1] (#2365) 2021-03-02 11:27:45 +01:00
nim.cfg minimize imports, specially for spec - cuts 2/3 of ncli build time (#500) 2019-10-25 12:59:56 +02:00
nimquery.nim Move tools (#2370) 2021-03-02 15:02:10 +01:00

README.md

Introduction

ncli is a set of low level / debugging tools to interact with the nimbus beacon chain specification implementation, simliar to zcli. With it, you explore SSZ, make state transitions and compute hash tree roots.

Tools

  • transition: Perform state transition given a pre-state and a block to apply (both in SSZ format)
  • hash_tree_root: Print tree root of an SSZ object
  • pretty: Pretty-print SSZ object as JSON

Building

Follow the instructions from nimbus-eth2

git clone https://github.com/status-im/nimbus-eth2.git
cd nimbus-eth2
make

Usage

# Build with minimal config
../env.sh nim c -d:const_preset=minimal ncli_transition
# Build with mainnet config
../env.sh nim c -d:const_preset=mainnet ncli_transition

# Run..
./ncli_transition --help