protocol: drop overlapping span batches#371
Merged
sebastianst merged 2 commits intomainfrom Apr 2, 2026
Merged
Conversation
Proposes a Karst hardfork derivation rule change to drop overlapping span batches instead of performing expensive l2Fetcher-backed verification. Explores nine approaches for maintaining fault proof soundness, with trade-offs presented as an open design question. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
ajsutton
reviewed
Mar 25, 2026
Contributor
ajsutton
left a comment
There was a problem hiding this comment.
Three cases this hits:
- Fault proofs
- Node crashes while applying a span batch and safe head is left part way through it (mitigated by moving to only update safe head once all data from the batch is applied)
- Rewinding the chain with setDebugHead
- Node startup process - where is the L1 block to start from and what safe L2 block should we use? Theoretically we should use the current safe L2 block but op-node often rewinds it for some reason.
- Snap sync might sync to a node in the middle of a span batch.
Fundamentally the difficult question here is how to know which safe block is actually ok to start derivation from. If you take an L2 block and iterate L1 to find the span batch it came from you then have to ask, did that span batch overlap with a previous one?
So you find the previous span batch and check it overlaps or not. But first you need to know if the previous span batch was valid, so you have to find its parent. You wind up having to read the entire batch history in order to validate your starting point and with blobs that starting point won't be available.
Reframe as exploration doc. The implicit requirement that the safe head must be at a span batch boundary cannot be met in practice — violated by fault proofs, node restarts, snap sync, interop, and setDebugHead. Overlap checks will be retained in the non-IO derivation refactor using deferred L2 block fetching. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
ajsutton
approved these changes
Apr 1, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Explores dropping overlapping span batches as a Karst hardfork derivation rule change and concludes that the change is not feasible due to unresolvable implications for fault proofs, node restarts, snap sync, interop, and operational tools.
Related: ethereum-optimism/optimism#19303
🤖 Generated with Claude Code