Proof-of-Work

A Proof-of-Work is a solution for difficult (costly) mathematical task. This solution must be trivial to check whether data satisfies claimed requirements.

Novacoin uses the hashcash method to provide proofs of the work. The difficulty of this work is adjusted so as to limit the rate at which new blocks can be generated by the network to required target spacing rate (from 10 to 30 minutes). Due to the very low probability of successful proof generation, this makes it unpredictable which worker computer in the network will be able to generate the next solution.

How long will it take me to generate a Proof-of-Work?

No-one can say exactly. But there is an estimation of how long it might take.

Imagine that you have a hardware with 1 MH/s hashing speed. Let's estimate how much time the generation of Proof-of-Work will take from you in average, with a current Novacoin Proof-of-Work difficulty.

Difficulty 1.0 is represented by

 0x00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF

value of target. So, to get a successful proof of work we need to perform 0xFFFFFFFFFFFFFFFF / 0x00000000FFFFFFFF or ~ 4294967297 attempts.

At difficulty 360 we need ~ 360 * 4294967297 = 1546188226920 attempts. If you have 1 MH/s or 1000000 hashes per second then you will be able to scan such amount of hashes within 1546188226920 / 1000000 = 1546188 seconds or 1546188 / 86400 = 17,89 days.

Probability of successful block generation during one day could be calculated from available hashrate using formula:

 P = nHashesPerSecond * 86400 / (4294967297 * difficulty)

How does it work?

Each block header represented by structure of 6 fields, a some of this fields could be varied pretty freely.

FieldTypesizeofRequirements
nVersionunsigned int4Shouldn't be modified manually
hashPrevBlockunsigned char[]32Shouldn't be modified manually
hashMerkleRootunsigned char[]32It's a merkle tree hash. Could be modified through modification, addition or removal of transactions.
nTimeunsigned int4Can be updated manually to any value from [max tx timestamp, time() + 3600] interval.
nBitsunsigned int4Shouldn't be updated manually
nNonceunsigned int4Attempts counter for Proof-of-Work. You need to update this field for every new hashing attempt.

The hashing result of a valid Proof-of-Work value must be lower than current target. Miner tries to find this suitable solution by scanning all possible nNonce values (from 0 to UINT_MAX). In case of overflow the new coinbase transaction will be created. This allows miner to replace a value of new merkle tree hash with a new one and start nNonce scanning from zero again. Adjustment of timestamp is also possible.

What about rewards?

Block reward can be calculated using formula

 nBlockReward = 100 / (diffuculty / 0,000244) ^ (1/6)

This means, that reward starts from 100 coins and cut in a half every 64x multiply of difficulty.


BasisNetwork basicsClient softwareRelated pages
Valid XHTML 1.0 Transitional Valid XHTML 1.0 Transitional Valid CSS Valid CSS      I find a bug/typo or I have a suggestion
Adapted for Lynx-like browsers
2013-2017 © Zloy & Co
For donations: 4ZLoY6T8wXKgrbZM9gL8fQt48NUzGo2yAg