**Difficulty** is a value used to voorstelling how hard is it to find a hash that will be lower than target defined by system.

The Bitcoin network has a global block difficulty. Valid blocks voorwaarde have a hash below this target. Mining pools also have a pool-specific share difficulty setting a lower limit for shares.

## Contents

Te Bitcoin[network there’s global difficulty set for all blocks. For block to be considered legitimate it has to have hash value lower than set target.

Difficulty is switched every 2016 blocks. This is calculated using following formula:

where target is a 256-bit number.

Difficulty_1_target can take various values. Traditionally it’s a hash function very first 32 pinnig of which are equal to 0 while all the surplus are 1 (it is also called pdiff or pool difficulty). Bitcoin protocol provides target spil a type with floating point and limited accuracy. Different Bitcoin clients often determine difficulty based on this gegevens.

Every block contains a packed version (called “Onaardig”) of hexadecimal target.

Using following formula target can be obtained from any block. For example if a target packed te a block emerges spil 0x1b0404cb its hexadecimal version will look spil following:

Maximum value for this field is 0x7fffff while ondergrens is 0x008000.

Maximum possible target (with difficulty equal to 1) is defined spil 0x1d00ffff which shows up spil following ter hexadecimal numeration:

Next is an effortless way of difficulty calculation. It uses an altered version of Taylor series to logarithm and relies on logs to convert difficulty calculation.

Current difficulty can be found out by using Bitcoin guideline line ‘getDifficulty’.

Due to target function not having ondergrens value maximum difficulty can be calculated only approximately spil following: maximum_target / 1 (spil 0 would lead the equation to being infinitely big) which is an inconcievable number (

Ondergrens difficulty is just equal to 1.

Difficulty is switched every 2016 blocks based on the time it took to detect 2016 previous blocks. If a block is found every Ten minutes (spil it wasgoed intended originally for even emission) finding 2016 blocks will take exactly Two weeks. If previous 2016 blocks were found ter more than two weeks the difficulty will be lowered, and if they were mined quicker then that it will be raised. The more (or less) time wasgoed spent on finding the previous 2016 blocks the more will difficulty be lowered (raised).

To mine a block hash has to be lower than targer (proof-of-work). Hash is a random number inbetween 0 and Two*256-1.

Difficulty is set spil if wij found previous 2016 blocks at the speed of one block vanaf Ten minutes

Average time of finding a single block can be calculated using this formula: time = difficulty * Two**32 / hashrate where ‘difficulty’ is the current difficulty level of Bitcoin network and ‘hashrate’ is the amount of hashes a miner finds vanaf 2nd.

### What is the current difficulty? Edit

Current difficulty, spil output by Bitcoin’s getDifficulty.

### What is the maximum difficulty? Edit

There is no ondergrens target. The maximum difficulty is harshly: maximum_target / 1 (since 0 would result te infinity), which is a ridiculously phat number (about 2^224).

The actual maximum difficulty is when current_target=0, but wij would not be able to calculate the difficulty if that happened. (fortunately it never will, so wij’re ok.)

### Can the network difficulty go down? Edit

### What is the ondergrens difficulty? Edit

The ondergrens difficulty, when the target is at the maximum permitted value, is 1.

### What network hash rate results ter a given difficulty? Edit

The difficulty is adjusted every 2016 blocks based on the time it took to find the previous 2016 blocks. At the desired rate of one block each Ten minutes, 2016 blocks would take exactly two weeks to find. If the previous 2016 blocks took more than two weeks to find, the difficulty is diminished. If they took less than two weeks, the difficulty is enhanced. The switch te difficulty is ter proportion to the amount of time overheen or under two weeks the previous 2016 blocks took to find.

To find a block, the hash vereiste be less than the target. The hash is effectively a random number inbetween 0 and Two**256-1. The offset for difficulty 1 is

and for difficulty D is

The expected number of hashes wij need to calculate to find a block with difficulty D is therefore

The difficulty is set such that the previous 2016 blocks would have bot found at the rate of one every Ten minutes, so wij were calculating (D * Two**48 / 0xffff) hashes te 600 seconds. That means the hash rate of the network wasgoed

overheen the previous 2016 blocks. Can be further simplified to

without much loss of accuracy.

At difficulty 1, that is around 7 Mhashes vanaf 2nd.

At the time of writing, the difficulty is 22012.4941572, which means that overheen the previous set of 2016 blocks found the average network hash rate wasgoed

### How soon might I expect to generate a block? Edit

The average time to find a block can be approximated by calculating:

where difficulty is the current difficulty, hashrate is the number of hashes your miner calculates vanaf 2nd, and time is the average ter seconds inbetween the blocks you find.

For example, using Python wij calculate the average time to generate a block using a 1Ghash/s mining equipment when the difficulty is 20000:

and find that it takes just under 24 hours on average.