mirror of
https://github.com/luxfi/consensus.git
synced 2026-09-24 00:26:58 +00:00
Abandonment ended two things with one `continue`. Not re-polling a block whose voters cannot vote on it is correct and deliberate. Never asking for it again is not: the cert catch-up fired once, at the instant of abandonment, and the flag is set for the life of the process and cleared nowhere, so the block was never looked at again. A single dropped fetch was permanent. That froze lux-mainnet luxd-2 and luxd-3 on the C-Chain at 1,159,050 while luxd-0/1/4 ran on to 1,160,600. Both held the blocks — their EVM had them canonical — and consensus never accepted them, because by then the peers were 1,500 blocks ahead and no longer vote on a block that old. Cert catch-up was the only door left and it had already shut. Restarting replays the same eight strikes, which is why two restarts changed nothing. The re-poll cap stays exactly as it was; only recovery becomes persistent. claimCertCatchupLocked is height-keyed, cooled down and hard-bounded, so this is a trickle. avalanchego has no abandon concept at all — it re-polls a processing block until decided and quiesces only at NumProcessing()==0. Co-authored-by: Hanzo Dev <[email protected]>