diff --git a/crates/supervisor/core/src/chain_processor/chain.rs b/crates/supervisor/core/src/chain_processor/chain.rs
index ca4218fa44..d7123ff014 100644
--- a/crates/supervisor/core/src/chain_processor/chain.rs
+++ b/crates/supervisor/core/src/chain_processor/chain.rs
@@ -2,8 +2,7 @@ use super::{ChainProcessorError, ChainProcessorTask};
use crate::{config::RollupConfig, event::ChainEvent, syncnode::ManagedNodeProvider};
use alloy_primitives::ChainId;
use kona_supervisor_storage::{
- DerivationStorageWriter, HeadRefStorageWriter, LogStorageReader, LogStorageWriter,
- StorageRewinder,
+ DerivationStorage, DerivationStorageWriter, HeadRefStorageWriter, LogStorage, StorageRewinder,
};
use std::sync::Arc;
use tokio::{
@@ -47,8 +46,8 @@ pub struct ChainProcessor
{
impl
ChainProcessor
where
P: ManagedNodeProvider + 'static,
- W: LogStorageWriter
- + LogStorageReader
+ W: LogStorage
+ + DerivationStorage
+ DerivationStorageWriter
+ HeadRefStorageWriter
+ StorageRewinder
@@ -142,7 +141,8 @@ mod tests {
use kona_interop::DerivedRefPair;
use kona_protocol::BlockInfo;
use kona_supervisor_storage::{
- DerivationStorageWriter, HeadRefStorageWriter, LogStorageWriter, StorageError,
+ DerivationStorageReader, DerivationStorageWriter, HeadRefStorageWriter, LogStorageReader,
+ LogStorageWriter, StorageError,
};
use kona_supervisor_types::{BlockSeal, Log, OutputV0, Receipts};
use mockall::mock;
@@ -226,13 +226,19 @@ mod tests {
) -> Result<(), StorageError>;
}
- impl LogStorageReader for Db {
+ impl LogStorageReader for Db {
fn get_block(&self, block_number: u64) -> Result;
fn get_latest_block(&self) -> Result;
fn get_log(&self,block_number: u64,log_index: u32) -> Result;
fn get_logs(&self, block_number: u64) -> Result, StorageError>;
}
+ impl DerivationStorageReader for Db {
+ fn derived_to_source(&self, derived_block_id: BlockNumHash) -> Result;
+ fn latest_derived_block_at_source(&self, source_block_id: BlockNumHash) -> Result;
+ fn latest_derivation_state(&self) -> Result;
+ }
+
impl DerivationStorageWriter for Db {
fn initialise_derivation_storage(
&self,
@@ -266,6 +272,7 @@ mod tests {
block: &BlockInfo,
) -> Result;
}
+
impl StorageRewinder for Db {
fn rewind_log_storage(&self, to: &BlockNumHash) -> Result<(), StorageError>;
fn rewind(&self, to: &BlockNumHash) -> Result<(), StorageError>;
diff --git a/crates/supervisor/core/src/chain_processor/task.rs b/crates/supervisor/core/src/chain_processor/task.rs
index 61519f51a3..ca09072c37 100644
--- a/crates/supervisor/core/src/chain_processor/task.rs
+++ b/crates/supervisor/core/src/chain_processor/task.rs
@@ -7,13 +7,13 @@ use alloy_primitives::ChainId;
use kona_interop::{BlockReplacement, DerivedRefPair};
use kona_protocol::BlockInfo;
use kona_supervisor_storage::{
- DerivationStorageWriter, HeadRefStorageWriter, LogStorageReader, LogStorageWriter,
- StorageError, StorageRewinder,
+ DerivationStorage, HeadRefStorageWriter, LogStorage, StorageError, StorageRewinder,
};
+use kona_supervisor_types::BlockSeal;
use std::{fmt::Debug, sync::Arc};
-use tokio::sync::mpsc;
+use tokio::sync::{RwLock, mpsc};
use tokio_util::sync::CancellationToken;
-use tracing::{debug, error, info};
+use tracing::{debug, error, info, trace};
/// Represents a task that processes chain events from a managed node.
/// It listens for events emitted by the managed node and handles them accordingly.
@@ -35,17 +35,14 @@ pub struct ChainProcessorTask {
/// The channel for receiving node events.
event_rx: mpsc::Receiver,
+
+ invalidated_block: RwLock