Skip to content

Conversation

@jtraglia
Copy link
Collaborator

@jtraglia jtraglia commented May 1, 2025

📝 Summary

Instead of only sending the getPayload request to relays which provided this bid, send the getPayload request to all relays and convert the signed blinded beacon block to JSON if necessary.

⛱ Motivation and Context

In theory, this should improve liveness. If, for example, there is a relay which is geographically closer to the proposer, it might get the getPayload request sooner and therefore it would distribute the block faster.

📚 References

https://discord.com/channels/595666850260713488/1341434255154348034/1367203484620947508


✅ I have run these commands

  • make lint
  • make test-race
  • go mod tidy

Copy link
Collaborator

@ralexstokes ralexstokes left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

i didnt go a fine-grained code review, but agree with the high-level principle here that we query all relays


// If the relay provided the bid in JSON or did not provide a bid for this payload,
// we must convert the signed blinded beacon block from SSZ to JSON for this relay
if parsedProposerContentType == MediaTypeOctetStream && !relaySupportsSSZ {
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

not ideal to convert this again for every relay that would need it. would be better to check up-front if any relay will need it, and then prepare it once for all

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I disagree. The conversion is quick. Let's just send out the SSZ requests as soon as possible.

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

i don't see how it's faster by encoding SSZ for every relay, versus just encoding it once ahead of time. but also fine with me to leave as-is.

Copy link
Collaborator

@metachris metachris left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

it looks okay, left some comments about possible improvements to the code. def preferable to submit getPayload to all relays.

@OisinKyne
Copy link

OisinKyne commented Jun 3, 2025

to all relays again

hey guys, mind if I ask when this changed to the current behaviour? :)

@metachris
Copy link
Collaborator

@OisinKyne in the latest release (v1.9).

@colink14110476
Copy link

What's the plan for release normally? Can we get a version of this out soonish?

@OisinKyne
Copy link

+1 on the above we'd also be keen to see this released in the near term. Maybe a 1.9.1 patch? :)

@jtraglia
Copy link
Collaborator Author

jtraglia commented Jun 6, 2025

Did this change have a noticeable impact on the network?

@OisinKyne
Copy link

We have seen a noticeable uptick of missed proposals on mev-boost DV clusters, moreso in the last two weeks than since pectra. We have not been able to track down definitively whether its an issue with mime-type headers from the SSZ introduction, certain relays hanging/rate limiting requests, (which causes 950ms by default timeouts that increase the likelihood of orphans), or whether its something related to mev-boost itself.

One thing we are seeing much more often is the log line:
level=error msg="no bid for this getPayload payload found, was getHeader called before?"

While this log might not be related to this PR, and is maybe a function of consensus round timeouts, the behaviour we're hoping for is for mev-boost to send the signedPayload to its relays anyways, whether it has the corresponding bid for it or not. The cluster has signed a header, it won't be signing another (because slashing), so if it could be broadcasted to relays, that would improve liveness in our POV.

@metachris
Copy link
Collaborator

We'll expedite getting a release out with this now.

@metachris metachris merged commit fe8d4c5 into flashbots:develop Jun 19, 2025
2 checks passed
@jtraglia jtraglia deleted the send-payload-to-all-relays branch June 19, 2025 14:24
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 this pull request may close these issues.

5 participants