Files
consensus/engine
zeekayandHanzo Dev 5f67ce5744 chain: walk through the catch-up epoch door instead of describing it
The far-past epoch bound was given a second door and a test file, and the test
file drives the predicate. Where it calls the door it hands AcceptCatchupBlock a
three-byte cert, which fails UnmarshalQuorumCert about forty lines before the
epoch is read: the error it observes is a codec error, and it is asserted as
proof of a safety property. Deleting the bound from both of its sites in
catchup_accept.go leaves that file green.

These drive the door with a real 4-of-5 cert -- the same assembly the liveness
path accepts -- over a VM whose blocks carry an epoch, on a node stranded at N
with the parent tracked. A block at N+1 stamped below its parent's epoch is
refused, reaches VM.Accept zero times, and leaves the finalized height where it
was. Epoch 0 under a live parent is the same attack with the cheapest payload.

The forward-epoch case is admitted through identical machinery, differing only
in the epoch, so the refusals are attributable to the bound and not to some
earlier gate. It is also the half that matters for liveness: catch-up exists to
serve exactly the history across which an honest chain's epoch advances, and a
bound that froze the epoch rather than directing it would stop the fetch it was
added to protect.

Co-authored-by: Hanzo Dev <[email protected]>
2026-08-20 19:36:55 -07:00
..
2025-12-19 08:49:11 -08:00