pub struct SequencerContext<N: ConnectedNetwork<PubKey>, P: SequencerPersistence, V: Versions> {
handle: Arc<RwLock<Consensus<N, P, V>>>,
pub request_response_protocol: RequestResponseProtocol<Node<N, P>, V, N, P>,
state_signer: Arc<RwLock<StateSigner<SequencerApiVersion>>>,
wait_for_orchestrator: Option<Arc<OrchestratorClient>>,
tasks: TaskList,
events_streamer: Arc<RwLock<EventsStreamer<SeqTypes>>>,
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§
§handle: Arc<RwLock<Consensus<N, P, V>>>
The consensus handle
request_response_protocol: RequestResponseProtocol<Node<N, P>, V, N, P>
The request-response protocol
state_signer: Arc<RwLock<StateSigner<SequencerApiVersion>>>
Context for generating state signatures.
wait_for_orchestrator: Option<Arc<OrchestratorClient>>
An orchestrator to wait for before starting consensus.
tasks: TaskList
Background tasks to shut down when the node is dropped.
events_streamer: Arc<RwLock<EventsStreamer<SeqTypes>>>
events streamer to stream hotshot events to external clients
detached: bool
§node_state: NodeState
§network_config: NetworkConfig<SeqTypes>
§validator_config: ValidatorConfig<SeqTypes>
Implementations§
Source§impl<N: ConnectedNetwork<PubKey>, P: SequencerPersistence, V: Versions> SequencerContext<N, P, V>
impl<N: ConnectedNetwork<PubKey>, P: SequencerPersistence, V: Versions> SequencerContext<N, P, V>
pub async fn init( network_config: NetworkConfig<SeqTypes>, validator_config: ValidatorConfig<SeqTypes>, coordinator: EpochMembershipCoordinator<SeqTypes>, instance_state: NodeState, storage: Option<RequestResponseStorage>, state_catchup: ParallelStateCatchup, persistence: Arc<P>, network: Arc<N>, state_relay_server: Option<Url>, metrics: &dyn Metrics, stake_table_capacity: usize, event_consumer: impl PersistenceEventConsumer + 'static, _: V, proposal_fetcher_cfg: ProposalFetcherConfig, ) -> Result<Self>
Sourcefn new(
handle: Consensus<N, P, V>,
persistence: Arc<P>,
state_signer: StateSigner<SequencerApiVersion>,
external_event_handler: ExternalEventHandler<V>,
request_response_protocol: RequestResponseProtocol<Node<N, P>, V, N, P>,
event_streamer: Arc<RwLock<EventsStreamer<SeqTypes>>>,
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( handle: Consensus<N, P, V>, persistence: Arc<P>, state_signer: StateSigner<SequencerApiVersion>, external_event_handler: ExternalEventHandler<V>, request_response_protocol: RequestResponseProtocol<Node<N, P>, V, N, P>, event_streamer: Arc<RwLock<EventsStreamer<SeqTypes>>>, 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) -> Self
pub fn wait_for_orchestrator(self, client: OrchestratorClient) -> Self
Wait for a signal from the orchestrator before starting consensus.
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_signer(&self) -> Arc<RwLock<StateSigner<SequencerApiVersion>>>
pub fn state_signer(&self) -> Arc<RwLock<StateSigner<SequencerApiVersion>>>
Return a reference to the consensus state signer.
Sourcepub async fn event_stream(&self) -> impl Stream<Item = Event<SeqTypes>>
pub async fn event_stream(&self) -> impl Stream<Item = Event<SeqTypes>>
Stream consensus events.
pub async fn submit_transaction(&self, tx: Transaction) -> Result<()>
Sourcepub fn event_streamer(&self) -> Arc<RwLock<EventsStreamer<SeqTypes>>>
pub fn event_streamer(&self) -> Arc<RwLock<EventsStreamer<SeqTypes>>>
get event streamer
Sourcepub fn consensus(&self) -> Arc<RwLock<Consensus<N, P, V>>>
pub fn consensus(&self) -> Arc<RwLock<Consensus<N, P, V>>>
Return a reference to the underlying consensus handle.
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) -> Arc<ValidatedState>
pub fn node_id(&self) -> u64
pub fn node_state(&self) -> NodeState
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(self)
pub async fn join(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.
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<N: Clone + ConnectedNetwork<PubKey>, P: Clone + SequencerPersistence, V: Clone + Versions> Clone for SequencerContext<N, P, V>
impl<N: Clone + ConnectedNetwork<PubKey>, P: Clone + SequencerPersistence, V: Clone + Versions> Clone for SequencerContext<N, P, V>
Source§fn clone(&self) -> SequencerContext<N, P, V>
fn clone(&self) -> SequencerContext<N, P, V>
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
. Read moreSource§impl<N: ConnectedNetwork<PubKey>, P: SequencerPersistence, V: Versions> Debug for SequencerContext<N, P, V>
impl<N: ConnectedNetwork<PubKey>, P: SequencerPersistence, V: Versions> Debug for SequencerContext<N, P, V>
Source§impl<N: ConnectedNetwork<PubKey>, P: SequencerPersistence, V: Versions> Drop for SequencerContext<N, P, V>
impl<N: ConnectedNetwork<PubKey>, P: SequencerPersistence, V: Versions> Drop for SequencerContext<N, P, V>
Auto Trait Implementations§
impl<N, P, V> Freeze for SequencerContext<N, P, V>
impl<N, P, V> !RefUnwindSafe for SequencerContext<N, P, V>
impl<N, P, V> Send for SequencerContext<N, P, V>
impl<N, P, V> Sync for SequencerContext<N, P, V>
impl<N, P, V> Unpin for SequencerContext<N, P, V>
impl<N, P, V> !UnwindSafe for SequencerContext<N, P, V>
Blanket Implementations§
§impl<T> ArchivePointee for T
impl<T> ArchivePointee for T
§type ArchivedMetadata = ()
type ArchivedMetadata = ()
§fn pointer_metadata(
_: &<T as ArchivePointee>::ArchivedMetadata,
) -> <T as Pointee>::Metadata
fn pointer_metadata( _: &<T as ArchivePointee>::ArchivedMetadata, ) -> <T as Pointee>::Metadata
§impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
§impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
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
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<F, W, T, D> Deserialize<With<T, W>, D> for F
impl<F, W, T, D> Deserialize<With<T, W>, D> for F
§fn deserialize(
&self,
deserializer: &mut D,
) -> Result<With<T, W>, <D as Fallible>::Error>
fn deserialize( &self, deserializer: &mut D, ) -> Result<With<T, W>, <D as Fallible>::Error>
§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> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> 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> LayoutRaw for T
impl<T> LayoutRaw for T
§fn layout_raw(_: <T as Pointee>::Metadata) -> Result<Layout, LayoutError>
fn layout_raw(_: <T as Pointee>::Metadata) -> Result<Layout, LayoutError>
§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> 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.