Skip to content

Conversation

@raulk
Copy link
Member

@raulk raulk commented Jun 23, 2025

Add optional partialResponse boolean flag to reinstate engine_getBlobsV1's partial hit behavior, needed for optimization work.

Background

  • engine_getBlobsV1 currently achieves a 70-80% hit rate, expected to remain high even as blob volume increases.
  • EIP-4844 introduced full blob sidecar broadcasts at the CL layer; with PeerDAS, the CL now gossips column sidecars.
  • Because columns sidecars require all cells to be present, support for partial hits was previously dropped in this commit.

Motivation

  • The P2P networking team is actively working on backwards-compatible optimizations that can be deployed in-between forks.
  • For instance, we're prototyping cell-level deltas to facilitate column reconciliation based on local availability.
  • This would reduce redundant full-column transmissions and reclaim useful bandwith to further scale blobs.

Remarks

  • We're aware this change might be procedurally late, but its ease of implementation and its ability to unlock an entire class of interim improvements makes it worthwhile to consider (and we only noticed this opportunity in Berlin).
  • We'll happily submit PRs to implement this in EL and CL clients if needed. Just let us know!
  • We gated partial responses behind a flag to avoid unnecessary overhead while unused.

Add optional `partialResponse` boolean flag to reinstate `engine_getBlobsV1`'s
partial hit behavior, needed for optimization work.

Background:
- `engine_getBlobsV1` currently achieves a 70-80% hit rate, expected to
  remain high even as blob volume increases.
- EIP-4844 introduced full blob sidecar broadcasts at the CL layer; with
  PeerDAS, the CL now gossips column sidecars.
- Because columns sidecars require all cells to be present, support for
  partial hits was previously dropped [in this commit][cad419].

Motivation:
- The P2P networking team is actively working on backwards-compatible
  optimizations that can be deployed in-between forks.
- For instance, we're prototyping cell-level deltas to facilitate column
  reconciliation based on local availability.
- This would reduce redundant full-column transmissions and reclaim
  useful bandwith to further scale blobs.

Remarks:
- We're aware this change might be procedurally late, but its ease of
  implementation and its ability to unlock an entire class of interim
  improvements makes it worthwhile to consider (and we only noticed this
  opportunity in Berlin).
- We'll happily submit PRs to implement this in EL and CL clients if
  needed. Just let us know!
- We gated partial responses behind a flag to avoid unnecessary overhead
  while unused.

[cad419]: ethereum@cad4194
@mkalinin
Copy link
Contributor

I have a general question. What stops us from making partialResponse=true logic a default one? In other words, in which cases partialResponse=false is supposed to be used?

@MarcoPolo
Copy link
Contributor

From the ACDT discussion on Monday, there seems consensus to go back to the old behavior of returning partial responses with null for missing blobs, as opposed to introduce a new flag.

@raulk
Copy link
Member Author

raulk commented Jun 25, 2025

Superseded by #671 based on ACDT discussion.

@raulk raulk closed this Jun 25, 2025
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.

3 participants