Use the block header to compute the canonical_root (#5003)
This commit is contained in:
parent
a3fb27c99b
commit
a3a370302a
@ -780,7 +780,10 @@ impl<T: BeaconChainTypes> GossipVerifiedBlock<T> {
|
||||
// it to the slasher if an error occurs, because that's the end of this block's journey,
|
||||
// and it could be a repeat proposal (a likely cause for slashing!).
|
||||
let header = block.signed_block_header();
|
||||
Self::new_without_slasher_checks(block, chain).map_err(|e| {
|
||||
// The `SignedBeaconBlock` and `SignedBeaconBlockHeader` have the same canonical root,
|
||||
// but it's way quicker to calculate root of the header since the hash of the tree rooted
|
||||
// at `BeaconBlockBody` is already computed in the header.
|
||||
Self::new_without_slasher_checks(block, &header, chain).map_err(|e| {
|
||||
process_block_slash_info::<_, BlockError<T::EthSpec>>(
|
||||
chain,
|
||||
BlockSlashInfo::from_early_error_block(header, e),
|
||||
@ -791,6 +794,7 @@ impl<T: BeaconChainTypes> GossipVerifiedBlock<T> {
|
||||
/// As for new, but doesn't pass the block to the slasher.
|
||||
fn new_without_slasher_checks(
|
||||
block: Arc<SignedBeaconBlock<T::EthSpec>>,
|
||||
block_header: &SignedBeaconBlockHeader,
|
||||
chain: &BeaconChain<T>,
|
||||
) -> Result<Self, BlockError<T::EthSpec>> {
|
||||
// Ensure the block is the correct structure for the fork at `block.slot()`.
|
||||
@ -810,7 +814,7 @@ impl<T: BeaconChainTypes> GossipVerifiedBlock<T> {
|
||||
});
|
||||
}
|
||||
|
||||
let block_root = get_block_root(&block);
|
||||
let block_root = get_block_header_root(block_header);
|
||||
|
||||
// Disallow blocks that conflict with the anchor (weak subjectivity checkpoint), if any.
|
||||
check_block_against_anchor_slot(block.message(), chain)?;
|
||||
@ -1771,6 +1775,19 @@ pub fn get_block_root<E: EthSpec>(block: &SignedBeaconBlock<E>) -> Hash256 {
|
||||
block_root
|
||||
}
|
||||
|
||||
/// Returns the canonical root of the given `block_header`.
|
||||
///
|
||||
/// Use this function to ensure that we report the block hashing time Prometheus metric.
|
||||
pub fn get_block_header_root(block_header: &SignedBeaconBlockHeader) -> Hash256 {
|
||||
let block_root_timer = metrics::start_timer(&metrics::BLOCK_HEADER_PROCESSING_BLOCK_ROOT);
|
||||
|
||||
let block_root = block_header.message.canonical_root();
|
||||
|
||||
metrics::stop_timer(block_root_timer);
|
||||
|
||||
block_root
|
||||
}
|
||||
|
||||
/// Verify the parent of `block` is known, returning some information about the parent block from
|
||||
/// fork choice.
|
||||
#[allow(clippy::type_complexity)]
|
||||
|
@ -40,6 +40,10 @@ lazy_static! {
|
||||
"beacon_block_processing_block_root_seconds",
|
||||
"Time spent calculating the block root when processing a block."
|
||||
);
|
||||
pub static ref BLOCK_HEADER_PROCESSING_BLOCK_ROOT: Result<Histogram> = try_create_histogram(
|
||||
"beacon_block_header_processing_block_root_seconds",
|
||||
"Time spent calculating the block root for a beacon block header."
|
||||
);
|
||||
pub static ref BLOCK_PROCESSING_BLOB_ROOT: Result<Histogram> = try_create_histogram(
|
||||
"beacon_block_processing_blob_root_seconds",
|
||||
"Time spent calculating the blob root when processing a block."
|
||||
|
Loading…
Reference in New Issue
Block a user