Let’s pessimistically assume there are 5 peers that sent a node the wrong block, which it then broadcasted to 20 children. In a network of 250 nodes, that is 24.6 unique connections (20+5 minus the overlap between parent and children). So we will calculate with 24 connections as the average unique connection count. Let’s assume 2/3 of those peers do not perform gossip correction, leaving us with 8 unique connections that nodes can receive corrections from.

Those 8 connected nodes plus the node itself makes a group of 9 nodes. We know that as soon as any of those 9 nodes receives the new block, all 9 nodes get it via gossip correction. Thus we calculate the probability that none of the 9 nodes receives the stronger block. Using the formula p from the first part of this story, we get q = p(0.09, 9) = 0.09⁹ = 3.87e-10. That means in 4 out of 10 billion blocks (i.e. once every 800 years) a delegate forges based on the wrong block.

More than two competing blocks

For any two blocks, let q be that probability to receive the weaker one only (e.g. q = 3.87e-10 from above). Assume there are n competing blocks in the network with B1 beats B2 beats B3 … beats B(n-1) beats Bn. Then for every node

the probability to not receive B1 when received B2 is q,

the probability to not receive B1 when received B3 is q,

…

the probability to not receive B1 when received B(n-1) is q,

the probability to not receive B1 when received Bn is q.

This means that as soon as a node received any block from B2, …, Bn, the probability to not receive B1 is as low as q. Receiving more than two blocks decreases the probability to not receive B1 (because of more connections from other gossip graphs), but in a fashion that is hard to calculate because those events are not independent.

Conclusion

Utilizing gossip correction on a full gossip graph is resistant to 2/3 malicious nodes and still makes the probability of a forging delegate to receive the weaker block only negligible.

Since the probability of forks does not increase with the number of competing blocks (however, bandwidth and CPU load does), implementing gossip correction should allow delegates to forge with multiple nodes at the same time.

Credits

Massive pre-release feedback from vekexasia, Isabella Dell, cc001 and StellarDynamic helped to shape this article. Thank you for all the inspiring discussions!