mirror of
https://github.com/luxfi/consensus.git
synced 2026-09-24 00:26:58 +00:00
NovaSignerFloor saturates at NovaQuorum(minBFTCommittee) = 3 for every K, so a committee of nine was asked for three signatures. With no stake source wired nothing downstream re-derives the majority either, leaving the cert's own declared Threshold as the entire bar — a security parameter chosen by the party it constrains. Quasar's weighted verifier already refuses that and pins its own minimum; the engine cert had no floor at all. Three consequences, each with a test: four of nine finalizes where the majority is five; two disjoint triples both certify different blocks at one height with no validator equivocating and none misbehaving; and a three-vote cert for a losing sibling clears verification and jails three validators who each signed one block once — jailing a majority of them halts the chain more cheaply than the fork the cert claims to prove. Votes are broadcast, so anyone on the gossip path holds enough of them. The floor is now the live committee's majority, checked against the votes the cert CARRIES rather than the number it claims to need, at both doors. Leaving catch-up behind would have kept the whole hole open one path over. Separately: From reserved make([]Certified, 0, max) with max straight from the asker, so a peer writing MaxInt cost a makeslice panic in one packet. It was the only peer-sized quantity here without a cap — vote_count is checked against the remaining frame, sig_len against the buffer, the Merkle step count at 64. Nothing past the served window can be answered anyway, and the run is built by appending, so capping the reservation changes no reply. Co-authored-by: Hanzo Dev <[email protected]>