You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
go-ethereum#35191 removed v0 blob sidecar support entirely — geth now always produces and gossips v1 (EIP-7594 cell-proof) sidecars, even pre-Osaka, and rejects v0. ethrex still creates and stores v0 sidecars:
BlobsBundle::create_from_blobs defaults to v0 (wrapper_version.unwrap_or(0)).
The L2 committer passes Some(0) (crates/l2/sequencer/l1_committer.rs:1213).
Audit all create_from_blobs callers (defaults / None args).
Pre-Osaka Engine API paths (no recompute needed)
This is a standalone cleanup — it does not require deriving v0 proofs on demand. geth removed v0 from the pool without any v1→v0 conversion path (it explicitly prohibits proof conversion as too expensive), and handles the pre-Osaka Engine API by declining:
engine_getPayloadV3/V4 — geth copies cell proofs through unconverted and relies on Osaka being live so pre-Osaka blocks aren't built. ethrex is in the same position (all target networks post-Osaka), so this is a latent path unreachable in production. If we want it correct for pre-Osaka CI/private chains, the geth-consistent option is to skip v1 blob txs when building a pre-Osaka payload (upholds geth's "pre-Osaka packs only v0" invariant) — not recompute.
(Supersedes the earlier plan in #6926, which assumed on-demand v0 derivation was required; that was closed as not-planned once geth's decline-don't-derive behavior was confirmed.)
Verification
unit + EF state/blockchain + hive (devp2p, engine getBlobs, execute-blobs) + L2 integration.
Context
go-ethereum#35191 removed v0 blob sidecar support entirely — geth now always produces and gossips v1 (EIP-7594 cell-proof) sidecars, even pre-Osaka, and rejects v0. ethrex still creates and stores v0 sidecars:
BlobsBundle::create_from_blobsdefaults to v0 (wrapper_version.unwrap_or(0)).Some(0)(crates/l2/sequencer/l1_committer.rs:1213).validate_cheapaccepts both v0 and v1 pre-Osaka (after fix(l1): accept v1 blob sidecars pre-osaka and relax pooled-tx size check #6919).All networks ethrex targets are already post-Osaka (mainnet
osakaTime~2025-12-03; sepolia/hoodi earlier), so v0 sidecars are legacy weight.Goal
Move ethrex to v1-only sidecars internally, matching geth:
create_from_blobs→ always v1 (cell proofs); drop the v0 branch.crates/l2/sequencer/l1_committer.rs:1213,Some(0)) → v1.validate_cheap→ require v1 (remove the pre-Osaka v0 acceptance added in fix(l1): accept v1 blob sidecars pre-osaka and relax pooled-tx size check #6919); delete the now-dead v0 verify/length branches.create_from_blobscallers (defaults /Noneargs).Pre-Osaka Engine API paths (no recompute needed)
This is a standalone cleanup — it does not require deriving v0 proofs on demand. geth removed v0 from the pool without any v1→v0 conversion path (it explicitly prohibits proof conversion as too expensive), and handles the pre-Osaka Engine API by declining:
engine_getBlobsV1— geth returns all-null for a v1-only pool; ethrex already does the same after fix(l1): accept v1 blob sidecars pre-osaka and relax pooled-tx size check #6919 (getBlobsV1returnsnullfor v1 bundles). No change needed here.engine_getPayloadV3/V4— geth copies cell proofs through unconverted and relies on Osaka being live so pre-Osaka blocks aren't built. ethrex is in the same position (all target networks post-Osaka), so this is a latent path unreachable in production. If we want it correct for pre-Osaka CI/private chains, the geth-consistent option is to skip v1 blob txs when building a pre-Osaka payload (upholds geth's "pre-Osaka packs only v0" invariant) — not recompute.(Supersedes the earlier plan in #6926, which assumed on-demand v0 derivation was required; that was closed as not-planned once geth's decline-don't-derive behavior was confirmed.)
Verification
unit + EF state/blockchain + hive (devp2p, engine getBlobs, execute-blobs) + L2 integration.