mirror of
https://github.com/luxfi/consensus.git
synced 2026-09-24 00:26:58 +00:00
The consensus ledger and the VM persist separately, so a node that stops uncleanly comes back with certified finality above the block its VM last committed. Finality then cannot move at all: the fail-closed guard correctly refuses to advance past applied state, and catch-up — steering by the ledger — asks peers for the height above the gap, so the blocks the VM is missing are never fetched. Measured on mainnet luxd-3: ledger 1160628, EVM 1159050, every incoming cert refused with "expected accepted block to have parent ...:1159050 but got ...:1161398", and no descent running because certs were being accepted. AppliedHead exposes what the VM holds. A block can only be applied on top of the one before it, so the lower of the two is what the node actually needs next. Co-authored-by: Hanzo Dev <[email protected]>