-
Notifications
You must be signed in to change notification settings - Fork 975
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: Clarify ratelimit behavior for sidecar with zero blobs #3174
Conversation
specs/eip4844/p2p-interface.md
Outdated
@@ -247,6 +249,8 @@ disconnect and/or temporarily ban such an un-synced or semi-synced client. | |||
Clients MUST respond with at least the first blobs sidecar that exists in the range, if they have it, | |||
and no more than `MAX_REQUEST_BLOBS_SIDECARS` sidecars. | |||
|
|||
Clients MUST not respond with empty blobs sidecars. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
To clarify what an "empty" blob sidecar is. It's a BlobSidecar
that does not contain any blobs, but it may contain a non-zero beacon_block_root
and beacon_block_slot
per get_blobs_sidecar.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
thanks!
Co-authored-by: g11tech <[email protected]>
specs/eip4844/p2p-interface.md
Outdated
@@ -247,6 +249,8 @@ disconnect and/or temporarily ban such an un-synced or semi-synced client. | |||
Clients MUST respond with at least the first blobs sidecar that exists in the range, if they have it, | |||
and no more than `MAX_REQUEST_BLOBS_SIDECARS` sidecars. | |||
|
|||
Clients MUST not respond with empty blobs sidecars. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Clients MUST not respond with empty blobs sidecars. | |
Clients MAY skip empty blobs sidecars. |
specs/eip4844/p2p-interface.md
Outdated
@@ -226,6 +226,8 @@ The request MUST be encoded as an SSZ-container. | |||
The response MUST consist of zero or more `response_chunk`. | |||
Each _successful_ `response_chunk` MUST contain a single `BlobsSidecar` payload. | |||
|
|||
In cases where a slot contains a `BlobSidecar` that does not contain any blobs, but contain non-zero `beacon_block_root` and `beacon_block_slot`, `blobs_sidecar` **may be** skipped. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
In cases where a slot contains a `BlobSidecar` that does not contain any blobs, but contain non-zero `beacon_block_root` and `beacon_block_slot`, `blobs_sidecar` **may be** skipped. | |
In cases where a slot contains a `BlobSidecar` that does not contain any blobs, but contain non-zero `beacon_block_root`, `beacon_block_slot` and a valid `kzg_aggregated_proof`, `blobs_sidecar` **may be** skipped. |
…eth2.0-specs into clarify-empty-blob-sidecar
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
lgtm!
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Why skip these -- the exist (and would exist at time of gossiping)? doesn't that just make cross validation/verification marginally more difficult?
Is it just to save the 100 bytes or so?
Since we didn't clarify this condition explicitly, it has become the default behavior on devnet3. The saving for 100 bytes is not worth it, but neither cross-validation is more difficult than before (i.e check block body's kzg commitment first, if it's non-empty, then there must exist a sidecar). It does feel cleaner not to have empty objects over the wire since we assume most of them will be empty early on. @Inphi I think you might have a stronger opinion on this. Anything else to add? |
I feel a bit otherwise on the cleanliness -- explicit (send the side car no matter what) seems like less cognitive load to understand what's going on. Rather than implicit (drop the side car when no blobs in block) which requires knowing this extra rule to understand. |
whether we send zero blobs or not, the spec needs to be clear on the behavior. I'm slightly for empty sidecar elision for a couple reasons;
|
Except there is a message that exists and was sent with gossip. I find assymetries between different p2p protocols on sending/not sending empty to be the sticking point form me.
I see this but think the above points in aiding spec understanding trump this especially considering that the equillibrium will be non-zero blobs for almost all blocks (1 is the minimum blob gas price so the resource will be utilized) |
Good points. I'm sympathetic to keeping things symmetric. Though there're a couple asymmetries in Req-Res RPC today, including behavior around missed w/ slots, we don't need to add more more to the pile. |
ready again @djrtwo 🙏🏼 |
Clarify that a peer must not respond a sidecar with empty blobs (i.e,len(sidecar.blobs) == 0
) under RPC end point/eth2/beacon_chain/req/blobs_sidecars_by_range/1/
. This behavior has caused some confusion on devnet3, so it'd be good to clarify it in the spec. A peer may use the kzg commitment in the block body to distinguish if the slot should have a sidecar or notAfter further discussions, we've agreed to favor the responding behavior and further clarify that a peer may not want to rate limit a sidecar with empty blobs