mirror of
https://github.com/hl-archive-node/nanoreth.git
synced 2025-12-06 10:59:55 +00:00
feat: add header AT to provider (#13030)
Co-authored-by: Arsenii Kulikov <klkvrr@gmail.com>
This commit is contained in:
@ -7,7 +7,6 @@ use crate::{
|
||||
PruneCheckpointReader, StageCheckpointReader, StateProviderBox, StaticFileProviderFactory,
|
||||
TransactionVariant, TransactionsProvider, WithdrawalsProvider,
|
||||
};
|
||||
use alloy_consensus::Header;
|
||||
use alloy_eips::{
|
||||
eip4895::{Withdrawal, Withdrawals},
|
||||
BlockHashOrNumber,
|
||||
@ -19,7 +18,7 @@ use reth_db::{init_db, mdbx::DatabaseArguments, DatabaseEnv};
|
||||
use reth_db_api::{database::Database, models::StoredBlockBodyIndices};
|
||||
use reth_errors::{RethError, RethResult};
|
||||
use reth_evm::ConfigureEvmEnv;
|
||||
use reth_node_types::{BlockTy, NodeTypesWithDB, ReceiptTy, TxTy};
|
||||
use reth_node_types::{BlockTy, HeaderTy, NodeTypesWithDB, ReceiptTy, TxTy};
|
||||
use reth_primitives::{
|
||||
BlockWithSenders, SealedBlockFor, SealedBlockWithSenders, SealedHeader, StaticFileSegment,
|
||||
TransactionMeta,
|
||||
@ -228,21 +227,24 @@ impl<N: NodeTypesWithDB> StaticFileProviderFactory for ProviderFactory<N> {
|
||||
}
|
||||
|
||||
impl<N: ProviderNodeTypes> HeaderSyncGapProvider for ProviderFactory<N> {
|
||||
type Header = HeaderTy<N>;
|
||||
fn sync_gap(
|
||||
&self,
|
||||
tip: watch::Receiver<B256>,
|
||||
highest_uninterrupted_block: BlockNumber,
|
||||
) -> ProviderResult<HeaderSyncGap> {
|
||||
) -> ProviderResult<HeaderSyncGap<Self::Header>> {
|
||||
self.provider()?.sync_gap(tip, highest_uninterrupted_block)
|
||||
}
|
||||
}
|
||||
|
||||
impl<N: ProviderNodeTypes> HeaderProvider for ProviderFactory<N> {
|
||||
fn header(&self, block_hash: &BlockHash) -> ProviderResult<Option<Header>> {
|
||||
type Header = HeaderTy<N>;
|
||||
|
||||
fn header(&self, block_hash: &BlockHash) -> ProviderResult<Option<Self::Header>> {
|
||||
self.provider()?.header(block_hash)
|
||||
}
|
||||
|
||||
fn header_by_number(&self, num: BlockNumber) -> ProviderResult<Option<Header>> {
|
||||
fn header_by_number(&self, num: BlockNumber) -> ProviderResult<Option<Self::Header>> {
|
||||
self.static_file_provider.get_with_static_file_or_database(
|
||||
StaticFileSegment::Headers,
|
||||
num,
|
||||
@ -270,7 +272,10 @@ impl<N: ProviderNodeTypes> HeaderProvider for ProviderFactory<N> {
|
||||
)
|
||||
}
|
||||
|
||||
fn headers_range(&self, range: impl RangeBounds<BlockNumber>) -> ProviderResult<Vec<Header>> {
|
||||
fn headers_range(
|
||||
&self,
|
||||
range: impl RangeBounds<BlockNumber>,
|
||||
) -> ProviderResult<Vec<Self::Header>> {
|
||||
self.static_file_provider.get_range_with_static_file_or_database(
|
||||
StaticFileSegment::Headers,
|
||||
to_range(range),
|
||||
@ -280,7 +285,10 @@ impl<N: ProviderNodeTypes> HeaderProvider for ProviderFactory<N> {
|
||||
)
|
||||
}
|
||||
|
||||
fn sealed_header(&self, number: BlockNumber) -> ProviderResult<Option<SealedHeader>> {
|
||||
fn sealed_header(
|
||||
&self,
|
||||
number: BlockNumber,
|
||||
) -> ProviderResult<Option<SealedHeader<Self::Header>>> {
|
||||
self.static_file_provider.get_with_static_file_or_database(
|
||||
StaticFileSegment::Headers,
|
||||
number,
|
||||
@ -292,15 +300,15 @@ impl<N: ProviderNodeTypes> HeaderProvider for ProviderFactory<N> {
|
||||
fn sealed_headers_range(
|
||||
&self,
|
||||
range: impl RangeBounds<BlockNumber>,
|
||||
) -> ProviderResult<Vec<SealedHeader>> {
|
||||
) -> ProviderResult<Vec<SealedHeader<Self::Header>>> {
|
||||
self.sealed_headers_while(range, |_| true)
|
||||
}
|
||||
|
||||
fn sealed_headers_while(
|
||||
&self,
|
||||
range: impl RangeBounds<BlockNumber>,
|
||||
predicate: impl FnMut(&SealedHeader) -> bool,
|
||||
) -> ProviderResult<Vec<SealedHeader>> {
|
||||
predicate: impl FnMut(&SealedHeader<Self::Header>) -> bool,
|
||||
) -> ProviderResult<Vec<SealedHeader<Self::Header>>> {
|
||||
self.static_file_provider.get_range_with_static_file_or_database(
|
||||
StaticFileSegment::Headers,
|
||||
to_range(range),
|
||||
@ -385,7 +393,7 @@ impl<N: ProviderNodeTypes> BlockReader for ProviderFactory<N> {
|
||||
self.provider()?.pending_block_and_receipts()
|
||||
}
|
||||
|
||||
fn ommers(&self, id: BlockHashOrNumber) -> ProviderResult<Option<Vec<Header>>> {
|
||||
fn ommers(&self, id: BlockHashOrNumber) -> ProviderResult<Option<Vec<Self::Header>>> {
|
||||
self.provider()?.ommers(id)
|
||||
}
|
||||
|
||||
@ -570,7 +578,7 @@ impl<N: ProviderNodeTypes> StageCheckpointReader for ProviderFactory<N> {
|
||||
}
|
||||
}
|
||||
|
||||
impl<N: ProviderNodeTypes> EvmEnvProvider for ProviderFactory<N> {
|
||||
impl<N: ProviderNodeTypes> EvmEnvProvider<HeaderTy<N>> for ProviderFactory<N> {
|
||||
fn fill_env_at<EvmConfig>(
|
||||
&self,
|
||||
cfg: &mut CfgEnvWithHandlerCfg,
|
||||
@ -579,7 +587,7 @@ impl<N: ProviderNodeTypes> EvmEnvProvider for ProviderFactory<N> {
|
||||
evm_config: EvmConfig,
|
||||
) -> ProviderResult<()>
|
||||
where
|
||||
EvmConfig: ConfigureEvmEnv<Header = Header>,
|
||||
EvmConfig: ConfigureEvmEnv<Header = HeaderTy<N>>,
|
||||
{
|
||||
self.provider()?.fill_env_at(cfg, block_env, at, evm_config)
|
||||
}
|
||||
@ -588,11 +596,11 @@ impl<N: ProviderNodeTypes> EvmEnvProvider for ProviderFactory<N> {
|
||||
&self,
|
||||
cfg: &mut CfgEnvWithHandlerCfg,
|
||||
block_env: &mut BlockEnv,
|
||||
header: &Header,
|
||||
header: &HeaderTy<N>,
|
||||
evm_config: EvmConfig,
|
||||
) -> ProviderResult<()>
|
||||
where
|
||||
EvmConfig: ConfigureEvmEnv<Header = Header>,
|
||||
EvmConfig: ConfigureEvmEnv<Header = HeaderTy<N>>,
|
||||
{
|
||||
self.provider()?.fill_env_with_header(cfg, block_env, header, evm_config)
|
||||
}
|
||||
@ -604,7 +612,7 @@ impl<N: ProviderNodeTypes> EvmEnvProvider for ProviderFactory<N> {
|
||||
evm_config: EvmConfig,
|
||||
) -> ProviderResult<()>
|
||||
where
|
||||
EvmConfig: ConfigureEvmEnv<Header = Header>,
|
||||
EvmConfig: ConfigureEvmEnv<Header = HeaderTy<N>>,
|
||||
{
|
||||
self.provider()?.fill_cfg_env_at(cfg, at, evm_config)
|
||||
}
|
||||
@ -612,11 +620,11 @@ impl<N: ProviderNodeTypes> EvmEnvProvider for ProviderFactory<N> {
|
||||
fn fill_cfg_env_with_header<EvmConfig>(
|
||||
&self,
|
||||
cfg: &mut CfgEnvWithHandlerCfg,
|
||||
header: &Header,
|
||||
header: &HeaderTy<N>,
|
||||
evm_config: EvmConfig,
|
||||
) -> ProviderResult<()>
|
||||
where
|
||||
EvmConfig: ConfigureEvmEnv<Header = Header>,
|
||||
EvmConfig: ConfigureEvmEnv<Header = HeaderTy<N>>,
|
||||
{
|
||||
self.provider()?.fill_cfg_env_with_header(cfg, header, evm_config)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user