With BABE, I understand validators to produce blocks and chosen randomly and multiple validators may be eligible to produce a block, already providing a large amount of forks/fork opportunities. If no validator is chosen, or none produce valid blocks, any validator may step in to produce a block.
GRANDPA is supposed to have the validators finalize on the longest chain given the most primary slot validator produced blocks.
If there are valid blocks produced by primary slot validators, yet the validators as a whole finalize on a chain ignoring those blocks and instead favoring blocks produced by secondary slot validators, will non-validator nodes consider this a consensus violation (non-best chain chosen to become best chain) or will they adapt accordingly? I expect the answer will be they'll adapt accordingly, given natural scenario:
- Primary slot validators take too long to publish
- Random validator steps in
- Random validator's block is successfully propagated before a block by a primary slot validator
Yet I wanted to sanity check my understanding of consensus here.