# 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/