The Consensus module provides BFT (Byzantine Fault Tolerant) consensus primitives for Tetcore.
pub struct Validator {
pub account_id: Address,
pub stake: u128,
pub commission: u8,
pub active: bool,
pub jailed: bool,
pub metadata: ValidatorMetadata,
}pub struct ValidatorSet {
pub validators: Vec<Validator>,
pub total_stake: u128,
}pub struct AuthoritySet {
pub authorities: Vec<Authority>,
pub set_id: u64,
}pub struct ConsensusProposal {
pub height: u64,
pub round: u64,
pub block_hash: Hash32,
pub proposer: Address,
pub timestamp: u64,
}pub struct Prevote {
pub height: u64,
pub round: u64,
pub block_id: Option<Hash32>,
pub voter: Address,
pub timestamp: u64,
}pub struct Precommit {
pub height: u64,
pub round: u64,
pub block_id: Option<Hash32>,
pub voter: Address,
pub timestamp: u64,
}pub struct BFTMessage {
pub message_type: BFTMessageType,
pub height: u64,
pub round: u64,
pub block_id: Option<Hash32>,
pub sender: Address,
pub signature: Vec<u8>,
pub timestamp: u64,
}
pub enum BFTMessageType {
Proposal,
Prevote,
Precommit,
}pub struct ConsensusRound {
pub height: u64,
pub round: u64,
pub proposer: Address,
pub state: ConsensusRoundState,
pub locked_value: Option<Hash32>,
pub locked_round: Option<u64>,
pub valid_value: Option<Hash32>,
pub valid_round: Option<u64>,
pub prevotes: Vec<Prevote>,
pub precommits: Vec<Precommit>,
pub proposal: Option<ConsensusProposal>,
}
pub enum ConsensusRoundState {
Propose,
Prevote,
Precommit,
Finalized,
}pub struct ConsensusState {
pub height: u64,
pub round: u64,
pub locked_block: Option<Hash32>,
pub valid_block: Option<Hash32>,
pub last_commit: Option<FinalitySignature>,
pub proposer: Option<Address>,
}pub struct FinalitySignature {
pub block_hash: Hash32,
pub block_number: u64,
pub validator_set_id: u64,
pub signatures: Vec<ValidatorSignature>,
pub is_commit: bool,
}pub struct ValidatorSignature {
pub validator: Address,
pub signature: Vec<u8>,
pub block_hash: Hash32,
}pub struct ValidatorSetChange {
pub set_id: u64,
pub added: Vec<Address>,
pub removed: Vec<Address>,
pub updated_stake: Vec<(Address, u128)>,
pub activation_block: u64,
}pub struct SlashingInfo {
pub validator: Address,
pub offense_type: SlashingOffense,
pub slash_amount: u128,
pub evidence: Vec<u8>,
pub block_number: u64,
}
pub enum SlashingOffense {
DoubleVote,
Equivocation,
Unresponsive,
InvalidBlock,
InvalidVote,
}pub struct ValidatorPerf {
pub account_id: Address,
pub blocks_proposed: u64,
pub blocks_authored: u64,
pub prevotes_cast: u64,
pub precommits_cast: u64,
pub missed_votes: u64,
pub offline_events: u64,
pub slashed: bool,
}pub struct ConsensusParams {
pub max_validators: u32,
pub min_validators: u32,
pub block_time_ms: u64,
pub propose_timeout_ms: u64,
pub vote_timeout_ms: u64,
pub finality_threshold: u32,
}pub struct ConsensusTimestamps {
pub propose_start: u64,
pub propose_end: u64,
pub prevote_end: u64,
pub precommit_end: u64,
}