mirror of
https://github.com/luxfi/consensus.git
synced 2026-09-24 00:26:58 +00:00
Nova is the local-execution gate and stays a bare majority, deliberately below the Quasar two-thirds export floor. It is now read in stake — the unit the chain already weighs votes in — with config.HalfStakeFloor as the one definition, the same shape TwoThirdsStakeFloor gives Quasar one rung up. For a set of equal weights the two readings pick the identical quorum at every size, so a uniform fleet is unchanged. They differ when weights do, and a head-count is wrong in both directions there: registration is open at minValidatorStake, so an entry that never votes still raises floor(n/2)+1 — a five-validator fleet plus a minimum-stake sixth needs four of the five and tolerates one loss where five alone tolerate two — and that same minimum stake can cast one of the four. A majority of stake is neither purchasable nor inflatable. NovaSignerFloor keeps the guard the stake predicate cannot give: a validator holding a stake majority alone must never self-ignite, so a cert also needs NovaQuorum(minBFTCommittee) distinct signers, capped by the majority of the live set so a small chain stays satisfiable. Assembly asks only for that floor and VerifyWeighted is the authority; the gossip pre-filter reads the same floor so a legitimate cert is not dropped before the stake check runs. Co-authored-by: Hanzo Dev <[email protected]>