aleph_bft_rmc/
lib.rs

1pub use aleph_bft_crypto::{
2    Indexed, MultiKeychain, Multisigned, NodeCount, PartialMultisignature, PartiallyMultisigned,
3    Signable, Signature, Signed, UncheckedSigned,
4};
5use codec::{Decode, Encode};
6use core::fmt::Debug;
7use std::hash::Hash;
8
9mod handler;
10mod scheduler;
11mod service;
12
13pub use handler::Handler;
14pub use scheduler::DoublingDelayScheduler;
15pub use service::Service;
16
17/// An RMC message consisting of either a signed (indexed) hash, or a multisigned hash.
18#[derive(Debug, Encode, Decode, Clone, PartialEq, Eq, Hash)]
19pub enum Message<H: Signable, S: Signature, M: PartialMultisignature> {
20    SignedHash(UncheckedSigned<Indexed<H>, S>),
21    MultisignedHash(UncheckedSigned<H, M>),
22}
23
24impl<H: Signable, S: Signature, M: PartialMultisignature> Message<H, S, M> {
25    pub fn hash(&self) -> &H {
26        match self {
27            Message::SignedHash(unchecked) => unchecked.as_signable_strip_index(),
28            Message::MultisignedHash(unchecked) => unchecked.as_signable(),
29        }
30    }
31    pub fn is_complete(&self) -> bool {
32        matches!(self, Message::MultisignedHash(_))
33    }
34}