From fc4d88bf99ccf8c6e89fff848fbc16b9668bd14e Mon Sep 17 00:00:00 2001 From: Derek Cofausper <256792747+decofe@users.noreply.github.com> Date: Wed, 4 Mar 2026 09:26:33 -0800 Subject: [PATCH] fix(engine): clamp pending finalized/safe block to persisted height (#22783) Co-authored-by: joshieDo <93316087+joshieDo@users.noreply.github.com> --- crates/engine/tree/src/persistence.rs | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/crates/engine/tree/src/persistence.rs b/crates/engine/tree/src/persistence.rs index 739fbb3d18..3534b94ff4 100644 --- a/crates/engine/tree/src/persistence.rs +++ b/crates/engine/tree/src/persistence.rs @@ -157,10 +157,18 @@ where provider_rw.save_blocks(blocks, SaveBlocksMode::Full)?; if let Some(finalized) = pending_finalized { - provider_rw.save_finalized_block_number(finalized)?; + // Clamp to the highest persisted block so that on restart + // `last_finalized_block_number` never points past available state. + provider_rw.save_finalized_block_number(finalized.min(last.number))?; + if finalized > last.number { + self.pending_finalized_block = Some(finalized); + } } if let Some(safe) = pending_safe { - provider_rw.save_safe_block_number(safe)?; + provider_rw.save_safe_block_number(safe.min(last.number))?; + if safe > last.number { + self.pending_safe_block = Some(safe); + } } if self.pruner.is_pruning_needed(last.number) {