reth_engine_primitives/
invalid_block_hook.rs

1use alloy_primitives::B256;
2use reth_execution_types::BlockExecutionOutput;
3use reth_primitives_traits::{NodePrimitives, RecoveredBlock, SealedHeader};
4use reth_trie::updates::TrieUpdates;
5
6/// An invalid block hook.
7pub trait InvalidBlockHook<N: NodePrimitives>: Send + Sync {
8    /// Invoked when an invalid block is encountered.
9    fn on_invalid_block(
10        &self,
11        parent_header: &SealedHeader<N::BlockHeader>,
12        block: &RecoveredBlock<N::Block>,
13        output: &BlockExecutionOutput<N::Receipt>,
14        trie_updates: Option<(&TrieUpdates, B256)>,
15    );
16}
17
18impl<F, N> InvalidBlockHook<N> for F
19where
20    N: NodePrimitives,
21    F: Fn(
22            &SealedHeader<N::BlockHeader>,
23            &RecoveredBlock<N::Block>,
24            &BlockExecutionOutput<N::Receipt>,
25            Option<(&TrieUpdates, B256)>,
26        ) + Send
27        + Sync,
28{
29    fn on_invalid_block(
30        &self,
31        parent_header: &SealedHeader<N::BlockHeader>,
32        block: &RecoveredBlock<N::Block>,
33        output: &BlockExecutionOutput<N::Receipt>,
34        trie_updates: Option<(&TrieUpdates, B256)>,
35    ) {
36        self(parent_header, block, output, trie_updates)
37    }
38}