prysm-pulse/INTEROP.md
kasey 588dea83b7
Config registry (#10683)
* test coverage and updates to config twiddlers

* LoadChainConfigFile error if SetActive conflicts

* lint

* wip working around test issues

* more fixes, mass test updates

* lint

* linting

* thanks deepsource!

* fix undeclared vars

* fixing more undefined

* fix a bug, make a bug, repeat

* gaz

* use stock mainnet in case fork schedule matters

* remove unused KnownConfigs

* post-merge cleanup

* eliminating OverrideBeaconConfig outside tests

* more cleanup of OverrideBeaconConfig outside tests

* config for interop w/ genesis gen support

* improve var name

* API on package instead of exported value

* cleanup remainders of "registry" naming

* Nishant feedback

* add ropstein to configset

* lint

* lint #2

* ✂️

* revert accidental commented line

* check if active is nil (replace called on empty)

* Nishant feedback

* replace OverrideBeaconConfig call

* update interop instructions w/ new flag

* don't let interop replace config set via cli flags

Co-authored-by: kasey <kasey@users.noreply.github.com>
2022-05-20 07:16:53 +00:00

3.8 KiB

Prysm Client Interoperability Guide

This README details how to setup Prysm for interop testing for usage with other Ethereum consensus clients.

Installation & Setup

  1. Install Bazel (Recommended)
  2. git clone https://github.com/prysmaticlabs/prysm && cd prysm
  3. bazel build //...

Starting from Genesis

Prysm supports a few ways to quickly launch a beacon node from basic configurations:

  • NumValidators + GenesisTime: Launches a beacon node by deterministically generating a state from a num-validators flag along with a genesis time (Recommended)
  • SSZ Genesis: Launches a beacon node from a .ssz file containing a SSZ-encoded, genesis beacon state

Generating a Genesis State

To setup the necessary files for these quick starts, Prysm provides a tool to generate a genesis.ssz from a deterministically generated set of validator private keys following the official interop YAML format here.

You can use bazel run //tools/genesis-state-gen to create a deterministic genesis state for interop.

Usage

  • --genesis-time uint: Unix timestamp used as the genesis time in the generated genesis state (defaults to now)
  • --num-validators int: Number of validators to deterministically include in the generated genesis state
  • --output-ssz string: Output filename of the SSZ marshaling of the generated genesis state
  • --config-name=interop string: name of the beacon chain config to use when generating the state. ex mainnet|minimal|interop

deprecated flag: use --config-name instead

  • --mainnet-config bool: Select whether genesis state should be generated with mainnet or minimal (default) params

The example below creates 64 validator keys, instantiates a genesis state with those 64 validators and with genesis unix timestamp 1567542540, and finally writes a ssz encoded output to ~/Desktop/genesis.ssz. This file can be used to kickstart the beacon chain in the next section. When using the --interop-* flags, the beacon node will assume the interop config should be used, unless a different config is specified on the command line.

bazel run //tools/genesis-state-gen -- --config-name interop --output-ssz ~/Desktop/genesis.ssz --num-validators 64 --genesis-time 1567542540

Launching a Beacon Node + Validator Client

Launching from Pure CLI Flags

Open up two terminal windows, run:

bazel run //beacon-chain -- \
--bootstrap-node= \
--deposit-contract 0x8A04d14125D0FDCDc742F4A05C051De07232EDa4 \
--datadir=/tmp/beacon-chain-interop \
--force-clear-db \
--min-sync-peers=0 \
--interop-num-validators 64 \
--interop-eth1data-votes

This will deterministically generate a beacon genesis state and start the system with 64 validators and the genesis time set to the current unix timestamp. Wait a bit until your beacon chain starts, and in the other window:

bazel run //validator -- --keymanager=interop --keymanageropts='{"keys":64}'

This will launch and kickstart the system with your 64 validators performing their duties accordingly.

Launching from genesis.ssz

Assuming you generated a genesis.ssz file with 64 validators, open up two terminal windows, run:

 bazel run //beacon-chain -- \
--bootstrap-node= \
--deposit-contract 0x8A04d14125D0FDCDc742F4A05C051De07232EDa4 \
--datadir=/tmp/beacon-chain-interop \
--force-clear-db \
--min-sync-peers=0 \
--interop-genesis-state /path/to/genesis.ssz \
--interop-eth1data-votes

Wait a bit until your beacon chain starts, and in the other window:

bazel run //validator -- --keymanager=interop --keymanageropts='{"keys":64}'

This will launch and kickstart the system with your 64 validators performing their duties accordingly.