pub struct Evm {
pub db: GeneralizedDatabase,
pub vm_type: VMType,
pub crypto: Arc<dyn Crypto>,
}Fields§
§db: GeneralizedDatabase§vm_type: VMType§crypto: Arc<dyn Crypto>Implementations§
Source§impl Evm
impl Evm
Sourcepub fn trace_tx_calls(
&mut self,
block: &Block,
tx_index: usize,
only_top_call: bool,
with_log: bool,
) -> Result<CallTrace, EvmError>
pub fn trace_tx_calls( &mut self, block: &Block, tx_index: usize, only_top_call: bool, with_log: bool, ) -> Result<CallTrace, EvmError>
Runs a single tx with the call tracer and outputs its trace. Assumes that the received state already contains changes from previous blocks and other transactions within its block. Wraps LEVM::trace_tx_calls depending on the feature.
Sourcepub fn trace_tx_prestate(
&mut self,
block: &Block,
tx_index: usize,
diff_mode: bool,
include_empty: bool,
) -> Result<PrestateResult, EvmError>
pub fn trace_tx_prestate( &mut self, block: &Block, tx_index: usize, diff_mode: bool, include_empty: bool, ) -> Result<PrestateResult, EvmError>
Executes a single tx and captures the pre/post account state (prestateTracer). Assumes that the received state already contains changes from previous transactions.
Sourcepub fn trace_tx_opcodes(
&mut self,
block: &Block,
tx_index: usize,
cfg: OpcodeTracerConfig,
) -> Result<OpcodeTraceResult, EvmError>
pub fn trace_tx_opcodes( &mut self, block: &Block, tx_index: usize, cfg: OpcodeTracerConfig, ) -> Result<OpcodeTraceResult, EvmError>
Executes a single tx and captures the per-opcode (EIP-3155) trace. Assumes that the received state already contains changes from previous transactions.
Sourcepub fn rerun_block(
&mut self,
block: &Block,
stop_index: Option<usize>,
) -> Result<(), EvmError>
pub fn rerun_block( &mut self, block: &Block, stop_index: Option<usize>, ) -> Result<(), EvmError>
Reruns the given block, saving the changes on the state, doesn’t output any results or receipts.
If the optional argument stop_index is set, the run will stop just before executing the transaction at that index
and won’t process the withdrawals afterwards.
WrapsLEVM::rerun_block depending on the feature.
Source§impl Evm
impl Evm
Sourcepub fn new_for_l1(
db: impl VmDatabase + 'static,
crypto: Arc<dyn Crypto>,
) -> Self
pub fn new_for_l1( db: impl VmDatabase + 'static, crypto: Arc<dyn Crypto>, ) -> Self
Creates a new EVM instance, but with block hash in zero, so if we want to execute a block or transaction we have to set it.
pub fn new_for_l2( db: impl VmDatabase + 'static, fee_config: FeeConfig, crypto: Arc<dyn Crypto>, ) -> Result<Self, EvmError>
pub fn new_from_db_for_l1( store: Arc<impl LevmDatabase + 'static>, crypto: Arc<dyn Crypto>, ) -> Self
pub fn new_from_db_for_l2( store: Arc<impl LevmDatabase + 'static>, fee_config: FeeConfig, crypto: Arc<dyn Crypto>, ) -> Self
Sourcepub fn execute_block(
&mut self,
block: &Block,
) -> Result<(BlockExecutionResult, Option<BlockAccessList>), EvmError>
pub fn execute_block( &mut self, block: &Block, ) -> Result<(BlockExecutionResult, Option<BlockAccessList>), EvmError>
Execute a block and return the execution result.
Also records and returns the Block Access List (EIP-7928) for Amsterdam+ forks.
The BAL will be None for pre-Amsterdam forks.
pub fn execute_block_pipeline( &mut self, block: &Block, merkleizer: Option<Sender<Vec<AccountUpdate>>>, queue_length: &AtomicUsize, bal: Option<&BlockAccessList>, bal_parallel_exec_enabled: bool, ) -> Result<(BlockExecutionResult, Option<BlockAccessList>), EvmError>
Sourcepub fn execute_tx(
&mut self,
tx: &Transaction,
block_header: &BlockHeader,
cumulative_gas_spent: &mut u64,
sender: Address,
) -> Result<(Receipt, ExecutionReport), EvmError>
pub fn execute_tx( &mut self, tx: &Transaction, block_header: &BlockHeader, cumulative_gas_spent: &mut u64, sender: Address, ) -> Result<(Receipt, ExecutionReport), EvmError>
Wraps LEVM::execute_tx.
Updates remaining_gas (pre-refund) for block gas accounting and
cumulative_gas_spent (post-refund) for receipt cumulative tracking.
Returns (Receipt, gas_spent) where gas_spent is post-refund for block value calculation.
pub fn undo_last_tx(&mut self) -> Result<(), EvmError>
Sourcepub fn apply_system_calls(
&mut self,
block_header: &BlockHeader,
) -> Result<(), EvmError>
pub fn apply_system_calls( &mut self, block_header: &BlockHeader, ) -> Result<(), EvmError>
Wraps LEVM::beacon_root_contract_call, LEVM::process_block_hash_history. This function is used to run/apply all the system contracts to the state.
Sourcepub fn get_state_transitions(&mut self) -> Result<Vec<AccountUpdate>, EvmError>
pub fn get_state_transitions(&mut self) -> Result<Vec<AccountUpdate>, EvmError>
Wraps the LEVM::get_state_transitions which gathers the information from a [CacheDB].
The output is Vec<AccountUpdate>.
Sourcepub fn process_withdrawals(
&mut self,
withdrawals: &[Withdrawal],
) -> Result<(), EvmError>
pub fn process_withdrawals( &mut self, withdrawals: &[Withdrawal], ) -> Result<(), EvmError>
Wraps LEVM::process_withdrawals. Applies the withdrawals to the state or the block_chache if using LEVM.
pub fn extract_requests( &mut self, receipts: &[Receipt], header: &BlockHeader, ) -> Result<Vec<Requests>, EvmError>
Sourcepub fn take_bal(&mut self) -> Option<BlockAccessList>
pub fn take_bal(&mut self) -> Option<BlockAccessList>
Takes the Block Access List (BAL) from the database if recording was enabled.
Returns None if BAL recording was not enabled.
Sourcepub fn enable_bal_recording(&mut self)
pub fn enable_bal_recording(&mut self)
Enables BAL (Block Access List) recording for EIP-7928.
Sourcepub fn set_bal_index(&mut self, index: u32)
pub fn set_bal_index(&mut self, index: u32)
Sets the current block access index for BAL recording per EIP-7928 spec (uint32).
pub fn simulate_tx_from_generic( &mut self, tx: &GenericTransaction, header: &BlockHeader, ) -> Result<ExecutionResult, EvmError>
pub fn create_access_list( &mut self, tx: &GenericTransaction, header: &BlockHeader, ) -> Result<(u64, AccessList, Option<String>), EvmError>
Trait Implementations§
Auto Trait Implementations§
impl !RefUnwindSafe for Evm
impl !UnwindSafe for Evm
impl Freeze for Evm
impl Send for Evm
impl Sync for Evm
impl Unpin for Evm
impl UnsafeUnpin for Evm
Blanket Implementations§
Source§impl<T> ArchivePointee for T
impl<T> ArchivePointee for T
Source§type ArchivedMetadata = ()
type ArchivedMetadata = ()
Source§fn pointer_metadata(
_: &<T as ArchivePointee>::ArchivedMetadata,
) -> <T as Pointee>::Metadata
fn pointer_metadata( _: &<T as ArchivePointee>::ArchivedMetadata, ) -> <T as Pointee>::Metadata
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§impl<T> LayoutRaw for T
impl<T> LayoutRaw for T
Source§fn layout_raw(_: <T as Pointee>::Metadata) -> Result<Layout, LayoutError>
fn layout_raw(_: <T as Pointee>::Metadata) -> Result<Layout, LayoutError>
Source§impl<T, N1, N2> Niching<NichedOption<T, N1>> for N2
impl<T, N1, N2> Niching<NichedOption<T, N1>> for N2
Source§unsafe fn is_niched(niched: *const NichedOption<T, N1>) -> bool
unsafe fn is_niched(niched: *const NichedOption<T, N1>) -> bool
Source§fn resolve_niched(out: Place<NichedOption<T, N1>>)
fn resolve_niched(out: Place<NichedOption<T, N1>>)
out indicating that a T is niched.