mirror of
https://github.com/luxfi/node.git
synced 2026-07-27 03:39:39 +00:00
Two changes, both node-local: 1. CADENCE — proposer.WindowDuration (the proposer-slot spacing, a validator's min build delay = slot index x WindowDuration) was a hardcoded 5s const tuned for mainnet-scale validator sets, flooring small/local block cadence at 5s per slot. It is now a startup-configurable var (default 5s, unchanged for mainnet) set via the new --proposervm-window-duration flag → node.Config → ManagerConfig → proposervm.Config → proposer.SetWindowDuration at VM init. Read by both the windower delay math and TimeToSlot, so they stay consistent. Measured on a 5-node strict-PQ net: 5s→1s took sustained C-Chain from 44 TPS / 14s-per-block to 104 TPS / 3.8s-per-block, still 5/5 byte-identical finality. 2. SECURITY (cryptographer MEDIUM-1) — postForkCommonComponents.Verify now refuses a block carrying a CLASSICAL secp256k1 proposer identity when the chain is strict-PQ (StakingMLDSASigner set), UNCONDITIONALLY (before the consensusState==Ready gate, so it also holds during bootstrap/state-sync). Fills the documented-but-unwired 'proposer' SchemeGate site: the downgrade defense is now an explicit fail-closed in-perimeter gate, not merely emergent from 20-byte NodeID collision-resistance + upstream enforcement. Adds SignedBlock.HasClassicalProposer(). Mirrors contract.RefuseUnderStrictPQ. Pins consensus v1.36.7 (consume-on-error build loop — kills the non-leader BuildBlock spin). Block + proposervm VM tests green. Co-authored-by: Hanzo Dev <dev@hanzo.ai>