reth_storage_api/
header.rs
1use alloc::vec::Vec;
2use alloy_eips::BlockHashOrNumber;
3use alloy_primitives::{BlockHash, BlockNumber, U256};
4use core::ops::RangeBounds;
5use reth_primitives_traits::{BlockHeader, SealedHeader};
6use reth_storage_errors::provider::ProviderResult;
7
8pub type ProviderHeader<P> = <P as HeaderProvider>::Header;
10
11#[auto_impl::auto_impl(&, Arc)]
13pub trait HeaderProvider: Send + Sync {
14 type Header: BlockHeader;
16
17 fn is_known(&self, block_hash: &BlockHash) -> ProviderResult<bool> {
19 self.header(block_hash).map(|header| header.is_some())
20 }
21
22 fn header(&self, block_hash: &BlockHash) -> ProviderResult<Option<Self::Header>>;
24
25 fn sealed_header_by_hash(
27 &self,
28 block_hash: BlockHash,
29 ) -> ProviderResult<Option<SealedHeader<Self::Header>>> {
30 Ok(self.header(&block_hash)?.map(|header| SealedHeader::new(header, block_hash)))
31 }
32
33 fn header_by_number(&self, num: u64) -> ProviderResult<Option<Self::Header>>;
35
36 fn header_by_hash_or_number(
38 &self,
39 hash_or_num: BlockHashOrNumber,
40 ) -> ProviderResult<Option<Self::Header>> {
41 match hash_or_num {
42 BlockHashOrNumber::Hash(hash) => self.header(&hash),
43 BlockHashOrNumber::Number(num) => self.header_by_number(num),
44 }
45 }
46
47 fn header_td(&self, hash: &BlockHash) -> ProviderResult<Option<U256>>;
49
50 fn header_td_by_number(&self, number: BlockNumber) -> ProviderResult<Option<U256>>;
52
53 fn headers_range(
55 &self,
56 range: impl RangeBounds<BlockNumber>,
57 ) -> ProviderResult<Vec<Self::Header>>;
58
59 fn sealed_header(
61 &self,
62 number: BlockNumber,
63 ) -> ProviderResult<Option<SealedHeader<Self::Header>>>;
64
65 fn sealed_headers_range(
67 &self,
68 range: impl RangeBounds<BlockNumber>,
69 ) -> ProviderResult<Vec<SealedHeader<Self::Header>>> {
70 self.sealed_headers_while(range, |_| true)
71 }
72
73 fn sealed_headers_while(
75 &self,
76 range: impl RangeBounds<BlockNumber>,
77 predicate: impl FnMut(&SealedHeader<Self::Header>) -> bool,
78 ) -> ProviderResult<Vec<SealedHeader<Self::Header>>>;
79}