I'm confused in how the timer for step Propose/Prevote/PreCommit is scheduled.
OnTimeoutPropose action condition shows that when step is propose but Proposer is not p
then it is timeout. Each round has its own proposer, so I searched to see where a new round can be started, I found that UponQuorumOfPrecommitsAny(p) and OnRoundCatchup(p) trigger StartRound(p,r);
For UponQuorumOfPrecommitsAny, there is comment saying that it should be called in onTimeoutPrecommit, but there is no onTimeoutPrecommit in the TLA.
I don't understand how timeout is implemented in this TLA and why there is no need to define onTimeoutPrevote or onTimeoutPrecommit.
Please help to explain.
Thanks.
Anthony