All the details are documented here: https://github.com/ethereum/EIPs/issues/225
In short, the facts for a system with N sealers:
- every block has a preferred sealer (in-turn signing), which will set the block difficulty to 2
- if the preferred sealer does not sign the block, other sealers can jump in (out-of-turn), but they can set the block difficulty only to 1
- The preferred sealer is switching by applying round-robin
- The forks still can happen, the heaviest chain (-> block difficulties added) will win (-> GHOST-protocol)
- Out-of-turn sealers will delay they block proposal, in order to give the in-turn sealer a better chance to get his proposal propagated through the network.
- When a sealer in Clique signs a block, he is not allowed to seal the next
floor(N / 2)
blocks