From fdfca3421826a8d8a6924faa94912d7e3ee03044 Mon Sep 17 00:00:00 2001 From: Roman Krasiuk Date: Fri, 18 Apr 2025 15:00:12 +0200 Subject: [PATCH] chore(trie): `trie_type` behind flag (#15690) --- crates/trie/parallel/src/proof.rs | 5 +-- crates/trie/parallel/src/root.rs | 5 +-- crates/trie/sparse/benches/root.rs | 5 +-- crates/trie/sparse/src/trie.rs | 5 +-- crates/trie/trie/src/node_iter.rs | 66 +++++++++++++++++++----------- crates/trie/trie/src/proof/mod.rs | 7 +--- crates/trie/trie/src/trie.rs | 7 ++-- 7 files changed, 54 insertions(+), 46 deletions(-) diff --git a/crates/trie/parallel/src/proof.rs b/crates/trie/parallel/src/proof.rs index c09eed1ded..700e5d5a44 100644 --- a/crates/trie/parallel/src/proof.rs +++ b/crates/trie/parallel/src/proof.rs @@ -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)? diff --git a/crates/trie/parallel/src/root.rs b/crates/trie/parallel/src/root.rs index f184cbe9a6..2c626650b5 100644 --- a/crates/trie/parallel/src/root.rs +++ b/crates/trie/parallel/src/root.rs @@ -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); diff --git a/crates/trie/sparse/benches/root.rs b/crates/trie/sparse/benches/root.rs index 7c51cac8c8..dd39e6cc23 100644 --- a/crates/trie/sparse/benches/root.rs +++ b/crates/trie/sparse/benches/root.rs @@ -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); diff --git a/crates/trie/sparse/src/trie.rs b/crates/trie/sparse/src/trie.rs index 64ee915365..17bf19da9c 100644 --- a/crates/trie/sparse/src/trie.rs +++ b/crates/trie/sparse/src/trie.rs @@ -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() { diff --git a/crates/trie/trie/src/node_iter.rs b/crates/trie/trie/src/node_iter.rs index a92c370fc8..b3ffd6d062 100644 --- a/crates/trie/trie/src/node_iter.rs +++ b/crates/trie/trie/src/node_iter.rs @@ -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 TrieNodeIter where H::Value: Copy, { + /// Creates a new [`TrieNodeIter`] for the state trie. + pub fn state_trie(walker: TrieWalker, 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, hashed_cursor: H) -> Self { + Self::new( + walker, + hashed_cursor, + #[cfg(feature = "metrics")] + crate::TrieType::Storage, + ) + } + /// Creates a new [`TrieNodeIter`]. - pub fn new(walker: TrieWalker, hashed_cursor: H, _trie_type: TrieType) -> Self { + fn new( + walker: TrieWalker, + 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. diff --git a/crates/trie/trie/src/proof/mod.rs b/crates/trie/trie/src/proof/mod.rs index f72f573632..b86f327323 100644 --- a/crates/trie/trie/src/proof/mod.rs +++ b/crates/trie/trie/src/proof/mod.rs @@ -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) => { diff --git a/crates/trie/trie/src/trie.rs b/crates/trie/trie/src/trie.rs index 43fdec928c..e485f9e3f3 100644 --- a/crates/trie/trie/src/trie.rs +++ b/crates/trie/trie/src/trie.rs @@ -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) => {