the Prevote step all nodes gossip all prevotes for the round to their neighboring peers. In the beginning of the Precommit step each validator makes a decision. 2 If the validator had received more than /3 of prevotes for a particular acceptable block then the validator signs and broadcasts a precommit for that block. It also locks onto that block and releases any prior locks. A node has a lock on at most 2 one block at a time. If the node had received more than /3 of nil prevotes then it simply unlocks. When locking (or unlocking) the node gathers the prevotes for the locked block (or the prevotes for nil) and packages them into a proof-of-lock 2 for later when it is its turn to propose. If a node had not received more than /3 of prevotes for a particular block (or nil), then it does not sign or lock anything. During the Precommit step all nodes gossip all precommits for the round to all neighboring peers. At the end of the Precommit step each node makes a decision. If the node 2 had received more than /3 of precommits for a particular block, then the node enters the Commit step. Otherwise it continues onto the Propose step of the next round. Even if a node hadn’t yet received the block precommitted by the network, it enters the Commit step. The Commit step is a special step. There are two parallel conditions that must both be satisfied before finalizing the round. First, the node must receive the block committed by the network if it hadn’t already. Once the block is received by a validator it signs and broadcasts a commit for that block. Second, the node 2 must wait until it receive at least /3 of commits for the block precommitted by the network. Once both conditions are satisfied the node sets its CommitTime to the current time and transitions to the NewHeight step. The asynchronous and local nature of CommitTime allows the network to maintain consensus despite drifting clocks, as long as the clocks remain accurate enough during the consensus process of a given height. Before the first round (round 0) at height H is the NewHeight step whose purpose is to gather additional commits for the previously committed block at height H-1. Nodes stay at this step until some fixed duration of time past Commit- 2 Time. This allows block proposals to include more than the minimum /3 of com- mits, thus allowing the commits of slower validators to be included in the blockchain. 2 At any time during the consensus process if a node receives more than /3 of commits for a particular block, it immediately enters the Commit step if it hadn’t already. Thus there are two ways to enter the Commit step. A commit-vote for a block at round R counts as prevotes and precommits for all rounds R′ where R
Tendermint: Consensus without Mining Page 6 Page 8