Struct revm::EvmBuilder

source ·
pub struct EvmBuilder<'a, BuilderStage, EXT, 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§

source§

impl<'a, EXT, DB: Database> EvmBuilder<'a, SetGenericStage, EXT, DB>

source

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

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

source

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

Sets the Database that will be used by Evm.

source

pub fn with_ref_db<ODB: DatabaseRef>( self, db: ODB ) -> EvmBuilder<'a, SetGenericStage, EXT, WrapDatabaseRef<ODB>>

Sets the DatabaseRef that will be used by Evm.

source

pub fn with_external_context<OEXT>( self, external: OEXT ) -> EvmBuilder<'a, SetGenericStage, OEXT, DB>

Sets the external context that will be used by Evm.

source

pub fn with_env_with_handler_cfg( self, env_with_handler_cfg: EnvWithHandlerCfg ) -> EvmBuilder<'a, HandlerStage, EXT, DB>

Sets Builder with EnvWithHandlerCfg.

source

pub fn with_context_with_handler_cfg<OEXT, ODB: Database>( self, context_with_handler_cfg: ContextWithHandlerCfg<OEXT, ODB> ) -> EvmBuilder<'a, HandlerStage, OEXT, ODB>

Sets Builder with ContextWithHandlerCfg.

source

pub fn with_cfg_env_with_handler_cfg( self, cfg_env_and_spec_id: CfgEnvWithHandlerCfg ) -> EvmBuilder<'a, HandlerStage, EXT, DB>

Sets Builder with CfgEnvWithHandlerCfg.

source

pub fn with_handler_cfg( self, handler_cfg: HandlerCfg ) -> EvmBuilder<'a, HandlerStage, EXT, DB>

Sets Builder with HandlerCfg

source

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

Sets the Optimism handler with latest spec.

If optimism-default-handler feature is enabled this is not needed.

source

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

Sets the mainnet handler with latest spec.

Enabled only with optimism-default-handler feature.

source§

impl<'a, EXT, DB: Database> EvmBuilder<'a, HandlerStage, EXT, DB>

source

pub fn new(evm: Evm<'a, EXT, DB>) -> Self

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.

source

pub fn reset_handler_with_empty_db( self ) -> EvmBuilder<'a, HandlerStage, EXT, EmptyDB>

Sets the EmptyDB and resets the Handler to default mainnet.

source

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

Resets the Handler and sets base mainnet handler.

Enabled only with optimism-default-handler feature.

source

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

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

source

pub fn reset_handler_with_ref_db<ODB: DatabaseRef>( self, db: ODB ) -> EvmBuilder<'a, SetGenericStage, EXT, WrapDatabaseRef<ODB>>

Resets Handler and sets the DatabaseRef that will be used by Evm and resets the Handler to default mainnet.

source

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.

source§

impl<'a, BuilderStage, EXT, DB: Database> EvmBuilder<'a, BuilderStage, EXT, DB>

source

pub fn with_handler( self, handler: Handler<'a, Evm<'a, 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();
source

pub fn build(self) -> Evm<'a, EXT, DB>

Builds the Evm.

source

pub fn append_handler_register( self, handle_register: HandleRegister<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.

source

pub fn append_handler_register_box( self, handle_register: HandleRegisterBox<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.

source

pub fn with_spec_id(self, spec_id: SpecId) -> Self

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.

source

pub fn modify_db(self, f: impl FnOnce(&mut DB)) -> Self

Allows modification of Evm Database.

source

pub fn modify_external_context(self, f: impl FnOnce(&mut EXT)) -> Self

Allows modification of external context.

source

pub fn modify_env(self, f: impl FnOnce(&mut Box<Env>)) -> Self

Allows modification of Evm Environment.

source

pub fn with_env(self, env: Box<Env>) -> Self

Sets Evm Environment.

source

pub fn modify_tx_env(self, f: impl FnOnce(&mut TxEnv)) -> Self

Allows modification of Evm’s Transaction Environment.

source

pub fn with_tx_env(self, tx_env: TxEnv) -> Self

Sets Evm’s Transaction Environment.

source

pub fn modify_block_env(self, f: impl FnOnce(&mut BlockEnv)) -> Self

Allows modification of Evm’s Block Environment.

source

pub fn with_block_env(self, block_env: BlockEnv) -> Self

Sets Evm’s Block Environment.

source

pub fn modify_cfg_env(self, f: impl FnOnce(&mut CfgEnv)) -> Self

Allows modification of Evm’s Config Environment.

source

pub fn with_clear_env(self) -> Self

Clears Environment of EVM.

source

pub fn with_clear_tx_env(self) -> Self

Clears Transaction environment of EVM.

source

pub fn with_clear_block_env(self) -> Self

Clears Block environment of EVM.

source

pub fn reset_handler(self) -> Self

Resets Handler to default mainnet.

Trait Implementations§

source§

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

source§

fn default() -> Self

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 DB: Freeze, EXT: 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 BuilderStage: Unpin, DB: Unpin, EXT: 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
source§

impl<T> Conv for T

source§

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

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

impl<T> FmtForward for T

source§

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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.

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

source§

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

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

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

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

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

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.
source§

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.
source§

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.
source§

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.
source§

impl<T> Same for T

§

type Output = T

Should always be Self
source§

impl<T> Tap for T

source§

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

Immutable access to a value. Read more
source§

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

Mutable access to a value. Read more
source§

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

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

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

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

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

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

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

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

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

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

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.
source§

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.
source§

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.
source§

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.
source§

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.
source§

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.
source§

impl<T> TryConv for T

source§

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.
source§

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

source§

fn vzip(self) -> V

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

impl<T> JsonSchemaMaybe for T