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

ExtraNonce

ExtraNonce — это дополнительная переменная, встроенная в данные coinbase-транзакции, которая позволяет майнерам расширять пространство поиска далеко за пределы 4,3 миллиарда значений стандартного 32-битного nonce в заголовке блока.

Стандартное поле nonce в заголовке блока имеет длину всего 32 бита, что даёт около 4,3 миллиарда возможных значений. Современные ASIC-майнеры перебирают все эти значения за доли секунды. Чтобы продолжить поиск валидного хеша, майнерам нужно дополнительное пространство для вариации входных данных — именно для этого и существует extranonce.

Представьте, что nonce — это перебор комбинаций на одном кодовом замке. Когда все комбинации перепробованы и ни одна не подошла, extranonce — это замена самого замка на новый, с совершенно другим набором комбинаций. При изменении extranonce меняется coinbase-транзакция, что приводит к изменению корня Меркла в заголовке блока, а значит, майнер получает новый заголовок и свежий набор из 4,3 миллиарда значений nonce для перебора.

В протоколе Stratum extranonce обычно разделён на две части:

  • ExtraNonce1: назначается пулом для уникальной идентификации соединения. Остаётся неизменным на протяжении сессии.
  • ExtraNonce2: управляется майнером и инкрементируется локально. Пул задаёт размер этого поля (обычно 4-8 байт).

Пул назначает ExtraNonce1 = “0a1b2c” и устанавливает размер ExtraNonce2 в 4 байта. Майнер начинает с ExtraNonce2 = 00000000, перебирает все значения nonce, затем увеличивает ExtraNonce2 до 00000001 и повторяет. Это создаёт огромное объединённое пространство поиска, которое даже самые быстрые ASIC не могут исчерпать до нахождения нового блока в сети.