pub struct SparseStateTrie<F: BlindedProviderFactory = DefaultBlindedProviderFactory> { /* private fields */ }
Expand description
Sparse state trie representing lazy-loaded Ethereum state trie.
Implementations§
Source§impl SparseStateTrie
impl SparseStateTrie
Sourcepub fn from_state(state: SparseTrie) -> Self
pub fn from_state(state: SparseTrie) -> Self
Create state trie from state trie.
Source§impl<F: BlindedProviderFactory> SparseStateTrie<F>
impl<F: BlindedProviderFactory> SparseStateTrie<F>
Sourcepub fn new(provider_factory: F) -> Self
pub fn new(provider_factory: F) -> Self
Create new SparseStateTrie
with blinded node provider factory.
Sourcepub const fn with_updates(self, retain_updates: bool) -> Self
pub const fn with_updates(self, retain_updates: bool) -> Self
Set the retention of branch node updates and deletions.
Sourcepub fn is_account_revealed(&self, account: &B256) -> bool
pub fn is_account_revealed(&self, account: &B256) -> bool
Returns true
if account was already revealed.
Sourcepub fn is_storage_slot_revealed(&self, account: &B256, slot: &B256) -> bool
pub fn is_storage_slot_revealed(&self, account: &B256, slot: &B256) -> bool
Returns true
if storage slot for account was already revealed.
Sourcepub fn storage_trie_mut(
&mut self,
address: &B256,
) -> Option<&mut RevealedSparseTrie<F::StorageNodeProvider>>
pub fn storage_trie_mut( &mut self, address: &B256, ) -> Option<&mut RevealedSparseTrie<F::StorageNodeProvider>>
Returns mutable reference to storage sparse trie if it was revealed.
Sourcepub fn take_storage_trie(
&mut self,
address: &B256,
) -> Option<SparseTrie<F::StorageNodeProvider>>
pub fn take_storage_trie( &mut self, address: &B256, ) -> Option<SparseTrie<F::StorageNodeProvider>>
Takes the storage trie for the provided address.
Sourcepub fn insert_storage_trie(
&mut self,
address: B256,
storage_trie: SparseTrie<F::StorageNodeProvider>,
)
pub fn insert_storage_trie( &mut self, address: B256, storage_trie: SparseTrie<F::StorageNodeProvider>, )
Inserts storage trie for the provided address.
Sourcepub fn reveal_account(
&mut self,
account: B256,
proof: impl IntoIterator<Item = (Nibbles, Bytes)>,
) -> SparseStateTrieResult<()>
pub fn reveal_account( &mut self, account: B256, proof: impl IntoIterator<Item = (Nibbles, Bytes)>, ) -> SparseStateTrieResult<()>
Reveal unknown trie paths from provided leaf path and its proof for the account.
Panics if trie updates retention is enabled.
NOTE: This method does not extensively validate the proof.
Sourcepub fn reveal_storage_slot(
&mut self,
account: B256,
slot: B256,
proof: impl IntoIterator<Item = (Nibbles, Bytes)>,
) -> SparseStateTrieResult<()>
pub fn reveal_storage_slot( &mut self, account: B256, slot: B256, proof: impl IntoIterator<Item = (Nibbles, Bytes)>, ) -> SparseStateTrieResult<()>
Reveal unknown trie paths from provided leaf path and its proof for the storage slot.
Panics if trie updates retention is enabled.
NOTE: This method does not extensively validate the proof.
Sourcepub fn reveal_multiproof(
&mut self,
targets: MultiProofTargets,
multiproof: MultiProof,
) -> SparseStateTrieResult<()>
pub fn reveal_multiproof( &mut self, targets: MultiProofTargets, multiproof: MultiProof, ) -> SparseStateTrieResult<()>
Reveal unknown trie paths from multiproof and the list of included accounts and slots. NOTE: This method does not extensively validate the proof.
Sourcepub fn wipe_storage(&mut self, address: B256) -> SparseStateTrieResult<()>
pub fn wipe_storage(&mut self, address: B256) -> SparseStateTrieResult<()>
Wipe the storage trie at the provided address.
Sourcepub fn calculate_below_level(&mut self, level: usize)
pub fn calculate_below_level(&mut self, level: usize)
Calculates the hashes of the nodes below the provided level.
Sourcepub fn storage_root(&mut self, account: B256) -> Option<B256>
pub fn storage_root(&mut self, account: B256) -> Option<B256>
Returns storage sparse trie root if the trie has been revealed.
Sourcepub fn take_trie_updates(&mut self) -> Option<TrieUpdates>
pub fn take_trie_updates(&mut self) -> Option<TrieUpdates>
Returns [TrieUpdates
] by taking the updates from the revealed sparse tries.
Returns None
if the accounts trie is not revealed.
Source§impl<F> SparseStateTrie<F>where
F: BlindedProviderFactory,
SparseTrieError: From<<F::AccountNodeProvider as BlindedProvider>::Error> + From<<F::StorageNodeProvider as BlindedProvider>::Error>,
impl<F> SparseStateTrie<F>where
F: BlindedProviderFactory,
SparseTrieError: From<<F::AccountNodeProvider as BlindedProvider>::Error> + From<<F::StorageNodeProvider as BlindedProvider>::Error>,
Sourcepub fn update_account_leaf(
&mut self,
path: Nibbles,
value: Vec<u8>,
) -> SparseStateTrieResult<()>
pub fn update_account_leaf( &mut self, path: Nibbles, value: Vec<u8>, ) -> SparseStateTrieResult<()>
Update the account leaf node.
Sourcepub fn update_storage_leaf(
&mut self,
address: B256,
slot: Nibbles,
value: Vec<u8>,
) -> SparseStateTrieResult<()>
pub fn update_storage_leaf( &mut self, address: B256, slot: Nibbles, value: Vec<u8>, ) -> SparseStateTrieResult<()>
Update the leaf node of a storage trie at the provided address.
Sourcepub fn update_account(
&mut self,
address: B256,
account: Account,
) -> SparseStateTrieResult<()>
pub fn update_account( &mut self, address: B256, account: Account, ) -> SparseStateTrieResult<()>
Update or remove trie account based on new account info. This method will either recompute the storage root based on update storage trie or look it up from existing leaf value.
If the new account info and storage trie are empty, the account leaf will be removed.
Sourcepub fn remove_account_leaf(
&mut self,
path: &Nibbles,
) -> SparseStateTrieResult<()>
pub fn remove_account_leaf( &mut self, path: &Nibbles, ) -> SparseStateTrieResult<()>
Remove the account leaf node.
Sourcepub fn remove_storage_leaf(
&mut self,
address: B256,
slot: &Nibbles,
) -> SparseStateTrieResult<()>
pub fn remove_storage_leaf( &mut self, address: B256, slot: &Nibbles, ) -> SparseStateTrieResult<()>
Update the leaf node of a storage trie at the provided address.
Trait Implementations§
Source§impl<P: BlindedProviderFactory> Debug for SparseStateTrie<P>
impl<P: BlindedProviderFactory> Debug for SparseStateTrie<P>
Auto Trait Implementations§
impl<F> Freeze for SparseStateTrie<F>where
F: Freeze,
impl<F> RefUnwindSafe for SparseStateTrie<F>where
F: RefUnwindSafe,
<F as BlindedProviderFactory>::AccountNodeProvider: RefUnwindSafe,
<F as BlindedProviderFactory>::StorageNodeProvider: RefUnwindSafe,
impl<F> Send for SparseStateTrie<F>where
F: Send,
<F as BlindedProviderFactory>::AccountNodeProvider: Send,
<F as BlindedProviderFactory>::StorageNodeProvider: Send,
impl<F> Sync for SparseStateTrie<F>where
F: Sync,
<F as BlindedProviderFactory>::AccountNodeProvider: Sync,
<F as BlindedProviderFactory>::StorageNodeProvider: Sync,
impl<F> Unpin for SparseStateTrie<F>where
F: Unpin,
impl<F> UnwindSafe for SparseStateTrie<F>where
F: UnwindSafe,
<F as BlindedProviderFactory>::AccountNodeProvider: UnwindSafe,
<F as BlindedProviderFactory>::StorageNodeProvider: UnwindSafe,
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
§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> MaybeDebug for Twhere
T: Debug,
Layout§
Note: Unable to compute type layout, possibly due to this type having generic parameters. Layout can only be computed for concrete, fully-instantiated types.