Skip to content

Validate Byzantine leader proposals in Sailfish - #240

Open
Qian-Cheng-nju wants to merge 1 commit into
tlaplus:masterfrom
Qian-Cheng-nju:sailfish-leader-validation
Open

Qian-Cheng-nju wants to merge 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.

Signed-off-by: Qian-Cheng-nju <Qian-Cheng-nju@users.noreply.github.com>
@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

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.

2 participants