From 68023c63d5dda4eb73c5fd99e7294661de858397 Mon Sep 17 00:00:00 2001 From: oooLowNeoNooo Date: Tue, 16 Dec 2025 19:10:17 +0100 Subject: [PATCH] Update block_cache.rs --- .../execution/providers/block/block_cache.rs | 31 ++++++++++++++----- 1 file changed, 23 insertions(+), 8 deletions(-) diff --git a/core/src/execution/providers/block/block_cache.rs b/core/src/execution/providers/block/block_cache.rs index 1cce43dd..479bc9c5 100644 --- a/core/src/execution/providers/block/block_cache.rs +++ b/core/src/execution/providers/block/block_cache.rs @@ -128,15 +128,30 @@ impl BlockProvider for BlockCache { if let Some(parent_block) = blocks.get(&(block_number - 1)) { parent_block.header().hash() == parent_hash } else { - // No parent block in cache - check if cache is empty except finalized blocks + // No parent block in cache - check if new block continues from finalized or latest block let finalized = self.finalized.read().await; - if let Some((latest_number, _)) = blocks.last_key_value() { - // All blocks in cache are finalized - *latest_number - <= finalized - .as_ref() - .map(|block| block.header().number()) - .unwrap_or_default() + if let Some((latest_number, latest_block)) = blocks.last_key_value() { + // Check if new block continues from finalized block + if let Some(finalized_block) = finalized.as_ref() { + let finalized_number = finalized_block.header().number(); + if block_number == finalized_number + 1 { + parent_hash == finalized_block.header().hash() + } else if block_number == *latest_number + 1 { + // Check if new block continues from latest block in cache + latest_block.header().hash() == parent_hash + } else { + // Block doesn't continue from any known block + false + } + } else { + // No finalized block - check if new block continues from latest block + if block_number == *latest_number + 1 { + latest_block.header().hash() == parent_hash + } else { + // Block doesn't continue from any known block + false + } + } } else { // Block cache is completely empty true