relab / hotstuff

MIT License
172 stars 53 forks source link

Pipelining #78

Open leandernikolaus opened 2 years ago

leandernikolaus commented 2 years ago

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.

meling commented 2 years ago

Looks like some of the tests are failing now. Please take a look.

leandernikolaus commented 1 year ago

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.

meling commented 1 year ago

@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.