primitives: use SealedHeader::seal (#12507)

This commit is contained in:
Thomas Coratger
2024-11-13 13:41:56 +01:00
committed by GitHub
parent 527767cc34
commit 9313737dbb
32 changed files with 108 additions and 277 deletions

View File

@ -10,7 +10,7 @@ use alloy_eips::{
eip4895::{Withdrawal, Withdrawals},
BlockHashOrNumber, BlockId, BlockNumHash, BlockNumberOrTag, HashOrNumber,
};
use alloy_primitives::{Address, BlockHash, BlockNumber, Sealable, TxHash, TxNumber, B256, U256};
use alloy_primitives::{Address, BlockHash, BlockNumber, TxHash, TxNumber, B256, U256};
use reth_chain_state::{BlockState, CanonicalInMemoryState, MemoryOverlayStateProviderRef};
use reth_chainspec::{ChainInfo, EthereumHardforks};
use reth_db::models::BlockNumberAddress;
@ -1324,34 +1324,20 @@ impl<N: ProviderNodeTypes> BlockReaderIdExt for ConsistentProvider<N> {
Ok(self.canonical_in_memory_state.get_finalized_header())
}
BlockNumberOrTag::Safe => Ok(self.canonical_in_memory_state.get_safe_header()),
BlockNumberOrTag::Earliest => self.header_by_number(0)?.map_or_else(
|| Ok(None),
|h| {
let sealed = h.seal_slow();
let (header, seal) = sealed.into_parts();
Ok(Some(SealedHeader::new(header, seal)))
},
),
BlockNumberOrTag::Earliest => self
.header_by_number(0)?
.map_or_else(|| Ok(None), |h| Ok(Some(SealedHeader::seal(h)))),
BlockNumberOrTag::Pending => Ok(self.canonical_in_memory_state.pending_sealed_header()),
BlockNumberOrTag::Number(num) => self.header_by_number(num)?.map_or_else(
|| Ok(None),
|h| {
let sealed = h.seal_slow();
let (header, seal) = sealed.into_parts();
Ok(Some(SealedHeader::new(header, seal)))
},
),
BlockNumberOrTag::Number(num) => self
.header_by_number(num)?
.map_or_else(|| Ok(None), |h| Ok(Some(SealedHeader::seal(h)))),
}
}
fn sealed_header_by_id(&self, id: BlockId) -> ProviderResult<Option<SealedHeader>> {
Ok(match id {
BlockId::Number(num) => self.sealed_header_by_number_or_tag(num)?,
BlockId::Hash(hash) => self.header(&hash.block_hash)?.map(|h| {
let sealed = h.seal_slow();
let (header, seal) = sealed.into_parts();
SealedHeader::new(header, seal)
}),
BlockId::Hash(hash) => self.header(&hash.block_hash)?.map(SealedHeader::seal),
})
}

View File

@ -11,7 +11,7 @@ use alloy_eips::{
eip4895::{Withdrawal, Withdrawals},
BlockHashOrNumber, BlockId, BlockNumHash, BlockNumberOrTag,
};
use alloy_primitives::{Address, BlockHash, BlockNumber, Sealable, TxHash, TxNumber, B256, U256};
use alloy_primitives::{Address, BlockHash, BlockNumber, TxHash, TxNumber, B256, U256};
use reth_blockchain_tree_api::{
error::{CanonicalError, InsertBlockError},
BlockValidationKind, BlockchainTreeEngine, BlockchainTreeViewer, CanonicalOutcome,
@ -847,34 +847,20 @@ where
BlockNumberOrTag::Latest => Ok(Some(self.chain_info.get_canonical_head())),
BlockNumberOrTag::Finalized => Ok(self.chain_info.get_finalized_header()),
BlockNumberOrTag::Safe => Ok(self.chain_info.get_safe_header()),
BlockNumberOrTag::Earliest => self.header_by_number(0)?.map_or_else(
|| Ok(None),
|h| {
let sealed = h.seal_slow();
let (header, seal) = sealed.into_parts();
Ok(Some(SealedHeader::new(header, seal)))
},
),
BlockNumberOrTag::Earliest => self
.header_by_number(0)?
.map_or_else(|| Ok(None), |h| Ok(Some(SealedHeader::seal(h)))),
BlockNumberOrTag::Pending => Ok(self.tree.pending_header()),
BlockNumberOrTag::Number(num) => self.header_by_number(num)?.map_or_else(
|| Ok(None),
|h| {
let sealed = h.seal_slow();
let (header, seal) = sealed.into_parts();
Ok(Some(SealedHeader::new(header, seal)))
},
),
BlockNumberOrTag::Number(num) => self
.header_by_number(num)?
.map_or_else(|| Ok(None), |h| Ok(Some(SealedHeader::seal(h)))),
}
}
fn sealed_header_by_id(&self, id: BlockId) -> ProviderResult<Option<SealedHeader>> {
Ok(match id {
BlockId::Number(num) => self.sealed_header_by_number_or_tag(num)?,
BlockId::Hash(hash) => self.header(&hash.block_hash)?.map(|h| {
let sealed = h.seal_slow();
let (header, seal) = sealed.into_parts();
SealedHeader::new(header, seal)
}),
BlockId::Hash(hash) => self.header(&hash.block_hash)?.map(SealedHeader::seal),
})
}

View File

@ -2,8 +2,7 @@
use crate::{DBProvider, DatabaseProviderRW, ExecutionOutcome};
use alloy_consensus::{TxLegacy, EMPTY_OMMER_ROOT_HASH};
use alloy_primitives::{
b256, hex_literal::hex, map::HashMap, Address, BlockNumber, Bytes, Log, Sealable, TxKind, B256,
U256,
b256, hex_literal::hex, map::HashMap, Address, BlockNumber, Bytes, Log, TxKind, B256, U256,
};
use alloy_eips::eip4895::{Withdrawal, Withdrawals};
@ -233,9 +232,7 @@ fn block1(number: BlockNumber) -> (SealedBlockWithSenders, ExecutionOutcome) {
header.number = number;
header.state_root = state_root;
header.parent_hash = B256::ZERO;
let sealed = header.seal_slow();
let (header, seal) = sealed.into_parts();
block.header = SealedHeader::new(header, seal);
block.header = SealedHeader::seal(header);
(SealedBlockWithSenders { block, senders: vec![Address::new([0x30; 20])] }, execution_outcome)
}
@ -299,9 +296,7 @@ fn block2(
header.state_root = state_root;
// parent_hash points to block1 hash
header.parent_hash = parent_hash;
let sealed = header.seal_slow();
let (header, seal) = sealed.into_parts();
block.header = SealedHeader::new(header, seal);
block.header = SealedHeader::seal(header);
(SealedBlockWithSenders { block, senders: vec![Address::new([0x31; 20])] }, execution_outcome)
}
@ -365,9 +360,7 @@ fn block3(
header.state_root = state_root;
// parent_hash points to block1 hash
header.parent_hash = parent_hash;
let sealed = header.seal_slow();
let (header, seal) = sealed.into_parts();
block.header = SealedHeader::new(header, seal);
block.header = SealedHeader::seal(header);
(SealedBlockWithSenders { block, senders: vec![Address::new([0x31; 20])] }, execution_outcome)
}
@ -456,9 +449,7 @@ fn block4(
header.state_root = state_root;
// parent_hash points to block1 hash
header.parent_hash = parent_hash;
let sealed = header.seal_slow();
let (header, seal) = sealed.into_parts();
block.header = SealedHeader::new(header, seal);
block.header = SealedHeader::seal(header);
(SealedBlockWithSenders { block, senders: vec![Address::new([0x31; 20])] }, execution_outcome)
}
@ -544,9 +535,7 @@ fn block5(
header.state_root = state_root;
// parent_hash points to block1 hash
header.parent_hash = parent_hash;
let sealed = header.seal_slow();
let (header, seal) = sealed.into_parts();
block.header = SealedHeader::new(header, seal);
block.header = SealedHeader::seal(header);
(SealedBlockWithSenders { block, senders: vec![Address::new([0x31; 20])] }, execution_outcome)
}

View File

@ -13,8 +13,7 @@ use alloy_eips::{
use alloy_primitives::{
keccak256,
map::{HashMap, HashSet},
Address, BlockHash, BlockNumber, Bytes, Sealable, StorageKey, StorageValue, TxHash, TxNumber,
B256, U256,
Address, BlockHash, BlockNumber, Bytes, StorageKey, StorageValue, TxHash, TxNumber, B256, U256,
};
use parking_lot::Mutex;
use reth_chainspec::{ChainInfo, ChainSpec};
@ -218,11 +217,7 @@ impl HeaderProvider for MockEthProvider {
}
fn sealed_header(&self, number: BlockNumber) -> ProviderResult<Option<SealedHeader>> {
Ok(self.header_by_number(number)?.map(|h| {
let sealed = h.seal_slow();
let (header, seal) = sealed.into_parts();
SealedHeader::new(header, seal)
}))
Ok(self.header_by_number(number)?.map(SealedHeader::seal))
}
fn sealed_headers_while(
@ -233,11 +228,7 @@ impl HeaderProvider for MockEthProvider {
Ok(self
.headers_range(range)?
.into_iter()
.map(|h| {
let sealed = h.seal_slow();
let (header, seal) = sealed.into_parts();
SealedHeader::new(header, seal)
})
.map(SealedHeader::seal)
.take_while(|h| predicate(h))
.collect())
}
@ -566,14 +557,7 @@ impl BlockReaderIdExt for MockEthProvider {
}
fn sealed_header_by_id(&self, id: BlockId) -> ProviderResult<Option<SealedHeader>> {
self.header_by_id(id)?.map_or_else(
|| Ok(None),
|h| {
let sealed = h.seal_slow();
let (header, seal) = sealed.into_parts();
Ok(Some(SealedHeader::new(header, seal)))
},
)
self.header_by_id(id)?.map_or_else(|| Ok(None), |h| Ok(Some(SealedHeader::seal(h))))
}
fn header_by_id(&self, id: BlockId) -> ProviderResult<Option<Header>> {

View File

@ -3,7 +3,7 @@ use crate::{
TransactionsProvider, WithdrawalsProvider,
};
use alloy_eips::{BlockHashOrNumber, BlockId, BlockNumberOrTag};
use alloy_primitives::{BlockNumber, Sealable, B256};
use alloy_primitives::{BlockNumber, B256};
use reth_db_models::StoredBlockBodyIndices;
use reth_primitives::{
Block, BlockWithSenders, Header, Receipt, SealedBlock, SealedBlockWithSenders, SealedHeader,
@ -243,14 +243,7 @@ pub trait BlockReaderIdExt: BlockReader + ReceiptProviderIdExt {
) -> ProviderResult<Option<SealedHeader>> {
self.convert_block_number(id)?
.map_or_else(|| Ok(None), |num| self.header_by_hash_or_number(num.into()))?
.map_or_else(
|| Ok(None),
|h| {
let sealed = h.seal_slow();
let (header, seal) = sealed.into_parts();
Ok(Some(SealedHeader::new(header, seal)))
},
)
.map_or_else(|| Ok(None), |h| Ok(Some(SealedHeader::seal(h))))
}
/// Returns the sealed header with the matching `BlockId` from the database.