fix(providers): collect BlockState before constructing DB provider (#11338)

Co-authored-by: Matthias Seitz <matthias.seitz@outlook.de>
This commit is contained in:
Dan Cline
2024-09-30 11:50:15 -04:00
committed by GitHub
parent 42afcbd75a
commit 09f0526e70
2 changed files with 15 additions and 1 deletions

View File

@@ -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

View File

@@ -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: