Method 1: Configure CSM Fee Recipient on validator keys
Note: You will have to import your CSM validator keystores into your validator client first. Refer to the key import steps in the Method 2 section if you are unsure about how to proceed.
Validator Clients
- Teku
- Nimbus
- Lodestar
- Lighthouse
- Prysm
Assuming your Teku validator client is already set up, stop it:
sudo systemctl stop tekuvalidator.service
Find your non‑CSM validator keystore pubkeys:
sudo find /var/lib -name "keystore*.json"
Extract each pubkey:
grep -oP '"pubkey": *"\K[^"]+' RESULTING_FILEPATH
Create a proposer configuration file:
sudo nano /var/lib/teku_validator/validator/proposer_configuration.json
Paste:
{
"proposer_config": {
"YOUR_PUBKEY_01": {"fee_recipient":"YOUR_WALLET_ADDRESS","builder":{"enabled":true}},
"YOUR_PUBKEY_02": {"fee_recipient":"YOUR_WALLET_ADDRESS","builder":{"enabled":true}},
"YOUR_PUBKEY_03": {"fee_recipient":"YOUR_WALLET_ADDRESS","builder":{"enabled":true}}
},
"default_config": {"fee_recipient":"LIDO_EXECUTION_LAYER_REWARDS_VAULT","builder":{"enabled":true}}
}
Replace YOUR_PUBKEY_*
, YOUR_WALLET_ADDRESS
, and LIDO_EXECUTION_LAYER_REWARDS_VAULT
(e.g. 0x388C818CA8B9251b393131C08a736A67ccB19297
for Mainnet).
Save (Ctrl+O, Enter) and exit (Ctrl+X).
Set permissions:
sudo chown -R teku_validator:teku_validator /var/lib/teku_validator/validator
Edit the systemd service:
sudo nano /etc/systemd/system/tekuvalidator.service
Add the --validators-proposer-config
flag and remove the default fee-recipient flag. For example:
[Service]
ExecStart=/usr/local/bin/teku/bin/teku vc \
--network=hoodi \
--data-path=/var/lib/teku_validator \
--validators-proposer-config=/var/lib/teku_validator/validator/proposer_configuration.json \
--validators-builder-registration-default-enabled=true \
--validators-graffiti="your_graffiti" \
--metrics-enabled=true
Reload and restart:
sudo systemctl daemon-reload
sudo systemctl start tekuvalidator.service
sudo systemctl status tekuvalidator.service
Monitor logs:
sudo journalctl -fu tekuvalidator -o cat
Only Method 2 is available for Nimbus.
Create proposer settings:
sudo nano /var/lib/lodestar_validator/proposer_settings.yml
Paste:
proposer_config:
'YOUR_PUBKEY_01':
fee_recipient: 'YOUR_WALLET_ADDRESS'
builder:
enabled: true
gas_limit: '30000000'
default_config:
fee_recipient: 'LIDO_EXECUTION_LAYER_REWARDS_VAULT'
builder:
enabled: true
gas_limit: '30000000'
Replace placeholders, save, and exit.
Set permissions:
sudo chown -R lodestar_validator:lodestar_validator /var/lib/lodestar_validator
Edit docker-compose:
cd ~/lodestar_validator
sudo nano docker-compose.yml
Add:
- --proposerSettingsFile
- /var/lib/lodestar_validator/proposer_settings.yml
Remove --suggestedFeeRecipient
flags, then reload:
docker compose down
docker compose up -d
Monitor:
docker logs lodestar_validator -f
Stop Lighthouse:
sudo systemctl stop lighthousevalidator.service
Edit definitions:
sudo nano /var/lib/lighthouse_validator/validators/validator_definitions.yml
For each pubkey, add:
suggested_fee_recipient: "LIDO_EXECUTION_LAYER_REWARDS_VAULT"
Restart and monitor:
sudo systemctl start lighthousevalidator.service
sudo journalctl -fu lighthousevalidator -o cat
Stop Prysm:
sudo systemctl stop prysmvalidator.service
Repeat similar steps as Teku, editing proposer_configuration.json
under /var/lib/prysm_validator/validator/
and updating service flags in /etc/systemd/system/prysmvalidator.service
with --proposer-settings-file
.
Reload and restart:
sudo systemctl daemon-reload
sudo systemctl start prysmvalidator.service
sudo journalctl -fu prysmvalidator -o cat
Automation Tools
- ETH Docker
- ETH Pillar
With ETH Docker (ethd up
), list keys and set recipient:
./ethd keys list
./ethd keys set-recipient <pubkey> <address>
Not straightforward—run a separate validator client to customize fee_recipient
.