From ba7eecd39b82ab90893dab89a3de6ced1bcc8630 Mon Sep 17 00:00:00 2001 From: Pierre-Louis Date: Fri, 9 Jun 2023 14:47:43 +0200 Subject: [PATCH] kernel/sequencer: verify state on sequence --- src/kernel_sequencer/src/delayed_inbox.rs | 27 ++++++++++++++++------- src/kernel_sequencer/src/storage.rs | 2 -- 2 files changed, 19 insertions(+), 10 deletions(-) diff --git a/src/kernel_sequencer/src/delayed_inbox.rs b/src/kernel_sequencer/src/delayed_inbox.rs index 784a72bf0846..252fd41cbf97 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 26b8420bbc5a..d6da57584a1a 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)?; -- GitLab