pub struct EngineOrchestratorBuilder<N, Client, S, V, C>where
N: ProviderNodeTypes,{Show 16 fields
pub engine_kind: EngineApiKind,
pub consensus: Arc<dyn FullConsensus<N::Primitives>>,
pub client: Client,
pub incoming_requests: S,
pub pipeline: Pipeline<N>,
pub pipeline_task_spawner: Runtime,
pub provider: ProviderFactory<N>,
pub blockchain_db: BlockchainProvider<N>,
pub pruner: PrunerWithFactory<ProviderFactory<N>>,
pub payload_builder: PayloadBuilderHandle<N::Payload>,
pub payload_validator: V,
pub overlay_manager: OverlayManager<N::Primitives>,
pub tree_config: TreeConfig,
pub sync_metrics_tx: MetricEventsSender,
pub evm_config: C,
pub runtime: Runtime,
}Expand description
Components needed to build the engine ChainOrchestrator that drives the chain forward.
build spawns and wires together the following components:
BasicBlockDownloader— downloads blocks on demand from the network during live sync.PersistenceHandle— spawns the persistence service on a background thread for writing blocks and performing pruning outside the critical consensus path.EngineApiTreeHandler— spawns the tree handler that processes engine API requests (newPayload,forkchoiceUpdated) and maintains the in-memory chain state.EngineApiRequestHandler+EngineHandler— glue that routes incoming CL messages to the tree handler and manages download requests.PipelineSync— wraps the staged sync [Pipeline] for backfill sync when the node needs to catch up over large block ranges.
The returned orchestrator implements [Stream] and yields
ChainEvents.
Fields§
§engine_kind: EngineApiKindThe engine API flavor to run.
consensus: Arc<dyn FullConsensus<N::Primitives>>Consensus used to validate downloaded and incoming blocks.
client: ClientNetwork client used to download blocks during live sync.
incoming_requests: SIncoming consensus layer messages.
pipeline: Pipeline<N>Staged sync pipeline used for backfill.
pipeline_task_spawner: RuntimeRuntime the pipeline runs on.
provider: ProviderFactory<N>Provider factory handed to the persistence service.
blockchain_db: BlockchainProvider<N>Blockchain provider backing the engine tree.
pruner: PrunerWithFactory<ProviderFactory<N>>Pruner run by the persistence service.
payload_builder: PayloadBuilderHandle<N::Payload>Handle to the payload builder service.
payload_validator: VValidator for incoming payloads.
overlay_manager: OverlayManager<N::Primitives>Overlay manager for state on top of the database.
tree_config: TreeConfigEngine tree configuration.
sync_metrics_tx: MetricEventsSenderSender for sync metric events.
evm_config: CEVM configuration used to execute payloads.
runtime: RuntimeRuntime used to spawn engine tree tasks.
Implementations§
Source§impl<N, Client, S, V, C> EngineOrchestratorBuilder<N, Client, S, V, C>where
N: ProviderNodeTypes,
Client: BlockClient<Block = <N::Primitives as NodePrimitives>::Block> + BlockAccessListsClient + 'static,
S: Stream<Item = BeaconEngineMessage<N::Payload>> + Send + Sync + Unpin + 'static,
V: EngineValidator<N::Payload> + WaitForCaches,
C: ConfigureEvm<Primitives = N::Primitives> + 'static,
impl<N, Client, S, V, C> EngineOrchestratorBuilder<N, Client, S, V, C>where
N: ProviderNodeTypes,
Client: BlockClient<Block = <N::Primitives as NodePrimitives>::Block> + BlockAccessListsClient + 'static,
S: Stream<Item = BeaconEngineMessage<N::Payload>> + Send + Sync + Unpin + 'static,
V: EngineValidator<N::Payload> + WaitForCaches,
C: ConfigureEvm<Primitives = N::Primitives> + 'static,
Sourcepub fn build(
self,
) -> EngineOrchestrator<N::Payload, N::Primitives, Client, S, PipelineSync<N>>
pub fn build( self, ) -> EngineOrchestrator<N::Payload, N::Primitives, Client, S, PipelineSync<N>>
Spawns the engine services and returns the ChainOrchestrator driving them.
Sourcepub fn build_with_backfill<B: BackfillSync + Unpin, E>(
self,
backfill: impl FnOnce(Pipeline<N>, Runtime) -> Result<B, E>,
) -> Result<EngineOrchestrator<N::Payload, N::Primitives, Client, S, B>, E>
pub fn build_with_backfill<B: BackfillSync + Unpin, E>( self, backfill: impl FnOnce(Pipeline<N>, Runtime) -> Result<B, E>, ) -> Result<EngineOrchestrator<N::Payload, N::Primitives, Client, S, B>, E>
Like Self::build, backfilling through the BackfillSync backfill makes from the
staged [Pipeline] and its runtime, instead of PipelineSync.
The backfill is built before any engine service is spawned, so its error aborts the build.
Trait Implementations§
Auto Trait Implementations§
impl<N, Client, S, V, C> !RefUnwindSafe for EngineOrchestratorBuilder<N, Client, S, V, C>
impl<N, Client, S, V, C> !Sync for EngineOrchestratorBuilder<N, Client, S, V, C>
impl<N, Client, S, V, C> !UnwindSafe for EngineOrchestratorBuilder<N, Client, S, V, C>
impl<N, Client, S, V, C> Freeze for EngineOrchestratorBuilder<N, Client, S, V, C>where
<<N as NodeTypes>::Primitives as NodePrimitives>::BlockHeader: Sized,
<<N as NodeTypes>::Primitives as NodePrimitives>::Receipt: Sized,
<<N as NodeTypes>::Primitives as NodePrimitives>::SignedTx: Sized,
<N as NodeTypes>::Primitives: Sized,
Arc<dyn FullConsensus<<N as NodeTypes>::Primitives>>: Freeze,
Client: Freeze,
S: Freeze,
Pipeline<N>: Freeze,
ProviderFactory<N>: Freeze,
BlockchainProvider<N>: Freeze,
Pruner<<ProviderFactory<N> as DatabaseProviderFactory>::ProviderRW, ProviderFactory<N>>: Freeze,
PayloadBuilderHandle<<N as NodeTypes>::Payload>: Freeze,
V: Freeze,
OverlayManager<<N as NodeTypes>::Primitives>: Freeze,
C: Freeze,
impl<N, Client, S, V, C> Send for EngineOrchestratorBuilder<N, Client, S, V, C>where
<<N as NodeTypes>::Primitives as NodePrimitives>::BlockHeader: Sized,
<<N as NodeTypes>::Primitives as NodePrimitives>::Receipt: Sized,
<<N as NodeTypes>::Primitives as NodePrimitives>::SignedTx: Sized,
<N as NodeTypes>::Primitives: Sized,
Arc<dyn FullConsensus<<N as NodeTypes>::Primitives>>: Send,
Client: Send,
S: Send,
Pipeline<N>: Send,
ProviderFactory<N>: Send,
BlockchainProvider<N>: Send,
Pruner<<ProviderFactory<N> as DatabaseProviderFactory>::ProviderRW, ProviderFactory<N>>: Send,
PayloadBuilderHandle<<N as NodeTypes>::Payload>: Send,
V: Send,
OverlayManager<<N as NodeTypes>::Primitives>: Send,
C: Send,
impl<N, Client, S, V, C> Unpin for EngineOrchestratorBuilder<N, Client, S, V, C>where
<<N as NodeTypes>::Primitives as NodePrimitives>::BlockHeader: Sized,
<<N as NodeTypes>::Primitives as NodePrimitives>::Receipt: Sized,
<<N as NodeTypes>::Primitives as NodePrimitives>::SignedTx: Sized,
<N as NodeTypes>::Primitives: Sized,
Arc<dyn FullConsensus<<N as NodeTypes>::Primitives>>: Unpin,
Client: Unpin,
S: Unpin,
Pipeline<N>: Unpin,
ProviderFactory<N>: Unpin,
BlockchainProvider<N>: Unpin,
Pruner<<ProviderFactory<N> as DatabaseProviderFactory>::ProviderRW, ProviderFactory<N>>: Unpin,
PayloadBuilderHandle<<N as NodeTypes>::Payload>: Unpin,
V: Unpin,
OverlayManager<<N as NodeTypes>::Primitives>: Unpin,
C: Unpin,
impl<N, Client, S, V, C> UnsafeUnpin for EngineOrchestratorBuilder<N, Client, S, V, C>where
<<N as NodeTypes>::Primitives as NodePrimitives>::BlockHeader: Sized,
<<N as NodeTypes>::Primitives as NodePrimitives>::Receipt: Sized,
<<N as NodeTypes>::Primitives as NodePrimitives>::SignedTx: Sized,
<N as NodeTypes>::Primitives: Sized,
Arc<dyn FullConsensus<<N as NodeTypes>::Primitives>>: UnsafeUnpin,
Client: UnsafeUnpin,
S: UnsafeUnpin,
Pipeline<N>: UnsafeUnpin,
ProviderFactory<N>: UnsafeUnpin,
BlockchainProvider<N>: UnsafeUnpin,
Pruner<<ProviderFactory<N> as DatabaseProviderFactory>::ProviderRW, ProviderFactory<N>>: UnsafeUnpin,
PayloadBuilderHandle<<N as NodeTypes>::Payload>: UnsafeUnpin,
V: UnsafeUnpin,
OverlayManager<<N as NodeTypes>::Primitives>: UnsafeUnpin,
C: UnsafeUnpin,
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
§impl<T> Conv for T
impl<T> Conv for T
§impl<T> FmtForward for T
impl<T> FmtForward for T
§fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
self to use its Binary implementation when Debug-formatted.§fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
self to use its Display implementation when
Debug-formatted.§fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
self to use its LowerExp implementation when
Debug-formatted.§fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
self to use its LowerHex implementation when
Debug-formatted.§fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
self to use its Octal implementation when Debug-formatted.§fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
self to use its Pointer implementation when
Debug-formatted.§fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
self to use its UpperExp implementation when
Debug-formatted.§fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
self to use its UpperHex implementation when
Debug-formatted.§fn fmt_list(self) -> FmtList<Self>where
&'a Self: for<'a> IntoIterator,
fn fmt_list(self) -> FmtList<Self>where
&'a Self: for<'a> IntoIterator,
§impl<T> FutureExt for T
impl<T> FutureExt for T
§fn with_context(self, otel_cx: Context) -> WithContext<Self> ⓘ
fn with_context(self, otel_cx: Context) -> WithContext<Self> ⓘ
§fn with_current_context(self) -> WithContext<Self> ⓘ
fn with_current_context(self) -> WithContext<Self> ⓘ
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
Source§fn in_current_span(self) -> Instrumented<Self> ⓘ
fn in_current_span(self) -> Instrumented<Self> ⓘ
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more§impl<T> IntoRequest<T> for T
impl<T> IntoRequest<T> for T
§fn into_request(self) -> Request<T>
fn into_request(self) -> Request<T>
T in a tonic::Request§impl<L> LayerExt<L> for L
impl<L> LayerExt<L> for L
§fn named_layer<S>(&self, service: S) -> Layered<<L as Layer<S>>::Service, S>where
L: Layer<S>,
fn named_layer<S>(&self, service: S) -> Layered<<L as Layer<S>>::Service, S>where
L: Layer<S>,
Layered].impl<T> MaybeDebug for Twhere
T: Debug,
§impl<T> Pipe for Twhere
T: ?Sized,
impl<T> Pipe for Twhere
T: ?Sized,
§fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
§fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
self and passes that borrow into the pipe function. Read more§fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
self and passes that borrow into the pipe function. Read more§fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
§fn pipe_borrow_mut<'a, B, R>(
&'a mut self,
func: impl FnOnce(&'a mut B) -> R,
) -> R
fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
§fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
self, then passes self.as_ref() into the pipe function.§fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
self, then passes self.as_mut() into the pipe
function.§fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
self, then passes self.deref() into the pipe function.§impl<T> Pointable for T
impl<T> Pointable for T
§impl<T> PolicyExt for Twhere
T: ?Sized,
impl<T> PolicyExt for Twhere
T: ?Sized,
impl<T> Read<Exclusive, BecauseExclusive> for Twhere
T: ?Sized,
§impl<T> Tap for T
impl<T> Tap for T
§fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
Borrow<B> of a value. Read more§fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
BorrowMut<B> of a value. Read more§fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
AsRef<R> view of a value. Read more§fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
AsMut<R> view of a value. Read more§fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
Deref::Target of a value. Read more§fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
Deref::Target of a value. Read more§fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
.tap() only in debug builds, and is erased in release builds.§fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
.tap_mut() only in debug builds, and is erased in release
builds.§fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
.tap_borrow() only in debug builds, and is erased in release
builds.§fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
.tap_borrow_mut() only in debug builds, and is erased in release
builds.§fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
.tap_ref() only in debug builds, and is erased in release
builds.§fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
.tap_ref_mut() only in debug builds, and is erased in release
builds.§fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
.tap_deref() only in debug builds, and is erased in release
builds.§impl<T> TryConv for T
impl<T> TryConv for T
§impl<T> WithSubscriber for T
impl<T> WithSubscriber for T
§fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self> ⓘwhere
S: Into<Dispatch>,
fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self> ⓘwhere
S: Into<Dispatch>,
§fn with_current_subscriber(self) -> WithDispatch<Self> ⓘ
fn with_current_subscriber(self) -> WithDispatch<Self> ⓘ
Source§impl<T> WithSubscriber for T
impl<T> WithSubscriber for T
Source§fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self> ⓘwhere
S: Into<Dispatch>,
fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self> ⓘwhere
S: Into<Dispatch>,
Source§fn with_current_subscriber(self) -> WithDispatch<Self> ⓘ
fn with_current_subscriber(self) -> WithDispatch<Self> ⓘ
Layout§
Note: Unable to compute type layout, possibly due to this type having generic parameters. Layout can only be computed for concrete, fully-instantiated types.