pub struct SparseStateTrie<A = SerialSparseTrie, S = SerialSparseTrie> { /* private fields */ }
Expand description
Sparse state trie representing lazy-loaded Ethereum state trie.
Implementations§
Source§impl<A, S> SparseStateTrie<A, S>
impl<A, S> SparseStateTrie<A, S>
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 with_accounts_trie(self, trie: SparseTrie<A>) -> Self
pub fn with_accounts_trie(self, trie: SparseTrie<A>) -> Self
Set the accounts trie to the given SparseTrie
.
Source§impl<A, S> SparseStateTrie<A, S>
impl<A, S> SparseStateTrie<A, S>
Sourcepub fn new() -> Self
pub fn new() -> Self
Create new SparseStateTrie
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 check_valid_account_witness(&self, address: B256) -> bool
pub fn check_valid_account_witness(&self, address: B256) -> bool
Was the account witness for address
complete?
Sourcepub fn check_valid_storage_witness(&self, address: B256, slot: B256) -> bool
pub fn check_valid_storage_witness(&self, address: B256, slot: B256) -> bool
Was the storage-slot witness for (address
,slot
) complete?
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 get_account_value(&self, account: &B256) -> Option<&Vec<u8>>
pub fn get_account_value(&self, account: &B256) -> Option<&Vec<u8>>
Returns reference to bytes representing leaf value for the target account.
Sourcepub fn get_storage_slot_value(
&self,
account: &B256,
slot: &B256,
) -> Option<&Vec<u8>>
pub fn get_storage_slot_value( &self, account: &B256, slot: &B256, ) -> Option<&Vec<u8>>
Returns reference to bytes representing leaf value for the target account and storage slot.
Sourcepub const fn state_trie_ref(&self) -> Option<&A>
pub const fn state_trie_ref(&self) -> Option<&A>
Returns reference to state trie if it was revealed.
Sourcepub fn storage_trie_ref(&self, address: &B256) -> Option<&S>
pub fn storage_trie_ref(&self, address: &B256) -> Option<&S>
Returns reference to storage trie if it was revealed.
Sourcepub fn storage_trie_mut(&mut self, address: &B256) -> Option<&mut S>
pub fn storage_trie_mut(&mut self, address: &B256) -> Option<&mut S>
Returns mutable reference to storage sparse trie if it was revealed.
Sourcepub fn take_storage_trie(&mut self, address: &B256) -> Option<SparseTrie<S>>
pub fn take_storage_trie(&mut self, address: &B256) -> Option<SparseTrie<S>>
Takes the storage trie for the provided address.
Sourcepub fn insert_storage_trie(
&mut self,
address: B256,
storage_trie: SparseTrie<S>,
)
pub fn insert_storage_trie( &mut self, address: B256, storage_trie: SparseTrie<S>, )
Inserts storage trie for the provided address.
Sourcepub fn reveal_multiproof(
&mut self,
multiproof: MultiProof,
) -> SparseStateTrieResult<()>
pub fn reveal_multiproof( &mut self, multiproof: MultiProof, ) -> SparseStateTrieResult<()>
Reveal unknown trie paths from multiproof. NOTE: This method does not extensively validate the proof.
Sourcepub fn reveal_decoded_multiproof(
&mut self,
multiproof: DecodedMultiProof,
) -> SparseStateTrieResult<()>
pub fn reveal_decoded_multiproof( &mut self, multiproof: DecodedMultiProof, ) -> SparseStateTrieResult<()>
Reveal unknown trie paths from decoded multiproof. NOTE: This method does not extensively validate the proof.
Sourcepub fn reveal_account_multiproof(
&mut self,
account_subtree: ProofNodes,
branch_node_hash_masks: HashMap<Nibbles, TrieMask>,
branch_node_tree_masks: HashMap<Nibbles, TrieMask>,
) -> SparseStateTrieResult<()>
pub fn reveal_account_multiproof( &mut self, account_subtree: ProofNodes, branch_node_hash_masks: HashMap<Nibbles, TrieMask>, branch_node_tree_masks: HashMap<Nibbles, TrieMask>, ) -> SparseStateTrieResult<()>
Reveals an account multiproof.
Sourcepub fn reveal_decoded_account_multiproof(
&mut self,
account_subtree: DecodedProofNodes,
branch_node_hash_masks: HashMap<Nibbles, TrieMask>,
branch_node_tree_masks: HashMap<Nibbles, TrieMask>,
) -> SparseStateTrieResult<()>
pub fn reveal_decoded_account_multiproof( &mut self, account_subtree: DecodedProofNodes, branch_node_hash_masks: HashMap<Nibbles, TrieMask>, branch_node_tree_masks: HashMap<Nibbles, TrieMask>, ) -> SparseStateTrieResult<()>
Reveals a decoded account multiproof.
Sourcepub fn reveal_storage_multiproof(
&mut self,
account: B256,
storage_subtree: StorageMultiProof,
) -> SparseStateTrieResult<()>
pub fn reveal_storage_multiproof( &mut self, account: B256, storage_subtree: StorageMultiProof, ) -> SparseStateTrieResult<()>
Reveals a storage multiproof for the given address.
Sourcepub fn reveal_decoded_storage_multiproof(
&mut self,
account: B256,
storage_subtree: DecodedStorageMultiProof,
) -> SparseStateTrieResult<()>
pub fn reveal_decoded_storage_multiproof( &mut self, account: B256, storage_subtree: DecodedStorageMultiProof, ) -> SparseStateTrieResult<()>
Reveals a decoded storage multiproof for the given address.
Sourcepub fn reveal_witness(
&mut self,
state_root: B256,
witness: &B256Map<Bytes>,
) -> SparseStateTrieResult<()>
pub fn reveal_witness( &mut self, state_root: B256, witness: &B256Map<Bytes>, ) -> SparseStateTrieResult<()>
Reveal state witness with the given state root.
The state witness is expected to be a map of keccak(rlp(node)): rlp(node).
NOTE: This method does not extensively validate the witness.
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_subtries(&mut self)
pub fn calculate_subtries(&mut self)
Calculates the hashes of subtries.
If the trie has not been revealed, this function does nothing.
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 root(
&mut self,
provider_factory: impl TrieNodeProviderFactory,
) -> SparseStateTrieResult<B256>
pub fn root( &mut self, provider_factory: impl TrieNodeProviderFactory, ) -> SparseStateTrieResult<B256>
Returns sparse trie root.
If the trie has not been revealed, this function reveals the root node and returns its hash.
Sourcepub fn root_with_updates(
&mut self,
provider_factory: impl TrieNodeProviderFactory,
) -> SparseStateTrieResult<(B256, TrieUpdates)>
pub fn root_with_updates( &mut self, provider_factory: impl TrieNodeProviderFactory, ) -> SparseStateTrieResult<(B256, TrieUpdates)>
Returns sparse trie root and trie updates if the trie has been revealed.
Sourcepub fn storage_trie_updates(&mut self) -> B256Map<StorageTrieUpdates>
pub fn storage_trie_updates(&mut self) -> B256Map<StorageTrieUpdates>
Returns storage trie updates for tries that have been revealed.
Panics if any of the storage tries are not 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.
Sourcepub fn update_account_leaf(
&mut self,
path: Nibbles,
value: Vec<u8>,
provider_factory: impl TrieNodeProviderFactory,
) -> SparseStateTrieResult<()>
pub fn update_account_leaf( &mut self, path: Nibbles, value: Vec<u8>, provider_factory: impl TrieNodeProviderFactory, ) -> SparseStateTrieResult<()>
Update the account leaf node.
Sourcepub fn update_storage_leaf(
&mut self,
address: B256,
slot: Nibbles,
value: Vec<u8>,
provider_factory: impl TrieNodeProviderFactory,
) -> SparseStateTrieResult<()>
pub fn update_storage_leaf( &mut self, address: B256, slot: Nibbles, value: Vec<u8>, provider_factory: impl TrieNodeProviderFactory, ) -> SparseStateTrieResult<()>
Update the leaf node of a revealed storage trie at the provided address.
Sourcepub fn update_account(
&mut self,
address: B256,
account: Account,
provider_factory: impl TrieNodeProviderFactory,
) -> SparseStateTrieResult<bool>
pub fn update_account( &mut self, address: B256, account: Account, provider_factory: impl TrieNodeProviderFactory, ) -> SparseStateTrieResult<bool>
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.
Returns false if the new account info and storage trie are empty, indicating the account leaf should be removed.
Sourcepub fn update_account_storage_root(
&mut self,
address: B256,
provider_factory: impl TrieNodeProviderFactory,
) -> SparseStateTrieResult<bool>
pub fn update_account_storage_root( &mut self, address: B256, provider_factory: impl TrieNodeProviderFactory, ) -> SparseStateTrieResult<bool>
Update the storage root of a revealed account.
If the account doesn’t exist in the trie, the function is a no-op.
Returns false if the new storage root is empty, and the account info was already empty, indicating the account leaf should be removed.
Sourcepub fn remove_account_leaf(
&mut self,
path: &Nibbles,
provider_factory: impl TrieNodeProviderFactory,
) -> SparseStateTrieResult<()>
pub fn remove_account_leaf( &mut self, path: &Nibbles, provider_factory: impl TrieNodeProviderFactory, ) -> SparseStateTrieResult<()>
Remove the account leaf node.
Sourcepub fn remove_storage_leaf(
&mut self,
address: B256,
slot: &Nibbles,
provider_factory: impl TrieNodeProviderFactory,
) -> SparseStateTrieResult<()>
pub fn remove_storage_leaf( &mut self, address: B256, slot: &Nibbles, provider_factory: impl TrieNodeProviderFactory, ) -> SparseStateTrieResult<()>
Update the leaf node of a storage trie at the provided address.
Trait Implementations§
Auto Trait Implementations§
impl<A, S> Freeze for SparseStateTrie<A, S>
impl<A = SerialSparseTrie, S = SerialSparseTrie> !RefUnwindSafe for SparseStateTrie<A, S>
impl<A, S> Send for SparseStateTrie<A, S>
impl<A, S> Sync for SparseStateTrie<A, S>
impl<A, S> Unpin for SparseStateTrie<A, S>
impl<A = SerialSparseTrie, S = SerialSparseTrie> !UnwindSafe for SparseStateTrie<A, S>
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<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> 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: 312 bytes