Skip to content

Update EIP-8070: Update EIP-8070#11444

Draft
kamilsa wants to merge 12 commits intoethereum:masterfrom
kamilsa:update/eip-8070
Draft

Update EIP-8070: Update EIP-8070#11444
kamilsa wants to merge 12 commits intoethereum:masterfrom
kamilsa:update/eip-8070

Conversation

@kamilsa
Copy link
Copy Markdown

@kamilsa kamilsa commented Mar 25, 2026

Execution client and block builder policy updates:

  • Added a detailed section on "eager mode" for block builders, requiring them to fetch full blob payloads unconditionally for all type 3 transactions they intend to include
  • Introduced guidance for handling private blob transactions, including a recommended pre-seeding mechanism to mitigate bandwidth spikes and ensure timely propagation of blob data.

Engine API specification changes:

  • Removed in-document specifications for engine_blobCustodyUpdatedV1 and engine_getBlobsV4 methods, instead referencing the canonical Amsterdam Engine API specification in the Execution APIs repository.

Security considerations and anti-abuse heuristics:

  • Expanded the Security Considerations section with detailed descriptions of potential attack vectors (DoS, selective withholding, eclipse attacks) and introduced six local heuristics (H1–H6) for peer disconnection, anti-abuse, and fairness, each with recommended configuration parameters.
  • Clarified that these heuristics are non-normative recommendations, allowing client implementations flexibility in their anti-abuse strategies

kamilsa and others added 4 commits March 21, 2026 16:27
Remove inline Engine API specification and point to the authoritative
specification in the execution-apis repository (Amsterdam Engine API spec).

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@github-actions github-actions Bot added c-update Modifies an existing proposal s-draft This EIP is a Draft t-networking labels Mar 25, 2026
@eth-bot
Copy link
Copy Markdown
Collaborator

eth-bot commented Mar 25, 2026

File EIPS/eip-8070.md

Requires 1 more reviewers from @cskiraly, @fjl, @fradamt, @healthykim, @mariosioannou-create, @ralexstokes, @raulk

@eth-bot eth-bot added the a-review Waiting on author to review label Mar 25, 2026
@eth-bot eth-bot changed the title Enhance EIP-8070 Update EIP-8070: Enhance EIP-8070 Mar 25, 2026
@github-actions github-actions Bot added the w-ci Waiting on CI to pass label Mar 25, 2026
Comment thread EIPS/eip-8070.md
### Execution clients :: Local block builders

> TODO: config specification needed.
**Eager mode for block builders.**
Copy link
Copy Markdown
Contributor

@healthykim healthykim Mar 27, 2026

Choose a reason for hiding this comment

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

Just a nitpick, but I think the categories could be structured as follows:

  1. Building on full blobs
    : This strategy only includes blob transactions for which the client has the full blob data when building an execution payload. To support higher blob throughput, the CL client may update its notified custody to Union(data indices, its own custody column indices), 2-3 slot ahead of being proposer.

  2. Building on partial blobs
    : This requires further risk profiling, so we can defer including it for now.

So in strategy 1, the EL client always builds the payload based on the existing includable transactions for which it has full blob data. Whether the number of those txs should be maximized by eagerly fetching cells is up to the CL client's decision. I personally think this is clearer from the implementation perspective

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

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

Building on full blobs
I clarified that builders should act as providers at least 2-3 slots ahead of the block they are building (or simply act as provider permanently)

Building on partial blobs

I don't see how builders can include partial blobs into their bids. Builders should possess all the columns, as once they see their block bid is approved they need to propagate them to the column subnets

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Before assembling an execution payload, a local block builder MUST switch its fetch policy to eager mode

What I meant to say is that we can relax this requirement, not making it strictly mandatory. Builders could construct a block based on the p portion of blob transactions that are fully available in their blobpool, and they could also maximize candidate transactions by switching to eager mode. The former option could be attractive for solo stakers with limited network resources.

I don't see how builders can include partial blobs into their bids. Builders should possess all the columns, as once they see their block bid is approved they need to propagate them to the column subnets

Builders could rely on the assumption that the partial blobs they are including are already widely propagated at the EL level, and that other nodes could retrieve and propagate those blob data via the getBlobs engine API (after the execution payload is revealed). However, we currently don't have a theoretical analysis to determine to what extent and under which conditions these assumptions hold.

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

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

Builders could rely on the assumption that the partial blobs they are including are already widely propagated at the EL level, and that other nodes could retrieve and propagate those blob data via the getBlobs engine AP

IMO, this creates a risk that builder could be tricked to have an impression that the partial blobs he possesses are not actually present in the network, and then PTC would reject builder's block and slot could be left without a valid block

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

I agree that there is such a risk. We were discussing giving this risky option to builders, acknowledging that it is risky, but with some mechanisms to mitigate the risk and a detailed explanation of how significant that risk is. However, I agree that we could simply omit it here and discuss it later.

Comment thread EIPS/eip-8070.md Outdated

Client implementations MUST provide configuration options for local block builders to specify a blob inclusion policy when proposing a block. Implementations SHOULD support at least these policies:
**Private blob transactions.**
A significant concern arises when blob transactions are delivered to the builder privately (i.e., bypassing the public mempool). In this case the builder is the sole holder of the full blob payload at the time the execution payload envelope is revealed. Nodes that were not previously exposed to these transactions via `NewPooledTransactionHashes` cannot satisfy custody columns via `engine_getBlobsV4`, and must instead fetch column data directly from the builder during the critical path of block validation. In the worst case, where all blob transactions in the payload are private, this creates a concentrated bandwidth spike on the builder at exactly the moment the envelope is revealed, competing with and potentially starving block and attestation traffic.
Copy link
Copy Markdown
Contributor

@healthykim healthykim Mar 27, 2026

Choose a reason for hiding this comment

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

I have two questions regarding this part

  1. Is this different from the process currently required to submit a private blob transaction?
    I think this paragraph is intended to show that we can better support private blob transactions, since we can seed columns without providing full blobs, enabling pre-propagation of blob data, something that wasn’t possible before this proposal. If that was the intention, I don’t think it is emphasized enough.

  2. Can we actually provide this property?
    First, if the builder is the only one announcing full availability, the blob cannot be sampled, since it does not pass the availability check.
    Second, the proposal seems to say two contradictory things, “For maximal security, you can choose to drop transactions that do not appear to be available among peers / resample them / apply peer scoring to drop peers that frequently refuse fetch requests,” and “Private blobs can be pre-propagated without revealing their full content.” Even if the builder successfully pre-seeded its peers, those columns would not likely to be propagated beyond them, and will be dropped because those peers cannot see enough availability around them. If a peer requests a full fetch with prob. p, the builder would refuse to respond, which may lead to disconnection depending on the client’s design.

Aside from this, I think providing multiple options is a good thing. However, the options specified in the EIP should be things that are mutually consistent and have concrete use cases. If there are too many “may”s, it becomes difficult for both us and client teams to reason about all the possible combinations. So I’d like to take a closer look at the heuristics described below and related things to see whether some of them can be omitted, so that we can reason about those combinations more concisely.

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

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

Let me drop this section to keep EIP cleaner, and not to enforce too many new rules for builders.

Private blobs are the worst case scenario. However, most blobs today are public. We might revisit that if we notice that portion of private blob transactions becomes significant, and this has a valuable effect on the speed of propagation of the data columns

Comment thread EIPS/eip-8070.md Outdated
#### H1 — Includability check

**Eclipse attacks.** TODO
Nodes SHOULD reject or deprioritize newly announced blob transactions that are clearly non-includable under current fee conditions. A simple implementation compares the transaction's blob fee against the current blob base fee, optionally with a local discount factor to tolerate small fee movements. Transactions failing this check SHOULD NOT be included in the blobpool, and nodes SHOULD avoid issuing further `GetCells` requests for them. Repeated floods of such transactions from the same peer MAY contribute to local rate-limiting or disconnection heuristics. This mechanism primarily mitigates pool-spam DoS attacks.
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

I don’t see why this should be included here. How is it relevant to the sparse blobpool? Also, this is something well-known and clients are already mitigating. Not including non-includable blob transactions is already an obvious principle in current transaction pool design in general.

The suggested attack is also not specific to sparse blobpool and already possible under the current pool, and it can be done not only through fees but also via various ways like low nonce.

I don’t think this needs to be mentioned in this EIP as a separate heuristic. If it is necessary, it could be included as one of the possible approaches for peer scoring part. And I this this has already been mentioned there.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

I think the attack vector and the heuristic are worth mentioning in general, but they should be suggested separately for each client implementations rather than as part of this EIP

Comment thread EIPS/eip-8070.md Outdated
#### H2 — Corroboration / saturation check

### The need for sampling noise
Nodes SHOULD avoid retaining newly announced blob transactions unless they are corroborated by additional peers within a bounded period. A simple implementation requires at least a minimum number of independent announcements from distinct peers before the transaction is granted longer tenure in the blobpool. Transactions that fail to reach this threshold SHOULD be evicted.
Copy link
Copy Markdown
Contributor

@healthykim healthykim Mar 29, 2026

Choose a reason for hiding this comment

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

How is this different from our basic mechanism, which waits for enough provider announcements before fetching / storing the transaction?

Comment thread EIPS/eip-8070.md Outdated
#### H3 — Randomized availability probing (sampling noise)

This simple mechanism reinforces key model assumptions (a provider is truly a provider) in exchange for negligible overhead per request (MAX_BLOBS_PER_TX x CELL_SIZE + proofs = ~12KiB).
When requesting cells for a transaction from a peer that claims provider-like availability, a node SHOULD include a small number of randomly selected extra columns (`C_extra`) in addition to its custody-aligned columns, while respecting the per-request cap (`C_req`). The purpose is to make requests less predictable and reduce the attack surface for selective withholding.
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Above on " Execution clients :: Blobpool behavior", it says

When fetching from a provider, the node MUST request C_extra random columns in addition to its custody set (see “Sampling noise” in Rationale).

I would suggest using “SHOULD” above, to align with this section, or removing the description above, since it is already covered here as one of the heuristics.

@kamilsa kamilsa changed the title Update EIP-8070: Enhance EIP-8070 Update EIP-8070 Apr 14, 2026
@eth-bot eth-bot changed the title Update EIP-8070 Update EIP-8070: Update EIP-8070 Apr 15, 2026
@github-actions github-actions Bot removed the w-ci Waiting on CI to pass label Apr 15, 2026
@github-actions
Copy link
Copy Markdown

The commit 880cd56 (as a parent of 00fdbfb) contains errors.
Please inspect the Run Summary for details.

@github-actions github-actions Bot added the w-ci Waiting on CI to pass label Apr 15, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

a-review Waiting on author to review c-update Modifies an existing proposal s-draft This EIP is a Draft t-networking w-ci Waiting on CI to pass

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants