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

SSZ Support for submitBlindedBlock and getHeader endpoints #677

Open
ryanschneider opened this issue Feb 10, 2025 · 0 comments
Open

SSZ Support for submitBlindedBlock and getHeader endpoints #677

ryanschneider opened this issue Feb 10, 2025 · 0 comments
Labels

Comments

@ryanschneider
Copy link
Contributor

With ethereum/builder-specs#104 accepted to the spec, we should update with the required changes.

Note that I'm not overly familiar with the relay codebase, so take all of the below with a grain of salt, but this is my proposed set of changes:

Overall Goal

So to reiterate the above builder-spec PR, the goal is to support SSZ for these endpoints in a backwards compatible way:

  • before SSZ support lands, the relay should return appropriate 4xx error codes
  • getHeader should allow SSZ encoding of the response.
  • submitBlindedBlock should allow both SSZ requests and responses.

Milestone 0: Housekeeping (GetPayload vs SubmitBlindedBlock)

When researching the required changes, one thing that threw me off is that the builder-spec refers to the /eth/v1/builder/blinded_blocks endpoint as the submitBlindedBlock operation here: https://github.com/ethereum/builder-specs/blob/main/apis/builder/blinded_blocks.yaml#L2

However the mev-boost-relay codebase uses the term getPayload for that operation. IMO we should consider updating the code to use submitBlindedBlock instead. However, the term "Get Payload" is used in DB schemas and metrics, so this might not be practical.

Milestone 1: Explicitly reject SSZ

Accept header parsing

So, the first step is IMO to parse the suggested Accept header, and explicitly reject any that resolve to anything other than application/json.

The logic should largely involve:

Content-Type parsing

Next, the handleGetPayload/handleSubmitBlindedBlock handler should correctly reject SSZ (or any non-JSON Content-Type):

The above is the minimal change required to be "in spec" with the SSZ updates, but of course we should continue on to actually supporting SSZ.

Milestone 2: SSZ Support

With Milestone 1 in place, we can go forward with actually supporting SSZ, which would entail:

In handleGetPayload:

  • Allowing application/octet-stream in the Content-Type header.
  • Requiring the Eth-Consensus-Version header if Content-Type: application/octet-stream is included.
  • Decode the payload as either SSZ or JSON based on the Content-Type header.

And in both handleGetHeader and handleGetPayload:

  • Allow application/octet-stream in the Accept header.
  • Add a new RespondWithContentType or similarly named method that can respond w/ both JSON and SSZ, use this instead of RespondOK (RespondError and continue to only send JSON).

Also note that Milestone 2 must be deployed atomically since allowing Accept: octet-stream in the handleGetPayload handlers is how relays signal that they support SSZ for both endpoints.

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

No branches or pull requests

1 participant