Methodology

Let there be a network with a total computation power of, e.g., 1,000,000 weight.

We want to calculate the probability of a dishonest actor with, e.g., 20% of that weight (200,000 weight) blocking/taking over a subnet with 128 slots.

In order to block consensus in a subnet, the actor would need to be assigned to >1/3 of the subnet’s 128 slots; that is, ≥ 43 slots. To take control of the subnet, they would need >2/3, that is, ≥ 86 slots.

This follows a hypergeometric distribution: we have a population with size N=1,000,000, where K=200,000 such units are dishonest, and we want to get a probability distribution of k units of dishonest weight being selected from that population after n=128 draws without replacement.

Thus, the probability of the actor taking over the subnet is P(k >= 86), that is, the right tail of the distribution.

For this particular example, the probability P_takeover would be ~= 8.3795 * 10^-31.


Next, we might ask ourselves: given P_takeover, how many rounds of selecting subnets would it take for us to expect the actor to take over at least 1 subnet?

The probability of the actor taking over at least one subnet after n rounds is:

P(at least once) = 1 - P(not taking over)^n

P(at least once) = 1 - (1 - P_takeover)^n

To calculate how many rounds it would take to reach a confidence level of 99% that at least 1 subnet has been taken over:

P(at least once) >= 0.99
1 - (1 - P_takeover)^n >= 0.99

Solving for `n`:

n >= ln(1-0.99) / ln (1-P_takover)

For this particular example, it would take ln(1-0.99) / ln (1-(8.3795 * 10^-31)), i.e. 5.49 * 10^30 rounds, for us to have a 99% confidence level that at least 1 subnet has been taken over.