Майнинговый Nonce — открытый параметр поиска типа uint32, а не секрет или nonce подписи. При неизменных остальных полях заголовка он даёт 2^32 значений, которые современный ASIC быстро перебирает. Поэтому программа обновляет пространство поиска, меняя Extranonce в coinbase-транзакции и вслед за ним Merkle root либо nTime и разрешённые биты version.
Заголовок Bitcoin содержит 80 байтов: version, хеш предыдущего блока, Merkle root, time, nBits и четырёхбайтовый Nonce. Nonce — беззнаковое 32-битное целое число, сериализованное в порядке little-endian. Изменение поля меняет сериализованный заголовок и его double-SHA-256 хеш, само по себе не меняя список транзакций. [Bitcoin Developer Reference — Block headers]
Малые изменения входа SHA-256 не дают полезного направления к успеху. Увеличение Nonce на единицу создаёт практически не связанный 256-битный хеш, поэтому разные заголовки можно моделировать как независимые вероятностные попытки. Повторение точно того же заголовка всегда даёт тот же хеш; полезного градиента к выигрышному значению нет. [Bitcoin Developer Reference — Block headers] [Bitcoin Developer Guide — Mining]
Четырёхбайтовый Nonce даёт ровно 4 294 967 296 значений, то есть 2^32, пока остальные поля заголовка неизменны. Современный ASIC может перебирать этот диапазон много раз в секунду, поэтому одного поля Nonce недостаточно. Исчерпание диапазона не гарантирует нахождение допустимого Proof of Work. [Bitcoin Developer Reference — Block headers] [BIP 320 — nVersion bits for general purpose use]
Mining Pool и программы майнинга используют Extranonce внутри coinbase-транзакции. Несмотря на похожее имя, это не дополнительное поле заголовка. Изменение Extranonce меняет coinbase txid, а затем Merkle root заголовка, открывая новое пространство 2^32 значений Nonce. [Bitcoin Developer Guide — Mining] [Bitcoin Developer Reference — Transactions]
Coinbase-транзакция образует лист Merkle-дерева. При пересчёте дерева изменение её txid отражается в Merkle root заголовка. Майнер получает новый заголовок с тем же хешем предыдущего блока и почти тем же содержимым; остальные транзакции для этого менять не нужно. [Bitcoin Developer Reference — Block headers] [Bitcoin Developer Guide — Mining]
Дополнительное пространство получают, меняя nTime в допустимых пределах либо разрешённые биты version посредством version rolling. BIP320 предлагает общее использование выбранных битов nVersion; само предложение не разрешает произвольно менять все биты. Правила консенсуса и задания майнинга продолжают действовать, а итоговый хеш должен удовлетворять target. [BIP 23 — getblocktemplate pooled mining] [BIP 320 — nVersion bits for general purpose use]
При совместном майнинге Mining Pool или координатор заданий выделяет worker-устройствам различные coinbase/Extranonce либо другие параметры, чтобы не тратить работу на одинаковые заголовки. BIP23 также описывает необязательный параметр noncerange. Протоколы Stratum распределяют пространство между множеством ASIC. [BIP 23 — getblocktemplate pooled mining] [Bitcoin Developer Guide — Mining]
Число Nonce само по себе не хорошее и не плохое. Full Node хеширует весь конкретный заголовок и сравнивает результат с допустимым target, полученным из nBits. Малый Nonce ничего не доказывает: важен хеш всего заголовка, меньший либо равный target. Эта проверка не заменяет остальные правила допустимости блока. [Bitcoin Developer Reference — Block headers] [Bitcoin Core v30.0 — Proof of Work validation]
Nonce применяется и в криптографических подписях. Ошибочное повторное использование секретного скаляра подписи для разных сообщений может раскрыть Private Key. Майнинговый Nonce — открытые данные заголовка, не требующие секретности. Открытые данные подписи нельзя путать с её секретным скаляром или счётчиком майнинга. [BIP 340 — Schnorr Signatures]
Bitcoin Core через getblockheader по умолчанию возвращает подробный вывод с nonce, bits, time и другими полями. Параметр verbose со значением false возвращает сериализованный заголовок в шестнадцатеричном виде. Для независимой проверки точно собери или декодируй его 80 байтов, вычисли double-SHA-256 и сравни числовой хеш с допустимым target, соблюдая порядок байтов Bitcoin. [Bitcoin Developer Reference — Block headers] [Bitcoin Core RPC — getblockheader] [Bitcoin Core v30.0 — Proof of Work validation]
Для полной картины прочитайте эту статью вместе с Заголовок блока, Майнинг, Proof of Work, Mining Target, Coinbase-транзакция, Bitcoin. На эту статью также ссылаются Заголовок блока, Coinbase-транзакция, ASIC Miner, Mining Target.