reth_execution_types

Struct Chain

Source
pub struct Chain<N: NodePrimitives = EthPrimitives> { /* private fields */ }
Expand description

A chain of blocks and their final state.

The chain contains the state of accounts after execution of its blocks, changesets for those blocks (and their transactions), as well as the blocks themselves.

Used inside the BlockchainTree.

§Warning

A chain of blocks should not be empty.

Implementations§

Source§

impl<N: NodePrimitives> Chain<N>

Source

pub fn new( blocks: impl IntoIterator<Item = SealedBlockWithSenders<N::Block>>, execution_outcome: ExecutionOutcome<N::Receipt>, trie_updates: Option<TrieUpdates>, ) -> Self

Create new Chain from blocks and state.

§Warning

A chain of blocks should not be empty.

Source

pub fn from_block( block: SealedBlockWithSenders<N::Block>, execution_outcome: ExecutionOutcome<N::Receipt>, trie_updates: Option<TrieUpdates>, ) -> Self

Create new Chain from a single block and its state.

Source

pub const fn blocks( &self, ) -> &BTreeMap<BlockNumber, SealedBlockWithSenders<N::Block>>

Get the blocks in this chain.

Source

pub fn into_blocks( self, ) -> BTreeMap<BlockNumber, SealedBlockWithSenders<N::Block>>

Consumes the type and only returns the blocks in this chain.

Source

pub fn headers(&self) -> impl Iterator<Item = SealedHeader<N::BlockHeader>> + '_

Returns an iterator over all headers in the block with increasing block numbers.

Source

pub const fn trie_updates(&self) -> Option<&TrieUpdates>

Get cached trie updates for this chain.

Source

pub fn clear_trie_updates(&mut self)

Remove cached trie updates for this chain.

Source

pub const fn execution_outcome(&self) -> &ExecutionOutcome<N::Receipt>

Get execution outcome of this chain

Source

pub fn execution_outcome_mut(&mut self) -> &mut ExecutionOutcome<N::Receipt>

Get mutable execution outcome of this chain

Source

pub fn prepend_state(&mut self, state: BundleState)

Prepends the given state to the current state.

Source

pub fn is_empty(&self) -> bool

Return true if chain is empty and has no blocks.

Source

pub fn block_number(&self, block_hash: BlockHash) -> Option<BlockNumber>

Return block number of the block hash.

Source

pub fn block(&self, block_hash: BlockHash) -> Option<&SealedBlockFor<N::Block>>

Returns the block with matching hash.

Source

pub fn block_with_senders( &self, block_hash: BlockHash, ) -> Option<&SealedBlockWithSenders<N::Block>>

Returns the block with matching hash.

Source

pub fn execution_outcome_at_block( &self, block_number: BlockNumber, ) -> Option<ExecutionOutcome<N::Receipt>>

Return execution outcome at the block_number or None if block is not known

Source

pub fn into_inner( self, ) -> (ChainBlocks<'static, N::Block>, ExecutionOutcome<N::Receipt>, Option<TrieUpdates>)

Destructure the chain into its inner components:

  1. The blocks contained in the chain.
  2. The execution outcome representing the final state.
  3. The optional trie updates.
Source

pub const fn inner( &self, ) -> (ChainBlocks<'_, N::Block>, &ExecutionOutcome<N::Receipt>)

Destructure the chain into its inner components:

  1. A reference to the blocks contained in the chain.
  2. A reference to the execution outcome representing the final state.
Source

pub fn block_receipts_iter( &self, ) -> impl Iterator<Item = &Vec<Option<N::Receipt>>> + '_

Returns an iterator over all the receipts of the blocks in the chain.

Source

pub fn blocks_iter( &self, ) -> impl Iterator<Item = &SealedBlockWithSenders<N::Block>> + '_

Returns an iterator over all blocks in the chain with increasing block number.

Source

pub fn blocks_and_receipts( &self, ) -> impl Iterator<Item = (&SealedBlockWithSenders<N::Block>, &Vec<Option<N::Receipt>>)> + '_

Returns an iterator over all blocks and their receipts in the chain.

Source

pub fn fork_block(&self) -> ForkBlock

Get the block at which this chain forked.

Source

pub fn first(&self) -> &SealedBlockWithSenders<N::Block>

Get the first block in this chain.

§Panics

If chain doesn’t have any blocks.

Source

pub fn tip(&self) -> &SealedBlockWithSenders<N::Block>

Get the tip of the chain.

§Panics

If chain doesn’t have any blocks.

Source

pub fn len(&self) -> usize

Returns length of the chain.

Source

pub fn range(&self) -> RangeInclusive<BlockNumber>

Returns the range of block numbers in the chain.

§Panics

If chain doesn’t have any blocks.

Source

pub fn receipts_by_block_hash( &self, block_hash: BlockHash, ) -> Option<Vec<&N::Receipt>>

Get all receipts for the given block.

Source

pub fn receipts_with_attachment(&self) -> Vec<BlockReceipts<N::Receipt>>
where N::SignedTx: Encodable2718,

Get all receipts with attachment.

Attachment includes block number, block hash, transaction hash and transaction index.

Source

pub fn append_block( &mut self, block: SealedBlockWithSenders<N::Block>, execution_outcome: ExecutionOutcome<N::Receipt>, )

Append a single block with state to the chain. This method assumes that blocks attachment to the chain has already been validated.

Source

pub fn append_chain(&mut self, other: Self) -> Result<(), BlockExecutionError>

Merge two chains by appending the given chain into the current one.

The state of accounts for this chain is set to the state of the newest chain.

Source

pub fn split(self, split_at: ChainSplitTarget) -> ChainSplit<N>

Split this chain at the given block.

The given block will be the last block in the first returned chain.

If the given block is not found, ChainSplit::NoSplitPending is returned. Split chain at the number or hash, block with given number will be included at first chain. If any chain is empty (Does not have blocks) None will be returned.

§Note

The plain state is only found in the second chain, making it impossible to perform any state reverts on the first chain.

The second chain only contains the changes that were reverted on the first chain; however, it retains the up to date state as if the chains were one, i.e. the second chain is an extension of the first.

§Panics

If chain doesn’t have any blocks.

Trait Implementations§

Source§

impl<N: Clone + NodePrimitives> Clone for Chain<N>
where N::Block: Clone, N::Receipt: Clone,

Source§

fn clone(&self) -> Chain<N>

Returns a copy of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl<N: Debug + NodePrimitives> Debug for Chain<N>
where N::Block: Debug, N::Receipt: Debug,

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<N: NodePrimitives> Default for Chain<N>

Source§

fn default() -> Self

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

impl<'de, N: NodePrimitives> Deserialize<'de> for Chain<N>

Source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
Source§

impl<'de> DeserializeAs<'de, Chain> for Chain<'de>

Available on crate feature serde-bincode-compat only.
Source§

fn deserialize_as<D>(deserializer: D) -> Result<Chain, D::Error>
where D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer.
Source§

impl<'a, N> From<&'a Chain<N>> for Chain<'a, N>
where N: NodePrimitives,

Available on crate feature serde-bincode-compat only.
Source§

fn from(value: &'a Chain<N>) -> Self

Converts to this type from the input type.
Source§

impl<'a, N> From<Chain<'a, N>> for Chain<N>
where N: NodePrimitives,

Available on crate feature serde-bincode-compat only.
Source§

fn from(value: Chain<'a, N>) -> Self

Converts to this type from the input type.
Source§

impl<N: PartialEq + NodePrimitives> PartialEq for Chain<N>
where N::Block: PartialEq, N::Receipt: PartialEq,

Source§

fn eq(&self, other: &Chain<N>) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl<N: NodePrimitives> Serialize for Chain<N>

Source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where __S: Serializer,

Serialize this value into the given Serde serializer. Read more
Source§

impl SerializeAs<Chain> for Chain<'_>

Available on crate feature serde-bincode-compat only.
Source§

fn serialize_as<S>(source: &Chain, serializer: S) -> Result<S::Ok, S::Error>
where S: Serializer,

Serialize this value into the given Serde serializer.
Source§

impl<N: Eq + NodePrimitives> Eq for Chain<N>
where N::Block: Eq, N::Receipt: Eq,

Source§

impl<N: NodePrimitives> StructuralPartialEq for Chain<N>

Auto Trait Implementations§

§

impl<N> Freeze for Chain<N>

§

impl<N> RefUnwindSafe for Chain<N>
where <N as NodePrimitives>::BlockBody: RefUnwindSafe, <N as NodePrimitives>::BlockHeader: RefUnwindSafe, <N as NodePrimitives>::Receipt: RefUnwindSafe,

§

impl<N> Send for Chain<N>

§

impl<N> Sync for Chain<N>

§

impl<N> Unpin for Chain<N>

§

impl<N> UnwindSafe for Chain<N>
where <N as NodePrimitives>::BlockBody: RefUnwindSafe, <N as NodePrimitives>::BlockHeader: RefUnwindSafe, <N as NodePrimitives>::Receipt: UnwindSafe,

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> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dst: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit #126799)
Performs copy-assignment from self to dst. 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
Source§

impl<T> DynClone for T
where T: Clone,

Source§

fn __clone_box(&self, _: Private) -> *mut ()

§

impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

§

fn equivalent(&self, key: &K) -> bool

Compare self to key and return true if they are equal.
§

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, 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
Source§

impl<T> Same for T

Source§

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

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
§

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

Source§

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

Source§

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> DeserializeOwned for T
where T: for<'de> Deserialize<'de>,

§

impl<T> MaybeDebug for T
where T: Debug,

§

impl<T> MaybeSerde for T
where T: Serialize + for<'de> Deserialize<'de>,

§

impl<T> RpcObject for T
where T: RpcParam + RpcReturn,

§

impl<T> RpcParam for T
where T: Serialize + Clone + Debug + Send + Sync + Unpin,

§

impl<T> RpcReturn for T
where T: DeserializeOwned + Debug + Send + Sync + Unpin + 'static,

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: 320 bytes