# How can I use hashrate distribution to make inferences about when a specific pool will find a block?

Miners find blocks randomly but also proportionally to the miner's hashrate. How can I best predict and express this 'chance' per mining pool?

For example, if F2Pool has had 10% of the total mining hashrate for the past week, does it make sense to say that they will probably find 10% of the blocks moving forward?

What's the best way to express the notion? I'd like to be able to say something like:

"F2Pool has a 10% chance to find the next block in the next 10 minutes, and this approaches 100% after 10 blocks. Ie. F2Pool has a very good chance to find at least one block within the next 100 minutes."

Obviously there is never a 100% chance to find a block in the next x blocks, so what's the accepted way of giving a number but also with that undertone of "or maybe never?"

Is there an API or library I can use to calculate/know these 'chance' values over time per mining pool?

For example, if F2Pool has had 10% of the total mining hashrate for the past week, does it make sense to say that they will probably find 10% of the blocks moving forward?

Assuming that a lot of miners don't switch, yes.

"F2Pool has a 10% chance to find the next block in the next 10 minutes, and this approaches 100% after 10 blocks. Ie. F2Pool has a very good chance to find at least one block within the next 100 minutes."

You're asking two subtly different questions here.

1. Will I find the next block?
2. Will I find a block in the next ten minutes?

You could find the next block, eleven minutes from now. You could find a block in five minutes, building on a block that was discovered four minutes ago.

### Will I find the next block?

This is pretty straightforward. If you have 10% of the hashrate, there's a probability of 0.1 that you will find it. If you have p proportion of the hashrate, there's a probability `(1-(1-p)^n)` that you will find a block in the next n blocks. For 10% hashrate, and 10 blocks, that's a chance of 65%. Far from a sure thing.

``````p = 0.1
Blocks  Probability of you getting a block
0       0.00000
1       0.10000
5       0.40951
10      0.65132
30      0.95761
50      0.99485
100     0.99997
`````` ### Will I find a block in the next ten minutes?

Block discovery follows a poisson distribution. A poisson distribution represents a bunch of independent events, where one event happening has no effect on it happening in the future.

We want to know the odds of k blocks being found by anyone in a ten minute period, when there is an average of 1 block every ten minutes. Wikipedia already has a table for us:

``````k   P(k)
0   0.368
1   0.368
2   0.184
3   0.061
4   0.015
5   0.003
6   0.0005
``````

But this isn't quite what we need - if ten blocks are found, there is a much better chance that one of them is ours than if one block is found. Multiply by expression above, and substitute k for n, and 0.1 (our proportion of hashrate) for p.

``````k   P(k)    P(k)*(1-(1-0.1)^k)
0   0.368   0.0000
1   0.368   0.0368
2   0.184   0.0350
3   0.061   0.0165
4   0.015   0.0052
5   0.003   0.0012
6   0.0005  0.0002
Sum:    0.0949
``````

Sum up the last column. We get a 9.49% chance, which is the chance that you will get at least one block in the next ten minutes if you have 10% of the hashrate. But, that doesn't mean that there's a 95% chance of having a block in ten minutes with 100% of the hashrate. It's not linear. If you have 100% of the hashrate:

``````k   P(k)    P(k)*(1-(1-1.0)^k)
0   0.368   0.0000
1   0.368   0.3680
2   0.184   0.1840
3   0.061   0.0610
4   0.015   0.0150
5   0.003   0.0030
6   0.0005  0.0005
Sum:    0.6315
``````

...then you have a 63.2% chance of having a block in the next ten minutes if you have all of the hashpower.

(Our calculations are low by about a twentieth of a percent, because we didn't consider cases like k=7. But I figure this is a good approximation.)

• I have trouble following your though process on the three last paragraphs. You talk about having a much better chance to find one out of ten blocks, but the tables or following paragraphs don't seem to address that.
– Murch
Dec 18, 2016 at 11:58
• @Murch I've made some edits. Mind taking a look? Dec 19, 2016 at 2:30
• Ah yes, now it's clearer to me. I've also found a mistake in my own thought process. ;)
– Murch
Dec 19, 2016 at 8:21

"F2Pool has a 10% chance to find the next block in the next 10 minutes, and this approaches 100% after 10 blocks. Ie. F2Pool has a very good chance to find at least one block within the next 100 minutes."

Nick already addressed this, but I'd like to point out that it seems to me that you're misunderstanding something very fundamental about statistics: When you toss a coin, the expected chance to get tails is 50%. Your statement above reads as if you're saying that two coin tosses would have a 100% chance of producing one result of tails. –– That's not true, though.

Obviously, you could get either of the four results for two coin tosses: `TT`, `TH`, `HT`, or `HH`. Which means, there is a 25% chance to get two tails, a 50% chance to get one tails, and a 25% chance to not get a tails. If you meant "at least one block" that would be a 75% chance for our example, not 100%.

Translated to block discovery this means the following:

• Block propagation and validation takes an very small amount of time, so we're assuming you're always working on a valid block.
• Finding blocks is completely independent from other blocks being found.

Thus, your chance of finding exactly one block in 100 minutes with 10% of the hash rate has the same Poisson distribution as finding exactly one block in 10 minutes with 100% of the hash rate. That you're only trying to discover one block out of ten does not have any influence!

Your chance to find exactly 1 block in the time frame where you would be expected to find one block is 36.8% (also see Nick's tables), and it's 63.2% to find at least one block.

Just because I had missed that when I first read Nick's answer: Note that your chance of finding one block out of the next `n` is different from your chance of finding a block in the time frame where `n` blocks are expected.