# The latest gossip on BFT consensus
- Link:: https://arxiv.org/pdf/1807.04938.pdf
- Introduction
- [[Consensus]] is the most fundamental problem of distributed computing
- SMT "State Machine Replication" is the guarantee that multiple replicas of computing stay in sync with each other.
- State Machine Replication
- Definitions
- Model
- The paper considers a system of processes that communicate with each other by exchanging messages through a gossip protocol.
- GST "Global Stabilization Time"
- Global Stabilization Time
- Gossip communication is sending a message in which all receivers (correct processes) will receive the message m before max{t,GST}+∆
- State Machine Replication
- States of different machines will not diverge. It is dependent on **Agreement** and **Order**. Agreement on the requests, and the order of the request. (Client requests in this case)
- Client requests are transactions
- Consensus
- Tendemint uses Validity Predicate based Byzantine consensus that has three parts:
- Agreement: No two correct processes decide on different values
- Termination: All correct processes eventually decide on a value
- Validity: A decided value is valid
- Tendermint Consensus Algorithm
- The **total** voting power of faulty processes is n>3f, f is the faulty processes and n is the total processes of the whole system
- There is a dedicated per "round proposer"
- round proposer
- There are 3 timeouts to prevent the algorithm from blocking.
1. timeoutPropose
2. timeoutPrevote
3. timeoutPrecommit
- Each round updates the timeout, to make the communication between correct processes timely and reliable:
- $$timeoutX(r) =initTimeoutX + r*timeoutDelta$$
- The processes exchange the following messages and steps:
1. Proposal, message created by the "round proposer"
2. Prevote, a vote on the proposed message
3. Precommit, another vote on the proposed message
- Every process maintains the following variables:
- step
- lockedValue
- lockedRound
- validValue
- validRound
- Termination mechanism
- Uses "validValue" and "validRound" that are used by proposer.
- Ensures that the values and rounds of a proposer get updated to all processes.
- Proof Of Tendermint Consensus Algorithmhttps://docs.tendermint.com/master/