mirror of
https://github.com/hl-archive-node/nanoreth.git
synced 2025-12-06 10:59:55 +00:00
fix: fetch header by hash (#11407)
This commit is contained in:
@ -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)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -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>>;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user