mirror of
https://github.com/luxfi/consensus.git
synced 2026-09-24 00:26:58 +00:00
Two findings close here. The epoch bound ran once, at arrival, against a parent the sender chose not to have sent yet. A child delivered before its parent was admitted as an orphan at a stale epoch, and nothing re-read it when the parent became tracked — so a departed coalition holding no stake in the live set reached VM.Accept at Quasar (export) finality. The child's epoch is now re-checked against its parent at the point the parent becomes tracked, and a regressed child is refused there, closing the ordering the attacker picked. And the build anchor / hint was seeded from an envelope id where it must be seeded from the inner canonical decision, so a sibling wrapper of the tip's execution read as a different anchor and the anchor could regress. It routes through decision() now — the one canonical-vs-envelope primitive — so two wrappers of one execution seed the same anchor and it never moves backward. Full engine/chain suite green: no regression against the eight findings already closed on this branch. Co-authored-by: Hanzo Dev <[email protected]>