alloy_evm/block/
state_hook.rs1use revm::state::EvmState;
2
3pub trait OnStateHook: Send + 'static {
5 fn on_state(&mut self, source: StateChangeSource, state: &EvmState);
7}
8
9#[derive(Debug, Clone, Copy)]
11pub enum StateChangeSource {
12 Transaction(usize),
14 PreBlock(StateChangePreBlockSource),
16 PostBlock(StateChangePostBlockSource),
18}
19
20#[derive(Debug, Clone, Copy)]
22pub enum StateChangePreBlockSource {
23 BlockHashesContract,
25 BeaconRootContract,
27 WithdrawalRequestsContract,
29}
30
31#[derive(Debug, Clone, Copy)]
33pub enum StateChangePostBlockSource {
34 BalanceIncrements,
36 WithdrawalRequestsContract,
38 ConsolidationRequestsContract,
40}
41
42impl<F> OnStateHook for F
43where
44 F: FnMut(StateChangeSource, &EvmState) + Send + 'static,
45{
46 fn on_state(&mut self, source: StateChangeSource, state: &EvmState) {
47 self(source, state)
48 }
49}
50
51#[derive(Default, Debug, Clone)]
53#[non_exhaustive]
54pub struct NoopHook;
55
56impl OnStateHook for NoopHook {
57 fn on_state(&mut self, _source: StateChangeSource, _state: &EvmState) {}
58}