225 / 736TARGET

Mining Target

O número que o resultado do minerador não pode ultrapassar

Jana sabe que os mineradores repetem cálculos, mas ainda se pergunta pelo que estão esperando. Cada tentativa produz um hash, um resultado que pode ser entendido como um número muito grande. Não serve qualquer resultado: ele precisa ficar abaixo de uma fronteira definida, embora a igualdade também seja permitida. Essa fronteira é o Mining Target. Quanto mais baixa, mais raro é o sucesso. Os outros participantes podem depois verificar facilmente se o resultado realmente atende à condição.

Mining Target é o número comparado ao hash do cabeçalho do bloco, seu resumo compacto de dados. Uma prova de trabalho válida exige que o hash não ultrapasse o alvo correto. Na rede Bitcoin, esse alvo precisa ser positivo e seguir as regras do bloco específico; o minerador não pode escolhê-lo livremente.

Imagine, apenas como ilustração, um limite de 20: resultados de 19 e 20 serviriam, mas 21 não. Na mineração real, os números são muito maiores, mas a relação é a mesma: hash ≤ target. O símbolo significa menor ou igual, não estritamente menor. Bitcoin Core é um programa usado pelos participantes da rede para verificar blocos e transações. A versão v29.0 citada aqui compara assim o hash do cabeçalho inteiro. O nonce, valor que o minerador altera durante a busca, é um dos dados de entrada. O que se compara com o alvo é o hash resultante. [1]

Jana vê uma imagem de um hash bem-sucedido começando com muitos zeros. É uma boa ilustração: em representações de mesmo comprimento, mais zeros iniciais significam um número menor. Mas dois hashes com a mesma quantidade de zeros podem ficar em lados diferentes do alvo. Os demais dígitos também importam. Os zeros não substituem a comparação completa hash ≤ target. A regra exige uma condição numérica exata, não um desenho bonito de caracteres. [1]

Um bit pode assumir o valor zero ou o valor um; oito bits formam um byte. Para não armazenar o número longo inteiro no cabeçalho, Bitcoin usa o campo nBits de 32 bits. Ele codifica um alvo no espaço dos números de 256 bits usando um coeficiente, um expoente que determina o deslocamento e um bit de sinal. Por exemplo, 0x04123456 é decodificado como 0x12345600; o prefixo 0x indica notação hexadecimal, que também usa letras. É um exemplo de codificação, não o alvo atual da rede. Para entender o básico, basta distinguir o número de sua representação abreviada. [3] [5]

Nos dados brutos, o mesmo número pode parecer invertido. No cabeçalho de 80 bytes, nBits ocupa quatro bytes armazenados em little-endian: o byte menos significativo vem primeiro. Por isso, o número 0x1d00ffff aparece nos dados como ff ff 00 1d. A ordem dos bytes não muda o alvo; descreve apenas o armazenamento. Esse detalhe importa ao trabalhar com dados brutos. Quem consulta normalmente um explorador de blocos não precisa inverter os números na tela. [2]

Jana poderia sugerir armazenar um número maior para facilitar a busca. Mas o software verifica mais do que a capacidade de ler nBits. DeriveTarget em Bitcoin Core v29.0 rejeita um alvo negativo, zero, estouro do intervalo numérico e valores acima de powLimit, o maior alvo permitido naquela rede. Decodificar corretamente, portanto, só esclarece qual número a escrita representa; não dá, por si só, autorização para usá-lo. [1]

Mesmo um alvo dentro do intervalo permitido pode estar errado para um bloco específico. Bitcoin Core compara nBits com GetNextWorkRequired, um cálculo baseado no bloco anterior e nas regras da rede. Uma divergência produz bad-diffbits. Um hash baixo sob um alvo próprio mais fácil não justifica um valor incorreto no cabeçalho. Jana não consegue um bloco aceito apenas reduzindo a exigência: os outros nós, computadores que verificam as regras, rejeitam essa tentativa. [4]

Em um modelo de hashes de 256 bits uniformemente distribuídos, cada resultado possível tem a mesma probabilidade. Para um alvo permitido T, são aceitos os valores de zero até T, inclusive. Daí vem p = (T + 1) / 2^256 por tentativa; p representa a probabilidade de sucesso. O um acrescentado inclui o zero. Essa relação explica por que um alvo menor dificulta a busca. Não informa quantas tentativas a máquina faz por segundo nem quando chegará exatamente o próximo bloco. [1]

Ao cumprir a condição, Jana demonstra o trabalho computacional exigido, não a correção de tudo dentro do bloco. Bitcoin Core também verifica a impressão digital conjunta das transações, a transação especial de recompensa chamada coinbase, os limites do bloco e a validade das transações. Aqui, coinbase é o nome técnico da primeira transação do bloco, não da corretora. Um hash baixo não corrige conteúdo inválido. O alvo é uma parte importante das regras, não uma licença para ignorar as demais. [4]

Para ter uma visão mais completa, leia este verbete junto com Share Difficulty, Proof of Work, Nonce, Block Header, Bitcoin. Também há referências a este verbete em ASIC Miner, Nonce, Mining Share, Share Difficulty.

DOC · 001Bitcoin Core v29.0 — Proof-of-work checksFonte primária DOC · 002Bitcoin Developer Reference — Block headers and nBitsDocumentação DOC · 003Bitcoin Core v29.0 — Compact arithmeticFonte primária DOC · 004Bitcoin Core v29.0 — Contextual and block validationFonte primária DOC · 005NIST — Binary data unitsDocumentação
Revisto em: Fontes em primeiro lugar · Não é recomendação de investimento