pub struct SequencerContext<P: SequencerPersistence> {
consensus_handle: Arc<ConsensusHandle<SeqTypes, Arc<P>>>,
persistence: Arc<P>,
pub request_response_protocol: RequestResponseProtocol<P>,
state_signatures: Arc<RwLock<StateSignatureMemStorage>>,
wait_for_orchestrator: Option<(Arc<OrchestratorClient>, PeerConfig<SeqTypes>)>,
tasks: TaskList,
detached: bool,
node_state: NodeState,
network_config: NetworkConfig<SeqTypes>,
validator_config: ValidatorConfig<SeqTypes>,
}Expand description
The sequencer context contains a consensus handle and other sequencer specific information.
Fields§
§consensus_handle: Arc<ConsensusHandle<SeqTypes, Arc<P>>>§persistence: Arc<P>§request_response_protocol: RequestResponseProtocol<P>The request-response protocol
state_signatures: Arc<RwLock<StateSignatureMemStorage>>Light client state signatures produced by the state signer task.
wait_for_orchestrator: Option<(Arc<OrchestratorClient>, PeerConfig<SeqTypes>)>An orchestrator to wait for before starting consensus, with the peer config this node registered there.
tasks: TaskListBackground tasks to shut down when the node is dropped.
detached: bool§node_state: NodeState§network_config: NetworkConfig<SeqTypes>§validator_config: ValidatorConfig<SeqTypes>Implementations§
Source§impl<P> SequencerContext<P>where
P: SequencerPersistence,
impl<P> SequencerContext<P>where
P: SequencerPersistence,
pub async fn init<F>( network_config: NetworkConfig<SeqTypes>, upgrade: Upgrade, validator_config: ValidatorConfig<SeqTypes>, membership_coordinator: EpochMembershipCoordinator<SeqTypes>, initializer: HotShotInitializer<SeqTypes>, anchor_view: Option<ViewNumber>, storage: Option<RequestResponseStorage>, state_catchup: ParallelStateCatchup, persistence: Arc<P>, coordinator_network: F, state_relay_server: Option<Url>, metrics: &dyn Metrics, stake_table_capacity: usize, event_consumer: impl PersistenceEventConsumer + 'static, proposal_fetcher_cfg: ProposalFetcherConfig, bootstrap_epoch_catchup_timeout: Duration, empty_block_delay: Duration, block_sizes: BTreeMap<Version, u64>, leader_trace_dir: Option<PathBuf>, ) -> Result<Self>
Sourcefn new(
consensus_handle: Arc<ConsensusHandle<SeqTypes, Arc<P>>>,
persistence: Arc<P>,
state_signer: StateSigner<SequencerApiVersion>,
external_event_handler: ExternalEventHandler,
request_response_protocol: RequestResponseProtocol<P>,
node_state: NodeState,
network_config: NetworkConfig<SeqTypes>,
validator_config: ValidatorConfig<SeqTypes>,
event_consumer: impl PersistenceEventConsumer + 'static,
anchor_view: Option<ViewNumber>,
proposal_fetcher_cfg: ProposalFetcherConfig,
metrics: &dyn Metrics,
) -> Self
fn new( consensus_handle: Arc<ConsensusHandle<SeqTypes, Arc<P>>>, persistence: Arc<P>, state_signer: StateSigner<SequencerApiVersion>, external_event_handler: ExternalEventHandler, request_response_protocol: RequestResponseProtocol<P>, node_state: NodeState, network_config: NetworkConfig<SeqTypes>, validator_config: ValidatorConfig<SeqTypes>, event_consumer: impl PersistenceEventConsumer + 'static, anchor_view: Option<ViewNumber>, proposal_fetcher_cfg: ProposalFetcherConfig, metrics: &dyn Metrics, ) -> Self
Constructor
Sourcepub fn wait_for_orchestrator(
self,
client: OrchestratorClient,
peer_config: PeerConfig<SeqTypes>,
) -> Self
pub fn wait_for_orchestrator( self, client: OrchestratorClient, peer_config: PeerConfig<SeqTypes>, ) -> Self
Wait for a signal from the orchestrator before starting consensus.
peer_config is what this node registered with the orchestrator. /ready posts it
again, and the orchestrator equality-checks it against known_nodes_with_stake.
Sourcepub(crate) fn with_task_list(self, tasks: TaskList) -> Self
pub(crate) fn with_task_list(self, tasks: TaskList) -> Self
Add a list of tasks to the given context.
Sourcepub fn state_signatures(&self) -> Arc<RwLock<StateSignatureMemStorage>> ⓘ
pub fn state_signatures(&self) -> Arc<RwLock<StateSignatureMemStorage>> ⓘ
Return the light client state signatures this node has produced.
Sourcepub fn event_stream(&self) -> BoxStream<'static, CoordinatorEvent<SeqTypes>>
pub fn event_stream(&self) -> BoxStream<'static, CoordinatorEvent<SeqTypes>>
Stream consensus events.
pub async fn submit_transaction(&self, tx: Transaction) -> Result<()>
pub fn consensus_handle(&self) -> Arc<ConsensusHandle<SeqTypes, Arc<P>>> ⓘ
pub fn validator_config(&self) -> &ValidatorConfig<SeqTypes>
pub fn upgrade_lock(&self) -> UpgradeLock<SeqTypes>
pub async fn shutdown_consensus(&self)
pub async fn decided_leaf(&self) -> Leaf2<SeqTypes>
pub async fn state(&self, view: ViewNumber) -> Option<Arc<ValidatedState>>
pub async fn decided_state(&self) -> Option<Arc<ValidatedState>>
pub fn node_id(&self) -> u64
pub fn node_state(&self) -> NodeState
pub fn persistence(&self) -> Arc<P> ⓘ
Sourcepub async fn start_consensus(&self)
pub async fn start_consensus(&self)
Start participating in consensus.
Sourcepub fn spawn(
&mut self,
name: impl Display,
task: impl Future<Output: Debug> + Send + 'static,
)
pub fn spawn( &mut self, name: impl Display, task: impl Future<Output: Debug> + Send + 'static, )
Spawn a background task attached to this context.
When this context is dropped or shut_down, background tasks will be
cancelled in the reverse order that they were spawned.
Sourcepub fn spawn_short_lived(
&mut self,
name: impl Display,
task: impl Future<Output: Debug> + Send + 'static,
)
pub fn spawn_short_lived( &mut self, name: impl Display, task: impl Future<Output: Debug> + Send + 'static, )
Spawn a short-lived background task attached to this context.
When this context is dropped or shut_down, background tasks will be
cancelled in the reverse order that they were spawned.
The only difference between a short-lived background task and a long-lived one is how urgently logging related to the task is treated.
Sourcepub async fn join(&mut self)
pub async fn join(&mut self)
Wait for consensus to complete.
Under normal conditions, this function will block forever, which is a convenient way of keeping the main thread from exiting as long as there are still active background tasks. It returns once the coordinator has stopped, so a node whose coordinator died exits instead of serving its last state.
Sourcepub fn detach(&mut self)
pub fn detach(&mut self)
Allow this node to continue participating in consensus even after it is dropped.
Sourcepub fn network_config(&self) -> NetworkConfig<SeqTypes>
pub fn network_config(&self) -> NetworkConfig<SeqTypes>
Get the network config
Trait Implementations§
Source§impl<P> ApiContext for SequencerContext<P>where
P: SequencerPersistence,
impl<P> ApiContext for SequencerContext<P>where
P: SequencerPersistence,
fn consensus(&self) -> Arc<dyn ConsensusSource> ⓘ
fn membership(&self) -> Arc<dyn MembershipPersistence> ⓘ
fn state_certs(&self) -> Arc<dyn StateCertPersistence> ⓘ
fn node_state(&self) -> NodeState
fn network_config(&self) -> NetworkConfig<SeqTypes>
fn validator_config(&self) -> Option<&ValidatorConfig<SeqTypes>>
fn state_signatures(&self) -> Option<Arc<RwLock<StateSignatureMemStorage>>>
Source§fn light_client(&self) -> Option<Arc<NodeLightClient>>
fn light_client(&self) -> Option<Arc<NodeLightClient>>
Source§fn with_task_list(self, tasks: TaskList) -> Self
fn with_task_list(self, tasks: TaskList) -> Self
Options::serve hands a clone of the context to the API before
calling this, so the tasks attached here must be shared with that clone: TaskList is
that shared handle, and dropping any clone of it aborts every task.Source§impl<P: Clone + SequencerPersistence> Clone for SequencerContext<P>
impl<P: Clone + SequencerPersistence> Clone for SequencerContext<P>
Source§fn clone(&self) -> SequencerContext<P>
fn clone(&self) -> SequencerContext<P>
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl<P: SequencerPersistence> Debug for SequencerContext<P>
impl<P: SequencerPersistence> Debug for SequencerContext<P>
Source§impl<P: SequencerPersistence> Drop for SequencerContext<P>
impl<P: SequencerPersistence> Drop for SequencerContext<P>
Auto Trait Implementations§
impl<P> !RefUnwindSafe for SequencerContext<P>
impl<P> !UnwindSafe for SequencerContext<P>
impl<P> Freeze for SequencerContext<P>
impl<P> Send for SequencerContext<P>
impl<P> Sync for SequencerContext<P>
impl<P> Unpin for SequencerContext<P>
impl<P> UnsafeUnpin for SequencerContext<P>
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
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
§impl<T> Conv for T
impl<T> Conv for T
§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can
then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be
further downcast into Rc<ConcreteType> where ConcreteType implements Trait.§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &Any’s vtable from &Trait’s.§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Any’s vtable from &mut Trait’s.§impl<T> DowncastSync for T
impl<T> DowncastSync 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> 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::Requestimpl<T> JsonSchemaMaybe for T
§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> 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.