Trait BlockExecutor
pub trait BlockExecutor {
type Transaction;
type Receipt;
type Evm: Evm;
// Required methods
fn apply_pre_execution_changes(&mut self) -> Result<(), BlockExecutionError>;
fn execute_transaction_with_result_closure(
&mut self,
tx: Recovered<&Self::Transaction>,
f: impl FnOnce(&ExecutionResult<<Self::Evm as Evm>::HaltReason>),
) -> Result<u64, BlockExecutionError>;
fn finish(
self,
) -> Result<(Self::Evm, BlockExecutionResult<Self::Receipt>), BlockExecutionError>;
fn set_state_hook(&mut self, hook: Option<Box<dyn OnStateHook>>);
fn evm_mut(&mut self) -> &mut Self::Evm;
// Provided methods
fn execute_transaction(
&mut self,
tx: Recovered<&Self::Transaction>,
) -> Result<u64, BlockExecutionError> { ... }
fn apply_post_execution_changes(
self,
) -> Result<BlockExecutionResult<Self::Receipt>, BlockExecutionError>
where Self: Sized { ... }
fn with_state_hook(self, hook: Option<Box<dyn OnStateHook>>) -> Self
where Self: Sized { ... }
}
evm
only.Expand description
A type that knows how to execute a single block.
The current abstraction assumes that block execution consists of the following steps:
- Apply pre-execution changes. Those might include system calls, irregular state transitions (DAO fork), etc.
- Apply block transactions to the state.
- Apply post-execution changes and finalize the state. This might include other system calls, block rewards, etc.
The output of BlockExecutor::finish
is a BlockExecutionResult
which contains all
relevant information about the block execution.
Required Associated Types§
type Transaction
type Transaction
Input transaction type.
type Receipt
type Receipt
Receipt type this executor produces.
Required Methods§
fn apply_pre_execution_changes(&mut self) -> Result<(), BlockExecutionError>
fn apply_pre_execution_changes(&mut self) -> Result<(), BlockExecutionError>
Applies any necessary changes before executing the block’s transactions.
fn execute_transaction_with_result_closure(
&mut self,
tx: Recovered<&Self::Transaction>,
f: impl FnOnce(&ExecutionResult<<Self::Evm as Evm>::HaltReason>),
) -> Result<u64, BlockExecutionError>
fn execute_transaction_with_result_closure( &mut self, tx: Recovered<&Self::Transaction>, f: impl FnOnce(&ExecutionResult<<Self::Evm as Evm>::HaltReason>), ) -> Result<u64, BlockExecutionError>
Executes a single transaction and applies execution result to internal state. Invokes the
given closure with an internal [ExecutionResult
] produced by the EVM.
fn finish(
self,
) -> Result<(Self::Evm, BlockExecutionResult<Self::Receipt>), BlockExecutionError>
fn finish( self, ) -> Result<(Self::Evm, BlockExecutionResult<Self::Receipt>), BlockExecutionError>
Applies any necessary changes after executing the block’s transactions, completes execution and returns the underlying EVM along with execution result.
fn set_state_hook(&mut self, hook: Option<Box<dyn OnStateHook>>)
fn set_state_hook(&mut self, hook: Option<Box<dyn OnStateHook>>)
Sets a hook to be called after each state change during execution.
Provided Methods§
fn execute_transaction(
&mut self,
tx: Recovered<&Self::Transaction>,
) -> Result<u64, BlockExecutionError>
fn execute_transaction( &mut self, tx: Recovered<&Self::Transaction>, ) -> Result<u64, BlockExecutionError>
Executes a single transaction and applies execution result to internal state.
Returns the gas used by the transaction.
fn apply_post_execution_changes(
self,
) -> Result<BlockExecutionResult<Self::Receipt>, BlockExecutionError>where
Self: Sized,
fn apply_post_execution_changes(
self,
) -> Result<BlockExecutionResult<Self::Receipt>, BlockExecutionError>where
Self: Sized,
A helper to invoke BlockExecutor::finish
returning only the BlockExecutionResult
.
fn with_state_hook(self, hook: Option<Box<dyn OnStateHook>>) -> Selfwhere
Self: Sized,
fn with_state_hook(self, hook: Option<Box<dyn OnStateHook>>) -> Selfwhere
Self: Sized,
A builder-style helper to invoke BlockExecutor::set_state_hook
.
Dyn Compatibility§
This trait is not dyn compatible.
In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.