2

Tendermint seems to lack a description of block creation time...
They create default config file as

timeout_propose = 3000
timeout_propose_delta = 500
timeout_prevote = 1000
timeout_prevote_delta = 500
timeout_precommit = 1000
timeout_precommit_delta = 500
timeout_commit = 5000

I read documents and code.

So in my guess, if tendermint succeeds to create block in one round,
timeout_propose + timeout_prevote + timeout_precommit = 5s and wait timeout_commit for 5s...
so block commit occurs in 5s~10s thus next block consensus starts after 10s.

And if tendermint succeeds to create block in two round,
(timeout_propose + timeout_prevote + timeout_precommit) + (timeout_propose + timeout_propose_delta + timeout_prevote + timeout_prevot_delta + timeout_precommit + timeout_precommit_delta) = 5s + 6.5s = 11.5s and wait timeout_commit for 5s...
so block commit occurs in 11.5s~16.5s thus next block consensus starts afters 16.5s. I guess that tendermint add delta timeout for each round.

Is my guess right? If not, what exactly do the timeouts in the configuration file mean?

Thunnini
  • 103
  • 1
  • 6

1 Answers1

5

Thanks for the Question.

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)
Ethan
  • 1,057
  • 1
  • 14
  • 23