SIMD-0340
Validate chained block id
TL;DR
Verify chained merkle roots across slot boundaries.
Summary
Verify chained merkle roots across slot boundaries.
Motivation
Currently it is not required to verify that a FEC set merkle root chains correctly across slot boundaries. Consensus can converge on a block even if the first FEC set's chained merkle root is invalid ie. does not chain off the parent block's last FEC set merkle root (the block id). This is a problem because chained merkle roots should validate an entire ancestry, so that you have a canonical linear chain (all the way back to the snapshot slot - see also SIMD-0333 proposal for including a block_id in the snapshot manifest). Otherwise, you don't know if your parent slot based on `slot - parent_off` is in fact your actual parent block because slot numbers do not key blocks uniquely when there is equivocation. This is important for both TowerBFT and Alpenglow consensus. Alpenglow in particular will need this to repair the alternate version of a block when the parent slot / parent block_id mismatch is due to equivocation.
Impact
Clients will mark blocks that don't properly chain to their parent as dead that they previously would have replayed.
Backwards Compatibility
This feature is backwards compatible with the existing chained merkle shred format. It will be deprecated with the rollout of Alpenglow (together with chained merkle shreds generally). However, this SIMD should be feature gated. Blocks with invalid chained merkle roots to parent blocks previously could have been rooted by consensus but now will be marked as dead. Thus validators will need to coordinate rollout of this upgrade.
Security Considerations
Security is improved because of enhanced equivocation protection.