Proof-of-Work
Proof-of-Work это решение для тяжёлой (дорогостоящей) математической задачи. Это решение должно быть тривиальным, чтобы можно было легко проверить, удовлетворяет ли данное решение заявленным требованиям.
Для обеспечения Proof-of-Work Novacoin использует метод hashcash. Сложность этой работы регулируется таким образом, чтобы ограничить частоту, с которой новые блоки могут быть сгенерированы сетью, до необходимого целевого интервала (от 10 до 30 минут). Из-за очень низкой вероятности успешной генерации доказательства, это делает непредсказуемым определение того, какой именно компьютер в сети сможет сгенерировать следующее решение.
Сколько времени займет генерация Proof-of-Work?
Никто не может сказать точно. Но существует оценка того, сколько времени может потребоваться.
Представим, что есть оборудование со скоростью хэширования в 1 MH/s. Оценим сколько в среднем займёт у Вас генерация Proof-of-Work с текущей сложностью Proof-of-Work в сети Novacoin.
Сложность 1.0 представлена целевым значением в
0x00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
Итак, чтобы получить успешное доказательство работы, необходимо выполнить 0xFFFFFFFFFFFFFFFF / 0x00000000FFFFFFFF
или ~ 4294967297
попыток.
При сложности 360 мы нуждаемся в ~ 360 * 4294967297 = 1546188226920
попытках.
Если имеется 1 MH/s (или 1000000 хешей в секунду) тогда возможно отсканировать такое количество хешей в пределах 1546188226920 / 1000000 = 1546188
секунд или 1546188 / 86400 = 17,89
дней.
Вероятность успешной генерации блока в течение одного дня может быть вычислена исходя из доступного hashrate, согласно формуле:
P = nHashesPerSecond * 86400 / (4294967297 * difficulty)
Как это работает?
Каждый заголовок блока представлен структурой из 6 полей, некоторые из этих полей могут варьироваться довольно свободно.
Поле | Тип | Размер | Требовани |
---|---|---|---|
nVersion | unsigned int | 4 | Изменения вручную недопустимы |
hashPrevBlock | unsigned char[] | 32 | Изменения вручную недопустимы |
hashMerkleRoot | unsigned char[] | 32 | Это хэш дерева merkle. Может быть изменено посредством модификации, дополнения или удаления транзакций |
nTime | unsigned int | 4 | Может быть обновлено вручную на любое значение из интервала [max tx timestamp, time() + 3600] interval. |
nBits | unsigned int | 4 | Изменения вручную недопустимы |
nNonce | unsigned int | 4 | Счетчик попыток для Proof-of-Work. Необходимо обновлять это поле при каждой новой попытке хеширования |
Результат хеширования допустимого значения Proof-of-Work должен быть меньше, чем текущая цель. Майнер пытается найти это подходящее решение, сканируя все возможные значения nNonce (от 0 до UINT_MAX). В случае переполнения будет создаваться новая coinbase транзакция. Это позволяет майнеру заменять значение merkle хеша новым и снова начать nNonce сканирование с нуля. Корректировка метки времени также возможна.
Что относительно наград?
Награда за блок может быть вычислена, используя формулуnBlockReward = 100 / (diffuculty / 0,000244) ^ (1/6)Это означает, максимальную награду в 100 единиц и уполовинивание награды при росте сложности в 64 раза.