pub struct SparseStateTrie<F: BlindedProviderFactory = DefaultBlindedProviderFactory> { /* private fields */ }
Expand description
Sparse state trie representing lazy-loaded Ethereum state trie.
Implementations§
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 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<&RevealedSparseTrie<F::AccountNodeProvider>>
pub const fn state_trie_ref( &self, ) -> Option<&RevealedSparseTrie<F::AccountNodeProvider>>
Returns reference to state trie if it was revealed.
Sourcepub fn storage_trie_ref(
&self,
address: &B256,
) -> Option<&RevealedSparseTrie<F::StorageNodeProvider>>
pub fn storage_trie_ref( &self, address: &B256, ) -> Option<&RevealedSparseTrie<F::StorageNodeProvider>>
Returns reference to storage trie if it was 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,
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_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.
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) -> SparseStateTrieResult<B256>
pub fn root(&mut self) -> 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,
) -> SparseStateTrieResult<(B256, TrieUpdates)>
pub fn root_with_updates( &mut self, ) -> 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>,
) -> 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>,
is_private: bool,
) -> SparseStateTrieResult<()>
pub fn update_storage_leaf( &mut self, address: B256, slot: Nibbles, value: Vec<u8>, is_private: bool, ) -> 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 update_account_storage_root(
&mut self,
address: B256,
) -> SparseStateTrieResult<()>
pub fn update_account_storage_root( &mut self, address: B256, ) -> SparseStateTrieResult<()>
Update the storage root of a revealed account.
If the account doesn’t exist in the trie, the function is a no-op.
If the new storage root is empty, and the account info was already 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§
Auto Trait Implementations§
impl<F> Freeze for SparseStateTrie<F>where
F: Freeze,
impl<F = DefaultBlindedProviderFactory> !RefUnwindSafe for SparseStateTrie<F>
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 = DefaultBlindedProviderFactory> !UnwindSafe for SparseStateTrie<F>
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> ErasedDestructor for Twhere
T: 'static,
impl<T> MaybeDebug for Twhere
T: Debug,
impl<T> MaybeSend for Twhere
T: Send,
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.