How Bitcoin network hashrate is estimated
Have you ever wondered how to know how much mining hashpower is currently mining Bitcoin? There is a way to estimate without knowing all of the miners and details about their equipment (hint this is practically impossible).
We know how often a block is being solved, and we can calculated the number of hashes (on average) it will take to solve a block (at the current difficulty). From this information we can estimate the total network hashrate (Hashes/second).
I know you just want a script to calculate it, so here is a python script. Usage:
$ btc_hashrate <blocks-24h> <current-difficulty>
Let’s see how we arrive at:
Let’s say we know that in the last 24h 155 blocks have been solved, so
blocks24h = 155. We also know at 10 min block times, there should be an average of
blocksexpected = 144 (note this indicates the difficulty is too low, since they are being solved more quickly).
We know the current difficulty is 7,184,404,942,701. The number of hashes to find a block (on average), also known as the work ω required is:
hashmax is just the max 32 byte number or 2²⁵⁶, and
target is the current target, which is calculated from the difficulty as:
targetmax is the highest (and therefore easiest) hash that was considered valid in Bitcoin (the genesis block’s target), and was
Then, substituting these values, we can simplify:
We need to account for the actual block rate by multiplying the work with the actual rate
(actualblocks/expectedblocks) * work. We also need to divide by the number of seconds per block
Substituting, this give us: