Собственно, все озвучено давно уже

Хотя нет, дополнение на тему подсчета награды. Возможно, вместо номера блока следует использовать разность между таймстампами нулевого и генерируемого блока, для нормализации помноженное на подобранную константу.
Т.е. вместо
R = isqrt(nHeight * iDiff)
Использовать
R = isqrt(k * (nTimen - nTime0) * iDiff)
По сути это даст то же самое, однако заметно упростит реализацию майнерского софта. Т.к. таймстамп нулевого блока в майнере или пулсервере будет можно жестко прописать, вместо постоянного обновления nHeight.