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

Глоссарий / Майнинг и консенсус

Nonce

Что такое Nonce?
Nonce представляет собой четырехбайтовый счетчик в заголовке блока, который майнеры увеличивают, пока ищут хеш ниже целевого значения, что дает лишь 4 294 967 296 попыток на один заголовок.

Определено в BIP-320.

Это слово является сокращением от "number used once" (число, использованное один раз), и в биткоине оно обозначает единственное поле заголовка, которое существует исключительно для того, чтобы его меняли. Четыре байта казались щедрым запасом в 2009 году, а сейчас это ничтожно мало: одна современная машина сжигает весь диапазон за долю секунды. Поэтому майнеры меняют и другие части заголовка, а nonce является лишь самым внутренним циклом поиска.

Как это работает

Nonce занимает последние четыре байта заголовка размером 80 байт, и майнинг состоит в переборе его значений.

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

Проблема в диапазоне. В четырех байтах помещается 4 294 967 296 различных значений, а ASIC с заявленной производительностью 200 терахешей в секунду проходит их все примерно за 21 микросекунду. Поэтому поиск имеет три внешних цикла. Майнер меняет дополнительный nonce (extra nonce), несколько свободных байтов в скрипте входа транзакции coinbase, что изменяет эту транзакцию, что изменяет корень Меркла, что дает совершенно новый заголовок для поиска. Он может сдвигать метку времени вперед в пределах правил. А с BIP320 он может менять шестнадцать битов поля версии, используя маску 0x1fffe000, что умножает пространство еще на 65 536, вовсе не затрагивая список транзакций.

Поиск самого Сатоши оставил след. Заголовок генезис-блока несет значение 2083236893, найденное на процессоре в 2009 году без изменения дополнительного nonce и без всяких битов версии.

Где это встречается

Каждая страница блока в любом обозревателе блоков печатает победивший nonce, и это число почти ничего не сообщает.

Поскольку машины проходят пространство в непредсказуемом порядке, а большая часть реального разнообразия теперь возникает из дополнительного nonce и перебора версии, число в добытом блоке близко к случайному. Искать смысл в низком или высоком значении является распространенной ошибкой новичка. Поле важнее для авторов прошивок: Stratum выделяет каждой подключенной машине свою часть дополнительного nonce, чтобы два работника в одном пуле никогда не дублировали усилия, а Stratum V2 перестраивает согласование заданий вокруг той же проблемы координации.

Слово также встречается далеко от майнинга. Схемы шифрования используют nonce, чтобы два сообщения не дали одинаковый шифротекст, Ethereum использует nonce счета как счетчик транзакций, а веб-входы используют его для блокировки атак повторного воспроизведения. Ни одно из них не является полем заголовка блока, и общее слово вызывает больше ненужной путаницы, чем любой другой заимствованный термин в биткоине.

Часто задаваемые вопросы

Почему nonce блока занимает всего четыре байта?

В 2009 году этого было достаточно, когда ни одна машина не могла быстро проверить четыре миллиарда хешей. Современные майнеры мгновенно исчерпывают диапазон и находят дополнительное пространство для поиска в дополнительном nonce транзакции coinbase и в переборе версии.

Что такое дополнительный nonce?

Свободные байты в скрипте входа транзакции coinbase, которые майнер меняет, когда nonce заголовка исчерпан. Их изменение меняет корень Меркла, что создает совершенно новый заголовок с новым диапазоном nonce.

Связанные термины

Еще в разделе «Майнинг и консенсус»

Читать эту страницу на английском