SIMD-0333

Serialize Block ID in Bank into Snapshot

Author: Emily Wang · Category: Core Protocol GitHub →

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.