Consensus timeouts explained

# config/config.toml

[consensus]
...

timeout_propose = "3s"
timeout_propose_delta = "500ms"
timeout_prevote = "1s"
timeout_prevote_delta = "500ms"
timeout_precommit = "1s"
timeout_precommit_delta = "500ms"
timeout_commit = "1s"

There’s a variety of information about timeouts in https://tendermint.com/docs/tendermint-core/running-in-production.html

You can also find more detailed technical explanation in the spec: https://arxiv.org/abs/1807.04938

Note that in a successful round, the only timeout that we absolutely wait no matter what is timeout_commit .

Here’s a brief summary of the timeouts:

  • timeout_propose = how long we wait for a proposal block before prevoting nil
  • timeout_propose_delta = how much timeout_propose increases with each round
  • timeout_prevote = how long we wait after receiving +2/3 prevotes for “anything” (ie. not a single block or nil)
  • timeout_prevote_delta = how much the timeout_prevote increases with each round
  • timeout_precommit = how long we wait after receiving +2/3 precommits for “anything” (ie. not a single block or nil)
  • timeout_precommit_delta = how much the timeout_precommit increases with each round
  • timeout_commit = how long we wait after committing a block, before starting on the new height (this gives us a chance to receive some more precommits, even though we already have +2/3)

Author: Ethan Buchman
Originally posted on StackOverflow: https://stackoverflow.com/a/52881658/820520

7 Likes