Nonce
Nonce (от англ. “number used once” — “число, используемое один раз”) — это 32-битное поле в заголовке блока, значение которого майнер последовательно меняет, пытаясь получить хеш, удовлетворяющий текущему таргету сети.
Как работает Nonce
Заголовок раздела «Как работает Nonce»При формировании блока-кандидата заголовок содержит несколько полей: хеш предыдущего блока, корень Меркла, временную метку, таргет сложности, номер версии и 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.