mirror of
https://github.com/luxfi/consensus.git
synced 2026-09-24 00:26:58 +00:00
reserveSlotForSign has two refusal branches and both returned false with no log.
That is the hardest failure in the system to diagnose: every node-side counter
stays healthy, the block verifies on every peer, chits come back 4-of-4
accept=true, and the chain simply never advances — because no node ever emits
the SIGNED vote a quorum cert is assembled from.
Two independent read-only investigations on 2026-07-31, one on devnet and one on
testnet, each traced their stall to this function and each had to STOP at
"reserveSlotForSign returns false and logs nothing". Neither could separate the
floor refusal from the binding refusal without reading source. They are very
different faults:
height <= certified floor -> CORRECT. The network already closed this height.
Expected and benign while catching up. Debug.
conflicting binding above
the floor -> LIVENESS-CRITICAL. This node bound the height to
a block that may be dead — its proposer replaced,
or a restart in a later slot changed the rebuilt
block's ID — so the fleet has moved to a candidate
this node will refuse forever and the height can
never gather alpha. A stalled chain, not a
Byzantine peer. Warn.
Log-only; no behaviour change. The measured evidence this unblocks: testnet
logged 807/807 votes UNSIGNED, zero signed votes for the stuck block fleet-wide
against a positive control of 568 signed votes for other blocks, and zero
finalizations in six hours while mainnet finalized normally in the same window.
Co-authored-by: Hanzo Dev <[email protected]>