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