Javadoc
Compute the next required proof of work using a weighted average of the
estimated hashrate per block.
Using a weighted average ensure that the timestamp parameter cancels out in
most of the calculation - except for the timestamp of the first and last
block. Because timestamps are the least trustworthy information we have as
input, this ensures the algorithm is more resistant to malicious inputs.