mirror of
https://github.com/sigp/lighthouse.git
synced 2026-05-08 01:05:47 +00:00
Allow per validator fee recipient via flag or file in validator client (similar to graffiti / graffiti-file) (#2924)
## Issue Addressed #2883 ## Proposed Changes * Added `suggested-fee-recipient` & `suggested-fee-recipient-file` flags to validator client (similar to graffiti / graffiti-file implementation). * Added proposer preparation service to VC, which sends the fee-recipient of all known validators to the BN via [/eth/v1/validator/prepare_beacon_proposer](https://github.com/ethereum/beacon-APIs/pull/178) api once per slot * Added [/eth/v1/validator/prepare_beacon_proposer](https://github.com/ethereum/beacon-APIs/pull/178) api endpoint and preparation data caching * Added cleanup routine to remove cached proposer preparations when not updated for 2 epochs ## Additional Info Changed the Implementation following the discussion in #2883. Co-authored-by: pk910 <philipp@pk910.de> Co-authored-by: Paul Hauner <paul@paulhauner.com> Co-authored-by: Philipp K <philipp@pk910.de>
This commit is contained in:
91
book/src/suggested-fee-recipient.md
Normal file
91
book/src/suggested-fee-recipient.md
Normal file
@@ -0,0 +1,91 @@
|
||||
# Suggested Fee Recipient
|
||||
|
||||
*Note: these documents are not relevant until the Bellatrix (Merge) upgrade has occurred.*
|
||||
|
||||
## Fee recipient trust assumptions
|
||||
|
||||
During post-merge block production, the Beacon Node (BN) will provide a `suggested_fee_recipient` to
|
||||
the execution node. This is a 20-byte Ethereum address which the EL might choose to set as the
|
||||
coinbase and the recipient of other fees or rewards.
|
||||
|
||||
There is no guarantee that an execution node will use the `suggested_fee_recipient` to collect fees,
|
||||
it may use any address it chooses. It is assumed that an honest execution node *will* use the
|
||||
`suggested_fee_recipient`, but users should note this trust assumption.
|
||||
|
||||
The `suggested_fee_recipient` can be provided to the VC, who will transmit it to the BN. The also BN
|
||||
has a choice regarding the fee recipient it passes to the execution node, creating another
|
||||
noteworthy trust assumption.
|
||||
|
||||
To be sure *you* control your fee recipient value, run your own BN and execution node (don't use
|
||||
third-party services).
|
||||
|
||||
The Lighthouse VC provides three methods for setting the `suggested_fee_recipient` (also known
|
||||
simply as the "fee recipient") to be passed to the execution layer during block production. The
|
||||
Lighthouse BN also provides a method for defining this value, should the VC not transmit a value.
|
||||
|
||||
Assuming trustworthy nodes, the priority for the four methods is:
|
||||
|
||||
1. `validator_definitions.yml`
|
||||
1. `--suggested-fee-recipient-file`
|
||||
1. `--suggested-fee-recipient` provided to the VC.
|
||||
1. `--suggested-fee-recipient` provided to the BN.
|
||||
|
||||
Users may configure the fee recipient via `validator_definitions.yml` or via the
|
||||
`--suggested-fee-recipient-file` flag. The value in `validator_definitions.yml` will always take
|
||||
precedence.
|
||||
|
||||
### 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`
|
||||
key. This option is recommended for most users, where each validator has a fixed fee recipient.
|
||||
|
||||
Below is an example of the validator_definitions.yml with `suggested_fee_recipient` values:
|
||||
|
||||
```
|
||||
---
|
||||
- enabled: true
|
||||
voting_public_key: "0x87a580d31d7bc69069b55f5a01995a610dd391a26dc9e36e81057a17211983a79266800ab8531f21f1083d7d84085007"
|
||||
type: local_keystore
|
||||
voting_keystore_path: /home/paul/.lighthouse/validators/0x87a580d31d7bc69069b55f5a01995a610dd391a26dc9e36e81057a17211983a79266800ab8531f21f1083d7d84085007/voting-keystore.json
|
||||
voting_keystore_password_path: /home/paul/.lighthouse/secrets/0x87a580d31d7bc69069b55f5a01995a610dd391a26dc9e36e81057a17211983a79266800ab8531f21f1083d7d84085007
|
||||
suggested_fee_recipient: "0x6cc8dcbca744a6e4ffedb98e1d0df903b10abd21"
|
||||
- enabled: false
|
||||
voting_public_key: "0xa5566f9ec3c6e1fdf362634ebec9ef7aceb0e460e5079714808388e5d48f4ae1e12897fed1bea951c17fa389d511e477"
|
||||
type: local_keystore voting_keystore_path: /home/paul/.lighthouse/validators/0xa5566f9ec3c6e1fdf362634ebec9ef7aceb0e460e5079714808388e5d48f4ae1e12897fed1bea951c17fa389d511e477/voting-keystore.json
|
||||
voting_keystore_password: myStrongpa55word123&$
|
||||
suggested_fee_recipient: "0xa2e334e71511686bcfe38bb3ee1ad8f6babcc03d"
|
||||
```
|
||||
|
||||
### 2. Using the "--suggested-fee-recipient-file" flag on the validator client
|
||||
|
||||
Users can specify a file with the `--suggested-fee-recipient-file` flag. This option is useful for dynamically
|
||||
changing fee recipients. This file is reloaded each time a validator is chosen to propose a block.
|
||||
|
||||
Usage:
|
||||
`lighthouse vc --suggested-fee-recipient-file fee_recipient.txt`
|
||||
|
||||
The file should contain key value pairs corresponding to validator public keys and their associated
|
||||
fee recipient. The file can optionally contain a `default` key for the default case.
|
||||
|
||||
The following example sets the default and the values for the validators with pubkeys `0x87a5` and
|
||||
`0xa556`:
|
||||
|
||||
```
|
||||
default: 0x6cc8dcbca744a6e4ffedb98e1d0df903b10abd21
|
||||
0x87a580d31d7bc69069b55f5a01995a610dd391a26dc9e36e81057a17211983a79266800ab8531f21f1083d7d84085007: 0x6cc8dcbca744a6e4ffedb98e1d0df903b10abd21
|
||||
0xa5566f9ec3c6e1fdf362634ebec9ef7aceb0e460e5079714808388e5d48f4ae1e12897fed1bea951c17fa389d511e477: 0xa2e334e71511686bcfe38bb3ee1ad8f6babcc03d
|
||||
```
|
||||
|
||||
Lighthouse will first search for the fee recipient corresponding to the public key of the proposing
|
||||
validator, if there are no matches for the public key, then it uses the address corresponding to the
|
||||
default key (if present).
|
||||
|
||||
### 3. Using the "--suggested-fee-recipient" flag on the validator client
|
||||
|
||||
The `--suggested-fee-recipient` can be provided to the VC to act as a default value for all
|
||||
validators where a `suggested_fee_recipient` is not loaded from another method.
|
||||
|
||||
### 4. Using the "--suggested-fee-recipient" flag on the beacon node
|
||||
|
||||
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.
|
||||
Reference in New Issue
Block a user