Skip to content

Validate Byzantine leader proposals in Sailfish - #240

Merged
lemmy merged 1 commit into
tlaplus:masterfrom
Qian-Cheng-nju:sailfish-leader-validation
Oct 28, 2026
Merged

lemmy merged 1 commit into
tlaplus:masterfrom
Qian-Cheng-nju:sailfish-leader-validation

Conversation

@Qian-Cheng-nju

Copy link
Copy Markdown
Contributor

The correct-leader path requires a reference to the previous leader, or a quorum of no-votes. The Byzantine path checks only that the parents form a quorum, so a Byzantine leader can publish a vertex that should have been rejected.

With four nodes and three-node quorums, a 16-transition replay violates Agreement: correct nodes first commit <<a,1>>, but after the Byzantine round-2 leader omits that vertex without a no-vote certificate, node a later replaces its log with one starting at <<d,1>>. Nodes b and c still start with <<a,1>>.

This adds the missing admission check to the Byzantine leader path and regenerates the PlusCal translation. It follows the implementation's header validation, which checks the no-vote certificate before storing a leader header without its predecessor.

The patched replay stops before the invalid proposal. Controls still admit a leader carrying its predecessor and one carrying a sufficient no-vote certificate. TLCSailfish1 passes with unchanged state counts, as do three additional small configurations before and after GST.

@Qian-Cheng-nju
Qian-Cheng-nju force-pushed the sailfish-leader-validation branch from 9cede8b to d0cb13b Compare October 20, 2026 17:24
@lemmy

lemmy commented Oct 21, 2026

Copy link
Copy Markdown
Member

/cc ^^ @nano-o

else
with (delivered \in SUBSET {v \in vs : Round(v) = r-1}) {
await IsQuorum({Node(v) : v \in delivered}); \* ignored otherwise
if (Leader(r) = self)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Between 129 and 130, add a comment that correct nodes check those conditions and ignore the message if they don't hold.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Added a comment clarifying that correct nodes check these conditions and ignore the message if they don't hold.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

thanks

@Qian-Cheng-nju
Qian-Cheng-nju force-pushed the sailfish-leader-validation branch from d0cb13b to 449409f Compare October 27, 2026 12:51
@lemmy

lemmy commented Oct 27, 2026

Copy link
Copy Markdown
Member

@Qian-Cheng-nju @nano-o Thanks for your efforts, ready to merge?

@Qian-Cheng-nju

Copy link
Copy Markdown
Contributor Author

Thanks for your efforts, ready to merge?

I think it is ready.

@lemmy
lemmy merged commit 338afd5 into tlaplus:master Oct 28, 2026
7 checks passed
@Qian-Cheng-nju
Qian-Cheng-nju deleted the sailfish-leader-validation branch October 28, 2026 14:10
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Development

Successfully merging this pull request may close these issues.

3 participants