SIMD-0333
Serialize Block ID in Bank into Snapshot
TL;DR
Currently the block ID (the merkle root of the last FEC set) of the snapshot slot is not included in the snapshot Bank Fields. This would enforce the snapshot producer to include the block ID in the serialized bank.
Summary
Currently the block ID (the merkle root of the last FEC set) of the snapshot slot is not included in the snapshot Bank Fields. This would enforce the snapshot producer to include the block ID in the serialized bank.
Motivation
It is convenient for multiple validator clients to have the block ID when booting from a snapshot, and allows the inter-slot equivocation block ID verification to not be special-cased on startup. In addition, this future-proofs for Alpenglow, as Alpenglow votes and related tracking is done on (Slot, Block ID), and repair & duplicate block resolution uses block ID. Having the block ID available in snapshots enables this.
Impact
Clients will now need to include an extra field when generating a snapshot. Supporting deserializing the `block_id` will also need to be backported to the adjacent (previous) versions of Agave before we begin serializing the `block_id` in snapshots. Other clients will also update their corresponding snapshot serialize and deserialize structures.
Backwards Compatibility
This feature is not backwards compatible.
Security Considerations
Security is improved because this now allows inter-slot verification between the snapshot slot and its child without repairing the block ID of the snapshot slot.