Monitoring Validator_Registration for Fee Recipients

Hey All! I’m Kody, and we’re building Smoothly, an open source tool for solo stakers to use to pool together tips and MEV from block proposals. We’ve been live on Goerli for a few months now fixing bugs and refining our backend. We’ve recently made a design change where we’re requiring MEV boost to be ran by validators who subscribe to our pool. This change was made due to the added security we get from using the Relay API (get validator_registration) for verifying pool members fee recipient address. Unfortunately, this has been very challenging as relays responses are inconsistent. Again, this is on Goerli, so I understand that the testnet relays are resource constrained. From the spec (and validator logs), it seems that registrations are sent to the appropriate relays once per epoch. The responses timestamp we’re getting from relays is variable. Some are responding with a timestamp from 1 day ago, while others are responding with a timestamp from a week ago.

Additionally, we’re intentionally being malicious in our testing and changing the fee recipient of select validators to test our logic. Upon doing this, the registration response does not seem to reflect the fee_recipient change. Any insight into this would be very helpful as I appreciate the added security guarantees that this implementation could offer, but am hesitant to adopt if the inconsistencies remain on mainnet. Here are some links to our project :slight_smile: (docs) (frontend)

With the help of the team at the Aestus relay I’ve been able to learn a few things.

  1. Validator registration is only updated if there is a --fee recipient or --gas limit change
  2. Although no errors were being thrown, and in fact confirmation of registration was received through my validator logs, my validators were not registering to the relays due to a possible misconfiguration in the --proposer-settings-file.
  3. Registration works as intended when using the basic --fee recipient flag in the validator client.


1 Like

Notes how relays process validator registrations:

  • The mev-boost-relay codebase (used by most relays) only stores validator registrations if either gasLimit or feeRecipient changes, but not if only the timestamp changes.
  • This is because 500k validators send their registrations in bursts at the start of each epoch, and its unnecessary (and costly) to save them all, when no important property changed.

Feel free to send specific pubkeys/registrations and we’ll help to investigate further.

1 Like