chore(trie): StorageRootProvider (#10592)

This commit is contained in:
Roman Krasiuk
2024-08-28 05:56:47 -07:00
committed by GitHub
parent ffc4f641af
commit 29b02cc0e1
13 changed files with 55 additions and 18 deletions

View File

@ -2,7 +2,7 @@ use crate::{
AccountReader, BlockHashReader, ExecutionDataProvider, StateProvider, StateRootProvider,
};
use reth_primitives::{Account, Address, BlockNumber, Bytecode, Bytes, B256};
use reth_storage_api::StateProofProvider;
use reth_storage_api::{StateProofProvider, StorageRootProvider};
use reth_storage_errors::provider::ProviderResult;
use reth_trie::{
prefix_set::TriePrefixSetsMut, updates::TrieUpdates, AccountProof, HashedPostState,
@ -127,7 +127,11 @@ impl<SP: StateProvider, EDP: ExecutionDataProvider> StateRootProvider
state_prefix_sets,
)
}
}
impl<SP: StateProvider, EDP: ExecutionDataProvider> StorageRootProvider
for BundleStateProvider<SP, EDP>
{
fn hashed_storage_root(
&self,
address: Address,

View File

@ -13,7 +13,7 @@ use reth_primitives::{
constants::EPOCH_SLOTS, Account, Address, BlockNumber, Bytecode, Bytes, StaticFileSegment,
StorageKey, StorageValue, B256,
};
use reth_storage_api::StateProofProvider;
use reth_storage_api::{StateProofProvider, StorageRootProvider};
use reth_storage_errors::provider::ProviderResult;
use reth_trie::{
prefix_set::TriePrefixSetsMut, proof::Proof, updates::TrieUpdates, witness::TrieWitness,
@ -334,7 +334,9 @@ impl<'b, TX: DbTx> StateRootProvider for HistoricalStateProviderRef<'b, TX> {
)
.map_err(|err| ProviderError::Database(err.into()))
}
}
impl<'b, TX: DbTx> StorageRootProvider for HistoricalStateProviderRef<'b, TX> {
fn hashed_storage_root(
&self,
address: Address,

View File

@ -13,7 +13,7 @@ use reth_primitives::{
Account, Address, BlockNumber, Bytecode, Bytes, StaticFileSegment, StorageKey, StorageValue,
B256,
};
use reth_storage_api::StateProofProvider;
use reth_storage_api::{StateProofProvider, StorageRootProvider};
use reth_storage_errors::provider::{ProviderError, ProviderResult};
use reth_trie::{
prefix_set::TriePrefixSetsMut, proof::Proof, updates::TrieUpdates, witness::TrieWitness,
@ -113,7 +113,9 @@ impl<'b, TX: DbTx> StateRootProvider for LatestStateProviderRef<'b, TX> {
StateRoot::overlay_root_from_nodes_with_updates(self.tx, nodes, hashed_state, prefix_sets)
.map_err(|err| ProviderError::Database(err.into()))
}
}
impl<'b, TX: DbTx> StorageRootProvider for LatestStateProviderRef<'b, TX> {
fn hashed_storage_root(
&self,
address: Address,

View File

@ -48,6 +48,8 @@ macro_rules! delegate_provider_impls {
fn state_root_with_updates(&self, state: &revm::db::BundleState) -> reth_storage_errors::provider::ProviderResult<(reth_primitives::B256, reth_trie::updates::TrieUpdates)>;
fn hashed_state_root_with_updates(&self, state: reth_trie::HashedPostState) -> reth_storage_errors::provider::ProviderResult<(reth_primitives::B256, reth_trie::updates::TrieUpdates)>;
fn hashed_state_root_from_nodes_with_updates(&self, nodes: reth_trie::updates::TrieUpdates, state: reth_trie::HashedPostState, prefix_sets: reth_trie::prefix_set::TriePrefixSetsMut) -> reth_storage_errors::provider::ProviderResult<(reth_primitives::B256, reth_trie::updates::TrieUpdates)>;
}
StorageRootProvider $(where [$($generics)*])? {
fn hashed_storage_root(&self, address: reth_primitives::Address, storage: reth_trie::HashedStorage) -> reth_storage_errors::provider::ProviderResult<reth_primitives::B256>;
}
StateProofProvider $(where [$($generics)*])? {

View File

@ -17,7 +17,7 @@ use reth_primitives::{
U256,
};
use reth_stages_types::{StageCheckpoint, StageId};
use reth_storage_api::{StageCheckpointReader, StateProofProvider};
use reth_storage_api::{StageCheckpointReader, StateProofProvider, StorageRootProvider};
use reth_storage_errors::provider::{ProviderError, ProviderResult};
use reth_trie::{
prefix_set::TriePrefixSetsMut, updates::TrieUpdates, AccountProof, HashedPostState,
@ -589,14 +589,6 @@ impl StateRootProvider for MockEthProvider {
Ok((state_root, Default::default()))
}
fn hashed_storage_root(
&self,
_address: Address,
_hashed_storage: HashedStorage,
) -> ProviderResult<B256> {
Ok(B256::default())
}
fn hashed_state_root_from_nodes_with_updates(
&self,
_nodes: TrieUpdates,
@ -608,6 +600,16 @@ impl StateRootProvider for MockEthProvider {
}
}
impl StorageRootProvider for MockEthProvider {
fn hashed_storage_root(
&self,
_address: Address,
_hashed_storage: HashedStorage,
) -> ProviderResult<B256> {
Ok(B256::default())
}
}
impl StateProofProvider for MockEthProvider {
fn proof(
&self,

View File

@ -20,10 +20,11 @@ use reth_primitives::{
};
use reth_prune_types::{PruneCheckpoint, PruneSegment};
use reth_stages_types::{StageCheckpoint, StageId};
use reth_storage_api::StateProofProvider;
use reth_storage_api::{StateProofProvider, StorageRootProvider};
use reth_storage_errors::provider::ProviderResult;
use reth_trie::{
prefix_set::TriePrefixSetsMut, updates::TrieUpdates, AccountProof, HashedPostState,
HashedStorage,
};
use revm::primitives::{BlockEnv, CfgEnvWithHandlerCfg};
use tokio::sync::{broadcast, watch};
@ -349,11 +350,13 @@ impl StateRootProvider for NoopProvider {
) -> ProviderResult<(B256, TrieUpdates)> {
Ok((B256::default(), TrieUpdates::default()))
}
}
impl StorageRootProvider for NoopProvider {
fn hashed_storage_root(
&self,
_address: Address,
_hashed_storage: reth_trie::HashedStorage,
_hashed_storage: HashedStorage,
) -> ProviderResult<B256> {
Ok(B256::default())
}