chore(trie): trie_type behind flag (#15690)

This commit is contained in:
Roman Krasiuk
2025-04-18 15:00:12 +02:00
committed by GitHub
parent b117760f34
commit fdfca34218
7 changed files with 54 additions and 46 deletions

View File

@@ -26,7 +26,7 @@ use reth_trie::{
updates::TrieUpdatesSorted,
walker::TrieWalker,
HashBuilder, HashedPostStateSorted, MultiProof, MultiProofTargets, Nibbles, StorageMultiProof,
TrieType, TRIE_ACCOUNT_RLP_MAX_SIZE,
TRIE_ACCOUNT_RLP_MAX_SIZE,
};
use reth_trie_common::proof::ProofRetainer;
use reth_trie_db::{DatabaseHashedCursorFactory, DatabaseTrieCursorFactory};
@@ -226,10 +226,9 @@ where
let mut storages: B256Map<_> =
targets.keys().map(|key| (*key, StorageMultiProof::empty())).collect();
let mut account_rlp = Vec::with_capacity(TRIE_ACCOUNT_RLP_MAX_SIZE);
let mut account_node_iter = TrieNodeIter::new(
let mut account_node_iter = TrieNodeIter::state_trie(
walker,
hashed_cursor_factory.hashed_account_cursor().map_err(ProviderError::Database)?,
TrieType::State,
);
while let Some(account_node) =
account_node_iter.try_next().map_err(ProviderError::Database)?

View File

@@ -16,7 +16,7 @@ use reth_trie::{
trie_cursor::{InMemoryTrieCursorFactory, TrieCursorFactory},
updates::TrieUpdates,
walker::TrieWalker,
HashBuilder, Nibbles, StorageRoot, TrieInput, TrieType, TRIE_ACCOUNT_RLP_MAX_SIZE,
HashBuilder, Nibbles, StorageRoot, TrieInput, TRIE_ACCOUNT_RLP_MAX_SIZE,
};
use reth_trie_db::{DatabaseHashedCursorFactory, DatabaseTrieCursorFactory};
use std::{collections::HashMap, sync::Arc};
@@ -150,10 +150,9 @@ where
prefix_sets.account_prefix_set,
)
.with_deletions_retained(retain_updates);
let mut account_node_iter = TrieNodeIter::new(
let mut account_node_iter = TrieNodeIter::state_trie(
walker,
hashed_cursor_factory.hashed_account_cursor().map_err(ProviderError::Database)?,
TrieType::State,
);
let mut hash_builder = HashBuilder::default().with_updates(retain_updates);

View File

@@ -10,7 +10,7 @@ use reth_trie::{
trie_cursor::{noop::NoopStorageTrieCursor, InMemoryStorageTrieCursor},
updates::StorageTrieUpdates,
walker::TrieWalker,
HashedStorage, TrieType,
HashedStorage,
};
use reth_trie_common::{HashBuilder, Nibbles};
use reth_trie_sparse::SparseTrie;
@@ -137,13 +137,12 @@ fn calculate_root_from_leaves_repeated(c: &mut Criterion) {
),
prefix_set,
);
let mut node_iter = TrieNodeIter::new(
let mut node_iter = TrieNodeIter::storage_trie(
walker,
HashedPostStateStorageCursor::new(
NoopHashedStorageCursor::default(),
Some(&storage_sorted),
),
TrieType::Storage,
);
let mut hb = HashBuilder::default().with_updates(true);

View File

@@ -1595,7 +1595,7 @@ mod tests {
node_iter::{TrieElement, TrieNodeIter},
trie_cursor::{noop::NoopAccountTrieCursor, TrieCursor, TrieCursorFactory},
walker::TrieWalker,
BranchNode, ExtensionNode, HashedPostState, LeafNode, TrieType,
BranchNode, ExtensionNode, HashedPostState, LeafNode,
};
use reth_trie_common::{
proof::{ProofNodes, ProofRetainer},
@@ -1646,13 +1646,12 @@ mod tests {
(nibbles.pack().into_inner().unwrap().into(), Some(account))
}))
.into_sorted();
let mut node_iter = TrieNodeIter::new(
let mut node_iter = TrieNodeIter::state_trie(
walker,
HashedPostStateAccountCursor::new(
NoopHashedAccountCursor::default(),
hashed_post_state.accounts(),
),
TrieType::State,
);
while let Some(node) = node_iter.try_next().unwrap() {

View File

@@ -1,7 +1,4 @@
use crate::{
hashed_cursor::HashedCursor, trie::TrieType, trie_cursor::TrieCursor, walker::TrieWalker,
Nibbles,
};
use crate::{hashed_cursor::HashedCursor, trie_cursor::TrieCursor, walker::TrieWalker, Nibbles};
use alloy_primitives::B256;
use reth_storage_errors::db::DatabaseError;
use tracing::trace;
@@ -76,8 +73,32 @@ impl<C, H: HashedCursor> TrieNodeIter<C, H>
where
H::Value: Copy,
{
/// Creates a new [`TrieNodeIter`] for the state trie.
pub fn state_trie(walker: TrieWalker<C>, hashed_cursor: H) -> Self {
Self::new(
walker,
hashed_cursor,
#[cfg(feature = "metrics")]
crate::TrieType::State,
)
}
/// Creates a new [`TrieNodeIter`] for the storage trie.
pub fn storage_trie(walker: TrieWalker<C>, hashed_cursor: H) -> Self {
Self::new(
walker,
hashed_cursor,
#[cfg(feature = "metrics")]
crate::TrieType::Storage,
)
}
/// Creates a new [`TrieNodeIter`].
pub fn new(walker: TrieWalker<C>, hashed_cursor: H, _trie_type: TrieType) -> Self {
fn new(
walker: TrieWalker<C>,
hashed_cursor: H,
#[cfg(feature = "metrics")] trie_type: crate::TrieType,
) -> Self {
Self {
walker,
hashed_cursor,
@@ -86,7 +107,7 @@ where
should_check_walker_key: false,
last_seeked_hashed_entry: None,
#[cfg(feature = "metrics")]
metrics: crate::metrics::TrieNodeIterMetrics::new(_trie_type),
metrics: crate::metrics::TrieNodeIterMetrics::new(trie_type),
#[cfg(feature = "metrics")]
previously_advanced_to_key: None,
}
@@ -272,8 +293,17 @@ where
#[cfg(test)]
mod tests {
use std::collections::BTreeMap;
use crate::{
hashed_cursor::{
mock::MockHashedCursorFactory, noop::NoopHashedAccountCursor, HashedCursorFactory,
HashedPostStateAccountCursor,
},
mock::{KeyVisit, KeyVisitType},
trie_cursor::{
mock::MockTrieCursorFactory, noop::NoopAccountTrieCursor, TrieCursorFactory,
},
walker::TrieWalker,
};
use alloy_primitives::{
b256,
map::{B256Map, HashMap},
@@ -287,19 +317,7 @@ mod tests {
prefix_set::PrefixSetMut, updates::TrieUpdates, BranchNode, HashedPostState, LeafNode,
RlpNode,
};
use crate::{
hashed_cursor::{
mock::MockHashedCursorFactory, noop::NoopHashedAccountCursor, HashedCursorFactory,
HashedPostStateAccountCursor,
},
mock::{KeyVisit, KeyVisitType},
trie::TrieType,
trie_cursor::{
mock::MockTrieCursorFactory, noop::NoopAccountTrieCursor, TrieCursorFactory,
},
walker::TrieWalker,
};
use std::collections::BTreeMap;
use super::{TrieElement, TrieNodeIter};
@@ -320,13 +338,12 @@ mod tests {
}))
.into_sorted();
let mut node_iter = TrieNodeIter::new(
let mut node_iter = TrieNodeIter::state_trie(
walker,
HashedPostStateAccountCursor::new(
NoopHashedAccountCursor::default(),
hashed_post_state.accounts(),
),
TrieType::State,
);
while let Some(node) = node_iter.try_next().unwrap() {
@@ -456,10 +473,9 @@ mod tests {
B256Map::default(),
);
let mut iter = TrieNodeIter::new(
let mut iter = TrieNodeIter::state_trie(
walker,
hashed_cursor_factory.hashed_account_cursor().unwrap(),
TrieType::State,
);
// Walk the iterator until it's exhausted.

View File

@@ -2,7 +2,6 @@ use crate::{
hashed_cursor::{HashedCursorFactory, HashedStorageCursor},
node_iter::{TrieElement, TrieNodeIter},
prefix_set::{PrefixSetMut, TriePrefixSetsMut},
trie::TrieType,
trie_cursor::TrieCursorFactory,
walker::TrieWalker,
HashBuilder, Nibbles, TRIE_ACCOUNT_RLP_MAX_SIZE,
@@ -125,8 +124,7 @@ where
let mut storages: B256Map<_> =
targets.keys().map(|key| (*key, StorageMultiProof::empty())).collect();
let mut account_rlp = Vec::with_capacity(TRIE_ACCOUNT_RLP_MAX_SIZE);
let mut account_node_iter =
TrieNodeIter::new(walker, hashed_account_cursor, TrieType::State);
let mut account_node_iter = TrieNodeIter::state_trie(walker, hashed_account_cursor);
while let Some(account_node) = account_node_iter.try_next()? {
match account_node {
TrieElement::Branch(node) => {
@@ -290,8 +288,7 @@ where
let mut hash_builder = HashBuilder::default()
.with_proof_retainer(retainer)
.with_updates(self.collect_branch_node_masks);
let mut storage_node_iter =
TrieNodeIter::new(walker, hashed_storage_cursor, TrieType::Storage);
let mut storage_node_iter = TrieNodeIter::storage_trie(walker, hashed_storage_cursor);
while let Some(node) = storage_node_iter.try_next()? {
match node {
TrieElement::Branch(node) => {

View File

@@ -165,7 +165,7 @@ where
self.prefix_sets.account_prefix_set,
)
.with_deletions_retained(retain_updates);
let node_iter = TrieNodeIter::new(walker, hashed_account_cursor, TrieType::State)
let node_iter = TrieNodeIter::state_trie(walker, hashed_account_cursor)
.with_last_hashed_key(state.last_account_key);
(hash_builder, node_iter)
}
@@ -173,7 +173,7 @@ where
let hash_builder = HashBuilder::default().with_updates(retain_updates);
let walker = TrieWalker::new(trie_cursor, self.prefix_sets.account_prefix_set)
.with_deletions_retained(retain_updates);
let node_iter = TrieNodeIter::new(walker, hashed_account_cursor, TrieType::State);
let node_iter = TrieNodeIter::state_trie(walker, hashed_account_cursor);
(hash_builder, node_iter)
}
};
@@ -412,8 +412,7 @@ where
let mut hash_builder = HashBuilder::default().with_updates(retain_updates);
let mut storage_node_iter =
TrieNodeIter::new(walker, hashed_storage_cursor, TrieType::Storage);
let mut storage_node_iter = TrieNodeIter::storage_trie(walker, hashed_storage_cursor);
while let Some(node) = storage_node_iter.try_next()? {
match node {
TrieElement::Branch(node) => {