Bits
A representação compacta do alvo no cabeçalho do bloco
O campo bits contém uma representação compacta do alvo (target).
Ele indica o valor que o hash do bloco precisa ficar abaixo para o bloco ser minerado, e precisa representar o valor de alvo correto para a altura do bloco na blockchain.
Estrutura
Como o campo bits representa o alvo?
O campo bits tem duas partes: um expoente (1 byte) e um coeficiente (3 bytes). O alvo é o coeficiente deslocado para a esquerda pelo número de bytes indicado pelo expoente.
Convertendo
Como converter entre alvo e bits?
Bits para Alvo
Para converter bits em um alvo, você desloca o coeficiente o número de bytes especificado para a esquerda, conforme indicado pelo expoente. Por exemplo:
Bits: 1705dd01
coeficiente (05dd01)
------
Alvo: 00000000000000000005dd010000000000000000000000000000000000000000
<---------------------------------------------
expoente (0x17 = 23 bytes)
Alvo para Bits
Converter um alvo em um campo bits é o inverso. Você pega os 3 primeiros bytes significativos do alvo (o coeficiente) e calcula quantos bytes eles estão deslocados para a esquerda (o expoente).
Não esqueça que você está procurando o primeiro byte significativo para o coeficiente.
O primeiro byte significativo do coeficiente precisa estar abaixo de 80. Se não estiver, você tem que pegar o 00 anterior como primeiro byte.
Isso porque o Bitcoin usa uma codificação personalizada para valores uint256; se o bit 00800000 estiver setado, ele indica um valor negativo. E o alvo não pode ser negativo.
Por exemplo, o alvo completo do bloco 489.888 começava com o byte eb (maior que 7f), então foi preciso usar o byte 00 antes dele, resultando em bits 1800eb30 (em vez de 17eb304f).