I have a question about when the fork-choice rule is checked in real implementation or in the specification. Maintaining a fork-choice store is important and due to network delay, there may happen temporal fork. In this case, as I understand, the fork-choice rule (i.e., in this case, LMD-GHOST) decides the canonical head (simply the most voted block win).
- When a validator receives any new unaggregated/aggregated attestation
- This may require too much computation
- When a validator receives a new beacon block
- e.g., during per-block processing
- When a validator became a proposer
- When slot/epoch starts or ends
- e.g., during per-slot/epoch processing