pub struct CanonicalInMemoryState<N: NodePrimitives = EthPrimitives> { /* private fields */ }
Expand description
This type is responsible for providing the blocks, receipts, and state for all canonical blocks not on disk yet and keeps track of the block range that is in memory.
Implementations§
Source§impl<N: NodePrimitives> CanonicalInMemoryState<N>
impl<N: NodePrimitives> CanonicalInMemoryState<N>
Sourcepub fn new(
blocks: HashMap<B256, Arc<BlockState<N>>>,
numbers: BTreeMap<u64, B256>,
pending: Option<BlockState<N>>,
finalized: Option<SealedHeader<N::BlockHeader>>,
safe: Option<SealedHeader<N::BlockHeader>>,
) -> Self
pub fn new( blocks: HashMap<B256, Arc<BlockState<N>>>, numbers: BTreeMap<u64, B256>, pending: Option<BlockState<N>>, finalized: Option<SealedHeader<N::BlockHeader>>, safe: Option<SealedHeader<N::BlockHeader>>, ) -> Self
Create a new in-memory state with the given blocks, numbers, pending state, and optional finalized header.
Sourcepub fn with_head(
head: SealedHeader<N::BlockHeader>,
finalized: Option<SealedHeader<N::BlockHeader>>,
safe: Option<SealedHeader<N::BlockHeader>>,
) -> Self
pub fn with_head( head: SealedHeader<N::BlockHeader>, finalized: Option<SealedHeader<N::BlockHeader>>, safe: Option<SealedHeader<N::BlockHeader>>, ) -> Self
Create a new in memory state with the given local head and finalized header if it exists.
Sourcepub fn hash_by_number(&self, number: u64) -> Option<B256>
pub fn hash_by_number(&self, number: u64) -> Option<B256>
Returns the block hash corresponding to the given number.
Sourcepub fn header_by_hash(&self, hash: B256) -> Option<SealedHeader<N::BlockHeader>>
pub fn header_by_hash(&self, hash: B256) -> Option<SealedHeader<N::BlockHeader>>
Returns the header corresponding to the given hash.
Sourcepub fn clear_state(&self)
pub fn clear_state(&self)
Clears all entries in the in memory state.
Sourcepub fn set_pending_block(&self, pending: ExecutedBlock<N>)
pub fn set_pending_block(&self, pending: ExecutedBlock<N>)
Updates the pending block with the given block.
Note: This assumes that the parent block of the pending block is canonical.
Sourcepub fn update_chain(&self, new_chain: NewCanonicalChain<N>)
pub fn update_chain(&self, new_chain: NewCanonicalChain<N>)
Update the in memory state with the given chain update.
Sourcepub fn remove_persisted_blocks(&self, persisted_num_hash: BlockNumHash)
pub fn remove_persisted_blocks(&self, persisted_num_hash: BlockNumHash)
Removes blocks from the in memory state that are persisted to the given height.
This will update the links between blocks and remove all blocks that are [..
persisted_height
].
Sourcepub fn state_by_hash(&self, hash: B256) -> Option<Arc<BlockState<N>>>
pub fn state_by_hash(&self, hash: B256) -> Option<Arc<BlockState<N>>>
Returns in memory state corresponding the given hash.
Sourcepub fn state_by_number(&self, number: u64) -> Option<Arc<BlockState<N>>>
pub fn state_by_number(&self, number: u64) -> Option<Arc<BlockState<N>>>
Returns in memory state corresponding the block number.
Sourcepub fn head_state(&self) -> Option<Arc<BlockState<N>>>
pub fn head_state(&self) -> Option<Arc<BlockState<N>>>
Returns the in memory head state.
Sourcepub fn pending_state(&self) -> Option<BlockState<N>>
pub fn pending_state(&self) -> Option<BlockState<N>>
Returns the in memory pending state.
Sourcepub fn pending_block_num_hash(&self) -> Option<BlockNumHash>
pub fn pending_block_num_hash(&self) -> Option<BlockNumHash>
Returns the in memory pending BlockNumHash
.
Sourcepub fn chain_info(&self) -> ChainInfo
pub fn chain_info(&self) -> ChainInfo
Returns the current ChainInfo
.
Sourcepub fn get_canonical_block_number(&self) -> u64
pub fn get_canonical_block_number(&self) -> u64
Returns the latest canonical block number.
Sourcepub fn get_safe_num_hash(&self) -> Option<BlockNumHash>
pub fn get_safe_num_hash(&self) -> Option<BlockNumHash>
Returns the BlockNumHash
of the safe head.
Sourcepub fn get_finalized_num_hash(&self) -> Option<BlockNumHash>
pub fn get_finalized_num_hash(&self) -> Option<BlockNumHash>
Returns the BlockNumHash
of the finalized head.
Sourcepub fn on_forkchoice_update_received(&self)
pub fn on_forkchoice_update_received(&self)
Hook for new fork choice update.
Sourcepub fn last_received_update_timestamp(&self) -> Option<Instant>
pub fn last_received_update_timestamp(&self) -> Option<Instant>
Returns the timestamp of the last received update.
Sourcepub fn on_transition_configuration_exchanged(&self)
pub fn on_transition_configuration_exchanged(&self)
Hook for transition configuration exchanged.
Sourcepub fn last_exchanged_transition_configuration_timestamp(
&self,
) -> Option<Instant>
pub fn last_exchanged_transition_configuration_timestamp( &self, ) -> Option<Instant>
Returns the timestamp of the last transition configuration exchanged,
Sourcepub fn set_canonical_head(&self, header: SealedHeader<N::BlockHeader>)
pub fn set_canonical_head(&self, header: SealedHeader<N::BlockHeader>)
Canonical head setter.
Sourcepub fn set_finalized(&self, header: SealedHeader<N::BlockHeader>)
pub fn set_finalized(&self, header: SealedHeader<N::BlockHeader>)
Finalized head setter.
Sourcepub fn get_canonical_head(&self) -> SealedHeader<N::BlockHeader>
pub fn get_canonical_head(&self) -> SealedHeader<N::BlockHeader>
Canonical head getter.
Sourcepub fn get_finalized_header(&self) -> Option<SealedHeader<N::BlockHeader>>
pub fn get_finalized_header(&self) -> Option<SealedHeader<N::BlockHeader>>
Finalized header getter.
Sourcepub fn get_safe_header(&self) -> Option<SealedHeader<N::BlockHeader>>
pub fn get_safe_header(&self) -> Option<SealedHeader<N::BlockHeader>>
Safe header getter.
Sourcepub fn pending_sealed_header(&self) -> Option<SealedHeader<N::BlockHeader>>
pub fn pending_sealed_header(&self) -> Option<SealedHeader<N::BlockHeader>>
Returns the SealedHeader
corresponding to the pending state.
Sourcepub fn pending_header(&self) -> Option<N::BlockHeader>
pub fn pending_header(&self) -> Option<N::BlockHeader>
Returns the Header
corresponding to the pending state.
Sourcepub fn pending_block(&self) -> Option<SealedBlock<N::BlockHeader, N::BlockBody>>
pub fn pending_block(&self) -> Option<SealedBlock<N::BlockHeader, N::BlockBody>>
Returns the SealedBlock
corresponding to the pending state.
Sourcepub fn pending_block_with_senders(
&self,
) -> Option<SealedBlockWithSenders<N::Block>>where
N::SignedTx: SignedTransaction,
pub fn pending_block_with_senders(
&self,
) -> Option<SealedBlockWithSenders<N::Block>>where
N::SignedTx: SignedTransaction,
Returns the SealedBlockWithSenders
corresponding to the pending state.
Sourcepub fn pending_block_and_receipts(
&self,
) -> Option<(SealedBlockFor<<N as NodePrimitives>::Block>, Vec<ReceiptTy<N>>)>
pub fn pending_block_and_receipts( &self, ) -> Option<(SealedBlockFor<<N as NodePrimitives>::Block>, Vec<ReceiptTy<N>>)>
Returns a tuple with the SealedBlock
corresponding to the pending
state and a vector of its Receipt
s.
Sourcepub fn subscribe_canon_state(&self) -> CanonStateNotifications<N>
pub fn subscribe_canon_state(&self) -> CanonStateNotifications<N>
Subscribe to new blocks events.
Sourcepub fn subscribe_safe_block(
&self,
) -> Receiver<Option<SealedHeader<N::BlockHeader>>>
pub fn subscribe_safe_block( &self, ) -> Receiver<Option<SealedHeader<N::BlockHeader>>>
Subscribe to new safe block events.
Sourcepub fn subscribe_finalized_block(
&self,
) -> Receiver<Option<SealedHeader<N::BlockHeader>>>
pub fn subscribe_finalized_block( &self, ) -> Receiver<Option<SealedHeader<N::BlockHeader>>>
Subscribe to new finalized block events.
Sourcepub fn notify_canon_state(&self, event: CanonStateNotification<N>)
pub fn notify_canon_state(&self, event: CanonStateNotification<N>)
Attempts to send a new CanonStateNotification
to all active Receiver handles.
Sourcepub fn state_provider(
&self,
hash: B256,
historical: StateProviderBox,
) -> MemoryOverlayStateProvider<N>
pub fn state_provider( &self, hash: B256, historical: StateProviderBox, ) -> MemoryOverlayStateProvider<N>
Return state provider with reference to in-memory blocks that overlay database state.
This merges the state of all blocks that are part of the chain that the requested block is the head of. This includes all blocks that connect back to the canonical block on disk.
Sourcepub fn canonical_chain(&self) -> impl Iterator<Item = Arc<BlockState<N>>>
pub fn canonical_chain(&self) -> impl Iterator<Item = Arc<BlockState<N>>>
Returns an iterator over all canonical blocks in the in-memory state, from newest to oldest (highest to lowest).
This iterator contains a snapshot of the in-memory state at the time of the call.
Sourcepub fn transaction_by_hash(&self, hash: TxHash) -> Option<N::SignedTx>where
N::SignedTx: Encodable2718,
pub fn transaction_by_hash(&self, hash: TxHash) -> Option<N::SignedTx>where
N::SignedTx: Encodable2718,
Returns [SignedTransaction
] type for the given TxHash
if found.
Sourcepub fn transaction_by_hash_with_meta(
&self,
tx_hash: TxHash,
) -> Option<(N::SignedTx, TransactionMeta)>where
N::SignedTx: Encodable2718,
pub fn transaction_by_hash_with_meta(
&self,
tx_hash: TxHash,
) -> Option<(N::SignedTx, TransactionMeta)>where
N::SignedTx: Encodable2718,
Returns a tuple with [SignedTransaction
] type and [TransactionMeta
] for the
given [TxHash
] if found.
Trait Implementations§
Source§impl<N: Clone + NodePrimitives> Clone for CanonicalInMemoryState<N>
impl<N: Clone + NodePrimitives> Clone for CanonicalInMemoryState<N>
Source§fn clone(&self) -> CanonicalInMemoryState<N>
fn clone(&self) -> CanonicalInMemoryState<N>
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
. Read moreAuto Trait Implementations§
impl<N> Freeze for CanonicalInMemoryState<N>
impl<N = EthPrimitives> !RefUnwindSafe for CanonicalInMemoryState<N>
impl<N> Send for CanonicalInMemoryState<N>
impl<N> Sync for CanonicalInMemoryState<N>
impl<N> Unpin for CanonicalInMemoryState<N>
impl<N = EthPrimitives> !UnwindSafe for CanonicalInMemoryState<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<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,
impl<T> MaybeSendSync for T
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: 8 bytes