Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

QBFT round change justifications #106

Closed
jking-aus opened this issue Jan 15, 2025 · 0 comments
Closed

QBFT round change justifications #106

jking-aus opened this issue Jan 15, 2025 · 0 comments
Assignees
Labels

Comments

@jking-aus
Copy link
Contributor

Description

Our QBFT mechanism does not currently implement round change justifications. I believe we do round changes mostly correct with pr and pv but do not provide or verify the justifications. Early discussion with SSV team was that justifications are piggybacked on round change messages.

It's worth reading the QBFT spec located here https://github.com/ssvlabs/ssv/blob/main/ibft/IBFT.md but snip below

"The content of a ROUND-CHANGE message sent by a node (that’s current round is r) is <ROUND-CHANGE, λ, r+1, pr, pv>, where pr indicates the highest round in which a quorum of PREPARE messages has been received, and pv indicates the value which was included in those PREPARE messages."

What they dont say here is we also need to piggyback the round change justification - as per the original paper here https://arxiv.org/pdf/2002.03613 (Section 4.4).

Here is, I think, the relevant section of the SSV go code:
https://github.com/ssvlabs/ssv/blob/main/protocol/v2/qbft/instance/round_change.go#L430

Present Behaviour

Anchor sends round change messages and identifies pr and pv - it does not piggyback justifications.

Expected Behaviour

We should consider a quorum of round change messages to be justified if:

  • All of the messages in the quorum have prepared round and prepared value of none.
  • Justification has a quorum of valid prepare messages provided with greatest pr.

The leader must carry out verification of the justification message and then send this with the proposal. Other committee members must validate the justification before sending prepare.

Steps to resolve

The consensus logic needs to be implemented to achieve this but we will also have to make sure we're doing it the same way as go-ssv to prevent interop or logic issues.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

2 participants