Mia Chloe is right. Mining is a
Poisson process. One important characteristic of a Poisson process, is that it is memoryless; whether a block was found recently or not, does not give us a clue about the likelihood that another block will be found soon. Whether the last block was mined 2 hours ago or 10 minutes ago, the probability of mining a block within the next 10 minutes remains the same. (Of course, under the assumption that hashrate is constant and blocks are mined every 10 minutes on average)
As displayed in Wikipedia, the formula is: P{N = n} = Λ
n * e
-Λ / n!, where:
- n: the number of blocks to find within 10 minutes
- Λ: the number of blocks you would expect to find in 10 minutes.
For n=3, Λ=1, we get 0.0613132, or 6.13%.
The C++ code that implements it is the following:
#include <iostream>
#include <cmath>
using namespace std;
// constant number 'e'
const double Euler = std::exp(1.0);
// return x^y
int power(int x, int y){
int i, z = x;
for(i = 0; i < y; i++)
z *= z;
return z;
}
// factorial of integer x
int fact(int x){
if(x == 0) return 1;
int i, factorial = 1;
for(i = 1; i <= x; i++)
factorial *= i;
return factorial;
}
int main(){
// P{N = n} = Λ^n * e^-Λ / n!
// n: number of blocks to find within given time frame
// Λ or lambda: number of blocks you would expect to find in 10 minutes
int n = 3, lambda = 1;
double P = power(lambda, n) * pow(Euler, -lambda) / fact(n);
cout << P << endl;
}
Just compile with "
g++ -o mining mining.cpp" and run with "
./mining".
See how abruptly improbable it becomes as you increase n.
For n=3, Λ=1, P=0.0613132
For n=4, Λ=1, P=0.01532830
For n=5, Λ=1, P=0.00306566
For n=6, Λ=1, P=0.000510944
For n=7, Λ=1, P=0.00000729