Update docs for mainnet merge release (#3494)

## Proposed Changes

Update the merge migration docs to encourage updating mainnet configs _now_!

The docs are also updated to recommend _against_ `--suggested-fee-recipient` on the beacon node (https://github.com/sigp/lighthouse/issues/3432).

Additionally the `--help` for the CLI is updated to match with a few small semantic changes:

- `--execution-jwt` is no longer allowed without `--execution-endpoint`. We've ended up without a default for `--execution-endpoint`, so I think that's fine.
- The flags related to the JWT are only allowed if `--execution-jwt` is provided.
This commit is contained in:
Michael Sproul 2022-08-23 03:50:58 +00:00
parent 18c61a5e8b
commit aab4a8d2f2
6 changed files with 79 additions and 28 deletions

View File

@ -235,6 +235,7 @@ pub fn cli_app<'a, 'b>() -> App<'a, 'b> {
.arg( .arg(
Arg::with_name("http-spec-fork") Arg::with_name("http-spec-fork")
.long("http-spec-fork") .long("http-spec-fork")
.value_name("FORK")
.help("Serve the spec for a specific hard fork on /eth/v1/config/spec. It should \ .help("Serve the spec for a specific hard fork on /eth/v1/config/spec. It should \
not be necessary to set this flag.") not be necessary to set this flag.")
.takes_value(true) .takes_value(true)
@ -327,9 +328,9 @@ pub fn cli_app<'a, 'b>() -> App<'a, 'b> {
.arg( .arg(
Arg::with_name("staking") Arg::with_name("staking")
.long("staking") .long("staking")
.help("Standard option for a staking beacon node. Equivalent to \ .help("Standard option for a staking beacon node. This will enable the HTTP server \
`lighthouse bn --http --eth1 `. This will enable the http server on localhost:5052 \ on localhost:5052 and import deposit logs from the execution node. This is \
and try connecting to an eth1 node on localhost:8545") equivalent to `--http` on merge-ready networks, or `--http --eth1` pre-merge")
.takes_value(false) .takes_value(false)
) )
@ -419,16 +420,16 @@ pub fn cli_app<'a, 'b>() -> App<'a, 'b> {
.help("Deprecated. The feature activates automatically when --execution-endpoint \ .help("Deprecated. The feature activates automatically when --execution-endpoint \
is supplied.") is supplied.")
.takes_value(false) .takes_value(false)
.hidden(true)
) )
.arg( .arg(
Arg::with_name("execution-endpoint") Arg::with_name("execution-endpoint")
.long("execution-endpoint") .long("execution-endpoint")
.value_name("EXECUTION-ENDPOINT") .value_name("EXECUTION-ENDPOINT")
.alias("execution-endpoints") .alias("execution-endpoints")
.help("Server endpoint for an execution layer jwt authenticated HTTP \ .help("Server endpoint for an execution layer JWT-authenticated HTTP \
JSON-RPC connection. Uses the same endpoint to populate the \ JSON-RPC connection. Uses the same endpoint to populate the \
deposit cache. Also enables the --merge flag.\ deposit cache.")
If not provided, uses the default value of http://127.0.0.1:8551")
.takes_value(true) .takes_value(true)
.requires("execution-jwt") .requires("execution-jwt")
) )
@ -439,6 +440,7 @@ pub fn cli_app<'a, 'b>() -> App<'a, 'b> {
.alias("jwt-secrets") .alias("jwt-secrets")
.help("File path which contains the hex-encoded JWT secret for the \ .help("File path which contains the hex-encoded JWT secret for the \
execution endpoint provided in the --execution-endpoint flag.") execution endpoint provided in the --execution-endpoint flag.")
.requires("execution-endpoint")
.takes_value(true) .takes_value(true)
) )
.arg( .arg(
@ -449,6 +451,7 @@ pub fn cli_app<'a, 'b>() -> App<'a, 'b> {
.help("Used by the beacon node to communicate a unique identifier to execution nodes \ .help("Used by the beacon node to communicate a unique identifier to execution nodes \
during JWT authentication. It corresponds to the 'id' field in the JWT claims object.\ during JWT authentication. It corresponds to the 'id' field in the JWT claims object.\
Set to empty by default") Set to empty by default")
.requires("execution-jwt")
.takes_value(true) .takes_value(true)
) )
.arg( .arg(
@ -459,16 +462,16 @@ pub fn cli_app<'a, 'b>() -> App<'a, 'b> {
.help("Used by the beacon node to communicate a client version to execution nodes \ .help("Used by the beacon node to communicate a client version to execution nodes \
during JWT authentication. It corresponds to the 'clv' field in the JWT claims object.\ during JWT authentication. It corresponds to the 'clv' field in the JWT claims object.\
Set to empty by default") Set to empty by default")
.requires("execution-jwt")
.takes_value(true) .takes_value(true)
) )
.arg( .arg(
Arg::with_name("suggested-fee-recipient") Arg::with_name("suggested-fee-recipient")
.long("suggested-fee-recipient") .long("suggested-fee-recipient")
.value_name("SUGGESTED-FEE-RECIPIENT") .value_name("SUGGESTED-FEE-RECIPIENT")
.help("Once the merge has happened, this address will receive transaction fees \ .help("Emergency fallback fee recipient for use in case the validator client does \
collected from any blocks produced by this node. Defaults to a junk \ not have one configured. You should set this flag on the validator \
address whilst the merge is in development stages. THE DEFAULT VALUE \ client instead of (or in addition to) setting it here.")
WILL BE REMOVED BEFORE THE MERGE ENTERS PRODUCTION")
.requires("execution-endpoint") .requires("execution-endpoint")
.takes_value(true) .takes_value(true)
) )
@ -632,6 +635,7 @@ pub fn cli_app<'a, 'b>() -> App<'a, 'b> {
.arg( .arg(
Arg::with_name("slasher-backend") Arg::with_name("slasher-backend")
.long("slasher-backend") .long("slasher-backend")
.value_name("DATABASE")
.help("Set the database backend to be used by the slasher.") .help("Set the database backend to be used by the slasher.")
.takes_value(true) .takes_value(true)
.possible_values(slasher::DatabaseBackend::VARIANTS) .possible_values(slasher::DatabaseBackend::VARIANTS)

View File

@ -22,6 +22,7 @@ validator client or the slasher**.
| v2.3.0 | May 2022 | v9 | yes (pre Bellatrix) | | v2.3.0 | May 2022 | v9 | yes (pre Bellatrix) |
| v2.4.0 | Jul 2022 | v9 | yes (pre Bellatrix) | | v2.4.0 | Jul 2022 | v9 | yes (pre Bellatrix) |
| v2.5.0 | Aug 2022 | v11 | yes | | v2.5.0 | Aug 2022 | v11 | yes |
| v3.0.0 | Aug 2022 | v11 | yes |
> **Note**: All point releases (e.g. v2.3.1) are schema-compatible with the prior minor release > **Note**: All point releases (e.g. v2.3.1) are schema-compatible with the prior minor release
> (e.g. v2.3.0). > (e.g. v2.3.0).

View File

@ -2,7 +2,8 @@
This document provides detail for users who want to run a merge-ready Lighthouse node. This document provides detail for users who want to run a merge-ready Lighthouse node.
> If you are running a testnet node, this configuration is necessary _now_. > The merge is occuring on mainnet in September. You _must_ have a merge-ready setup by September 6
> 2022.
## Necessary Configuration ## Necessary Configuration
@ -17,20 +18,20 @@ the merge:
receive transactions tips from blocks proposed by your validators. This is covered on the receive transactions tips from blocks proposed by your validators. This is covered on the
[Suggested fee recipient](./suggested-fee-recipient.md) page. [Suggested fee recipient](./suggested-fee-recipient.md) page.
Additionally, you _must_ update Lighthouse to a merge-compatible release in the weeks before Additionally, you _must_ update Lighthouse to v3.0.0 (or later), and must update your execution
the merge. Merge releases are available now for all testnets. engine to a merge-ready version.
## When? ## When?
You must configure your node to be merge-ready before the Bellatrix fork occurs on the network You must configure your node to be merge-ready before the Bellatrix fork occurs on the network
on which your node is operating. on which your node is operating.
* **Mainnet**: the Bellatrix fork epoch has not yet been announced. It's possible to set up a * **Mainnet**: the Bellatrix fork is scheduled for epoch 144896, September 6 2022 11:34 UTC.
merge-ready node now, but some execution engines will require additional configuration. Please see You must ensure your node configuration is updated before then in order to continue following
the section on [Execution engine configuration](#execution-engine-configuration) below. the chain. We recommend updating your configuration now.
* **Goerli (Prater)**, **Ropsten**, **Sepolia**, **Kiln**: you must have a merge-ready configuration * **Goerli (Prater)**, **Ropsten**, **Sepolia**, **Kiln**: the Bellatrix fork has already occurred.
right now. You must have a merge-ready configuration right now.
## Connecting to an execution engine ## Connecting to an execution engine
@ -46,6 +47,11 @@ If you set up an execution engine with `--execution-endpoint` then you *must* pr
using `--execution-jwt`. This is a mandatory form of authentication that ensures that Lighthouse using `--execution-jwt`. This is a mandatory form of authentication that ensures that Lighthouse
has authority to control the execution engine. has authority to control the execution engine.
The execution engine connection must be **exclusive**, i.e. you must have one execution node
per beacon node. The reason for this is that the beacon node _controls_ the execution node. Please
see the [FAQ](#faq) for further information about why many:1 and 1:many configurations are not
supported.
### Execution engine configuration ### Execution engine configuration
Each execution engine has its own flags for configuring the engine API and JWT. Please consult Each execution engine has its own flags for configuring the engine API and JWT. Please consult
@ -59,9 +65,7 @@ Once you have configured your execution engine to open up the engine API (usuall
should add the URL to your `lighthouse bn` flags with `--execution-endpoint <URL>`, as well as should add the URL to your `lighthouse bn` flags with `--execution-endpoint <URL>`, as well as
the path to the JWT secret with `--execution-jwt <FILE>`. the path to the JWT secret with `--execution-jwt <FILE>`.
> NOTE: Geth v1.10.21 or earlier requires a manual TTD override to communicate with Lighthouse over There are merge-ready releases of all compatible execution engines available now.
> the engine API on mainnet. We recommend waiting for a compatible Geth release before configuring
> Lighthouse-Geth on mainnet.
### Example ### Example
@ -138,6 +142,27 @@ be used for all such queries. Therefore we can say that where `--execution-endpo
## FAQ ## FAQ
### How do I know if my node is set up correctly?
Lighthouse will log a message indicating that it is ready for the merge:
```
INFO Ready for the merge, current_difficulty: 10789363, terminal_total_difficulty: 10790000
```
Once the merge has occurred you should see that Lighthouse remains in sync and marks blocks
as `verified` indicating that they have been processed successfully by the execution engine:
```
INFO Synced, slot: 3690668, block: 0x1244…cb92, epoch: 115333, finalized_epoch: 115331, finalized_root: 0x0764…2a3d, exec_hash: 0x929c…1ff6 (verified), peers: 78
```
### Can I still use the `--staking` flag?
Yes. The `--staking` flag is just an alias for `--http --eth1`. The `--eth1` flag is now superfluous
so `--staking` is equivalent to `--http`. You need either `--staking` or `--http` for the validator
client to be able to connect to the beacon node.
### Can I use `http://localhost:8545` for the execution endpoint? ### Can I use `http://localhost:8545` for the execution endpoint?
Most execution nodes use port `8545` for the Ethereum JSON-RPC API. Unless custom configuration is Most execution nodes use port `8545` for the Ethereum JSON-RPC API. Unless custom configuration is
@ -145,9 +170,22 @@ used, an execution node _will not_ provide the necessary engine API on port `854
not attempt to use `http://localhost:8545` as your engine URL and should instead use not attempt to use `http://localhost:8545` as your engine URL and should instead use
`http://localhost:8551`. `http://localhost:8551`.
### What about multiple execution endpoints? ### Can I share an execution node between multiple beacon nodes (many:1)?
Since an execution engine can only have one connected BN, the value of having multiple execution It is **not** possible to connect more than one beacon node to the same execution engine. There must be a 1:1 relationship between beacon nodes and execution nodes.
The beacon node controls the execution node via the engine API, telling it which block is the
current head of the chain. If multiple beacon nodes were to connect to a single execution node they
could set conflicting head blocks, leading to frequent re-orgs on the execution node.
We imagine that in future there will be HTTP proxies available which allow users to nominate a
single controlling beacon node, while allowing consistent updates from other beacon nodes.
### What about multiple execution endpoints (1:many)?
It is **not** possible to connect one beacon node to more than one execution engine. There must be a 1:1 relationship between beacon nodes and execution nodes.
Since an execution engine can only have one controlling BN, the value of having multiple execution
engines connected to the same BN is very low. An execution engine cannot be shared between BNs to engines connected to the same BN is very low. An execution engine cannot be shared between BNs to
reduce costs. reduce costs.

View File

@ -34,6 +34,10 @@ Assuming trustworthy nodes, the priority for the three methods is:
1. `--suggested-fee-recipient` provided to the VC. 1. `--suggested-fee-recipient` provided to the VC.
1. `--suggested-fee-recipient` provided to the BN. 1. `--suggested-fee-recipient` provided to the BN.
> **NOTE**: It is **not** recommended to _only_ set the fee recipient on the beacon node, as this results
> in sub-optimal block proposals. See [this issue](https://github.com/sigp/lighthouse/issues/3432)
> for details.
### 1. Setting the fee recipient in the `validator_definitions.yml` ### 1. Setting the fee recipient in the `validator_definitions.yml`
Users can set the fee recipient in `validator_definitions.yml` with the `suggested_fee_recipient` Users can set the fee recipient in `validator_definitions.yml` with the `suggested_fee_recipient`
@ -66,6 +70,9 @@ validators where a `suggested_fee_recipient` is not loaded from another method.
The `--suggested-fee-recipient` can be provided to the BN to act as a default value when the The `--suggested-fee-recipient` can be provided to the BN to act as a default value when the
validator client does not transmit a `suggested_fee_recipient` to the BN. validator client does not transmit a `suggested_fee_recipient` to the BN.
**This value should be considered an emergency fallback**. You should set the fee recipient in the
validator client in order for the execution node to be given adequate notice of block proposal.
## Setting the fee recipient dynamically using the keymanager API ## Setting the fee recipient dynamically using the keymanager API
When the [validator client API](api-vc.md) is enabled, the When the [validator client API](api-vc.md) is enabled, the

View File

@ -227,7 +227,7 @@ fn main() {
Accepts a 256-bit decimal integer (not a hex value). \ Accepts a 256-bit decimal integer (not a hex value). \
This flag should only be used if the user has a clear understanding that \ This flag should only be used if the user has a clear understanding that \
the broad Ethereum community has elected to override the terminal difficulty. \ the broad Ethereum community has elected to override the terminal difficulty. \
Incorrect use of this flag will cause your node to experience a consensus Incorrect use of this flag will cause your node to experience a consensus \
failure. Be extremely careful with this flag.") failure. Be extremely careful with this flag.")
.takes_value(true) .takes_value(true)
.global(true) .global(true)
@ -239,7 +239,7 @@ fn main() {
.help("Used to coordinate manual overrides to the TERMINAL_BLOCK_HASH parameter. \ .help("Used to coordinate manual overrides to the TERMINAL_BLOCK_HASH parameter. \
This flag should only be used if the user has a clear understanding that \ This flag should only be used if the user has a clear understanding that \
the broad Ethereum community has elected to override the terminal PoW block. \ the broad Ethereum community has elected to override the terminal PoW block. \
Incorrect use of this flag will cause your node to experience a consensus Incorrect use of this flag will cause your node to experience a consensus \
failure. Be extremely careful with this flag.") failure. Be extremely careful with this flag.")
.requires("terminal-block-hash-epoch-override") .requires("terminal-block-hash-epoch-override")
.takes_value(true) .takes_value(true)
@ -252,7 +252,7 @@ fn main() {
.help("Used to coordinate manual overrides to the TERMINAL_BLOCK_HASH_ACTIVATION_EPOCH \ .help("Used to coordinate manual overrides to the TERMINAL_BLOCK_HASH_ACTIVATION_EPOCH \
parameter. This flag should only be used if the user has a clear understanding \ parameter. This flag should only be used if the user has a clear understanding \
that the broad Ethereum community has elected to override the terminal PoW block. \ that the broad Ethereum community has elected to override the terminal PoW block. \
Incorrect use of this flag will cause your node to experience a consensus Incorrect use of this flag will cause your node to experience a consensus \
failure. Be extremely careful with this flag.") failure. Be extremely careful with this flag.")
.requires("terminal-block-hash-override") .requires("terminal-block-hash-override")
.takes_value(true) .takes_value(true)

View File

@ -131,8 +131,9 @@ pub fn cli_app<'a, 'b>() -> App<'a, 'b> {
.arg( .arg(
Arg::with_name("suggested-fee-recipient") Arg::with_name("suggested-fee-recipient")
.long("suggested-fee-recipient") .long("suggested-fee-recipient")
.help("The fallback address provided to the BN if nothing suitable is found \ .help("Once the merge has happened, this address will receive transaction fees \
in the validator definitions or fee recipient file.") from blocks proposed by this validator client. If a fee recipient is \
configured in the validator definitions it takes priority over this value.")
.value_name("FEE-RECIPIENT") .value_name("FEE-RECIPIENT")
.takes_value(true) .takes_value(true)
) )