110 lines
3.7 KiB
Markdown
110 lines
3.7 KiB
Markdown
|
# Lighthouse Inter-Op Docs
|
||
|
|
||
|
_These documents are intended for a highly technical audience, specifically
|
||
|
Ethereum 2.0 implementers._
|
||
|
|
||
|
This document provides details on how to use Lighthouse for inter-op testing.
|
||
|
|
||
|
## Steps
|
||
|
|
||
|
_Note: binaries are compiled into the `target/release` directory of the
|
||
|
repository. In this example, we run binaries assuming the user is in this
|
||
|
directory. E.g., running the beacon node binary can be achieved with
|
||
|
`$ ./target/release/beacon_node`. Those familiar with `cargo` may use the
|
||
|
equivalent (and more-convenient) `cargo run --release --` commands._
|
||
|
|
||
|
1. Setup a Lighthouse [development environment](env.md).
|
||
|
1. Build all the binaries using `cargo build --all --release`
|
||
|
1. Create default configuration files by running `$ ./beacon_node` and pressing
|
||
|
Ctrl+C after the node has started.
|
||
|
1. Follow the steps in [Genesis](#genesis) to configure the genesis state.
|
||
|
1. Follow the steps in [Networking](#networking) to launch a node with
|
||
|
appropriate networking parameters.
|
||
|
|
||
|
## Genesis
|
||
|
|
||
|
Lighthouse supports the following methods for generating a genesis state:
|
||
|
|
||
|
- [`Yaml`](#yaml): loads the genesis state from some YAML file (recommended
|
||
|
method).
|
||
|
- [`Generated`](#generated): generates a state given a `(validator_count,
|
||
|
genesis_time)`
|
||
|
tuple. _Note: this method is not yet fully specified and the state
|
||
|
generated is almost certainly not identical to other implementations._
|
||
|
- [`RecentGenesis`](#recentgenesis): identical to `Generated`, however the
|
||
|
`genesis_time` is set
|
||
|
to the previous 30-minute window. For example, if a state is generated at
|
||
|
`0845`, the genesis time will be `0830`.
|
||
|
|
||
|
You may configure a `beacon_node` to use one of these methods using the
|
||
|
[`beacon_node.toml`](README.md#beacon-nodetoml). There is a [documented
|
||
|
example](config_examples/) configuration file which includes an example for
|
||
|
each of these methods (see the `genesis_state` object).
|
||
|
|
||
|
### Yaml
|
||
|
|
||
|
This method involves loading a `BeaconState` from a YAML file. We provide
|
||
|
instructions for generating that YAML file and starting from it. If starting
|
||
|
from a pre-existing YAML file, simply skip the generation steps.
|
||
|
|
||
|
#### Generating a YAML file
|
||
|
|
||
|
The [cli_util](/tests/cli_util) generate YAML genesis state files. You can run
|
||
|
`$ ./cli_util genesis_yaml -h` to see documentation. We provide an example to
|
||
|
generate a YAML file with the following properties:
|
||
|
|
||
|
- 10 initial validators, each with [deterministic
|
||
|
keypairs](https://github.com/ethereum/eth2.0-pm/issues/60#issuecomment-512157915).
|
||
|
- The genesis file is stored in `~/.lighthouse/`, the default data directory
|
||
|
(an absolute path must be supplied).
|
||
|
- Genesis time is set to the time when the command is run (it can be customized
|
||
|
with the `-g` flag).
|
||
|
|
||
|
```
|
||
|
$ ./cli_util genesis_yaml -n 10 -f /home/user/.lighthouse/genesis_state.yaml
|
||
|
```
|
||
|
|
||
|
#### Configuring the Beacon Node
|
||
|
|
||
|
Modify the [`beacon-node.toml`](README.md#beacon-nodetoml) file to have the
|
||
|
following `genesiss_state` object (choosing the `file`):
|
||
|
|
||
|
```
|
||
|
[genesis_state]
|
||
|
type = "Yaml"
|
||
|
file = "/home/user/.lighthouse/genesis_state.yaml"
|
||
|
```
|
||
|
|
||
|
### Generated
|
||
|
|
||
|
Modify the [`beacon-node.toml`](README.md#beacon-nodetoml) file to have the
|
||
|
following `genesis_state` object (choosing the `validator_count` and
|
||
|
`genesis_time`):
|
||
|
|
||
|
```
|
||
|
[genesis_state]
|
||
|
type = "Generated"
|
||
|
validator_count = 16
|
||
|
genesis_time = 1564620118
|
||
|
```
|
||
|
|
||
|
### RecentGenesis
|
||
|
|
||
|
Modify the [`beacon-node.toml`](README.md#beacon-nodetoml) file to have the
|
||
|
following `genesis_state` object (choosing the `validator_count`):
|
||
|
|
||
|
```
|
||
|
[genesis_state]
|
||
|
type = "RecentGenesis"
|
||
|
validator_count = 16
|
||
|
```
|
||
|
|
||
|
## Networking
|
||
|
|
||
|
_TODO: provide details on config required to connect to some IP address._
|
||
|
|
||
|
## References
|
||
|
|
||
|
The BLS key generation method used should be identical to [this
|
||
|
implementation](https://github.com/ethereum/eth2.0-pm/issues/60#issuecomment-512157915).
|