pub struct ExecutedBlock<N: NodePrimitives = EthPrimitives> {
pub recovered_block: Arc<RecoveredBlock<N::Block>>,
pub execution_output: Arc<ExecutionOutcome<N::Receipt>>,
pub trie_data: DeferredTrieData,
}Expand description
Represents an executed block stored in-memory.
Fields§
§recovered_block: Arc<RecoveredBlock<N::Block>>Recovered Block
execution_output: Arc<ExecutionOutcome<N::Receipt>>Block’s execution outcome.
trie_data: DeferredTrieDataDeferred trie data produced by execution.
This allows deferring the computation of the trie data which can be expensive. The data can be populated asynchronously after the block was validated.
Implementations§
Source§impl<N: NodePrimitives> ExecutedBlock<N>
impl<N: NodePrimitives> ExecutedBlock<N>
Sourcepub fn new(
recovered_block: Arc<RecoveredBlock<N::Block>>,
execution_output: Arc<ExecutionOutcome<N::Receipt>>,
trie_data: ComputedTrieData,
) -> Self
pub fn new( recovered_block: Arc<RecoveredBlock<N::Block>>, execution_output: Arc<ExecutionOutcome<N::Receipt>>, trie_data: ComputedTrieData, ) -> Self
Create a new ExecutedBlock with already-computed trie data.
Use this constructor when trie data is available immediately (e.g., sequencers, payload builders). This is the safe default path.
Sourcepub const fn with_deferred_trie_data(
recovered_block: Arc<RecoveredBlock<N::Block>>,
execution_output: Arc<ExecutionOutcome<N::Receipt>>,
trie_data: DeferredTrieData,
) -> Self
pub const fn with_deferred_trie_data( recovered_block: Arc<RecoveredBlock<N::Block>>, execution_output: Arc<ExecutionOutcome<N::Receipt>>, trie_data: DeferredTrieData, ) -> Self
Create a new ExecutedBlock with deferred trie data.
This is useful if the trie data is populated somewhere else, e.g. asynchronously after the block was validated.
The DeferredTrieData handle allows expensive trie operations (sorting hashed state,
sorting trie updates, and building the accumulated trie input overlay) to be performed
outside the critical validation path. This can improve latency for time-sensitive
operations like block validation.
If the data hasn’t been populated when Self::trie_data() is called, computation
occurs synchronously from stored inputs, so there is no blocking or deadlock risk.
Use Self::new() instead when trie data is already computed and available immediately.
Sourcepub fn sealed_block(&self) -> &SealedBlock<N::Block>
pub fn sealed_block(&self) -> &SealedBlock<N::Block>
Returns a reference to an inner [SealedBlock]
Sourcepub fn recovered_block(&self) -> &RecoveredBlock<N::Block>
pub fn recovered_block(&self) -> &RecoveredBlock<N::Block>
Returns a reference to [RecoveredBlock]
Sourcepub fn execution_outcome(&self) -> &ExecutionOutcome<N::Receipt>
pub fn execution_outcome(&self) -> &ExecutionOutcome<N::Receipt>
Returns a reference to the block’s execution outcome
Sourcepub fn trie_data(&self) -> ComputedTrieData
pub fn trie_data(&self) -> ComputedTrieData
Returns the trie data, computing it synchronously if not already cached.
Uses OnceLock::get_or_init internally:
- If already computed: returns cached result immediately
- If not computed: first caller computes, others wait for that result
Sourcepub fn trie_data_handle(&self) -> DeferredTrieData
pub fn trie_data_handle(&self) -> DeferredTrieData
Returns a clone of the deferred trie data handle.
A handle is a lightweight reference that can be passed to descendants without
forcing trie data to be computed immediately. The actual work runs when
wait_cloned() is called by a consumer (e.g. when merging overlays).
Sourcepub fn hashed_state(&self) -> Arc<HashedPostStateSorted>
pub fn hashed_state(&self) -> Arc<HashedPostStateSorted>
Returns the hashed state result of the execution outcome.
May compute trie data synchronously if the deferred task hasn’t completed.
Sourcepub fn trie_updates(&self) -> Arc<TrieUpdatesSorted>
pub fn trie_updates(&self) -> Arc<TrieUpdatesSorted>
Returns the trie updates resulting from the execution outcome.
May compute trie data synchronously if the deferred task hasn’t completed.
Sourcepub fn trie_input(&self) -> Option<Arc<TrieInputSorted>>
pub fn trie_input(&self) -> Option<Arc<TrieInputSorted>>
Returns the trie input anchored to the persisted ancestor.
May compute trie data synchronously if the deferred task hasn’t completed.
Sourcepub fn anchor_hash(&self) -> Option<B256>
pub fn anchor_hash(&self) -> Option<B256>
Returns the anchor hash of the trie input, if present.
Sourcepub fn block_number(&self) -> BlockNumber
pub fn block_number(&self) -> BlockNumber
Returns a [BlockNumber] of the block.
Trait Implementations§
Source§impl<N: Clone + NodePrimitives> Clone for ExecutedBlock<N>
impl<N: Clone + NodePrimitives> Clone for ExecutedBlock<N>
Source§fn clone(&self) -> ExecutedBlock<N>
fn clone(&self) -> ExecutedBlock<N>
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl<N: Debug + NodePrimitives> Debug for ExecutedBlock<N>
impl<N: Debug + NodePrimitives> Debug for ExecutedBlock<N>
Source§impl<N: NodePrimitives> Default for ExecutedBlock<N>
impl<N: NodePrimitives> Default for ExecutedBlock<N>
Source§impl<N: NodePrimitives> PartialEq for ExecutedBlock<N>
impl<N: NodePrimitives> PartialEq for ExecutedBlock<N>
Auto Trait Implementations§
impl<N> Freeze for ExecutedBlock<N>
impl<N = EthPrimitives> !RefUnwindSafe for ExecutedBlock<N>
impl<N> Send for ExecutedBlock<N>
impl<N> Sync for ExecutedBlock<N>
impl<N> Unpin for ExecutedBlock<N>
impl<N = EthPrimitives> !UnwindSafe for ExecutedBlock<N>
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,
§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<TxEnv, T> FromRecoveredTx<&T> for TxEnvwhere
TxEnv: FromRecoveredTx<T>,
impl<TxEnv, T> FromRecoveredTx<&T> for TxEnvwhere
TxEnv: FromRecoveredTx<T>,
§fn from_recovered_tx(tx: &&T, sender: Address) -> TxEnv
fn from_recovered_tx(tx: &&T, sender: Address) -> TxEnv
TxEnv] from a transaction and a sender address.§impl<TxEnv, T> FromTxWithEncoded<&T> for TxEnvwhere
TxEnv: FromTxWithEncoded<T>,
impl<TxEnv, T> FromTxWithEncoded<&T> for TxEnvwhere
TxEnv: FromTxWithEncoded<T>,
§fn from_encoded_tx(tx: &&T, sender: Address, encoded: Bytes) -> TxEnv
fn from_encoded_tx(tx: &&T, sender: Address, encoded: Bytes) -> TxEnv
TxEnv] from a transaction, its sender, and encoded transaction bytes.§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> 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> MaybeDebug for Twhere
T: Debug,
Layout§
Note: Most layout information is completely unstable and may even differ between compilations. The only exception is types with certain repr(...) attributes. Please see the Rust Reference's “Type Layout” chapter for details on type layout guarantees.
Size: 24 bytes