Order of actions

Hi everybody,

I am reading the Tendermint paper “The latest gossip on BFT consensus” but I’m a bit confused about some part and I think this is an actual mistake in the paper.

a) Algorithm 1 works by observing whether or not a some conditions are fulfilled. Each time a set of conditions is given, its code is executed

b) Footnote 7 (page 5) states “The correctness of the algorithm does not depend on the order in which rules are executed.”

c) In Algorithm 1, the 2 blocks (Block1 = lines 33-35; Block2 = lines 63-43) are problematic.
c-i) The conditions of Block1 are a subset of the conditions of Block2.
c-ii) If the conditions for Block2 are given, the algorithm could also choose to execute Block1
c-iii) Block1 changes the state to PrevoteWait, any subsequent invocation of Block2 does not broadcast the PRECOMMIT message any more
c-iv) The order in which the blocks are executed is crucial
c-v) This clearly violates Footnote 7

Please help!
Am I reading this incorrectly? Is it my mistake or is the paper incomplete?

Best Regards,

You are right. We are aware of this issue: https://github.com/tendermint/spec/issues/36. It is a presentational issue, not a conceptual one. We have made rule conditions shorter so the presentation is nicer (it can fit one line) and introduced issues by doing it. We will fix it this week. Thanks a lot for bringing this up.