Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Teku is sending exited validators to MEV-Boost but should only send active or pending ones #6070

Closed
jclapis opened this issue Aug 12, 2022 · 1 comment · Fixed by #6100
Closed
Assignees

Comments

@jclapis
Copy link

jclapis commented Aug 12, 2022

Description

I recently set up MEV-Boost for Goerli/Prater. I have several exited validators on Prater (such as https://prater.beaconcha.in/validator/0xb00c002d0770d507af4b4d61d259ae44432745b7a9d693d167efbdc7e39e4c012f584c40d866cacf4557a08e86284e31) and during Teku's validator registration process, it sends this validator over to MEV-Boost which causes it to fail.

According to the official spec, only active or pending validators should be sent to the builder during validator registration.

Here are MEV-Boost's logs:

mev-boost_1      | time="2022-08-12T18:22:12Z" level=info msg="http: GET /eth/v1/builder/status 200" duration=0.059087851 method=GET module=service path=/eth/v1/builder/status status=200
mev-boost_1      | time="2022-08-12T18:22:24Z" level=warning msg="error calling registerValidator on relay" error="HTTP error response: 400 / {\"code\":400,\"message\":\"not a known validator: 0xb00c002d0770d507af4b4d61d259ae44432745b7a9d693d167efbdc7e39e4c012f584c40d866cacf4557a08e86284e31\"}\n" method=registerValidator module=service numRegistrations=36 ua=okhttp/4.9.2 url="https://builder-relay-goerli.flashbots.net/eth/v1/builder/validators?id=rocketpool"
mev-boost_1      | time="2022-08-12T18:22:24Z" level=info msg="http: POST /eth/v1/builder/validators 502" duration=0.131684409 method=POST module=service path=/eth/v1/builder/validators status=502

Unfortunately, Teku's BN doesn't log this failure at all so it was purely a coincidence that I noticed it while investigating the behavior of other clients. I would advise adding logs on validator registration failures.

I will note that this used a Teku BN with a remotely-connected Lighthouse VC (v2.5.1). Not sure if that matters here.

I reported this to Flashbots, who pointed me to the builder API spec above.

This issue is also present in Lighthouse and Nimbus.

Steps to Reproduce (Bug)

  • Exit a validator
  • Start Teku, which will load the keys for the exited validator
  • Connect to MEV-boost as the block builder
  • Observe the above behavior

Expected behavior:
Teku should only register active and pending validators

Actual behavior:
Teku is registering every connected validator

Frequency:
100% of the time

Versions (Add all that apply)

  • Software version: v22.8.0
  • Java version: Whatever the Docker container uses
  • OS Name & Version: Debian 11 x64
  • Docker Version: 20.10.17
  • Cloud VM, type, size: N/A
@rolfyone
Copy link
Contributor

Thanks for raising this, I did comment on the builder issue as well, but just for context here:

Added a comment to flashbots/mev-boost#245 - its possible to filter based on the head state from the BN (on the BN side before we call the builder api), but it's likely a better solution that the builder api is a little tolerant.
I filled in some context about active and pending statuses, and noted that active includes active_slashed which will not be doing any duties either.
If only active and pending is a fixed requirement on the builder side, we may need to update ProposersDataManager.updateValidatorRegistrations, and we'd likely want to clarify some of the behaviours in the rest api potentially.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging a pull request may close this issue.

3 participants