Skip to content

core/txpool: drop support for v0 blob sidecar - #35191

Merged
fjl merged 3 commits into
ethereum:masterfrom
healthykim:drop-v0
Jun 22, 2026
Merged

core/txpool: drop support for v0 blob sidecar#35191
fjl merged 3 commits into
ethereum:masterfrom
healthykim:drop-v0

Conversation

@healthykim

Copy link
Copy Markdown
Contributor

This PR drops support for v0 blob sidecar in blobpool. Now it is assumed that only v1 transactions exist in the blobpool.

Since the osaka fork activation time has passed, these code paths are now unused.

@fjl fjl added this to the 1.17.5 milestone Jun 22, 2026
@fjl
fjl merged commit eea629b into ethereum:master Jun 22, 2026
9 checks passed
healthykim added a commit that referenced this pull request Jun 26, 2026
This PR drops support for v0 blob sidecar in blobpool. Since the
osaka fork activation time has passed, these code paths are
now unused. It is assumed that only v1 transactions exist in
the blobpool.
dicethedev pushed a commit to dicethedev/ethrex that referenced this pull request Jun 30, 2026
…heck (lambdaclass#6919)

**Motivation**

The `devp2p` hive suite (`TestBlobTxWithoutSidecar`,
`TestBlobTxWithMismatchedSidecar`) started failing main-wide with
"unexpected disconnect". The trigger is go-ethereum
[#35191](ethereum/go-ethereum#35191) ("V0 Blob
Sidecar Support Removal"), which makes geth always produce **v1
(EIP-7594 cell-proof)** blob sidecars — even pre-Osaka — instead of v0
(EIP-4844 blob proofs). The hive simulator builds its `devp2p` test peer
from go-ethereum at image-build time, so once that picked up #35191 the
peer began sending v1 sidecars, which ethrex rejected, disconnecting an
otherwise-valid peer.

**Description**

Two independent issues surfaced, both on the mempool/propagation path
(blob sidecars are never included in a block, so neither change affects
consensus):

1. **Blob sidecar version acceptance**
(`crates/common/types/blobs_bundle.rs`, `validate_cheap`): previously a
fork-exact check (`v0` before Osaka, `v1` on Osaka+) rejected v1
sidecars pre-Osaka. The network is mid-migration to cell proofs and
peers switch at different times, so pre-Osaka we now accept **both v0
and v1**; Osaka+ still requires v1. Updated the unit tests accordingly
(`v1_sidecar_is_accepted_pre_osaka`, `v0_sidecar_is_rejected_on_osaka`).

2. **Pooled-transaction size check**
(`crates/networking/p2p/rlpx/eth/transactions.rs`): `validate_requested`
required the received transaction's encoded length to *exactly* equal
the size announced in `NewPooledTransactionHashes`. geth's
`Transaction.Size()` under-counts a v1 sidecar by exactly one byte — it
omits the wrapper version byte — so the strict check disconnected geth
on every v1 blob-tx announcement. The announced size is a soft hint; we
now tolerate up to 8 bytes of skew, matching go-ethereum's tx fetcher
(`eth/fetcher/tx_fetcher.go`). ethrex's own announcements already fall
within geth's 8-byte tolerance, so the send side needs no change.

Validated by reproducing the exact CI configuration (hive simulator
rebuilt with fresh geth incl. #35191): the `devp2p` `eth` suite goes
from `failed=3` to **21/21 passing**, including both target tests.
`blobs_bundle` unit tests (8/8 with `--features c-kzg`) and clippy on
the touched crates are clean.

**Checklist**

- [x] Reproduced the failure against a fresh-geth hive simulator and
confirmed the fix (`devp2p`/`eth` 21/21).
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