226 / 736XNONCE

Extranonce

Como o minerador consegue espaço para novas tentativas

Alena está aprendendo como nasce um bloco. O minerador altera dados de entrada e calcula um hash, uma impressão digital compacta cujo valor numérico precisa cumprir a condição da rede. Mas o que acontece quando todos os valores de um campo ajustável já foram testados sem sucesso? Extranonce permite preparar novas variações e continuar procurando. Não flexibiliza as regras do Bitcoin nem promete recompensa; ajuda as máquinas a evitar a repetição das mesmas tentativas.

Extranonce são dados variáveis adicionais que o software de mineração costuma colocar na coinbase, a primeira transação especial do bloco, que atribui a recompensa de mineração. Alterá-los modifica a impressão digital conjunta das transações no cabeçalho do bloco, criando novas entradas para a busca. O campo nonce separado do cabeçalho não aumenta de tamanho.

O cabeçalho resume os dados do bloco. Um bit pode assumir o valor zero ou o valor um; oito bits formam um byte. O cabeçalho inclui um campo nonce de 32 bits, que oferece 2^32 valores quando todo o restante fica fixo. Testar novamente o mesmo cabeçalho com o mesmo nonce produz o mesmo hash e, portanto, o mesmo resultado. Extranonce não alonga esse campo: altera outros dados a partir dos quais se prepara um novo cabeçalho. Alena pode imaginar uma nova tarefa para a qual percorrer o contador outra vez. Na prática, outras partes do cabeçalho também podem variar dentro das regras aplicáveis. [1] [5]

Coinbase aqui significa a primeira transação de cada bloco, não a corretora. Quando o software altera seu extranonce, mudam os dados codificados da transação e o TXID, seu identificador calculado. Uma árvore que combina impressões digitais sucessivamente leva até a Merkle root, a impressão conjunta das transações guardada no cabeçalho. O software precisa recalcular o ramo afetado. As outras transações podem permanecer iguais, mas a raiz antiga não pode simplesmente ser mantida. Essa sequência de cálculos fornece novas entradas para a mineração. [1]

Em um modelo simples, mantenhamos o restante fixo e deixemos dois bytes de extranonce inteiramente livres. Eles oferecem 2^16 variações; junto com o nonce de 32 bits, isso dá 2^48 combinações de entrada. São tentativas possíveis, não uma quantidade de blocos encontrados. Alena não ganha uma condição mais fácil nem a certeza de sucesso dentro desse conjunto. A vantagem é prática: há mais espaço para procurar. Acrescentar espaço livre também não acelera, por si só, a máquina que precisa executar os cálculos. [1]

O espaço para extranonce não é um formulário vazio sem regras. BIP 34, uma regra específica do Bitcoin, exige a altura do bloco corretamente codificada, isto é, sua posição na cadeia, no começo do campo de dados da entrada coinbase chamado scriptSig. O limite de 100 bytes vale para todo o scriptSig da coinbase, não apenas para extranonce. O software deve reservar espaço para os dados obrigatórios e preservar o formato válido. Se Alena os sobrescrevesse, os cálculos seguintes procurariam uma solução para um bloco inválido. [3] [4]

Na mineração em pool, é útil que máquinas diferentes procurem variações diferentes. Stratum V2, um protocolo de distribuição de tarefas de mineração, também usa a divisão do extranonce para isso. Um servidor acima na cadeia de comunicação, upstream, atribui um extranonce_prefix fixo, a parte inicial desses dados. Um intermediário local pode reservar outra parte para seus clientes e passar o restante adiante, downstream. Essas direções são relativas à conexão em questão. O prefixo atribuído não é automaticamente uma área que o minerador final pode alterar; mantê-lo fixo ajuda a separar o trabalho dos participantes. [2]

Em um canal estendido de Stratum V2, SubmitSharesExtended envia os bytes alterados junto com o resultado. A coinbase é montada na ordem coinbase_tx_prefix, extranonce_prefix, extranonce e coinbase_tx_suffix. Esses nomes identificam partes dos dados que os programas de mineração trocam entre si. O campo extranonce precisa ter o comprimento combinado. Mesmo que uma escrita mais curta pareça representar o mesmo número, uma sequência diferente de bytes pode formar outra transação. Computadores comparam dados exatos, não uma interpretação humana aproximada. [2]

Um Standard Job de Stratum V2 é uma tarefa com Merkle root fixa. O equipamento final só pode alterar as partes permitidas de version, nonce e nTime: versão, contador e horário do cabeçalho. Portanto, não envia seu próprio extranonce como em um canal estendido. O software acima dele pode preparar outra coinbase, calcular a nova raiz e fornecer outra tarefa. Alena pode não encontrar um ajuste de extranonce no equipamento, mesmo que o mecanismo seja usado no sistema como um todo. [2]

Imagine que um novo prefixo chegue enquanto um resultado de trabalho anterior está sendo processado. SetExtranoncePrefix em Stratum V2 vale para tarefas enviadas depois dessa mensagem no canal correspondente, ou seja, naquela sessão de mineração. O resultado precisa continuar associado ao job_id correto, o identificador da tarefa, e ao espaço atribuído a ela. Colocar o prefixo mais recente em todo lugar poderia mudar os dados que deram origem a um resultado antigo. Extranonce serve para criar tentativas distintas e manter seus vínculos, não para reescrever suas tarefas depois. [2]

Para ter uma visão mais completa, leia este verbete junto com Nonce, Merkle Tree, Mining Share, Block Template, Bitcoin. Também há referências a este verbete em ASIC Miner, Stratum V1, Stratum V2, Block Template.

DOC · 001Bitcoin Developer Guide — Mining and nonce spaceDocumentação DOC · 002Stratum V2 — Extended extranonce and jobsEspecificação DOC · 003BIP 34 — Height in coinbaseEspecificação DOC · 004Bitcoin Developer Reference — Coinbase inputDocumentação DOC · 005NIST — Binary data unitsDocumentação
Revisto em: Fontes em primeiro lugar · Não é recomendação de investimento