# Casper FFG: How can this below scenario finalize two conflicting checkpoints without violating either Casper commandments?

Casper FFG states that it is impossible for any two conflicting checkpoints to be finalised unless >= 1/3 of the validators violate one of the two Casper commandments. I struggle to see how this can be the case if we start from the root in the above scenario.

Given that r is both finalised and justified, we see that there can be a supermajority link from r->b1 and r->b2. Validators can publish both of these votes (r->b1 and r->b2) without violating either of the slashing condition because 1) h(b1)=1 and h(b2)=3 thus h(b1)≠h(b2), and 2) no votes are within the span of other votes.

Since both b1 and b2 are justified, then validators can also publish votes on b1->a and b2->c. Again, because 1)h(a)=2 and h(c)=4 thus h(a)≠h(c) and 2) no votes are within the span other other votes, b1 and b2 are then both finalised.

Wouldnt't there be two conflicting, finalised checkpoints, namely b1 and b2, in this case? What am I missing in my understanding?

• hmm trying to understand, why is b1 and b2 conflicting? The chain starting at genesis r->b1->b2->b3 looks OK? (If "a" and b2 are finalized then I would see that as conflicting.)
– eth
Oct 30, 2022 at 7:02
• I think im imagining a scenario where there are two chains, namely r->b1->a and r->b2->c (where the second chain skips b1). Suppose both b1 and b2 are finalised. Would b1 not be conflicting with b2 because b1 is b2's ancestor/in the same branch? Oct 31, 2022 at 18:11
• I think I understand your question :) The 2 chains can continue with validators making non-slashable votes on both chains? From what you describe, it looks possible to me. I am out of my depth because Gasper is complicated and there's plenty I haven't read, such as ethresear.ch/t/balancing-attack-lmd-edition/11853 and arxiv.org/abs/2209.03255 If you are interested, those might provide some illumination?
– eth
Nov 1, 2022 at 5:05

This is a good question and the answer resides in the fork choice rule. In the Casper paper, they states clearly that validators must:

FOLLOW THE CHAIN CONTAINING THE JUSTIFIED CHECKPOINT OF THE GREATEST HEIGHT

The reason why your example is not possible with less than 1/3 of validators misbehaving is because more than 1/3 of validators did not respect this fork choice rule.

How do I know? Since there is a supermajority link between a and b1 (b1->a) then at least 2/3 of the validators have seen b1 as justified. Then why would validators make a supermajority link r->b2 when at least 2/3 of the validators have seen a checkpoint with greatest height than r, namely the checkpoint b1?

Your example was illustrated in the Casper paper:

upavloff's answer is incorrect/incomplete I think, since a validator that fails to 'FOLLOW THE CHAIN CONTAINING THE JUSTIFIED CHECKPOINT OF THE GREATEST HEIGHT' won't necessarily be slashed unless it can somehow be proven that it didn't do this.

In this case, the problem is that a vote for (r,b2) is a surround vote of (b1,a), and hence any validator who does both will be slashed. Implicitly, such a surround vote means that the validator knew that b1 was justified (since it voted (b1,a)) and then went ahead and followed a 'shorter' chain by voting for b2 from r.