1use serde::{Deserialize, Serialize};
2
3use crate::block::Block;
4use crate::certificate::{DoubleCertificate, QuorumCertificate, TimeoutCertificate};
5use crate::crypto::Signature;
6use crate::validator::ValidatorId;
7use crate::view::ViewNumber;
8use crate::vote::Vote;
9
10#[derive(Debug, Clone, Serialize, Deserialize)]
11pub enum ConsensusMessage {
12 Propose {
14 block: Box<Block>,
15 justify: Box<QuorumCertificate>,
16 double_cert: Option<Box<DoubleCertificate>>,
17 signature: Signature,
18 },
19
20 VoteMsg(Vote),
22
23 Prepare {
25 certificate: QuorumCertificate,
26 signature: Signature,
27 },
28
29 Vote2Msg(Vote),
31
32 Wish {
34 target_view: ViewNumber,
35 validator: ValidatorId,
36 highest_qc: Option<QuorumCertificate>,
37 signature: Signature,
38 },
39
40 TimeoutCert(TimeoutCertificate),
42
43 StatusCert {
45 locked_qc: Option<QuorumCertificate>,
46 validator: ValidatorId,
47 signature: Signature,
48 },
49}