diff --git a/src/kernel_sequencer/src/delayed_inbox.rs b/src/kernel_sequencer/src/delayed_inbox.rs index 784a72bf08461ad76c583bd942ca60f7b01b6c6a..252fd41cbf975cb0102e7865b6b38353ba60f2c7 100644 --- a/src/kernel_sequencer/src/delayed_inbox.rs +++ b/src/kernel_sequencer/src/delayed_inbox.rs @@ -17,7 +17,8 @@ use crate::{ message::{Framed, KernelMessage, Sequence, SequencerMsg, SetSequencer}, queue::Queue, routing::FilterBehavior, - state::update_state, + state::{update_state, State}, + storage::read_state, }; /// Message added to the delayed inbox @@ -53,6 +54,9 @@ pub fn read_input( update_state(host, delayed_inbox_queue, msg.level)?; } + // The state can change at each iteration + let state = read_state(host)?; + let message = KernelMessage::nom_read(payload); match message { Err(_) => {} @@ -65,6 +69,7 @@ pub fn read_input( sequence, destination, &raw_rollup_address, + state, ), KernelMessage::Sequencer(Framed { destination, @@ -98,15 +103,21 @@ fn handle_sequence_message( sequence: Sequence, destination: SmartRollupAddress, rollup_address: &[u8; RAW_ROLLUP_ADDRESS_SIZE], + state: State, ) { - if destination.hash().as_ref() == rollup_address { - debug_msg!( - host, - "Received a sequence message {:?} targeting our rollup", - sequence - ); - // process the sequence + if destination.hash().as_ref() != rollup_address { + return; } + + debug_msg!( + host, + "Received a sequence message {:?} targeting our rollup", + sequence + ); + + let State::Sequenced(_) = state else {return;}; + + // process the sequence } fn handle_set_sequencer_message( diff --git a/src/kernel_sequencer/src/storage.rs b/src/kernel_sequencer/src/storage.rs index 26b8420bbc5abe487ace56cbab4665a8f99a0128..d6da57584a1a988ad6c301d2f0da6a70c43a38c2 100644 --- a/src/kernel_sequencer/src/storage.rs +++ b/src/kernel_sequencer/src/storage.rs @@ -4,7 +4,6 @@ use crate::state::State; use tezos_data_encoding::enc::BinWriter; -#[cfg(test)] use tezos_data_encoding::nom::NomReader; use tezos_smart_rollup_host::{ path::{concat, OwnedPath, Path, RefPath, PATH_SEPARATOR}, @@ -52,7 +51,6 @@ pub fn write_state(host: &mut H, state: State) -> Result<(), Runtime /// Returns the state of the sequencer kernel. /// /// Or the default value if it is not present in storage. -#[cfg(test)] pub fn read_state(host: &mut H) -> Result { let path = sequencer_prefix(&STATE)?;