Extranonce — изменяемые данные, обычно вставляемые во вход транзакции coinbase. Их изменение даёт новые данные для корня Merkle и хеширования заголовка без расширения его 32-битного поля nonce.
Поле nonce имеет 32 бита и даёт 2^32 значений для в остальном одинакового заголовка. Extranonce не удлиняет это поле. Он меняет другие данные, позволяя составить новый заголовок и снова перебирать nonce. [Bitcoin Developer Guide — Mining and nonce space]
Изменение extranonce в coinbase меняет её сериализацию и TXID; пересчитываются соответствующая ветвь дерева Merkle и корень Merkle в заголовке. Другие транзакции менять не требуется. Старый корень нельзя просто оставить без пересчёта. [Bitcoin Developer Guide — Mining and nonce space]
Два полностью свободных байта дают 2^16 вариантов. В модели с 32-битным nonce и остальными фиксированными данными это 2^48 входных комбинаций. Это пространство разных попыток, не число найденных блоков и не гарантия успеха после полного перебора. [Bitcoin Developer Guide — Mining and nonce space]
BIP 34 требует правильно закодированную высоту блока в начале scriptSig coinbase. Предел 100 байт относится ко всему этому scriptSig, не только extranonce. Свободная область не должна перезаписывать высоту или нарушать формат транзакции. [BIP 34 — Height in coinbase] [Bitcoin Developer Reference — Coinbase input]
Stratum V2 делит extended extranonce на фиксированный upstream-префикс, локально зарезервированную часть и downstream-пространство. Это предотвращает бесполезное перекрытие поиска. Назначенный extranonce_prefix не становится автоматически областью, которую конечный майнер вправе свободно менять. [Stratum V2 — Extended extranonce and jobs]
В SubmitSharesExtended coinbase собирается в порядке coinbase_tx_prefix, extranonce_prefix, extranonce и coinbase_tx_suffix. Отправленные байты extranonce должны иметь согласованную длину. То же число, записанное меньшим количеством байтов, не обязательно создаёт ту же транзакцию. [Stratum V2 — Extended extranonce and jobs]
Standard Job в Stratum V2 использует фиксированный корень Merkle; меняются только разрешённые части version, nonce и nTime. Стандартное устройство не отправляет extranonce само, как extended-канал. Вышестоящий узел может менять coinbase при подготовке нового задания. [Stratum V2 — Extended extranonce and jobs]
SetExtranoncePrefix в Stratum V2 относится к заданиям, отправленным после сообщения в данном канале. Результат должен оставаться связанным с правильным job_id и выделенным пространством. Последний префикс не заменяет запись о задании, породившем старый результат. [Stratum V2 — Extended extranonce and jobs]
Для полной картины прочитайте эту статью вместе с Nonce, Дерево Merkle, Mining Share, Block Template. На эту статью также ссылаются ASIC Miner, Block Template, getblocktemplate.