reth_evm/
engine.rs

1use crate::{execute::ExecutableTxFor, ConfigureEvm, EvmEnvFor, ExecutionCtxFor};
2
3/// [`ConfigureEvm`] extension providing methods for executing payloads.
4pub trait ConfigureEngineEvm<ExecutionData>: ConfigureEvm {
5    /// Returns an [`EvmEnvFor`] for the given payload.
6    fn evm_env_for_payload(&self, payload: &ExecutionData) -> EvmEnvFor<Self>;
7
8    /// Returns an [`ExecutionCtxFor`] for the given payload.
9    fn context_for_payload<'a>(&self, payload: &'a ExecutionData) -> ExecutionCtxFor<'a, Self>;
10
11    /// Returns an [`ExecutableTxIterator`] for the given payload.
12    fn tx_iterator_for_payload(&self, payload: &ExecutionData) -> impl ExecutableTxIterator<Self>;
13}
14
15/// Iterator over executable transactions.
16pub trait ExecutableTxIterator<Evm: ConfigureEvm>:
17    Iterator<Item = Result<Self::Tx, Self::Error>> + Send + 'static
18{
19    /// The executable transaction type iterator yields.
20    type Tx: ExecutableTxFor<Evm> + Clone + Send + 'static;
21    /// Errors that may occur while recovering or decoding transactions.
22    type Error: core::error::Error + Send + Sync + 'static;
23}
24
25impl<Evm: ConfigureEvm, Tx, Err, T> ExecutableTxIterator<Evm> for T
26where
27    Tx: ExecutableTxFor<Evm> + Clone + Send + 'static,
28    Err: core::error::Error + Send + Sync + 'static,
29    T: Iterator<Item = Result<Tx, Err>> + Send + 'static,
30{
31    type Tx = Tx;
32    type Error = Err;
33}