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

EIP4844: Remove sending empty blobs sidecar responses #3242

Merged
merged 2 commits into from
Mar 1, 2023

Conversation

AgeManning
Copy link
Contributor

This is a revival of #3174.

This PR clarifies the behaviour of the BlobsSidecarsByRange RPC response. Instead of sending empty BlobSidecar responses, we instead skip over the slot.

The main motivation for this is:

  1. Clients can infer the empty blobs by lack of response. This prevents us from sending extra data, decoding redundant messages and identifying the empty object.
  2. Prevents having to code extra logic to handle the exceptional case of the empty BlobSidecar.

I've spoken to all the client teams who seem to be in favour of this modification.

@dankrad
Copy link
Contributor

dankrad commented Feb 2, 2023

Clients can infer the empty blobs by lack of response. This prevents us from sending extra data, decoding redundant messages and identifying the empty object.

It can sometime be useful to be able to encode information using more than just an absence of a response. In this case, it can be useful to know that an explicit claim is made that there are no blobs rather than it just missing (especially if the sidecar is signed, this is significant -- it would then be a claim by the block producers that no blobs are necessary to validate this block).

Prevents having to code extra logic to handle the exceptional case of the empty BlobSidecar.

I do not understand why there is extra logic. All the cryptography was designed to handle the empty blob sidecar without any extra logic, the math just naturally checks out if you set n=0.

@realbigsean
Copy link
Contributor

There's a general point there that unavailable should be distinct from empty, but the block tells you what to expect via the list of kzg commitments and you need to verify the blob's claim vs the block anyways

especially if the sidecar is signed

they're not currently signed in ByRange

I do not understand why there is extra logic. All the cryptography was designed to handle the empty blob sidecar without any extra logic, the math just naturally checks out if you set n=0.

we don't want to write empty blobs sidecars to the database so we end up having special logic to avoid this and then reconstruct empty blobs sidecars based on the block to send to peers

@hwwhww hwwhww added the Deneb was called: eip-4844 label Feb 4, 2023
Copy link
Contributor

@djrtwo djrtwo left a comment

Choose a reason for hiding this comment

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

From what I understand, all CL engineering teams support this change.

I initially made the case to have non-empty responses for blocks with no blobs. (1) symmetry between block and blobs calls, and (2) that in practice, eventually we won't have such 0-blob-blocks nearly as frequently as we see on testnets.

That said, I see that there might always be exceptional logic around handling this 0-blob-block (e.g. non DB write). And ultimately, the spec here doesn't affect overall safety or efficiency so I'm inclined to support the engineering opinion on how to do this.

Note, if this is merged, let's wait until #3244 is merged

@djrtwo djrtwo merged commit e2e03b1 into ethereum:dev Mar 1, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Deneb was called: eip-4844
Projects
None yet
Development

Successfully merging this pull request may close these issues.

5 participants