Перейти к содержимому

Nonce

Nonce (от англ. “number used once” — “число, используемое один раз”) — это 32-битное поле в заголовке блока, значение которого майнер последовательно меняет, пытаясь получить хеш, удовлетворяющий текущему таргету сети.

При формировании блока-кандидата заголовок содержит несколько полей: хеш предыдущего блока, корень Меркла, временную метку, таргет сложности, номер версии и nonce. Майнер пропускает этот заголовок через хеш-функцию SHA-256 дважды. Если результат не ниже требуемого таргета, майнер увеличивает nonce на единицу и пробует снова.

Представьте, что вы бросаете игральный кубик, пытаясь выбросить определённую комбинацию. Каждый бросок — это новая попытка с новым значением nonce. Вы продолжаете бросать, пока не получите нужный результат.

Поскольку nonce — 32-битное число, у него примерно 4,3 миллиарда возможных значений (от 0 до 2^32 - 1). При хешрейтах современных ASIC-майнеров всё это пространство может быть исчерпано менее чем за секунду. Именно поэтому майнеры используют extranonce для расширения пространства поиска: при изменении extranonce меняется корень Меркла, что фактически даёт майнеру свежий набор из 4,3 миллиарда значений nonce для перебора.

Майнер получает новое задание от пула. Заголовок блока собран, и майнер начинает с nonce = 0, хеширует заголовок, сравнивает результат с таргетом. Если результат не подходит — пробует nonce = 1, затем nonce = 2, и так далее. Каждое изменение nonce порождает совершенно иной хеш благодаря лавинному эффекту SHA-256.