Skip to content

Conversation

@yacovm
Copy link
Collaborator

@yacovm yacovm commented Mar 15, 2025

Currently, if a node misses a finalization message or a finalization certificate message for a round, it will not try to re-broadcast the finalization message for that round even if it finalizes a later round.

In our implementation of Simplex, we can only commit a block if we have collected a finalization certificate for the block, even if a finalization certificate has been collected for a later block.

Also, our implementation of Simplex commits blocks in-order.

It follows from the above that a quorum of correct nodes cannot commit a block if a finalization certificate hasn't been collected for an ancestor block, because an ancestor block cannot be committed due to missing the finalization certificate.

This commit makes the node re-broadcast finalizations for ancestor blocks of blocks for which a finalization certificate has been collected, but cannot be committed because it needs to collect finalization certificates for ancestor blocks.

epoch.go Outdated
// we receive a finalization certificate for a future round
e.Logger.Debug("Received a finalization certificate for a future sequence", zap.Uint64("seq", fCert.Finalization.Seq), zap.Uint64("nextSeqToCommit", nextSeqToCommit))

if err := e.reBroadcastPastFinalizations(); err != nil {
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nit but i think this should be rebroadcastPastFinalizations()

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

fixed

…ater blocks

Currently, if a node misses a finalization message or a finalization certificate message for a round,
it will not try to re-broadcast the finalization message for that round even if it finalizes a later round.

In our implementation of Simplex, we can only commit a block if we have collected a finalization certificate for the block,
even if a finalization certificate has been collected for a later block.

Also, our implementation of Simplex commits blocks in-order.

It follows from the above that a quorum of correct nodes cannot commit a block if a finalization certificate hasn't been collected for an ancestor block,
because an ancestor block cannot be committed due to missing the finalization certificate.

This commit makes the node re-broadcast finalizations for ancestor blocks of blocks for which a finalization certificate has been collected,
but cannot be committed because it needs to collect finalization certificates for ancestor blocks.

Signed-off-by: Yacov Manevich <yacov.manevich@avalabs.org>
@yacovm yacovm merged commit b0960c6 into main Mar 17, 2025
5 checks passed
@yacovm yacovm deleted the resendFinal branch April 8, 2025 15:27
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants