Visão geral
A raiz Merkle é um único hash de 32 bytes que fica no ápice de uma árvore de Merkle e se compromete criptograficamente com cada transação incluída em um bloco. É armazenada no cabeçalho do bloco, tornando-a uma impressão digital compacta de todo o conjunto de transações. Qualquer alteração em qualquer transação no bloco produziria uma raiz Merkle completamente diferente.
Como é calculada
A raiz Merkle é construída hasheando recursivamente pares de hashes de transações (usando SHA-256 duplo) até que reste apenas um hash:
Raiz Merkle
/ \
Hash AB Hash CD
/ \ / \
Hash A Hash B Hash C Hash D
| | | |
Tx A Tx B Tx C Tx D
Se houver um número ímpar de elementos em qualquer nível, o último elemento é duplicado antes de hashear.
Papel nos cabeçalhos de bloco
O cabeçalho do bloco contém seis campos: versão, hash do bloco anterior, raiz Merkle, timestamp, alvo de dificuldade (bits) e nonce. Ao incluir a raiz Merkle, o cabeçalho se compromete com o conjunto completo de transações sem ter que incluí-las todas diretamente. Isso é o que permite que clientes leves realizem verificação SPV.
Provas Merkle
Uma prova Merkle permite verificar que uma transação específica está incluída em um bloco fornecendo apenas os hashes irmãos ao longo do caminho da transação até a raiz. Isso requer apenas log2(N) hashes para um bloco com N transações, tornando a verificação extremamente eficiente.
Casos extremos
Se um bloco contém apenas a transação coinbase (sem outras transações), a raiz Merkle é simplesmente o hash dessa única transação. A duplicação de elementos ímpares também pode criar uma vulnerabilidade sutil conhecida como o problema de maleabilidade da árvore de Merkle, que foi abordado pelo BIP 98.