From bd7004a06ae138b16e137225810020f4f0d874fb Mon Sep 17 00:00:00 2001 From: Federico Gimenez Date: Wed, 24 Jul 2024 21:02:37 +0200 Subject: [PATCH] chore: replace generic state provider with boxed trait (#9780) --- crates/engine/tree/src/tree/memory_overlay.rs | 34 +++++-------------- crates/engine/tree/src/tree/mod.rs | 8 ++--- 2 files changed, 11 insertions(+), 31 deletions(-) diff --git a/crates/engine/tree/src/tree/memory_overlay.rs b/crates/engine/tree/src/tree/memory_overlay.rs index 11c04f399..0bd7fef2c 100644 --- a/crates/engine/tree/src/tree/memory_overlay.rs +++ b/crates/engine/tree/src/tree/memory_overlay.rs @@ -8,19 +8,18 @@ use reth_trie::{updates::TrieUpdates, AccountProof, HashedPostState}; /// A state provider that stores references to in-memory blocks along with their state as well as /// the historical state provider for fallback lookups. -#[derive(Debug)] -pub struct MemoryOverlayStateProvider { +pub struct MemoryOverlayStateProvider { /// The collection of executed parent blocks. in_memory: Vec, /// The collection of hashed state from in-memory blocks. hashed_post_state: HashedPostState, /// Historical state provider for state lookups that are not found in in-memory blocks. - historical: H, + historical: Box, } -impl MemoryOverlayStateProvider { +impl MemoryOverlayStateProvider { /// Create new memory overlay state provider. - pub fn new(in_memory: Vec, historical: H) -> Self { + pub fn new(in_memory: Vec, historical: Box) -> Self { let mut hashed_post_state = HashedPostState::default(); for block in &in_memory { hashed_post_state.extend(block.hashed_state.as_ref().clone()); @@ -29,10 +28,7 @@ impl MemoryOverlayStateProvider { } } -impl BlockHashReader for MemoryOverlayStateProvider -where - H: BlockHashReader, -{ +impl BlockHashReader for MemoryOverlayStateProvider { fn block_hash(&self, number: BlockNumber) -> ProviderResult> { for block in self.in_memory.iter().rev() { if block.block.number == number { @@ -65,10 +61,7 @@ where } } -impl AccountReader for MemoryOverlayStateProvider -where - H: AccountReader + Send, -{ +impl AccountReader for MemoryOverlayStateProvider { fn basic_account(&self, address: Address) -> ProviderResult> { for block in self.in_memory.iter().rev() { if let Some(account) = block.execution_output.account(&address) { @@ -80,10 +73,7 @@ where } } -impl StateRootProvider for MemoryOverlayStateProvider -where - H: StateRootProvider + Send, -{ +impl StateRootProvider for MemoryOverlayStateProvider { // TODO: Currently this does not reuse available in-memory trie nodes. fn hashed_state_root(&self, hashed_state: &HashedPostState) -> ProviderResult { let mut state = self.hashed_post_state.clone(); @@ -102,10 +92,7 @@ where } } -impl StateProofProvider for MemoryOverlayStateProvider -where - H: StateProofProvider + Send, -{ +impl StateProofProvider for MemoryOverlayStateProvider { // TODO: Currently this does not reuse available in-memory trie nodes. fn hashed_proof( &self, @@ -119,10 +106,7 @@ where } } -impl StateProvider for MemoryOverlayStateProvider -where - H: StateProvider + Send, -{ +impl StateProvider for MemoryOverlayStateProvider { fn storage( &self, address: Address, diff --git a/crates/engine/tree/src/tree/mod.rs b/crates/engine/tree/src/tree/mod.rs index 1526200c1..845d30635 100644 --- a/crates/engine/tree/src/tree/mod.rs +++ b/crates/engine/tree/src/tree/mod.rs @@ -26,8 +26,7 @@ use reth_primitives::{ SealedBlockWithSenders, SealedHeader, B256, U256, }; use reth_provider::{ - BlockReader, ExecutionOutcome, ProviderError, StateProvider, StateProviderFactory, - StateRootProvider, + BlockReader, ExecutionOutcome, ProviderError, StateProviderFactory, StateRootProvider, }; use reth_revm::database::StateProviderDatabase; use reth_rpc_types::{ @@ -676,10 +675,7 @@ where /// This merges the state of all blocks that are part of the chain that the requested block is /// the head of. This includes all blocks that connect back to the canonical block on disk. // TODO: return error if the chain has gaps - fn state_provider( - &self, - hash: B256, - ) -> ProviderResult>> { + fn state_provider(&self, hash: B256) -> ProviderResult { let mut in_memory = Vec::new(); let mut parent_hash = hash; while let Some(executed) = self.state.tree_state.blocks_by_hash.get(&parent_hash) {