Skip to main content

SenderQueue

Struct SenderQueue 

Source
pub struct SenderQueue<D>{ /* private fields */ }
Expand description

An instance of ConsensusProtocol wrapped with a queue of outgoing messages, that is, a sender queue. This wrapping ensures that the messages sent to remote instances lead to progress of the entire consensus network. In particular, messages to lagging remote nodes are queued and sent only when those nodes’ epochs match the queued messages’ epochs. Thus all nodes can handle incoming messages without queueing them and can ignore messages whose epochs are not currently acccepted.

Implementations§

Source§

impl<C, N> SenderQueue<DynamicHoneyBadger<C, N>>

Source

pub fn propose<R: Rng>( &mut self, rng: &mut R, contrib: C, ) -> Result<CpStep<SenderQueue<DynamicHoneyBadger<C, N>>>, Error<Error>>

Proposes a contribution in the current epoch.

Returns an error if we already made a proposal in this epoch.

If we are the only validator, this will immediately output a batch, containing our proposal.

Source

pub fn vote_for( &mut self, change: Change<N>, ) -> Result<CpStep<SenderQueue<DynamicHoneyBadger<C, N>>>, Error<Error>>

Casts a vote to change the set of validators or parameters.

This stores a pending vote for the change. It will be included in some future batch, and once enough validators have been voted for the same change, it will take effect.

Source

pub fn vote_to_add( &mut self, node_id: N, pub_key: PublicKey, ) -> Result<CpStep<SenderQueue<DynamicHoneyBadger<C, N>>>, Error<Error>>

Casts a vote to add a node as a validator.

This stores a pending vote for the change. It will be included in some future batch, and once enough validators have been voted for the same change, it will take effect.

Source

pub fn vote_to_remove( &mut self, node_id: &N, ) -> Result<CpStep<SenderQueue<DynamicHoneyBadger<C, N>>>, Error<Error>>

Casts a vote to demote a validator to observer.

This stores a pending vote for the change. It will be included in some future batch, and once enough validators have been voted for the same change, it will take effect.

Source

pub fn restart<I, R: Rng>( &mut self, join_plan: JoinPlan<N>, peer_ids: I, rng: &mut R, ) -> Result<CpStep<SenderQueue<DynamicHoneyBadger<C, N>>>, Error<Error>>
where I: Iterator<Item = N>,

Restarts the managed algorithm with the given join plan with a new list of peers and with the same secret key. In order to be restarted, the node should have completed the process of removing itself from the network. The node may not output a batch if it were not properly removed.

Source§

impl<T, N, Q> SenderQueue<QueueingHoneyBadger<T, N, Q>>

Source

pub fn push_transaction<R: Rng>( &mut self, tx: T, rng: &mut R, ) -> Result<CpStep<SenderQueue<QueueingHoneyBadger<T, N, Q>>>, Error<Error>>

Adds a transaction to the queue.

This can be called at any time to append to the transaction queue. The new transaction will be proposed in some future epoch.

If no proposal has yet been made for the current epoch, this may trigger one. In this case, a nonempty step will returned, with the corresponding messages. (Or, if we are the only validator, even with the completed batch as an output.)

Source

pub fn vote_for<R: Rng>( &mut self, change: Change<N>, rng: &mut R, ) -> Result<CpStep<SenderQueue<QueueingHoneyBadger<T, N, Q>>>, Error<Error>>

Casts a vote to change the set of validators or parameters.

This stores a pending vote for the change. It will be included in some future batch, and once enough validators have been voted for the same change, it will take effect.

Source

pub fn vote_to_add<R: Rng>( &mut self, node_id: N, pub_key: PublicKey, rng: &mut R, ) -> Result<CpStep<SenderQueue<QueueingHoneyBadger<T, N, Q>>>, Error<Error>>

Casts a vote to add a node as a validator.

This stores a pending vote for the change. It will be included in some future batch, and once enough validators have been voted for the same change, it will take effect.

Source

pub fn vote_to_remove<R: Rng>( &mut self, node_id: &N, rng: &mut R, ) -> Result<CpStep<SenderQueue<QueueingHoneyBadger<T, N, Q>>>, Error<Error>>

Casts a vote to demote a validator to observer.

This stores a pending vote for the change. It will be included in some future batch, and once enough validators have been voted for the same change, it will take effect.

Source§

impl<D> SenderQueue<D>

Source

pub fn builder<I>(algo: D, peer_ids: I) -> SenderQueueBuilder<D>
where I: Iterator<Item = D::NodeId>,

Returns a new SenderQueueBuilder configured to manage a given DynamicHoneyBadger instance.

Source

pub fn handle_input<R: Rng>( &mut self, input: D::Input, rng: &mut R, ) -> Result<CpStep<Self>, Error<D::Error>>

Handles an input. This will call the wrapped algorithm’s handle_input.

Source

pub fn handle_message<R: Rng>( &mut self, sender_id: &D::NodeId, message: Message<D::Message>, rng: &mut R, ) -> Result<CpStep<Self>, Error<D::Error>>

Handles a message received from sender_id.

This must be called with every message we receive from another node.

Source

pub fn inner(&self) -> &D

Returns an immutable reference to the wrapped algorithm.

Source

pub fn is_removed(&self) -> bool

Returns true iff the node has been removed from the list of participants.

Source

pub fn algo(&self) -> &D

Returns a reference to the managed algorithm.

Source

pub fn algo_mut(&mut self) -> &mut D

Returns a mutable reference to the managed algorithm.

Trait Implementations§

Source§

impl<D> ConsensusProtocol for SenderQueue<D>

Source§

type NodeId = <D as ConsensusProtocol>::NodeId

Unique node identifier.
Source§

type Input = <D as ConsensusProtocol>::Input

The input provided by the user.
Source§

type Output = <D as ConsensusProtocol>::Output

The output type. Some algorithms return an output exactly once, others return multiple times.
Source§

type Message = Message<<D as ConsensusProtocol>::Message>

The messages that need to be exchanged between the instances in the participating nodes.
Source§

type Error = Error<<D as ConsensusProtocol>::Error>

The errors that can occur during execution.
Source§

type FaultKind = <D as ConsensusProtocol>::FaultKind

The kinds of message faults that can be detected during execution.
Source§

fn handle_input<R: Rng>( &mut self, input: Self::Input, rng: &mut R, ) -> Result<CpStep<Self>, Error<D::Error>>

Handles an input provided by the user, and returns
Source§

fn handle_message<R: Rng>( &mut self, sender_id: &D::NodeId, message: Self::Message, rng: &mut R, ) -> Result<CpStep<Self>, Error<D::Error>>

Handles a message received from node sender_id.
Source§

fn terminated(&self) -> bool

Returns true if execution has completed and this instance can be dropped.
Source§

fn our_id(&self) -> &D::NodeId

Returns this node’s own ID.
Source§

impl<D> Debug for SenderQueue<D>

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<T> Conv for T

Source§

fn conv<T>(self) -> T
where Self: Into<T>,

Converts self into T using Into<T>. Read more
Source§

impl<T> FmtForward for T

Source§

fn fmt_binary(self) -> FmtBinary<Self>
where Self: Binary,

Causes self to use its Binary implementation when Debug-formatted.
Source§

fn fmt_display(self) -> FmtDisplay<Self>
where Self: Display,

Causes self to use its Display implementation when Debug-formatted.
Source§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>
where Self: LowerExp,

Causes self to use its LowerExp implementation when Debug-formatted.
Source§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>
where Self: LowerHex,

Causes self to use its LowerHex implementation when Debug-formatted.
Source§

fn fmt_octal(self) -> FmtOctal<Self>
where Self: Octal,

Causes self to use its Octal implementation when Debug-formatted.
Source§

fn fmt_pointer(self) -> FmtPointer<Self>
where Self: Pointer,

Causes self to use its Pointer implementation when Debug-formatted.
Source§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>
where Self: UpperExp,

Causes self to use its UpperExp implementation when Debug-formatted.
Source§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>
where Self: UpperHex,

Causes self to use its UpperHex implementation when Debug-formatted.
Source§

fn fmt_list(self) -> FmtList<Self>
where &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<M> Message for M
where M: Debug + Send + Sync,

Source§

impl<T> Pipe for T
where T: ?Sized,

Source§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> R
where Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
Source§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> R
where R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
Source§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> R
where R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
Source§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
where Self: Borrow<B>, B: 'a + ?Sized, R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
Source§

fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
where Self: BorrowMut<B>, B: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe function. Read more
Source§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
where Self: AsRef<U>, U: 'a + ?Sized, R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
Source§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
where Self: AsMut<U>, U: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe function.
Source§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
where Self: Deref<Target = T>, T: 'a + ?Sized, R: 'a,

Borrows self, then passes self.deref() into the pipe function.
Source§

fn pipe_deref_mut<'a, T, R>( &'a mut self, func: impl FnOnce(&'a mut T) -> R, ) -> R
where Self: DerefMut<Target = T> + Deref, T: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe function.
Source§

impl<T> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,

Source§

impl<T> Tap for T

Source§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
Source§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
Source§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
where Self: Borrow<B>, B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
Source§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
where Self: BorrowMut<B>, B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
Source§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
where Self: AsRef<R>, R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
Source§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
where Self: AsMut<R>, R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
Source§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
where Self: Deref<Target = T>, T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
Source§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
where Self: DerefMut<Target = T> + Deref, T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
Source§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
Source§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release builds.
Source§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
where Self: Borrow<B>, B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release builds.
Source§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
where Self: BorrowMut<B>, B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release builds.
Source§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
where Self: AsRef<R>, R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release builds.
Source§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
where Self: AsMut<R>, R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release builds.
Source§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
where Self: Deref<Target = T>, T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release builds.
Source§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Self
where Self: DerefMut<Target = T> + Deref, T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release builds.
Source§

impl<T> TryConv for T

Source§

fn try_conv<T>(self) -> Result<T, Self::Error>
where Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V