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
Am I reading this incorrectly? Is it my mistake or is the paper incomplete?