Rocketpool Native Delegation

Requires MEV Plus version 0.2.0+ installed with K2 native module of version 0.5.0+

In this tutorial, we’ll guide you through Rocketpool Native Delegation using Web3Signer - 100% compatible with your Rocketpool smart node. Web3Signer will allow the node operator withdrawal address to be specified for K2 payouts. The K2 payout address can be later updated if the protocol exposes a smoothening pool for example.

Rewards and Rocketpool Protocol

There is an open discussion in the community about how to process the rewards from the K2 protocol: https://dao.rocketpool.net/t/finding-compatability-with-restaking-cloud/2804

In the interim, the use of a Rocketpool user’s withdrawal address is an option for assigning the K2 payouts and that’s described here: https://docs.rocketpool.net/guides/node/prepare-node#setting-your-withdrawal-address

In order to query the current withdrawal address, you can run the following command from your smart node: rocketpool node status

This withdrawal address is the same regardless of how many mini pools a node runner has deployed which makes this a good candidate at least in the short term. Rocketpool as a DAO will ultimately decide the final address to receive payouts.

It is this user withdrawal address that needs to be specified in the MEV Plus Web3 signer configuration below so that the Web3Signer can allocate the correct wallet that will receive K2 protocol rewards.

Important: If MEV Plus is used without the Web3 signer then the fallback fee recipient will be used which is either the fee recipient assigned to a node runner or the smoothening pool which may not be compatible with ERC20 rewards until the Rocketpool contract is upgraded.

Assumptions and notes

This tutorial assumes a unix-based machine such as Linux with the MEV Plus and K2 Native Delegation Module configured as per the tutorial mentioned below in the prerequisites section.

Prerequisites

Before you begin, ensure that you meet the following prerequisites:

  • MEV Plus with K2 Native Delegation Module installed. If not follow the tutorial here to do so: Install MEV Plus with Native Delegation
  • Installed/Downloaded Web3Signer software/binary. You can download the latest release from here: Web3Signer Releases
  • Full Rocketpool node with one or more active validators
  • Ethereum Account: Prepare an Ethereum EOA with sufficient funds to cover gas fees for on-chain transactions. NOTE: This key is the only wallet key that would be granted permission to manage your validators on-chain. Therefore, this must be managed carefully.

Ensuring your consensus node is correctly configured

The consensus layer software on your Rocketpool node needs to point the builder API correctly to MEV Plus in order to facilitate the native delegations.

When that happens, the following message will be output in the MEV Plus logs:

No registration events received for more than 2 epochs from your node

It is important to pay attention to the following flag in the MEV Plus configuration:

--builderApi.listen-address http://localhost:18551

This must match exactly the consensus layer beacon node builder API configuration.

Some notes on representative wallets

The K2 protocol has a requirement that there is one representative wallet on the execution layer that maps to a unique K2 payout wallet. The default K2 payout wallet is the suggested fee recipient of a node where the protocol will group a portfolio of validators under the same K2 payout wallet.

In order to natively delegate and pay for the GAS required to interface with the smart contract, you need to pass multiple comma-separated private keys to the k2.eth1-private-key flag of the MEV Plus configuration for each representative that will serve each payout address. This ensures there is a representative wallet available and configured for each payout (fee recipient) group of validators so that a K2 fee recipient can be registered.

How to configure the Web3Signer for Native Delegation of Rocketpool validators

Step 1: Setting Up the Web3Signer software

  1. Build/Extract Web3signer binary into a directory of your choosing on your system.

  2. Then navigate to the directory in your terminal.

  3. Run the following command to start Web3Signer. Note, this command may have changed from the time of writing this tutorial so always refer to the documentation Web3Signer Documentation if in need of any assistance running Web3Signer (this software is managed by Consensys and not Blockswap).

./web3signer --http-listen-port 6000 eth2 --keystores-passwords-path <keystore_passwords_dir_path> --keystores-path <keystores_dir_path> --network <eth_network> --slashing-protection-enabled false

Replace the <keystore_passwords_dir_path> with the path to a directory that contains only text files of the keystore passwords to each of your validators. Replace the <keystores_dir_path> with the path to your directory that contains your validator keystore files. Replace the <eth_network> with the network to which you are running your node and softwares for i.e mainnet, holesky, etc. The K2 Native Delegation module only uses Web3Signer to sign registration messages and not any other payload. It does not put any validator at risk of slashing through the module. Ensure the password text files’ filenames are EXACTLY the same filenames as its corresponding keystore file it unlocks.

  1. If configured correctly, Web3Signer should be running on http://127.0.0.1:6000. Ensure this host address and port is available on your system and unused by any other service. [mevPlus default builderAPI is run on http://127.0.0.1:18551, mevPlus default K2 API is run on http://127.0.0.1:10000]

Step 2: Setting Up MEV Plus to use Web3Signer for the Native Delegation Module

In your mevPlus service file used to run mevPlus with K2 Native Delegation, set the -k2.web3-signer-url flag to the URL of your running Web3Signer instance.

Additionally, set the -k2.payout-recipient flag to the desired payout recipient address i.e. the node runner withdrawal address for the Rocketpool Protocol.

[Unit]
Description=MEV Plus Service for Ethereum
Wants=network-online.target
After=network-online.target

[Service]
User=mevPlus
Group=mevPlus
Type=simple
Restart=always
RestartSec=5
ExecStart=/usr/local/bin/mevPlus \
  -builderApi.listen-address <your_preferred_builderapi_address> \
  -externalValidatorProxy.address <your_existing_valdator_proxy_listening_address> \
  -k2.eth1-private-key <your_eth1_private_key> \
  -k2.beacon-node-url <your_beacon_node_url> \
  -k2.execution-node-url <your_execution_node_url> \
 -k2.web3-signer-url <web3signer_url> \
 -k2.payout-recipient <payout_recipient_address> \
 -k2.logger-level debug

[Install]
WantedBy=multi-user.target

Replace <web3signer_url> with the address thatWeb3Signer is running on, and set the <payout_recipient_address> to the designated ECDSA address that all rewards should be paid out to.

Additional advanced configurations for proposer and K2 registration are available here.

Save the system file for MEV Plus and reload systemctl to pick up the new service file:

sudo systemctl daemon-reload

Step 3: Verify service is running

Check that the service started successfully:

sudo systemctl status mevPlus

Ensure there are no errors in the logs and that Plus is running nominally.

Step 4: Explore MEV Plus Logs

Explore MEV Plus logs to verify its operation:

sudo journalctl -fu mevPlus

Inspect the logs to confirm that MEV Plus is running without issues. Any errors that are thrown in boot-up due to the wrong configuration can be identified and rectified by evaluating the logs. Restart the service after any modifications to the service file if required:

sudo systemctl daemon-reload

By following this tutorial, you’ve successfully set up Native Delegation using Web3Signer for validators part of the Rocketpool protocol.