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}