Struct risc0_steel::host::EvmEnvBuilder
source · pub struct EvmEnvBuilder<P, H, B> { /* private fields */ }
host
only.Expand description
Builder for constructing an EvmEnv instance on the host.
The EvmEnvBuilder is used to configure and create an EvmEnv, which is the environment in which the Ethereum Virtual Machine (EVM) operates. This builder provides flexibility in setting up the EVM environment by allowing configuration of RPC endpoints, block numbers, and other parameters.
§Usage
The builder can be created using EvmEnv::builder(). Various configurations can be chained to
customize the environment before calling the build
function to create the final EvmEnv.
§Type Parameters
P
: The type of the RPC provider that interacts with the blockchain.H
: The type of the block header.B
: The type of the configuration to access the Beacon API.
Implementations§
source§impl EvmEnvBuilder<(), EthBlockHeader, ()>
impl EvmEnvBuilder<(), EthBlockHeader, ()>
sourcepub fn rpc(
self,
url: Url,
) -> EvmEnvBuilder<RootProvider<Ethereum>, EthBlockHeader, ()>
pub fn rpc( self, url: Url, ) -> EvmEnvBuilder<RootProvider<Ethereum>, EthBlockHeader, ()>
Sets the Ethereum HTTP RPC endpoint that will be used by the EvmEnv.
source§impl<H: EvmBlockHeader> EvmEnvBuilder<(), H, ()>
impl<H: EvmBlockHeader> EvmEnvBuilder<(), H, ()>
sourcepub fn provider<N, P>(self, provider: P) -> EvmEnvBuilder<P, H, ()>where
N: Network,
P: Provider<N>,
H: EvmBlockHeader + TryFrom<<N as Network>::HeaderResponse>,
<H as TryFrom<<N as Network>::HeaderResponse>>::Error: Display,
pub fn provider<N, P>(self, provider: P) -> EvmEnvBuilder<P, H, ()>where
N: Network,
P: Provider<N>,
H: EvmBlockHeader + TryFrom<<N as Network>::HeaderResponse>,
<H as TryFrom<<N as Network>::HeaderResponse>>::Error: Display,
Sets a custom [Provider] that will be used by the EvmEnv.
source§impl<P> EvmEnvBuilder<P, EthBlockHeader, ()>
impl<P> EvmEnvBuilder<P, EthBlockHeader, ()>
sourcepub fn beacon_api(self, url: Url) -> EvmEnvBuilder<P, EthBlockHeader, Url>
pub fn beacon_api(self, url: Url) -> EvmEnvBuilder<P, EthBlockHeader, Url>
source§impl<P, H, B> EvmEnvBuilder<P, H, B>
impl<P, H, B> EvmEnvBuilder<P, H, B>
sourcepub fn block_number(self, number: u64) -> Self
pub fn block_number(self, number: u64) -> Self
Sets the block number to be used for the EVM execution.
sourcepub fn block_number_or_tag(self, block: BlockNumberOrTag) -> Self
pub fn block_number_or_tag(self, block: BlockNumberOrTag) -> Self
Sets the block number or block tag (“latest”, “earliest”, “pending”) to be used for the EVM execution.
sourcepub fn block_hash(self, hash: B256) -> Self
pub fn block_hash(self, hash: B256) -> Self
Sets the block hash to be used for the EVM execution.
sourcepub fn eip1186_proof_chunk_size(self, chunk_size: usize) -> Self
pub fn eip1186_proof_chunk_size(self, chunk_size: usize) -> Self
Sets the chunk size for eth_getProof
calls (EIP-1186).
This configures the number of storage keys to request in a single call. The default is 1000, but this can be adjusted based on the RPC node configuration.
source§impl<P, H> EvmEnvBuilder<P, H, ()>
impl<P, H> EvmEnvBuilder<P, H, ()>
sourcepub async fn build<N>(
self,
) -> Result<EvmEnv<ProofDb<ProviderDb<N, P>>, H, HostCommit<()>>>where
N: Network,
P: Provider<N>,
H: EvmBlockHeader + TryFrom<<N as Network>::HeaderResponse>,
<H as TryFrom<<N as Network>::HeaderResponse>>::Error: Display,
pub async fn build<N>(
self,
) -> Result<EvmEnv<ProofDb<ProviderDb<N, P>>, H, HostCommit<()>>>where
N: Network,
P: Provider<N>,
H: EvmBlockHeader + TryFrom<<N as Network>::HeaderResponse>,
<H as TryFrom<<N as Network>::HeaderResponse>>::Error: Display,
Builds and returns an EvmEnv with the configured settings that commits to a block hash.
source§impl<P> EvmEnvBuilder<P, EthBlockHeader, Url>
impl<P> EvmEnvBuilder<P, EthBlockHeader, Url>
sourcepub fn commitment_block_hash(
self,
hash: BlockHash,
) -> EvmEnvBuilder<P, EthBlockHeader, History>
Available on crate feature unstable-history
only.
pub fn commitment_block_hash( self, hash: BlockHash, ) -> EvmEnvBuilder<P, EthBlockHeader, History>
unstable-history
only.Sets the block hash for the commitment block, which can be different from the execution block.
This allows for historical state execution while maintaining security through a more recent commitment. The commitment block must be more recent than the execution block.
Note that this feature requires a Beacon chain RPC provider, as it relies on EIP-4788.
§Example
let commitment_hash = B256::from_str("0x1234...")?;
let builder = EthEvmEnv::builder()
.rpc(Url::parse("https://ethereum-rpc.publicnode.com")?)
.beacon_api(Url::parse("https://ethereum-beacon-api.publicnode.com")?)
.block_number(1_000_000); // execute against historical state
let builder = builder.commitment_block_hash(commitment_hash); // commit to recent block
let env = builder.build().await?;
§Availability
This API is marked as unstable and is only available when the unstable-history
crate feature is enabled. This comes with no stability guarantees, and could be changed or removed at any time.
sourcepub fn commitment_block_number_or_tag(
self,
block: BlockNumberOrTag,
) -> EvmEnvBuilder<P, EthBlockHeader, History>
Available on crate feature unstable-history
only.
pub fn commitment_block_number_or_tag( self, block: BlockNumberOrTag, ) -> EvmEnvBuilder<P, EthBlockHeader, History>
unstable-history
only.Sets the block number or block tag (“latest”, “earliest”, “pending”) for the commitment.
See EvmEnvBuilder::commitment_block_hash for detailed documentation.
§Availability
This API is marked as unstable and is only available when the unstable-history
crate feature is enabled. This comes with no stability guarantees, and could be changed or removed at any time.
sourcepub fn commitment_block_number(
self,
number: BlockNumber,
) -> EvmEnvBuilder<P, EthBlockHeader, History>
Available on crate feature unstable-history
only.
pub fn commitment_block_number( self, number: BlockNumber, ) -> EvmEnvBuilder<P, EthBlockHeader, History>
unstable-history
only.Sets the block number for the commitment.
See EvmEnvBuilder::commitment_block_hash for detailed documentation.
§Availability
This API is marked as unstable and is only available when the unstable-history
crate feature is enabled. This comes with no stability guarantees, and could be changed or removed at any time.
sourcepub async fn build(
self,
) -> Result<EthEvmEnv<ProofDb<ProviderDb<Ethereum, P>>, HostCommit<BeaconCommit>>>where
P: Provider<Ethereum>,
pub async fn build(
self,
) -> Result<EthEvmEnv<ProofDb<ProviderDb<Ethereum, P>>, HostCommit<BeaconCommit>>>where
P: Provider<Ethereum>,
Builds and returns an EvmEnv with the configured settings that commits to a beacon root.
source§impl<P> EvmEnvBuilder<P, EthBlockHeader, History>
impl<P> EvmEnvBuilder<P, EthBlockHeader, History>
sourcepub async fn build(
self,
) -> Result<EthEvmEnv<ProofDb<ProviderDb<Ethereum, P>>, HostCommit<HistoryCommit>>>where
P: Provider<Ethereum>,
Available on crate feature unstable-history
only.
pub async fn build(
self,
) -> Result<EthEvmEnv<ProofDb<ProviderDb<Ethereum, P>>, HostCommit<HistoryCommit>>>where
P: Provider<Ethereum>,
unstable-history
only.Builds and returns an EvmEnv with the configured settings, using a dedicated commitment block that is different from the execution block.
§Availability
This API is marked as unstable and is only available when the unstable-history
crate feature is enabled. This comes with no stability guarantees, and could be changed or removed at any time.
Trait Implementations§
Auto Trait Implementations§
impl<P, H, B> Freeze for EvmEnvBuilder<P, H, B>
impl<P, H, B> RefUnwindSafe for EvmEnvBuilder<P, H, B>
impl<P, H, B> Send for EvmEnvBuilder<P, H, B>
impl<P, H, B> Sync for EvmEnvBuilder<P, H, B>
impl<P, H, B> Unpin for EvmEnvBuilder<P, H, B>
impl<P, H, B> UnwindSafe for EvmEnvBuilder<P, H, B>
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> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
source§unsafe fn clone_to_uninit(&self, dst: *mut T)
unsafe fn clone_to_uninit(&self, dst: *mut T)
clone_to_uninit
)§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>
§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> 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> 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.