Struct EvmBuilder
pub struct EvmBuilder<'a, BuilderStage, EXT, DB>where
DB: Database,{ /* private fields */ }
Expand description
Evm Builder allows building or modifying EVM. Note that some of the methods that changes underlying structures will reset the registered handler to default mainnet.
Implementations§
§impl<'a, EXT, DB> EvmBuilder<'a, SetGenericStage, EXT, DB>where
DB: Database,
impl<'a, EXT, DB> EvmBuilder<'a, SetGenericStage, EXT, DB>where
DB: Database,
pub fn with_empty_db(
self,
) -> EvmBuilder<'a, SetGenericStage, EXT, EmptyDBTyped<Infallible>>
pub fn with_empty_db( self, ) -> EvmBuilder<'a, SetGenericStage, EXT, EmptyDBTyped<Infallible>>
pub fn with_db<ODB>(self, db: ODB) -> EvmBuilder<'a, SetGenericStage, EXT, ODB>where
ODB: Database,
pub fn with_db<ODB>(self, db: ODB) -> EvmBuilder<'a, SetGenericStage, EXT, ODB>where
ODB: Database,
pub fn with_ref_db<ODB>(
self,
db: ODB,
) -> EvmBuilder<'a, SetGenericStage, EXT, WrapDatabaseRef<ODB>>where
ODB: DatabaseRef,
pub fn with_ref_db<ODB>(
self,
db: ODB,
) -> EvmBuilder<'a, SetGenericStage, EXT, WrapDatabaseRef<ODB>>where
ODB: DatabaseRef,
Sets the DatabaseRef
that will be used by Evm
.
pub fn with_external_context<OEXT>(
self,
external: OEXT,
) -> EvmBuilder<'a, SetGenericStage, OEXT, DB>
pub fn with_external_context<OEXT>( self, external: OEXT, ) -> EvmBuilder<'a, SetGenericStage, OEXT, DB>
Sets the external context that will be used by Evm
.
pub fn with_env_with_handler_cfg(
self,
env_with_handler_cfg: EnvWithHandlerCfg,
) -> EvmBuilder<'a, HandlerStage, EXT, DB>
pub fn with_env_with_handler_cfg( self, env_with_handler_cfg: EnvWithHandlerCfg, ) -> EvmBuilder<'a, HandlerStage, EXT, DB>
Sets Builder with EnvWithHandlerCfg
.
pub fn with_context_with_handler_cfg<OEXT, ODB>(
self,
context_with_handler_cfg: ContextWithHandlerCfg<OEXT, ODB>,
) -> EvmBuilder<'a, HandlerStage, OEXT, ODB>where
ODB: Database,
pub fn with_context_with_handler_cfg<OEXT, ODB>(
self,
context_with_handler_cfg: ContextWithHandlerCfg<OEXT, ODB>,
) -> EvmBuilder<'a, HandlerStage, OEXT, ODB>where
ODB: Database,
Sets Builder with ContextWithHandlerCfg
.
pub fn with_cfg_env_with_handler_cfg(
self,
cfg_env_and_spec_id: CfgEnvWithHandlerCfg,
) -> EvmBuilder<'a, HandlerStage, EXT, DB>
pub fn with_cfg_env_with_handler_cfg( self, cfg_env_and_spec_id: CfgEnvWithHandlerCfg, ) -> EvmBuilder<'a, HandlerStage, EXT, DB>
Sets Builder with CfgEnvWithHandlerCfg
.
pub fn with_handler_cfg(
self,
handler_cfg: HandlerCfg,
) -> EvmBuilder<'a, HandlerStage, EXT, DB>
pub fn with_handler_cfg( self, handler_cfg: HandlerCfg, ) -> EvmBuilder<'a, HandlerStage, EXT, DB>
Sets Builder with HandlerCfg
pub fn optimism(self) -> EvmBuilder<'a, HandlerStage, EXT, DB>
Available on crate feature optimism
only.
pub fn optimism(self) -> EvmBuilder<'a, HandlerStage, EXT, DB>
optimism
only.Sets the Optimism handler with latest spec.
If optimism-default-handler
feature is enabled this is not needed.
§impl<'a, EXT, DB> EvmBuilder<'a, HandlerStage, EXT, DB>where
DB: Database,
impl<'a, EXT, DB> EvmBuilder<'a, HandlerStage, EXT, DB>where
DB: Database,
pub fn new(evm: Evm<'a, EXT, DB>) -> EvmBuilder<'a, HandlerStage, EXT, DB>
pub fn new(evm: Evm<'a, EXT, DB>) -> EvmBuilder<'a, HandlerStage, EXT, DB>
Creates new builder from Evm, Evm is consumed and all field are moved to Builder. It will preserve set handler and context.
Builder is in HandlerStage and both database and external are set.
pub fn reset_handler_with_empty_db(
self,
) -> EvmBuilder<'a, HandlerStage, EXT, EmptyDBTyped<Infallible>>
pub fn reset_handler_with_empty_db( self, ) -> EvmBuilder<'a, HandlerStage, EXT, EmptyDBTyped<Infallible>>
pub fn reset_handler_with_db<ODB>(
self,
db: ODB,
) -> EvmBuilder<'a, SetGenericStage, EXT, ODB>where
ODB: Database,
pub fn reset_handler_with_db<ODB>(
self,
db: ODB,
) -> EvmBuilder<'a, SetGenericStage, EXT, ODB>where
ODB: Database,
pub fn reset_handler_with_ref_db<ODB>(
self,
db: ODB,
) -> EvmBuilder<'a, SetGenericStage, EXT, WrapDatabaseRef<ODB>>where
ODB: DatabaseRef,
pub fn reset_handler_with_ref_db<ODB>(
self,
db: ODB,
) -> EvmBuilder<'a, SetGenericStage, EXT, WrapDatabaseRef<ODB>>where
ODB: DatabaseRef,
Resets Handler
and sets the DatabaseRef
that will be used by Evm
and resets the Handler
to default mainnet.
pub fn reset_handler_with_external_context<OEXT>(
self,
external: OEXT,
) -> EvmBuilder<'a, SetGenericStage, OEXT, DB>
pub fn reset_handler_with_external_context<OEXT>( self, external: OEXT, ) -> EvmBuilder<'a, SetGenericStage, OEXT, DB>
§impl<'a, BuilderStage, EXT, DB> EvmBuilder<'a, BuilderStage, EXT, DB>where
DB: Database,
impl<'a, BuilderStage, EXT, DB> EvmBuilder<'a, BuilderStage, EXT, DB>where
DB: Database,
pub fn with_handler(
self,
handler: Handler<'a, Context<EXT, DB>, EXT, DB>,
) -> EvmBuilder<'a, BuilderStage, EXT, DB>
pub fn with_handler( self, handler: Handler<'a, Context<EXT, DB>, EXT, DB>, ) -> EvmBuilder<'a, BuilderStage, EXT, DB>
This modifies the EvmBuilder to make it easy to construct an Evm
with a specific
handler.
§Example
use revm::{EvmBuilder, Handler, primitives::{SpecId, HandlerCfg}};
use revm_interpreter::primitives::CancunSpec;
let builder = EvmBuilder::default();
// get the desired handler
let mainnet = Handler::mainnet::<CancunSpec>();
let builder = builder.with_handler(mainnet);
// build the EVM
let evm = builder.build();
pub fn append_handler_register(
self,
handle_register: for<'a> fn(_: &mut Handler<'a, Context<EXT, DB>, EXT, DB>),
) -> EvmBuilder<'a, HandlerStage, EXT, DB>
pub fn append_handler_register( self, handle_register: for<'a> fn(_: &mut Handler<'a, Context<EXT, DB>, EXT, DB>), ) -> EvmBuilder<'a, HandlerStage, EXT, DB>
Register Handler that modifies the behavior of EVM.
Check Handler
for more information.
When called, EvmBuilder will transition from SetGenericStage to HandlerStage.
pub fn append_handler_register_box(
self,
handle_register: Box<dyn for<'e> Fn(&mut Handler<'e, Context<EXT, DB>, EXT, DB>) + 'a>,
) -> EvmBuilder<'a, HandlerStage, EXT, DB>
pub fn append_handler_register_box( self, handle_register: Box<dyn for<'e> Fn(&mut Handler<'e, Context<EXT, DB>, EXT, DB>) + 'a>, ) -> EvmBuilder<'a, HandlerStage, EXT, DB>
Register Handler that modifies the behavior of EVM.
Check Handler
for more information.
When called, EvmBuilder will transition from SetGenericStage to HandlerStage.
pub fn with_spec_id(
self,
spec_id: SpecId,
) -> EvmBuilder<'a, BuilderStage, EXT, DB>
pub fn with_spec_id( self, spec_id: SpecId, ) -> EvmBuilder<'a, BuilderStage, EXT, DB>
Sets specification Id , that will mark the version of EVM. It represent the hard fork of ethereum.
§Note
When changed it will reapply all handle registers, this can be expensive operation depending on registers.
pub fn modify_db(
self,
f: impl FnOnce(&mut DB),
) -> EvmBuilder<'a, BuilderStage, EXT, DB>
pub fn modify_db( self, f: impl FnOnce(&mut DB), ) -> EvmBuilder<'a, BuilderStage, EXT, DB>
Allows modification of Evm Database.
pub fn modify_external_context(
self,
f: impl FnOnce(&mut EXT),
) -> EvmBuilder<'a, BuilderStage, EXT, DB>
pub fn modify_external_context( self, f: impl FnOnce(&mut EXT), ) -> EvmBuilder<'a, BuilderStage, EXT, DB>
Allows modification of external context.
pub fn modify_env(
self,
f: impl FnOnce(&mut Box<Env>),
) -> EvmBuilder<'a, BuilderStage, EXT, DB>
pub fn modify_env( self, f: impl FnOnce(&mut Box<Env>), ) -> EvmBuilder<'a, BuilderStage, EXT, DB>
Allows modification of Evm Environment.
pub fn with_env(self, env: Box<Env>) -> EvmBuilder<'a, BuilderStage, EXT, DB>
pub fn with_env(self, env: Box<Env>) -> EvmBuilder<'a, BuilderStage, EXT, DB>
Sets Evm Environment.
pub fn modify_tx_env(
self,
f: impl FnOnce(&mut TxEnv),
) -> EvmBuilder<'a, BuilderStage, EXT, DB>
pub fn modify_tx_env( self, f: impl FnOnce(&mut TxEnv), ) -> EvmBuilder<'a, BuilderStage, EXT, DB>
Allows modification of Evm’s Transaction Environment.
pub fn with_tx_env(self, tx_env: TxEnv) -> EvmBuilder<'a, BuilderStage, EXT, DB>
pub fn with_tx_env(self, tx_env: TxEnv) -> EvmBuilder<'a, BuilderStage, EXT, DB>
Sets Evm’s Transaction Environment.
pub fn modify_block_env(
self,
f: impl FnOnce(&mut BlockEnv),
) -> EvmBuilder<'a, BuilderStage, EXT, DB>
pub fn modify_block_env( self, f: impl FnOnce(&mut BlockEnv), ) -> EvmBuilder<'a, BuilderStage, EXT, DB>
Allows modification of Evm’s Block Environment.
pub fn with_block_env(
self,
block_env: BlockEnv,
) -> EvmBuilder<'a, BuilderStage, EXT, DB>
pub fn with_block_env( self, block_env: BlockEnv, ) -> EvmBuilder<'a, BuilderStage, EXT, DB>
Sets Evm’s Block Environment.
pub fn modify_cfg_env(
self,
f: impl FnOnce(&mut CfgEnv),
) -> EvmBuilder<'a, BuilderStage, EXT, DB>
pub fn modify_cfg_env( self, f: impl FnOnce(&mut CfgEnv), ) -> EvmBuilder<'a, BuilderStage, EXT, DB>
Allows modification of Evm’s Config Environment.
pub fn with_clear_env(self) -> EvmBuilder<'a, BuilderStage, EXT, DB>
pub fn with_clear_env(self) -> EvmBuilder<'a, BuilderStage, EXT, DB>
Clears Environment of EVM.
pub fn with_clear_tx_env(self) -> EvmBuilder<'a, BuilderStage, EXT, DB>
pub fn with_clear_tx_env(self) -> EvmBuilder<'a, BuilderStage, EXT, DB>
Clears Transaction environment of EVM.
pub fn with_clear_block_env(self) -> EvmBuilder<'a, BuilderStage, EXT, DB>
pub fn with_clear_block_env(self) -> EvmBuilder<'a, BuilderStage, EXT, DB>
Clears Block environment of EVM.
pub fn reset_handler(self) -> EvmBuilder<'a, BuilderStage, EXT, DB>
pub fn reset_handler(self) -> EvmBuilder<'a, BuilderStage, EXT, DB>
Resets Handler
to default mainnet.
Trait Implementations§
§impl<'a> Default for EvmBuilder<'a, SetGenericStage, (), EmptyDBTyped<Infallible>>
impl<'a> Default for EvmBuilder<'a, SetGenericStage, (), EmptyDBTyped<Infallible>>
§fn default() -> EvmBuilder<'a, SetGenericStage, (), EmptyDBTyped<Infallible>>
fn default() -> EvmBuilder<'a, SetGenericStage, (), EmptyDBTyped<Infallible>>
Auto Trait Implementations§
impl<'a, BuilderStage, EXT, DB> Freeze for EvmBuilder<'a, BuilderStage, EXT, DB>
impl<'a, BuilderStage, EXT, DB> !RefUnwindSafe for EvmBuilder<'a, BuilderStage, EXT, DB>
impl<'a, BuilderStage, EXT, DB> !Send for EvmBuilder<'a, BuilderStage, EXT, DB>
impl<'a, BuilderStage, EXT, DB> !Sync for EvmBuilder<'a, BuilderStage, EXT, DB>
impl<'a, BuilderStage, EXT, DB> Unpin for EvmBuilder<'a, BuilderStage, EXT, DB>
impl<'a, BuilderStage, EXT, DB> !UnwindSafe for EvmBuilder<'a, BuilderStage, EXT, DB>
Blanket Implementations§
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
§impl<T> Conv for T
impl<T> Conv for T
§impl<T> FmtForward for T
impl<T> FmtForward for T
§fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
self
to use its Binary
implementation when Debug
-formatted.§fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
self
to use its Display
implementation when
Debug
-formatted.§fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
self
to use its LowerExp
implementation when
Debug
-formatted.§fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
self
to use its LowerHex
implementation when
Debug
-formatted.§fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
self
to use its Octal
implementation when Debug
-formatted.§fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
self
to use its Pointer
implementation when
Debug
-formatted.§fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
self
to use its UpperExp
implementation when
Debug
-formatted.§fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
self
to use its UpperHex
implementation when
Debug
-formatted.§fn fmt_list(self) -> FmtList<Self>where
&'a Self: for<'a> IntoIterator,
fn fmt_list(self) -> FmtList<Self>where
&'a Self: for<'a> IntoIterator,
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> 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 more§impl<T> Pipe for Twhere
T: ?Sized,
impl<T> Pipe for Twhere
T: ?Sized,
§fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
§fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
self
and passes that borrow into the pipe function. Read more§fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
self
and passes that borrow into the pipe function. Read more§fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
§fn pipe_borrow_mut<'a, B, R>(
&'a mut self,
func: impl FnOnce(&'a mut B) -> R,
) -> R
fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
§fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
self
, then passes self.as_ref()
into the pipe function.§fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
self
, then passes self.as_mut()
into the pipe
function.§fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
self
, then passes self.deref()
into the pipe function.§impl<T> Pointable for T
impl<T> Pointable for T
§impl<T> Tap for T
impl<T> Tap for T
§fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
Borrow<B>
of a value. Read more§fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
BorrowMut<B>
of a value. Read more§fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
AsRef<R>
view of a value. Read more§fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
AsMut<R>
view of a value. Read more§fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
Deref::Target
of a value. Read more§fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
Deref::Target
of a value. Read more§fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
.tap()
only in debug builds, and is erased in release builds.§fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
.tap_mut()
only in debug builds, and is erased in release
builds.§fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
.tap_borrow()
only in debug builds, and is erased in release
builds.§fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
.tap_borrow_mut()
only in debug builds, and is erased in release
builds.§fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
.tap_ref()
only in debug builds, and is erased in release
builds.§fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
.tap_ref_mut()
only in debug builds, and is erased in release
builds.§fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
.tap_deref()
only in debug builds, and is erased in release
builds.§impl<T> TryConv for T
impl<T> TryConv for T
§impl<T> WithSubscriber for T
impl<T> WithSubscriber for T
§fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self> ⓘwhere
S: Into<Dispatch>,
fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self> ⓘwhere
S: Into<Dispatch>,
§fn with_current_subscriber(self) -> WithDispatch<Self> ⓘ
fn with_current_subscriber(self) -> WithDispatch<Self> ⓘ
impl<T> ErasedDestructor for Twhere
T: 'static,
impl<T> MaybeSendSync for T
Layout§
Note: Unable to compute type layout, possibly due to this type having generic parameters. Layout can only be computed for concrete, fully-instantiated types.