Extranonce são dados variáveis normalmente inseridos na entrada da transação coinbase. Alterá-los fornece novos dados para a raiz de Merkle e o hash do cabeçalho sem ampliar o campo nonce de 32 bits.
O campo nonce tem 32 bits e oferece 2^32 valores para um cabeçalho de resto idêntico. Extranonce não alarga esse campo. Altera outros dados para construir outro cabeçalho e voltar a testar os valores nonce. [Bitcoin Developer Guide — Mining and nonce space]
Alterar extranonce na coinbase muda a serialização e o TXID; recalculam-se o ramo correspondente da árvore de Merkle e a raiz de Merkle do cabeçalho. As outras transações não precisam de mudar. A raiz antiga não pode simplesmente permanecer sem recálculo. [Bitcoin Developer Guide — Mining and nonce space]
Dois bytes totalmente livres permitem 2^16 variantes. Com um nonce de 32 bits e os restantes dados fixos, o modelo oferece 2^48 combinações de entrada. É um espaço de tentativas diferentes, não um número de blocos encontrados nem uma garantia após esgotar a procura. [Bitcoin Developer Guide — Mining and nonce space]
BIP 34 exige a altura do bloco corretamente codificada no início do scriptSig da coinbase. O limite de 100 bytes aplica-se a todo esse scriptSig, não apenas a extranonce. A área livre não pode sobrescrever a altura nem violar o formato da transação. [BIP 34 — Height in coinbase] [Bitcoin Developer Reference — Coinbase input]
Stratum V2 divide extended extranonce num prefixo upstream fixo, numa parte reservada localmente e em espaço downstream. A divisão evita pesquisas sobrepostas inúteis. Um extranonce_prefix atribuído não é automaticamente uma área que o minerador final possa alterar livremente. [Stratum V2 — Extended extranonce and jobs]
Em SubmitSharesExtended, coinbase é montada na ordem coinbase_tx_prefix, extranonce_prefix, extranonce e coinbase_tx_suffix. Os bytes extranonce enviados devem ter o comprimento negociado. O mesmo número codificado com menos bytes não produz necessariamente a mesma transação. [Stratum V2 — Extended extranonce and jobs]
Um Standard Job de Stratum V2 usa uma raiz de Merkle fixa; só variam as partes permitidas de version, nonce e nTime. O equipamento padrão não envia ele próprio extranonce como um canal extended. Um nó superior pode alterar coinbase ao preparar uma tarefa nova. [Stratum V2 — Extended extranonce and jobs]
SetExtranoncePrefix de Stratum V2 aplica-se às tarefas enviadas depois da mensagem nesse canal. O resultado deve continuar associado ao job_id e espaço atribuídos corretos. O prefixo mais recente não substitui o registo da tarefa que produziu um resultado antigo. [Stratum V2 — Extended extranonce and jobs]
Para ter uma visão mais completa, leia este verbete junto com Nonce, Árvore de Merkle, Mining Share, Block Template. Também há referências a este verbete em ASIC Miner, Block Template, getblocktemplate.