mirror of
https://github.com/sigp/lighthouse.git
synced 2026-04-18 13:28:33 +00:00
146 lines
4.5 KiB
Markdown
146 lines
4.5 KiB
Markdown
# Local Testnets
|
|
|
|
> This section is about running your own private local testnets.
|
|
> - If you wish to join the ongoing public testnet, please read [become a validator](./become-a-validator.md).
|
|
|
|
The `beacon_node` and `validator` commands have a `testnet` sub-command to
|
|
allow creating or connecting to Eth2 beacon chain testnets.
|
|
|
|
For detailed documentation, use the `--help` flag on the CLI:
|
|
|
|
```bash
|
|
$ lighthouse bn testnet --help
|
|
```
|
|
|
|
```bash
|
|
$ lighthouse vc testnet --help
|
|
```
|
|
|
|
## Examples
|
|
|
|
All examples assume a working [development environment](./setup.md) and
|
|
commands are based in the `target/release` directory (this is the build dir for
|
|
`cargo`).
|
|
|
|
### Start a beacon node given a validator count and genesis_time
|
|
|
|
|
|
To start a brand-new beacon node (with no history) use:
|
|
|
|
```bash
|
|
$ lighthouse bn testnet -f quick 8 <GENESIS_TIME>
|
|
```
|
|
|
|
Where `GENESIS_TIME` is in [unix time](https://duckduckgo.com/?q=unix+time&t=ffab&ia=answer).
|
|
|
|
> Notes:
|
|
>
|
|
> - This method conforms the ["Quick-start
|
|
genesis"](https://github.com/ethereum/eth2.0-pm/tree/6e41fcf383ebeb5125938850d8e9b4e9888389b4/interop/mocked_start#quick-start-genesis)
|
|
method in the `ethereum/eth2.0-pm` repository.
|
|
> - The `-f` flag ignores any existing database or configuration, backing them
|
|
> up before re-initializing.
|
|
> - `8` is the validator count and `1567222226` is the genesis time.
|
|
> - See `$ lighthouse bn testnet quick --help` for more configuration options.
|
|
|
|
### Start a beacon node given a genesis state file
|
|
|
|
A genesis state can be read from file using the `testnet file` subcommand.
|
|
There are three supported formats:
|
|
|
|
- `ssz` (default)
|
|
- `json`
|
|
- `yaml`
|
|
|
|
Start a new node using `/tmp/genesis.ssz` as the genesis state:
|
|
|
|
```bash
|
|
$ lighthouse bn testnet --spec minimal -f file ssz /tmp/genesis.ssz
|
|
```
|
|
|
|
> Notes:
|
|
>
|
|
> - The `-f` flag ignores any existing database or configuration, backing them
|
|
> up before re-initializing.
|
|
> - See `$ lighthouse bn testnet file --help` for more configuration options.
|
|
> - The `--spec` flag is required to allow SSZ parsing of fixed-length lists.
|
|
> Here the `minimal` eth2 specification is chosen, allowing for lower
|
|
> validator counts. See
|
|
> [eth2.0-specs/configs](https://github.com/ethereum/eth2.0-specs/tree/dev/configs)
|
|
> for more info.
|
|
|
|
### Start an auto-configured validator client
|
|
|
|
To start a brand-new validator client (with no history) use:
|
|
|
|
```bash
|
|
$ lighthouse vc testnet insecure 0 8
|
|
```
|
|
|
|
> Notes:
|
|
>
|
|
> - The `insecure` command dictates that the [interop keypairs](https://github.com/ethereum/eth2.0-pm/tree/6e41fcf383ebeb5125938850d8e9b4e9888389b4/interop/mocked_start#pubkeyprivkey-generation)
|
|
> will be used.
|
|
> - The `0 8` indicates that this validator client should manage 8 validators,
|
|
> starting at validator 0 (the first deposited validator).
|
|
> - The validator client will try to connect to the beacon node at `localhost`.
|
|
> See `--help` to configure that address and other features.
|
|
> - The validator client will operate very unsafely in `testnet` mode, happily
|
|
> swapping between chains and creating double-votes.
|
|
|
|
### Exporting a genesis file
|
|
|
|
Genesis states can downloaded from a running Lighthouse node via the HTTP API. Three content-types are supported:
|
|
|
|
- `application/json`
|
|
- `application/yaml`
|
|
- `application/ssz`
|
|
|
|
Using `curl`, a genesis state can be downloaded to `/tmp/genesis.ssz`:
|
|
|
|
```bash
|
|
$ curl --header "Content-Type: application/ssz" "localhost:5052/beacon/state/genesis" -o /tmp/genesis.ssz
|
|
```
|
|
|
|
## Advanced
|
|
|
|
Below are some CLI commands useful when working with testnets.
|
|
|
|
### Specify a boot node by multiaddr
|
|
|
|
You can specify a static list of multiaddrs when booting Lighthouse using
|
|
the `--libp2p-addresses` command.
|
|
|
|
#### Example:
|
|
|
|
```bash
|
|
$ lighthouse bn --libp2p-addresses /ip4/192.168.0.1/tcp/9000
|
|
```
|
|
|
|
### Specify a boot node by ENR (Ethereum Name Record)
|
|
|
|
You can specify a static list of Discv5 addresses when booting Lighthouse using
|
|
the `--boot-nodes` command.
|
|
|
|
#### Example:
|
|
|
|
```bash
|
|
$ lighthouse bn --boot-nodes -IW4QB2Hi8TPuEzQ41Cdf1r2AUU1FFVFDBJdJyOkWk2qXpZfFZQy2YnJIyoT_5fnbtrXUouoskmydZl4pIg90clIkYUDgmlwhH8AAAGDdGNwgiMog3VkcIIjKIlzZWNwMjU2azGhAjg0-DsTkQynhJCRnLLttBK1RS78lmUkLa-wgzAi-Ob5
|
|
```
|
|
|
|
### Start a testnet with a custom slot time
|
|
|
|
Lighthouse can run at quite low slot times when there are few validators (e.g.,
|
|
`500 ms` slot times should be fine for 8 validators).
|
|
|
|
#### Example:
|
|
|
|
The `-t` (`--slot-time`) flag specifies the milliseconds per slot.
|
|
|
|
```bash
|
|
$ lighthouse bn testnet -t 500 recent 8
|
|
```
|
|
|
|
> Note: `bootstrap` loads the slot time via HTTP and therefore conflicts with
|
|
> this flag.
|