Как майнеры используют nonce?
Майнер собирает заголовок блока, задаёт nonce значение 0 и вычисляет хеш. Если хеш выше целевого значения, он задаёт nonce значение 1 и пробует снова, затем 2 и так далее. Слово nonce означает «число, используемое один раз».
Одно значение nonce не лучше другого. Хеш нельзя предсказать, поэтому у каждой попытки одинаковый ничтожный шанс на успех. Благодаря этому майнинг честный: чем больше попыток в секунду, тем выше шансы. Ничто другое не помогает.
Что происходит, когда значения nonce заканчиваются?
Четыре байта вмещают всего 4 294 967 296 значений. Современная машина перебирает их все гораздо быстрее чем за тысячную долю секунды. Поэтому майнеры меняют другие данные в блоке и начинают перебор nonce заново.
Цикл майнера
- 01
Перебрать каждый nonce
0, 1, 2 и так далее вплоть до 4 294 967 295. Это все значения, которые могут вместить 4 байт.
- 02
Быстро заканчиваются
Одно устройство на 100 ТХ/с перебирает их все примерно за 43 миллионных долей секунды.
- 03
Изменить дополнительный nonce
Майнер редактирует свободное поле в собственной транзакции вознаграждения (coinbase).
- 04
Новый корень Меркла
Эта транзакция изменилась, поэтому корень Меркла меняется, и каждый nonce снова даёт новые хеши.
Обычно используют дополнительный nonce — запасное поле в coinbase-транзакции. Его изменение меняет корень дерева Меркла и даёт совершенно новый набор заголовков для перебора. Майнеры также могут немного менять временную метку и, на многих современных машинах, несколько бит поля версии.
Источники
- Nonce · Bitcoin Wiki
- Алгоритм хеширования блока · Bitcoin Wiki
- Справочник по блокчейну: заголовки, деревья Меркла, целевое значение · документация для разработчиков Bitcoin
Актуальные данные на этой странице поступают из API CloudMineCrypto и общедоступных данных блокчейна, регулярно обновляются и отмечены в соответствующих местах. Только в образовательных целях, не финансовая рекомендация.