feat: provide CanonicalInMemory state as input to EngineHandler (#9764)

This commit is contained in:
Federico Gimenez
2024-07-24 16:29:39 +02:00
committed by GitHub
parent 21335d65d0
commit bacc61e567
3 changed files with 17 additions and 6 deletions

View File

@ -23,7 +23,7 @@ use reth_payload_primitives::{PayloadAttributes, PayloadBuilderAttributes, Paylo
use reth_payload_validator::ExecutionPayloadValidator; use reth_payload_validator::ExecutionPayloadValidator;
use reth_primitives::{ use reth_primitives::{
Block, BlockNumHash, BlockNumber, GotExpected, Header, Receipts, Requests, SealedBlock, Block, BlockNumHash, BlockNumber, GotExpected, Header, Receipts, Requests, SealedBlock,
SealedBlockWithSenders, SealedHeader, B256, U256, SealedBlockWithSenders, B256, U256,
}; };
use reth_provider::{ use reth_provider::{
BlockReader, ExecutionOutcome, StateProvider, StateProviderFactory, StateRootProvider, BlockReader, ExecutionOutcome, StateProvider, StateProviderFactory, StateRootProvider,
@ -353,7 +353,7 @@ where
incoming: Receiver<FromEngine<BeaconEngineMessage<T>>>, incoming: Receiver<FromEngine<BeaconEngineMessage<T>>>,
outgoing: UnboundedSender<EngineApiEvent>, outgoing: UnboundedSender<EngineApiEvent>,
state: EngineApiTreeState, state: EngineApiTreeState,
header: SealedHeader, canonical_in_memory_state: CanonicalInMemoryState,
persistence: PersistenceHandle, persistence: PersistenceHandle,
payload_builder: PayloadBuilderHandle<T>, payload_builder: PayloadBuilderHandle<T>,
) -> Self { ) -> Self {
@ -368,7 +368,7 @@ where
persistence_state: PersistenceState::default(), persistence_state: PersistenceState::default(),
is_backfill_active: false, is_backfill_active: false,
state, state,
canonical_in_memory_state: CanonicalInMemoryState::with_head(header), canonical_in_memory_state,
payload_builder, payload_builder,
} }
} }
@ -385,6 +385,7 @@ where
incoming: Receiver<FromEngine<BeaconEngineMessage<T>>>, incoming: Receiver<FromEngine<BeaconEngineMessage<T>>>,
persistence: PersistenceHandle, persistence: PersistenceHandle,
payload_builder: PayloadBuilderHandle<T>, payload_builder: PayloadBuilderHandle<T>,
canonical_in_memory_state: CanonicalInMemoryState,
) -> UnboundedReceiver<EngineApiEvent> { ) -> UnboundedReceiver<EngineApiEvent> {
let best_block_number = provider.best_block_number().unwrap_or(0); let best_block_number = provider.best_block_number().unwrap_or(0);
let header = provider.sealed_header(best_block_number).ok().flatten().unwrap_or_default(); let header = provider.sealed_header(best_block_number).ok().flatten().unwrap_or_default();
@ -404,7 +405,7 @@ where
incoming, incoming,
tx, tx,
state, state,
header, canonical_in_memory_state,
persistence, persistence,
payload_builder, payload_builder,
); );
@ -1477,6 +1478,7 @@ mod tests {
let header = chain_spec.genesis_header().seal_slow(); let header = chain_spec.genesis_header().seal_slow();
let engine_api_tree_state = EngineApiTreeState::new(10, 10, header.num_hash()); let engine_api_tree_state = EngineApiTreeState::new(10, 10, header.num_hash());
let canonical_in_memory_state = CanonicalInMemoryState::with_head(header);
let (to_payload_service, payload_command_rx) = unbounded_channel(); let (to_payload_service, payload_command_rx) = unbounded_channel();
let payload_builder = PayloadBuilderHandle::new(to_payload_service); let payload_builder = PayloadBuilderHandle::new(to_payload_service);
@ -1488,7 +1490,7 @@ mod tests {
to_tree_rx, to_tree_rx,
from_tree_tx, from_tree_tx,
engine_api_tree_state, engine_api_tree_state,
header, canonical_in_memory_state,
persistence_handle, persistence_handle,
payload_builder, payload_builder,
); );
@ -1544,6 +1546,7 @@ mod tests {
}; };
let header = blocks.first().unwrap().block().header.clone(); let header = blocks.first().unwrap().block().header.clone();
let canonical_in_memory_state = CanonicalInMemoryState::with_head(header);
let (to_payload_service, payload_command_rx) = unbounded_channel(); let (to_payload_service, payload_command_rx) = unbounded_channel();
let payload_builder = PayloadBuilderHandle::new(to_payload_service); let payload_builder = PayloadBuilderHandle::new(to_payload_service);
@ -1555,7 +1558,7 @@ mod tests {
to_tree_rx, to_tree_rx,
from_tree_tx, from_tree_tx,
engine_api_tree_state, engine_api_tree_state,
header, canonical_in_memory_state,
persistence_handle, persistence_handle,
payload_builder, payload_builder,
); );

View File

@ -78,6 +78,8 @@ where
let payload_validator = ExecutionPayloadValidator::new(chain_spec.clone()); let payload_validator = ExecutionPayloadValidator::new(chain_spec.clone());
let executor_factory = EthExecutorProvider::ethereum(chain_spec); let executor_factory = EthExecutorProvider::ethereum(chain_spec);
let canonical_in_memory_state = blockchain_db.canonical_in_memory_state();
let from_tree = EngineApiTreeHandlerImpl::spawn_new( let from_tree = EngineApiTreeHandlerImpl::spawn_new(
blockchain_db, blockchain_db,
executor_factory, executor_factory,
@ -86,6 +88,7 @@ where
to_tree_rx, to_tree_rx,
persistence_handle, persistence_handle,
payload_builder, payload_builder,
canonical_in_memory_state,
); );
let engine_handler = EngineApiRequestHandler::new(to_tree_tx, from_tree); let engine_handler = EngineApiRequestHandler::new(to_tree_tx, from_tree);

View File

@ -83,6 +83,11 @@ where
None => Err(ProviderError::HeaderNotFound(best.best_number.into())), None => Err(ProviderError::HeaderNotFound(best.best_number.into())),
} }
} }
/// Gets a clone of `canonical_in_memory_state`.
pub fn canonical_in_memory_state(&self) -> CanonicalInMemoryState {
self.canonical_in_memory_state.clone()
}
} }
impl<DB> BlockchainProvider2<DB> impl<DB> BlockchainProvider2<DB>