2

Tendermint 似乎缺少对块创建时间的描述......
他们将默认配置文件创建为

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

我阅读文档和代码。

所以在我的猜测中,如果tendermint 在一轮内成功创建区块,
timeout_propose + timeout_prevote + timeout_precommit = 5s 并等待 timeout_commit 5s ......
所以区块提交发生在 5s~10s 因此下一个区块共识在 10s 之后开始。

如果tendermint在两轮中成功创建块,
(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 并等待 timeout_commit 5s...
所以块提交发生在 11.5s~16.5s 之间,因此下一个区块共识在 16.5s 之后开始。我猜tendermint 会为每一轮添加增量超时。

我的猜测对吗?如果不是,配置文件中的超时究竟是什么意思?

4

1 回答 1

5

感谢您的提问。

https://tendermint.com/docs/tendermint-core/running-in-production.html中有各种关于超时的信息

您还可以在规范中找到更详细的技术说明:https ://arxiv.org/abs/1807.04938

请注意,在成功的回合中,我们绝对等待的唯一超时是timeout_commit.

以下是超时的简要摘要:

  • timeout_propose = 在 prevoting nil 之前我们等待提案块的时间
  • timeout_propose_delta = 每轮增加多少 timeout_propose
  • timeout_prevote = 我们在收到“任何东西”的 +2/3 预选票后等待多长时间(即,不是单个块或 nil)
  • timeout_prevote_delta = 每轮 timeout_prevote 增加多少
  • timeout_precommit = 我们在收到“任何东西”的 +2/3 预提交后等待多长时间(即,不是单个块或 nil)
  • timeout_precommit_delta = 每轮 timeout_precommit 增加多少
  • timeout_commit = 我们在提交一个块后等待多长时间,然后再开始新的高度(这让我们有机会接收更多的预提交,即使我们已经有 +2/3)
于 2018-10-18T20:01:10.663 回答