From 12554c426f5a5a7d246014c4c7ba8e0bcedf78c3 Mon Sep 17 00:00:00 2001 From: Matthias Seitz Date: Wed, 2 Oct 2024 10:07:22 +0200 Subject: [PATCH] fix: fetch header by hash (#11407) --- crates/engine/tree/src/tree/mod.rs | 12 +++--------- crates/storage/storage-api/src/header.rs | 5 +++++ 2 files changed, 8 insertions(+), 9 deletions(-) diff --git a/crates/engine/tree/src/tree/mod.rs b/crates/engine/tree/src/tree/mod.rs index 1c79fa3ef..1d7200222 100644 --- a/crates/engine/tree/src/tree/mod.rs +++ b/crates/engine/tree/src/tree/mod.rs @@ -1524,19 +1524,13 @@ where /// Return sealed block from database or in-memory state by hash. fn sealed_header_by_hash(&self, hash: B256) -> ProviderResult> { // check memory first - let block = self - .state - .tree_state - .block_by_hash(hash) - // TODO: clone for compatibility. should we return an Arc here? - .map(|block| block.as_ref().clone().header); + let block = + self.state.tree_state.block_by_hash(hash).map(|block| block.as_ref().clone().header); if block.is_some() { Ok(block) - } else if let Some(block_num) = self.provider.block_number(hash)? { - Ok(self.provider.sealed_header(block_num)?) } else { - Ok(None) + self.provider.sealed_header_by_hash(hash) } } diff --git a/crates/storage/storage-api/src/header.rs b/crates/storage/storage-api/src/header.rs index ce984fb10..7202f51dd 100644 --- a/crates/storage/storage-api/src/header.rs +++ b/crates/storage/storage-api/src/header.rs @@ -15,6 +15,11 @@ pub trait HeaderProvider: Send + Sync { /// Get header by block hash fn header(&self, block_hash: &BlockHash) -> ProviderResult>; + /// Retrieves the header sealed by the given block hash. + fn sealed_header_by_hash(&self, block_hash: BlockHash) -> ProviderResult> { + Ok(self.header(&block_hash)?.map(|header| SealedHeader::new(header, block_hash))) + } + /// Get header by block number fn header_by_number(&self, num: u64) -> ProviderResult>;