reth_provider

Struct Chain

pub struct Chain<N = EthPrimitives>
where N: NodePrimitives,
{ /* 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§

§

impl<N> Chain<N>
where N: NodePrimitives,

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

Create new Chain from blocks and state.

§Warning

A chain of blocks should not be empty.

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

Create new Chain from a single block and its state.

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

Get the blocks in this chain.

pub fn into_blocks( self, ) -> BTreeMap<u64, SealedBlockWithSenders<<N as NodePrimitives>::Block>>

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

pub fn headers( &self, ) -> impl Iterator<Item = SealedHeader<<N as NodePrimitives>::BlockHeader>>

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

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

Get cached trie updates for this chain.

pub fn clear_trie_updates(&mut self)

Remove cached trie updates for this chain.

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

Get execution outcome of this chain

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

Get mutable execution outcome of this chain

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

Prepends the given state to the current state.

pub fn is_empty(&self) -> bool

Return true if chain is empty and has no blocks.

pub fn block_number(&self, block_hash: FixedBytes<32>) -> Option<u64>

Return block number of the block hash.

pub fn block( &self, block_hash: FixedBytes<32>, ) -> Option<&SealedBlock<<<N as NodePrimitives>::Block as Block>::Header, <<N as NodePrimitives>::Block as Block>::Body>>

Returns the block with matching hash.

pub fn block_with_senders( &self, block_hash: FixedBytes<32>, ) -> Option<&SealedBlockWithSenders<<N as NodePrimitives>::Block>>

Returns the block with matching hash.

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

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

pub fn into_inner( self, ) -> (ChainBlocks<'static, <N as NodePrimitives>::Block>, ExecutionOutcome<<N as NodePrimitives>::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.

pub const fn inner( &self, ) -> (ChainBlocks<'_, <N as NodePrimitives>::Block>, &ExecutionOutcome<<N as NodePrimitives>::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.

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

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

pub fn blocks_iter( &self, ) -> impl Iterator<Item = &SealedBlockWithSenders<<N as NodePrimitives>::Block>>

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

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

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

pub fn fork_block(&self) -> NumHash

Get the block at which this chain forked.

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

Get the first block in this chain.

§Panics

If chain doesn’t have any blocks.

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

Get the tip of the chain.

§Panics

If chain doesn’t have any blocks.

pub fn len(&self) -> usize

Returns length of the chain.

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

Returns the range of block numbers in the chain.

§Panics

If chain doesn’t have any blocks.

pub fn receipts_by_block_hash( &self, block_hash: FixedBytes<32>, ) -> Option<Vec<&<N as NodePrimitives>::Receipt>>

Get all receipts for the given block.

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

Get all receipts with attachment.

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

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

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

pub fn append_chain( &mut self, other: Chain<N>, ) -> 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.

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§

§

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

§

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
§

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

§

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

Formats the value using the given formatter. Read more
§

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

§

fn default() -> Chain<N>

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

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

§

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

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

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

§

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

Deserialize this value from the given Serde deserializer.
§

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

§

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

Converts to this type from the input type.
§

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

§

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

Converts to this type from the input type.
§

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

§

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

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

§

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

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

impl SerializeAs<Chain> for Chain<'_>

§

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

Serialize this value into the given Serde serializer.
§

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

§

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

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<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

§

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

Checks if this value is equivalent to the given key. Read more
§

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> ErasedDestructor for T
where T: 'static,

§

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

§

impl<T> MaybeSendSync for T

§

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

§

impl<T> NippyJarHeader for T
where T: Send + Sync + Serialize + for<'b> Deserialize<'b> + Debug + 'static,

§

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