hotstuff
hotstuff copied to clipboard
Pipelining
This implements pipelining for chained hotstuff. Pipelined blocks still form a single chain, but need not include the certificate for their direct parent.
Commit rule is updated to commit requests if there is a depth 3 confirmation chain and all intermediate blocks are confirmed as well.
Looks like some of the tests are failing now. Please take a look.
In 7e59d24 I revised the approach. Now the synchronizer has both a currentView
and nextView
.
currentView
is advanced on receiving a TC or QC, while nextView
is advanced on receiving a block if it lies within the pipeline.
This makes the system run more stable since it no longer reacts to individual timeouts.
However, the consensus module now no longer proposes blocks only in the current view but needs to receive a view, in which it should propose.
This also required updates to Twins.
Based on my analysis and testing, without pipelining, nextView
and currentView
should always coincide.
@leandernikolaus I tried to merge master into this branch (locally) in an attempt to resolve the conflicts. However, the current synchronizer no longer has a leafBlock
field and LeafBlock()
method, it wasn't clear to me what needed to be done. This was removed in this commit. Could you try to resolve the conflicts, or let me know what needs to be done to get this back into a good shape. Or let me know if this no longer makes sense to merge.