Struct SparseStateTrie

Source
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>

Source

pub fn new(provider_factory: F) -> Self

Create new SparseStateTrie with blinded node provider factory.

Source

pub const fn with_updates(self, retain_updates: bool) -> Self

Set the retention of branch node updates and deletions.

Source

pub fn is_account_revealed(&self, account: B256) -> bool

Returns true if account was already revealed.

Source

pub fn check_valid_account_witness(&self, address: B256) -> bool

Was the account witness for address complete?

Source

pub fn check_valid_storage_witness(&self, address: B256, slot: B256) -> bool

Was the storage-slot witness for (address,slot) complete?

Source

pub fn is_storage_slot_revealed(&self, account: B256, slot: B256) -> bool

Returns true if storage slot for account was already revealed.

Source

pub fn get_account_value(&self, account: &B256) -> Option<&Vec<u8>>

Returns reference to bytes representing leaf value for the target account.

Source

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.

Source

pub const fn state_trie_ref( &self, ) -> Option<&RevealedSparseTrie<F::AccountNodeProvider>>

Returns reference to state trie if it was revealed.

Source

pub fn storage_trie_ref( &self, address: &B256, ) -> Option<&RevealedSparseTrie<F::StorageNodeProvider>>

Returns reference to storage trie if it was revealed.

Source

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.

Source

pub fn take_storage_trie( &mut self, address: &B256, ) -> Option<SparseTrie<F::StorageNodeProvider>>

Takes the storage trie for the provided address.

Source

pub fn insert_storage_trie( &mut self, address: B256, storage_trie: SparseTrie<F::StorageNodeProvider>, )

Inserts storage trie for the provided address.

Source

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.

Source

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.

Source

pub fn reveal_multiproof( &mut self, multiproof: MultiProof, ) -> SparseStateTrieResult<()>

Reveal unknown trie paths from multiproof. NOTE: This method does not extensively validate the proof.

Source

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.

Source

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.

Source

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.

Source

pub fn reveal_storage_multiproof( &mut self, account: B256, storage_subtree: StorageMultiProof, ) -> SparseStateTrieResult<()>

Reveals a storage multiproof for the given address.

Source

pub fn reveal_decoded_storage_multiproof( &mut self, account: B256, storage_subtree: DecodedStorageMultiProof, ) -> SparseStateTrieResult<()>

Reveals a decoded storage multiproof for the given address.

Source

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.

Source

pub fn wipe_storage(&mut self, address: B256) -> SparseStateTrieResult<()>

Wipe the storage trie at the provided address.

Source

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.

Source

pub fn storage_root(&mut self, account: B256) -> Option<B256>

Returns storage sparse trie root if the trie has been revealed.

Source

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.

Source

pub fn root_with_updates( &mut self, ) -> SparseStateTrieResult<(B256, TrieUpdates)>

Returns sparse trie root and trie updates if the trie has been revealed.

Source

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.

Source

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

pub fn update_account_leaf( &mut self, path: Nibbles, value: Vec<u8>, ) -> SparseStateTrieResult<()>

Update the account leaf node.

Source

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.

Source

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.

Source

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.

Source

pub fn remove_account_leaf( &mut self, path: &Nibbles, ) -> SparseStateTrieResult<()>

Remove the account leaf node.

Source

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>

Source§

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

Formats the value using the given formatter. Read more

Auto Trait Implementations§

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
§

impl<T> Conv for T

§

fn conv<T>(self) -> T
where Self: Into<T>,

Converts self into T using Into<T>. 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<TxEnv, T> FromRecoveredTx<&T> for TxEnv
where TxEnv: FromRecoveredTx<T>,

§

fn from_recovered_tx(tx: &&T, sender: Address) -> TxEnv

Builds a TxEnv from a transaction and a sender address.
§

impl<TxEnv, T> FromTxWithEncoded<&T> for TxEnv
where TxEnv: FromTxWithEncoded<T>,

§

fn from_encoded_tx(tx: &&T, sender: Address, encoded: Bytes) -> TxEnv

Builds a TxEnv from a transaction, its sender, and encoded transaction bytes.
§

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

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
§

impl<T> ErasedDestructor for T
where T: 'static,

§

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

§

impl<T> MaybeSend for T
where 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.