Struct reth::revm::revm::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,

pub fn with_empty_db( self, ) -> EvmBuilder<'a, SetGenericStage, EXT, EmptyDBTyped<Infallible>>

Sets the EmptyDB as the Database that will be used by Evm.

pub fn with_db<ODB>(self, db: ODB) -> EvmBuilder<'a, SetGenericStage, EXT, ODB>
where ODB: Database,

Sets the Database that will be used by Evm.

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>

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>

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,

Sets Builder with ContextWithHandlerCfg.

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>

Sets Builder with HandlerCfg

pub fn optimism(self) -> EvmBuilder<'a, HandlerStage, EXT, DB>

Available on crate feature 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,

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>>

Sets the EmptyDB and resets the Handler to default mainnet.

pub fn reset_handler_with_db<ODB>( self, db: ODB, ) -> EvmBuilder<'a, SetGenericStage, EXT, ODB>
where ODB: Database,

Sets the Database that will be used by Evm and resets the Handler to default mainnet.

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>

Resets Handler and sets new ExternalContext type. and resets the Handler to default mainnet.

§

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>

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 build(self) -> Evm<'a, EXT, DB>

Builds the Evm.

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<'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 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>

Allows modification of Evm Database.

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>

Allows modification of Evm Environment.

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>

Allows modification of Evm’s Transaction Environment.

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>

Allows modification of Evm’s Block Environment.

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>

Allows modification of Evm’s Config Environment.

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>

Clears Transaction environment of EVM.

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>

Resets Handler to default mainnet.

Trait Implementations§

§

impl<'a> Default for EvmBuilder<'a, SetGenericStage, (), EmptyDBTyped<Infallible>>

§

fn default() -> EvmBuilder<'a, SetGenericStage, (), EmptyDBTyped<Infallible>>

Returns the “default value” for a type. Read more

Auto Trait Implementations§

§

impl<'a, BuilderStage, EXT, DB> Freeze for EvmBuilder<'a, BuilderStage, EXT, DB>
where EXT: Freeze, DB: Freeze, <DB as Database>::Error: Freeze,

§

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>
where EXT: Unpin, BuilderStage: Unpin, DB: Unpin, <DB as Database>::Error: Unpin,

§

impl<'a, BuilderStage, EXT, DB> !UnwindSafe for EvmBuilder<'a, BuilderStage, EXT, DB>

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> T
where Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>
where Self: Binary,

Causes self to use its Binary implementation when Debug-formatted.
§

fn fmt_display(self) -> FmtDisplay<Self>
where Self: Display,

Causes self to use its Display implementation when Debug-formatted.
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>
where Self: LowerExp,

Causes self to use its LowerExp implementation when Debug-formatted.
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>
where Self: LowerHex,

Causes self to use its LowerHex implementation when Debug-formatted.
§

fn fmt_octal(self) -> FmtOctal<Self>
where Self: Octal,

Causes self to use its Octal implementation when Debug-formatted.
§

fn fmt_pointer(self) -> FmtPointer<Self>
where Self: Pointer,

Causes self to use its Pointer implementation when Debug-formatted.
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>
where Self: UpperExp,

Causes self to use its UpperExp implementation when Debug-formatted.
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>
where Self: UpperHex,

Causes self to use its UpperHex implementation when Debug-formatted.
§

fn fmt_list(self) -> FmtList<Self>
where &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for T
where U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

source§

impl<T> IntoEither for T

source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts 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 more
source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts 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 T
where T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> R
where Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> R
where R: 'a,

Borrows 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) -> R
where R: 'a,

Mutably borrows 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
where Self: Borrow<B>, B: 'a + ?Sized, R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
where Self: BorrowMut<B>, B: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
where Self: AsRef<U>, U: 'a + ?Sized, R: 'a,

Borrows 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
where Self: AsMut<U>, U: 'a + ?Sized, R: 'a,

Mutably borrows 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
where Self: Deref<Target = T>, T: 'a + ?Sized, R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( &'a mut self, func: impl FnOnce(&'a mut T) -> R, ) -> R
where Self: DerefMut<Target = T> + Deref, T: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe function.
§

impl<T> Pointable for T

§

const ALIGN: usize = _

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
§

impl<T> PolicyExt for T
where T: ?Sized,

§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns [Action::Follow] only if self and other return Action::Follow. Read more
§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns [Action::Follow] if either self or other returns Action::Follow. Read more
source§

impl<T> Same for T

§

type Output = T

Should always be Self
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
where Self: Borrow<B>, B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
where Self: BorrowMut<B>, B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
where Self: AsRef<R>, R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
where Self: AsMut<R>, R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
where Self: Deref<Target = T>, T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
where Self: DerefMut<Target = T> + Deref, T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
where Self: Borrow<B>, B: ?Sized,

Calls .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
where Self: BorrowMut<B>, B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
where Self: AsRef<R>, R: ?Sized,

Calls .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
where Self: AsMut<R>, R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
where Self: Deref<Target = T>, T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Self
where Self: DerefMut<Target = T> + Deref, T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release builds.
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>
where Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a [WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a [WithDispatch] wrapper. Read more
source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more
§

impl<T> ErasedDestructor for T
where 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.