diff --git a/src/app_client.rs b/src/app_client.rs index 0673cb674..c2bd74a0c 100644 --- a/src/app_client.rs +++ b/src/app_client.rs @@ -447,7 +447,17 @@ pub async fn run( if let Err(error) = process_block(app_client, &cfg, app_id, &block, pp.clone()).await { error!(block_number, "Cannot process block: {error}"); } else { - state.lock().unwrap().set_data_verified(block.block_num); + let mut state = state.lock().unwrap(); + let synced = state + .confidence_achieved + .as_ref() + .map(|range| block_number < range.first) + .unwrap_or(false); + if synced { + state.set_sync_data_verified(block_number); + } else { + state.set_data_verified(block_number); + } debug!(block_number, "Block processed"); } } diff --git a/src/sync_client.rs b/src/sync_client.rs index 840b26cd1..9d70b367e 100644 --- a/src/sync_client.rs +++ b/src/sync_client.rs @@ -347,6 +347,11 @@ pub async fn run( process_block(&sync_client, block_number, &cfg, pp, block_verified_sender).await { error!(block_number, "Cannot process block: {error:#}"); + } else { + state + .lock() + .unwrap() + .set_sync_confidence_achieved(block_number); } } if let Some(lvalset) = last_validator_set { diff --git a/src/types.rs b/src/types.rs index 01b6b3d0b..442af0e02 100644 --- a/src/types.rs +++ b/src/types.rs @@ -574,6 +574,20 @@ impl State { None => self.data_verified = Some(BlockRange::init(block_number)), }; } + + pub fn set_sync_confidence_achieved(&mut self, block_number: u32) { + match self.sync_confidence_achieved.as_mut() { + Some(range) => range.last = block_number, + None => self.sync_confidence_achieved = Some(BlockRange::init(block_number)), + }; + } + + pub fn set_sync_data_verified(&mut self, block_number: u32) { + match self.sync_data_verified.as_mut() { + Some(range) => range.last = block_number, + None => self.sync_data_verified = Some(BlockRange::init(block_number)), + }; + } } #[cfg(test)]