mirror of
https://github.com/paradigmxyz/reth.git
synced 2026-01-26 23:58:46 -05:00
fix(providers): collect BlockState before constructing DB provider (#11338)
Co-authored-by: Matthias Seitz <matthias.seitz@outlook.de>
This commit is contained in:
@@ -494,6 +494,20 @@ impl CanonicalInMemoryState {
|
||||
self.inner.canon_state_notification_sender.send(event).ok();
|
||||
}
|
||||
|
||||
/// Return state provider with reference to in-memory blocks that overlay database state.
|
||||
///
|
||||
/// 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.
|
||||
pub fn state_provider_from_state(
|
||||
&self,
|
||||
state: &BlockState,
|
||||
historical: StateProviderBox,
|
||||
) -> MemoryOverlayStateProvider {
|
||||
let in_memory = state.chain().into_iter().map(|block_state| block_state.block()).collect();
|
||||
|
||||
MemoryOverlayStateProvider::new(historical, in_memory)
|
||||
}
|
||||
|
||||
/// Return state provider with reference to in-memory blocks that overlay database state.
|
||||
///
|
||||
/// This merges the state of all blocks that are part of the chain that the requested block is
|
||||
|
||||
@@ -177,7 +177,7 @@ impl<N: ProviderNodeTypes> BlockchainProvider2<N> {
|
||||
let state = state.as_ref();
|
||||
let anchor_hash = state.anchor().hash;
|
||||
let latest_historical = self.database.history_by_block_hash(anchor_hash)?;
|
||||
Ok(self.canonical_in_memory_state.state_provider(state.hash(), latest_historical))
|
||||
Ok(self.canonical_in_memory_state.state_provider_from_state(state, latest_historical))
|
||||
}
|
||||
|
||||
/// Returns:
|
||||
|
||||
Reference in New Issue
Block a user