reth_trie_sparse/
provider.rs1use alloy_primitives::{Bytes, B256};
4use reth_execution_errors::SparseTrieError;
5use reth_trie_common::{Nibbles, TrieMask};
6
7#[auto_impl::auto_impl(&)]
9pub trait TrieNodeProviderFactory {
10 type AccountNodeProvider: TrieNodeProvider;
12 type StorageNodeProvider: TrieNodeProvider;
14
15 fn account_node_provider(&self) -> Self::AccountNodeProvider;
17
18 fn storage_node_provider(&self, account: B256) -> Self::StorageNodeProvider;
20}
21
22#[derive(PartialEq, Eq, Clone, Debug)]
24pub struct RevealedNode {
25 pub node: Bytes,
27 pub tree_mask: Option<TrieMask>,
29 pub hash_mask: Option<TrieMask>,
31}
32
33#[auto_impl::auto_impl(&)]
35pub trait TrieNodeProvider {
36 fn trie_node(&self, path: &Nibbles) -> Result<Option<RevealedNode>, SparseTrieError>;
38}
39
40#[derive(PartialEq, Eq, Clone, Default, Debug)]
42pub struct DefaultTrieNodeProviderFactory;
43
44impl TrieNodeProviderFactory for DefaultTrieNodeProviderFactory {
45 type AccountNodeProvider = DefaultTrieNodeProvider;
46 type StorageNodeProvider = DefaultTrieNodeProvider;
47
48 fn account_node_provider(&self) -> Self::AccountNodeProvider {
49 DefaultTrieNodeProvider
50 }
51
52 fn storage_node_provider(&self, _account: B256) -> Self::StorageNodeProvider {
53 DefaultTrieNodeProvider
54 }
55}
56
57#[derive(PartialEq, Eq, Clone, Default, Debug)]
59pub struct DefaultTrieNodeProvider;
60
61impl TrieNodeProvider for DefaultTrieNodeProvider {
62 fn trie_node(&self, _path: &Nibbles) -> Result<Option<RevealedNode>, SparseTrieError> {
63 Ok(None)
64 }
65}
66
67#[inline]
69pub fn pad_path_to_key(path: &Nibbles) -> B256 {
70 let mut padded = path.pack();
71 padded.resize(32, 0);
72 B256::from_slice(&padded)
73}