ExtraNonce
ExtraNonce — это дополнительная переменная, встроенная в данные coinbase-транзакции, которая позволяет майнерам расширять пространство поиска далеко за пределы 4,3 миллиарда значений стандартного 32-битного nonce в заголовке блока.
Как работает ExtraNonce
Заголовок раздела «Как работает ExtraNonce»Стандартное поле 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 не могут исчерпать до нахождения нового блока в сети.