pub struct Env<D: DB, V: Validator> {
pub evm_state: Option<ContextWithHandlerCfg<(), D>>,
pub last_events: Vec<Event>,
pub event_history: Vec<Event>,
pub validator: V,
}Expand description
Simulation environment
Environment wrapping an in-memory EVM and functionality to update the state of the environment.
Fields§
§evm_state: Option<ContextWithHandlerCfg<(), D>>Local EVM state
last_events: Vec<Event>Events/updates in the last block
event_history: Vec<Event>History of events/updates over the lifetime of the environment
validator: VValidator responsbile for transaction ordering
Implementations§
Source§impl<V: Validator> Env<ForkDb, V>
impl<V: Validator> Env<ForkDb, V>
Sourcepub fn init(node_url: &str, block_number: Option<u64>, validator: V) -> Self
pub fn init(node_url: &str, block_number: Option<u64>, validator: V) -> Self
Initialise an environment with a forked DB
Initialise a simulation environment with a database that can request values from a remote fork of the blockchain. During EVM execution, if a contract or storage value does not exist locally the db will attempt to request it from the remote endpoint.
§Arguments
node_url- Url of service to make db requestsblock_number- Block number to fork from, if None latest available block will be used.
Sourcepub fn get_request_history(&self) -> &RequestCache
pub fn get_request_history(&self) -> &RequestCache
Get history of data requests made by the DB
Get a history of requests for data from the remote fork. These requests can then be inserted into an empty DB to speed up future simulations.
Source§impl<V: Validator> Env<LocalDB, V>
impl<V: Validator> Env<LocalDB, V>
Sourcepub fn init(timestamp: U256, block_number: U256, validator: V) -> Self
pub fn init(timestamp: U256, block_number: U256, validator: V) -> Self
Initialise a simulation with an in-memory DB
Initialises a simulation environment with an empty in-memory database.
§Arguments
timestamp- Timestamp to initialise the the simulation/EVM withblock_number- Block number initialise the the simulation/EVM with
Source§impl<D: DB, V: Validator> Env<D, V>
impl<D: DB, V: Validator> Env<D, V>
Sourcepub fn evm_state(&mut self) -> &mut ContextWithHandlerCfg<(), D>
pub fn evm_state(&mut self) -> &mut ContextWithHandlerCfg<(), D>
Get a mutable reference to the stored evm-state
Sourcepub fn increment_time<R: Rng>(&mut self, rng: &mut R, interval: u64)
pub fn increment_time<R: Rng>(&mut self, rng: &mut R, interval: u64)
Increment block number, time and prevarando
Sourcepub fn insert_account(&mut self, address: Address, start_balance: U256)
pub fn insert_account(&mut self, address: Address, start_balance: U256)
Insert a user account into the DB
§Arguments
address- Address to create the account atstart_balance- Starting balance of Eth of the account
Sourcepub fn insert_accounts(&mut self, start_balance: u128, addresses: Vec<Address>)
pub fn insert_accounts(&mut self, start_balance: u128, addresses: Vec<Address>)
Insert multiple accounts into the DB
§Arguments
start_balance- Starting balance of Eth of the accountaddresses- Vector of addresses to create accounts at
Sourcepub fn deploy_contract(
&mut self,
deployer: Address,
contract_name: &str,
data: Vec<u8>,
) -> Address
pub fn deploy_contract( &mut self, deployer: Address, contract_name: &str, data: Vec<u8>, ) -> Address
Deploy a contract to the EVM
§Arguments
deployer- Address of contract deployercontract_name- Name of the contract, only used for error messagingdata- Deployment bytecode, and abi encoded arguments if required
Sourcepub fn direct_execute_raw(
&mut self,
callee: Address,
contract: Address,
encoded_args: Vec<u8>,
value: U256,
) -> Result<ExecutionResult, RevertError>
pub fn direct_execute_raw( &mut self, callee: Address, contract: Address, encoded_args: Vec<u8>, value: U256, ) -> Result<ExecutionResult, RevertError>
Execute a contract function with ABI encoded arguments
§Arguments
callee- Contract caller addresscontract- Address of the contract to callencoded_args- ABI encoded function arguments and function selectorvalue- Value attached to the transaction
Sourcepub fn direct_execute<T: SolCall>(
&mut self,
callee: Address,
contract: Address,
call_args: T,
value: U256,
) -> Result<(<T as SolCall>::Return, Vec<Log>), RevertError>
pub fn direct_execute<T: SolCall>( &mut self, callee: Address, contract: Address, call_args: T, value: U256, ) -> Result<(<T as SolCall>::Return, Vec<Log>), RevertError>
Sourcepub fn direct_call_raw(
&mut self,
callee: Address,
contract: Address,
encoded_args: Vec<u8>,
value: U256,
) -> Result<ExecutionResult, RevertError>
pub fn direct_call_raw( &mut self, callee: Address, contract: Address, encoded_args: Vec<u8>, value: U256, ) -> Result<ExecutionResult, RevertError>
Call a contract function without committing changes
§Arguments
callee- Address of the function callercontract- Address of the contractencoded_args- ABI encoded function selector and argumentsvalue- Value attached to the transaction
Sourcepub fn direct_call<T: SolCall>(
&mut self,
callee: Address,
contract: Address,
call_args: T,
value: U256,
) -> Result<(<T as SolCall>::Return, Vec<Log>), RevertError>
pub fn direct_call<T: SolCall>( &mut self, callee: Address, contract: Address, call_args: T, value: U256, ) -> Result<(<T as SolCall>::Return, Vec<Log>), RevertError>
Sourcepub fn process_transactions<R: Rng>(
&mut self,
transactions: Vec<Transaction>,
rng: &mut R,
step: usize,
)
pub fn process_transactions<R: Rng>( &mut self, transactions: Vec<Transaction>, rng: &mut R, step: usize, )
Process a queue of Transaction
§Arguments
transactions- Vector of transactionsstep- Step number of the simulation
Sourcepub fn clear_events(&mut self)
pub fn clear_events(&mut self)
Store events from the last block
Move events generated in the last block into the historical storage.
Auto Trait Implementations§
impl<D, V> Freeze for Env<D, V>
impl<D, V> !RefUnwindSafe for Env<D, V>
impl<D, V> Send for Env<D, V>
impl<D, V> Sync for Env<D, V>
impl<D, V> Unpin for Env<D, V>
impl<D, V> !UnwindSafe for Env<D, V>
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
Source§impl<T> FmtForward for T
impl<T> FmtForward for T
Source§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.Source§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.Source§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.Source§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.Source§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.Source§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.Source§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.Source§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.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> 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> Pipe for Twhere
T: ?Sized,
impl<T> Pipe for Twhere
T: ?Sized,
Source§fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
Source§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 moreSource§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 moreSource§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
Source§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
Source§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.Source§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.Source§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.Source§impl<T> Tap for T
impl<T> Tap for T
Source§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 moreSource§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 moreSource§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 moreSource§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 moreSource§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 moreSource§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 moreSource§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.Source§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.Source§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.Source§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.Source§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.Source§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.Source§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.