no-std and std Rust components,
purpose-built for the OP Stack. At the heart of this ecosystem is the
kona-node — a modern, modular rollup node (L2 consensus node) that can
be used as a drop-in binary or as a foundation for custom services.
The kona-node is a fully compliant implementation of the “Rollup Node”
Specifications and is released as a binary in
the kona repository. Whether you’re running a production network,
building new rollup features, or experimenting with the OP Stack,
kona-node is built to be both robust and extensible.
Background
A rollup node is responsible for deriving the canonical L2 chain from L1 blocks and their receipts. It validates these blocks using the Engine API, passing them to the execution layer for processing. Paired with an execution engine like op-reth or op-geth,kona-node tracks
the unsafe, safe, and finalized tips of the L2 OP Stack chain, ensuring the
node is always in sync with the latest state.
Rollup nodes hold minimal state. Unsafe and safe payloads alike are sent
away to the execution engine client which holds the chain’s db. This way,
the rollup node holds a view of the tip of the chain - unsafe, safe, and
finalized block info. All data otherwise needed is held in memory.
kona-node.
- Derivation Pipeline: Constructs L2 payload attributes from L1 blocks, forming the backbone of rollup logic.
- Execution Engine Integration: Executes L2 payload attributes via the Engine API, abstracting away different EL clients.
- P2P Networking: Enables block gossip and peer discovery.
kona-node, visit the Node Design section.
Additionally, an RPC server exposes essential methods, including the
L2 Output RPC method.
Syncing
Thekona-node syncs the L2 chain in two main phases:
-
Execution Layer (EL) Sync:
When starting, the node initially has an empty engine task queue.
Once an unsafe block is received from P2P gossip, an
InsertTaskis executed. That task inserts the payload and sends a forkchoice update through the engine api. Since the engine state is lazily initialized (the safe and finalized heads are zero), the forkchoice update kicks off EL sync on the execution layer (EL) client (such as op-reth or op-geth). EL sync instructs the execution client to fetch and sync L2 blocks directly from peers. During this phase, thekona-nodeeffectively waits for the EL client to reach the chain tip, when it returns that it issynced. No L2 blocks are derived from L1 during this period. -
Consensus Layer (CL) Sync:
Once the EL client is fully synced to the tip, the node transitions
to consensus layer (CL) sync. In this phase,
kona-nodebegins deriving new L2 payload attributes from the L1 chain, following the rollup derivation process.OpAttributesWithParentvalues derived this way are executed as an engine task which submits the payloads to the execution engine for validation and execution.
kona-nodedoes not support historical CL sync or backfilling L2 blocks from L1 for past chain history. It relies on the EL client to perform the initial sync of the L2 chain.- Only after the EL is fully synced does the node begin deriving and following new L2 blocks from L1.
Extensibility
Thekona-node is designed as a modular, actor-based node SDK,
making it possible to extend or customize node behavior by adding
new actors or swapping out existing ones. This extensibility is
currently in beta, but the architecture is intentionally built
to support advanced use cases and custom integrations.
Actor Model
At the core ofkona-node is the concept of actors: independent,
async services that communicate over channels. Each actor implements
the NodeActor trait, a minimal interface with a single
step method that the service drives in a loop until the actor reports
a fatal error or the node shuts down.
The RollupNode service builds and spawns a fixed set of
actors covering derivation, the execution engine and its read-only
engine RPC, the L1 watcher, P2P networking, the node’s RPC server,
and, in sequencer mode, block building.
The Node Design section is
the canonical description of that actor set and of what each actor
does.
Extending with Custom Actors
You can write your own actor by implementing theNodeActor trait.
This allows you to introduce new background services, event
processors, or integrations with external systems.
The trait has one associated type and one method. Each call to step
handles a single inbound request, event, or scheduled tick. Returning
Ok(()) means the actor is ready to be stepped again; returning an
error is fatal and stops the actor. Cancellation is handled by the
caller that drives the loop, so the actor itself does not own a
cancellation token.
Example: Defining a Custom Actor
Running Custom Actors
There is no trait-based extension point for swapping actors into the standard node today.RollupNode is a concrete type rather
than a trait, its actor set is fixed in that type’s start method,
and the helper that spawns and supervises those actors is internal to
the kona-node-service crate.
Running a custom actor therefore means composing the node yourself.
The built-in actors are public API of the kona-node-service crate.
The request and payload types they exchange over channels are public
too, spread across kona-node-service, sibling kona crates such as
kona-rpc and kona-gossip, and the shared alloy engine types. A
custom binary can therefore construct the actors it needs, wire them
together over channels, add its own NodeActor implementations, and
drive each actor’s step method in its own task.
Programmatic Node Construction
TheRollupNodeBuilder provides a convenient way to
construct a standard node, but for advanced use cases, you can build
your own node by composing actors directly, or by implementing your
own builder pattern.
Current Limitations
- The actor and service APIs are beta and may change.
- The standard
RollupNodeexposes no hook for overriding an individual actor or pipeline, so extending the node means composing actors in your own binary rather than wrappingRollupNode. - Documentation and examples for advanced extensibility are still evolving—contributions and feedback are welcome!
Learn More
- See the
NodeActortrait documentation for details on implementing actors. - Explore the kona-node-service crate for source code and more examples.