Question on figure 1 in section 3: the right-hand side of the diagram shows two conflicting checkpoints, but they are at different block heights. Given that checkpoints are at a pre-determined block height how would this situation occur?
In section 2 you state:
During epoch n, validators are expected to send prepare and commit
messages with e = n and h equal to a checkpoint of epoch n. Prepare
messages may specify as h* a checkpoint for any previous epoch (preferably
the preceding checkpoint) of h , and which is justified (see below), and the
e* is expected to be the epoch of that checkpoint.
This clashes with your definition of h* above in the same section, which specifies h* as
h* the most recent justified hash
Something that is unclear from the paper is what happens if a checkpoint is not finalised during the following epoch. I would assume that prepare/commit carries on in to the next epoch, but then that could cause h* to change during an epoch and result in there not being enough prepares to finalise a checkpoint so perhaps I’m wrong with that assumption.