fix: fetch header by hash (#11407)

This commit is contained in:
Matthias Seitz
2024-10-02 10:07:22 +02:00
committed by GitHub
parent 2d59212512
commit 12554c426f
2 changed files with 8 additions and 9 deletions

View File

@ -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<Option<SealedHeader>> {
// 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)
}
}

View File

@ -15,6 +15,11 @@ pub trait HeaderProvider: Send + Sync {
/// Get header by block hash
fn header(&self, block_hash: &BlockHash) -> ProviderResult<Option<Header>>;
/// Retrieves the header sealed by the given block hash.
fn sealed_header_by_hash(&self, block_hash: BlockHash) -> ProviderResult<Option<SealedHeader>> {
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<Option<Header>>;