Files
consensus/engine
zeekayandHanzo Dev d77a44e511 chain: a cert is not the source of its own bar, and an asker does not size a buffer
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]>
2026-08-21 02:37:58 -07:00
..
2025-12-19 08:49:11 -08:00