Glossário / Mineração e consenso
Raiz de Merkle
- O que é a raiz de Merkle?
- A raiz de Merkle é o único hash de 32 bytes no cabeçalho de um bloco que fixa todas as transações desse bloco, na ordem exata em que o minerador as organizou.
Mude um satoshi em um pagamento, reordene duas transações ou acrescente mais uma, e a raiz muda por completo. Os mineradores contam com isso: o nonce de 32 bits oferece apenas cerca de 4,3 bilhões de tentativas, então o software de mineração edita a transação coinbase para gerar uma raiz nova e continuar procurando. Para quem guarda bitcoins, esse único campo é a razão pela qual um bloco não pode ganhar ou perder um pagamento em silêncio depois de minerado.
Como funciona
A raiz de Merkle é calculada, não escolhida, e é isso que lhe dá valor.
Ela ocupa 32 dos 80 bytes do cabeçalho, e o minerador escreve o valor que as transações produzem. Todo nó que recebe o bloco reconstrói a árvore a partir da lista de transações que lhe foi enviada e compara o próprio resultado com o cabeçalho. Uma divergência significa rejeição, imediata e sem discussão. Não existe versão do protocolo em que o cabeçalho diga uma coisa e o corpo do bloco diga outra.
Essa verificação faz da raiz o eixo do ciclo de mineração. O nonce tem apenas quatro bytes de largura, o que dá 4.294.967.296 valores possíveis; uma máquina operando a 200 trilhões de hashes por segundo esgota todos eles em cerca de vinte milionésimos de segundo. Os mineradores precisam, portanto, de uma forma de gerar candidatos novos, e a mais barata é alterar a transação coinbase. Os pools enviam a cada máquina a coinbase dividida em duas metades com um espaço entre elas, a máquina escreve seus próprios bytes nesse espaço, o id da transação coinbase muda, a raiz de Merkle muda, e 4,3 bilhões de nonces novos ficam disponíveis. Alterar o carimbo de data e hora e os 16 bits de versão reservados pelo BIP320 oferece espaço adicional.
O SegWit acrescentou uma segunda raiz sem tocar no cabeçalho, porque tocar no cabeçalho teria sido um hard fork. O BIP141 define uma árvore separada sobre os ids de transação de testemunha, cuja raiz é escrita em uma saída da transação coinbase, marcada pelo prefixo de quatro bytes 0xaa21a9ed. Como a coinbase é ela própria uma folha da árvore comum, esse compromisso de testemunha acaba de todo modo incorporado à raiz de Merkle do cabeçalho, um nível de distância.
Onde você a vê
A raiz de Merkle é um dos campos que qualquer explorador de blocos mostra, e um dos poucos que você pode verificar à mão.
O Bitcoin Core a informa como merkleroot na saída de getblockheader e getblock. O valor do bloco gênese, que começa com 4a5e1e4b, é um bom ponto de partida, porque esse bloco contém uma única transação: uma árvore com uma só folha é sua própria raiz, então a raiz de Merkle e o id da transação são idênticos. Qualquer bloco que contenha apenas uma transação coinbase tem a mesma propriedade.
Você também a vê em protocolos de mineração, e não em blocos. Uma notificação de tarefa do Stratum não envia transação alguma ao minerador. Ela envia as metades da coinbase mais a lista curta de hashes necessários para subir da coinbase até o topo, de modo que a máquina possa calcular a raiz por conta própria para cada extranonce que testa. O Stratum V2 muda quem seleciona as transações em primeiro lugar, mas a raiz continua sendo montada da mesma maneira.
Raiz de Merkle vs hash do cabeçalho do bloco anterior
A raiz de Merkle e o hash do cabeçalho do bloco anterior são ambos hashes de 32 bytes lado a lado no mesmo cabeçalho de 80 bytes, e fixam dados em direções diferentes. A raiz de Merkle aponta para dentro, para o conteúdo deste bloco: as transações, sua ordem, e nada mais. O hash do cabeçalho do bloco anterior aponta para trás, para toda a história por trás dele. Edite um pagamento e somente a raiz de Merkle se rompe. Edite um bloco do ano passado e o hash do cabeçalho do bloco anterior de todos os blocos posteriores fica errado, e essa é a diferença entre adulterar um bloco e adulterar uma cadeia.