Skip to content

Latest commit

 

History

History
239 lines (194 loc) · 3.89 KB

File metadata and controls

239 lines (194 loc) · 3.89 KB

Consensus

Overview

The Consensus module provides BFT (Byzantine Fault Tolerant) consensus primitives for Tetcore.

Core Types

Validator

pub struct Validator {
    pub account_id: Address,
    pub stake: u128,
    pub commission: u8,
    pub active: bool,
    pub jailed: bool,
    pub metadata: ValidatorMetadata,
}

ValidatorSet

pub struct ValidatorSet {
    pub validators: Vec<Validator>,
    pub total_stake: u128,
}

AuthoritySet

pub struct AuthoritySet {
    pub authorities: Vec<Authority>,
    pub set_id: u64,
}

BFT Messages

Proposal

pub struct ConsensusProposal {
    pub height: u64,
    pub round: u64,
    pub block_hash: Hash32,
    pub proposer: Address,
    pub timestamp: u64,
}

Prevote

pub struct Prevote {
    pub height: u64,
    pub round: u64,
    pub block_id: Option<Hash32>,
    pub voter: Address,
    pub timestamp: u64,
}

Precommit

pub struct Precommit {
    pub height: u64,
    pub round: u64,
    pub block_id: Option<Hash32>,
    pub voter: Address,
    pub timestamp: u64,
}

BFTMessage

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,
}

Consensus State

ConsensusRound

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,
}

ConsensusState

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>,
}

Finality

FinalitySignature

pub struct FinalitySignature {
    pub block_hash: Hash32,
    pub block_number: u64,
    pub validator_set_id: u64,
    pub signatures: Vec<ValidatorSignature>,
    pub is_commit: bool,
}

ValidatorSignature

pub struct ValidatorSignature {
    pub validator: Address,
    pub signature: Vec<u8>,
    pub block_hash: Hash32,
}

Validator Set Changes

ValidatorSetChange

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,
}

Slashing

SlashingInfo

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,
}

Performance

ValidatorPerf

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,
}

Consensus Parameters

ConsensusParams

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,
}

ConsensusTimestamps

pub struct ConsensusTimestamps {
    pub propose_start: u64,
    pub propose_end: u64,
    pub prevote_end: u64,
    pub precommit_end: u64,
}