mirror of
https://github.com/hl-archive-node/nanoreth.git
synced 2025-12-06 10:59:55 +00:00
feat: provide CanonicalInMemory state as input to EngineHandler (#9764)
This commit is contained in:
@ -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,
|
||||||
);
|
);
|
||||||
|
|||||||
@ -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);
|
||||||
|
|||||||
@ -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>
|
||||||
|
|||||||
Reference in New Issue
Block a user