Raiz de Merkle
A impressão digital de todas as transações de um bloco
Uma raiz de Merkle é criada hasheando pares de TXIDs para obter uma impressão digital curta e única de todas as transações de um bloco.
Essa raiz de Merkle é colocada no cabeçalho do bloco para impedir que o conteúdo do bloco seja adulterado depois. Então, se alguém tentar adicionar ou remover uma transação do bloco, a raiz de Merkle das transações não vai mais bater com a raiz de Merkle dentro do cabeçalho.
Em outras palavras, a raiz de Merkle é o que conecta o cabeçalho do bloco às transações do bloco.
Estrutura
Como você cria uma raiz de Merkle?
Uma raiz de Merkle é criada hasheando os TXIDs em uma estrutura de árvore:
- Hasheie os TXIDs juntos, em pares. Nota: se sobrar um único item, hasheie-o com ele mesmo.
- Pegue os hashes resultantes e hasheie-os juntos, em pares.
- Repita até sobrar um único hash.
Ordem de Bytes: Os TXIDs precisam estar em ordem natural ao criar a raiz de Merkle. A raiz resultante também fica em ordem natural, mas é exibida em ordem invertida nos exploradores.
Se há apenas uma transação em um bloco, a raiz de Merkle é igual ao TXID dessa transação.
Árvore de Merkle
Por que usamos uma raiz de Merkle?
Essa estrutura de hashear uma lista de itens juntos é conhecida como árvore de Merkle (merkle tree). Mas por que usá-la?
Nós poderíamos simplesmente hashear todos os TXIDs de uma vez. Isso criaria uma impressão digital de todas as transações. Mas, mais tarde, se quiséssemos descobrir se um TXID específico foi usado para criar essa impressão, precisaríamos conhecer todos os outros TXIDs.
É aí que entram as árvores de Merkle. Usando uma árvore, só precisamos conhecer alguns dos ramos ao longo do caminho da árvore para verificar que um TXID foi usado para criar o hash da raiz. Esse caminho é conhecido como prova de Merkle (merkle proof).
Então, usando uma árvore de Merkle, podemos descobrir se uma transação faz parte de um bloco sem ter que conhecer todos os outros TXIDs do bloco. Em termos técnicos, uma árvore de Merkle fornece uma forma eficiente de provar que algo está em um conjunto, sem ter que conhecer o conjunto completo. E, em blocos com 2.000+ transações, as árvores de Merkle se tornam muito mais eficientes do que hashear todos os TXIDs de uma vez.
Carteiras Leves
As provas de Merkle são especialmente úteis para carteiras leves (SPV). Uma carteira SPV não tem a blockchain completa, mas pode pedir a um nó completo uma prova de Merkle para confirmar que uma transação específica está em um bloco específico — sem precisar baixar todas as transações do bloco.
Por que se chama raiz de "Merkle"?
A árvore de Merkle leva o nome de Ralph Merkle, que patenteou o conceito em 1979. É uma estrutura de dados usada em muitas áreas da ciência da computação, não só no Bitcoin.