Validators take turns proposing blocks of transactions and voting on them. Blocks are committed in chains, with one block at each height. If a block fails to commit, the protocol advances to the next round, and a new validator is given the opportunity to submit a block for that height. To commit a block successfully, two stages of voting are required: pre-vote and pre-commit. When more than two-thirds of validators pre-commit for the same block in the same round, the block is committed.
Validators may fail to commit a block for various reasons, such as the proposer's absence, or a slow network. Tendermint also allows for proposers to establish that certain validators should be skipped. Validators wait a short time for the proposer to send them a complete proposal block before voting to advance to the next phase.
Tendermint is a weakly synchronous protocol rather than an asynchronous one due to its reliance on a timeout. The rest of the protocol, on the other hand, is asynchronous, with validators only moving forward after hearing from more than two-thirds of the validator set. Tendermint makes things easier by using the same technique to commit a block as it does to skip to the next round. If less than one-third of the validators are Byzantine, Tendermint assures that safety will never be broken— therefore validators will never commit conflicting actions.