Skip to main content

reth_execution_types/
lib.rs

1//! Commonly used types for (EVM) block execution.
2
3#![doc(
4    html_logo_url = "https://raw.githubusercontent.com/paradigmxyz/reth/main/assets/reth-docs.png",
5    html_favicon_url = "https://avatars0.githubusercontent.com/u/97369466?s=256",
6    issue_tracker_base_url = "https://github.com/paradigmxyz/reth/issues/"
7)]
8#![cfg_attr(not(test), warn(unused_crate_dependencies))]
9#![cfg_attr(docsrs, feature(doc_cfg))]
10#![cfg_attr(not(feature = "std"), no_std)]
11
12extern crate alloc;
13
14/// Receives per-transaction state changes streamed from block execution.
15pub trait OnStateHook: Send + 'static {
16    /// Observes one committed state update.
17    fn on_state(&mut self, state: StateUpdate);
18}
19
20impl<F> OnStateHook for F
21where
22    F: FnMut(StateUpdate) + Send + 'static,
23{
24    fn on_state(&mut self, state: StateUpdate) {
25        self(state)
26    }
27}
28
29mod compat;
30pub use compat::*;
31
32mod bal;
33pub use bal::*;
34
35mod chain;
36pub use chain::*;
37
38mod execute;
39pub use execute::*;
40
41mod execution_outcome;
42pub use execution_outcome::*;
43
44/// Bincode-compatible serde implementations for commonly used types for (EVM) block execution.
45///
46/// `bincode` crate doesn't work with optionally serializable serde fields, but some of the
47/// execution types require optional serialization for RPC compatibility. This module makes so that
48/// all fields are serialized.
49///
50/// Read more: <https://github.com/bincode-org/bincode/issues/326>
51#[cfg(feature = "serde-bincode-compat")]
52pub mod serde_bincode_compat {
53    pub use super::{chain::serde_bincode_compat::*, execution_outcome::serde_bincode_compat::*};
54}