ethereum-optimism / ethereum-optimism/optimism

kona pure derivation — Phase 4: migrate kona-node to NodeDeriver

Open
#20,699 0 comments 0 reactions 0 assignees Claimed by @sebastianst View on GitHub
Dominant language
Go
Stars
6.5k
Forks
4k
Avg merge
2d 15h
Merged PRs (30d)
145

Description

Replace `OnlinePipeline` + `DerivationActor`'s pipeline use with `NodeDeriver`: an async wrapper around `pure::Deriver` that owns the L1 prefetcher, L2 lookup, reorg/finalization handling, and trace-to-tracing translation.

## Touches

- `crates/node/service/src/service/node.rs` — `create_pipeline` replaced with `NodeDeriver::new`.
- `crates/node/service/src/actors/derivation/actor.rs` — step loop + the `Signal::Activation` site.
- `crates/node/service/src/actors/derivation/{state_machine.rs, delegated/actor.rs}` — the `Signal`-driven state machine collapses; the driver replaces it.
- `crates/providers/providers-alloy/src/pipeline.rs` — `OnlinePipeline` deprecated; deletion pinned to Phase 6b.
- `bin/node/src/flags/p2p.rs` — non-pipeline `ChainProvider` use migrates alongside.

## Deliverables

- `NodeDeriver` owns `pure::Deriver`, an L1 prefetcher (uses `AlloyChainProvider` + `OnlineBlobProvider`), and an L2 lookup (`AlloyL2ChainProvider`). Async `step` matches on `Derivation`, dispatches fetches, feeds back to the deriver.
- Trace-to-tracing translation in the driver.
- Reset/init via existing `system_config_by_number` for sysconfig bootstrap.
- Node-side integration tests pass — specifically `rust/kona/tests/node/{long-running, reorgs, restart}` and `rust/kona/tests/supervisor/{l2reorg, l2reorgAfterL1reorg}`.
- New actor-level test exercising a span-batch-overlap path end-to-end.
- At least one test asserts `tracing` output for a representative `TraceEntry` (verifies translation layer).

Builds on Phase 3.
Part of #20695.

🤖 *Generated by Claude Code*

Contributor guide

Open the contributing guide

Research direction

Start with Phase 3 and read crates/node/service/src/service/node.rs and crates/node/service/src/actors/derivation/actor.rs, then inspect the state-machine files and providers-alloy/src/pipeline.rs. Trace how NodeDeriver should own fetching, reorg handling, and trace translation. Done means the node and supervisor integration tests pass, the actor-level overlap test exists, and a test verifies tracing output for a TraceEntry.

Written by the indexing model from the issue text.

Assessment

Tech stack
rust
Domain
backend, distributed-systems, testing-qa
Issue type
Refactor
Difficulty
5/5
Estimated time
Over a week
Activity status
Quiet
Clarity
Mostly clear
Newbie friendliness
28/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.