diff --git a/crates/node/service/src/actors/sequencer/actor.rs b/crates/node/service/src/actors/sequencer/actor.rs index 0ffdc6b448..ceb5cebe6d 100644 --- a/crates/node/service/src/actors/sequencer/actor.rs +++ b/crates/node/service/src/actors/sequencer/actor.rs @@ -1,8 +1,7 @@ //! The [`SequencerActor`]. -use crate::{CancellableContext, NodeActor}; - use super::{L1OriginSelector, L1OriginSelectorError}; +use crate::{CancellableContext, NodeActor}; use alloy_provider::RootProvider; use async_trait::async_trait; use kona_derive::{AttributesBuilder, PipelineErrorKind, StatefulAttributesBuilder}; @@ -105,6 +104,8 @@ pub struct SequencerInboundData { pub struct SequencerContext { /// The cancellation token, shared between all tasks. pub cancellation: CancellationToken, + /// Sender to request the engine to reset. + pub reset_request_tx: mpsc::Sender<()>, /// Sender to request the execution layer to build a payload attributes on top of the /// current unsafe head. pub build_request_tx: @@ -179,7 +180,17 @@ impl SequencerActorState { // Do nothing and allow a retry. } Err(PipelineErrorKind::Reset(_)) => { - todo!("Reset the engine - need reset request chan") + if let Err(err) = ctx.reset_request_tx.send(()).await { + error!(target: "sequencer", ?err, "Failed to reset engine"); + ctx.cancellation.cancel(); + return Err(SequencerActorError::ChannelClosed); + } + + warn!( + target: "sequencer", + "Resetting engine due to pipeline error while preparing payload attributes" + ); + return Ok(()); } Err(err @ PipelineErrorKind::Critical(_)) => { error!(target: "sequencer", ?err, "Failed to prepare payload attributes"); diff --git a/crates/node/service/src/service/core.rs b/crates/node/service/src/service/core.rs index 236b808b89..ee7950c9df 100644 --- a/crates/node/service/src/service/core.rs +++ b/crates/node/service/src/service/core.rs @@ -191,7 +191,7 @@ pub trait RollupNodeService { }; let derivation_context = DerivationContext { - reset_request_tx, + reset_request_tx: reset_request_tx.clone(), derived_attributes_tx: attributes_tx, cancellation: cancellation.clone(), }; @@ -204,6 +204,7 @@ pub trait RollupNodeService { }; let sequencer_context = SequencerContext { + reset_request_tx, build_request_tx, gossip_payload_tx: unsafe_block_tx, cancellation: cancellation.clone(),