reth_trie_sparse/
blinded.rs
1use alloy_primitives::{Bytes, B256};
4use reth_execution_errors::SparseTrieError;
5use reth_trie_common::{Nibbles, TrieMask};
6
7pub trait BlindedProviderFactory {
9 type AccountNodeProvider: BlindedProvider;
11 type StorageNodeProvider: BlindedProvider;
13
14 fn account_node_provider(&self) -> Self::AccountNodeProvider;
16
17 fn storage_node_provider(&self, account: B256) -> Self::StorageNodeProvider;
19}
20
21#[derive(Debug)]
23pub struct RevealedNode {
24 pub node: Bytes,
26 pub tree_mask: Option<TrieMask>,
28 pub hash_mask: Option<TrieMask>,
30}
31
32pub trait BlindedProvider {
34 fn blinded_node(&mut self, path: &Nibbles) -> Result<Option<RevealedNode>, SparseTrieError>;
36}
37
38#[derive(PartialEq, Eq, Clone, Default, Debug)]
40pub struct DefaultBlindedProviderFactory;
41
42impl BlindedProviderFactory for DefaultBlindedProviderFactory {
43 type AccountNodeProvider = DefaultBlindedProvider;
44 type StorageNodeProvider = DefaultBlindedProvider;
45
46 fn account_node_provider(&self) -> Self::AccountNodeProvider {
47 DefaultBlindedProvider
48 }
49
50 fn storage_node_provider(&self, _account: B256) -> Self::StorageNodeProvider {
51 DefaultBlindedProvider
52 }
53}
54
55#[derive(PartialEq, Eq, Clone, Default, Debug)]
57pub struct DefaultBlindedProvider;
58
59impl BlindedProvider for DefaultBlindedProvider {
60 fn blinded_node(&mut self, _path: &Nibbles) -> Result<Option<RevealedNode>, SparseTrieError> {
61 Ok(None)
62 }
63}
64
65#[inline]
67pub fn pad_path_to_key(path: &Nibbles) -> B256 {
68 let mut padded = path.pack();
69 padded.resize(32, 0);
70 B256::from_slice(&padded)
71}