Índice
O que é uma árvore Merkle?
Como funciona uma árvore Merkle?
Por que Merkel Root é usado no Bitcoin?
Mineração
verificar
Resumir
O que é uma árvore Merkle?
No início da década de 1980, Ralph Merkle, um conhecido cientista da computação na área de criptografia de chave pública, propôs o conceito de árvore Merkle.
A estrutura em árvore Merkle pode verificar com eficácia a integridade do conjunto de dados e é mais eficaz em redes ponto a ponto que exigem que os participantes compartilhem e verifiquem informações de forma independente.
As funções hash estão no centro da estrutura da árvore Merkle. Portanto, recomendamos que você entenda o que é hashing antes de prosseguir com este artigo.
Como funciona uma árvore Merkle?
Digamos que você queira baixar um arquivo grande. Com downloads de software de código aberto, muitas vezes é necessário verificar se o hash do arquivo baixado corresponde ao divulgado pelo desenvolvedor. Se corresponderem, os dois documentos são consistentes.
Se os hashes não corresponderem, você está com problemas. Você baixou um arquivo malicioso disfarçado de software ou baixou-o incorretamente e o resultado final é que o arquivo fica inutilizável. Se o download estiver incorreto, você certamente ficará irritado porque está esperando há muito tempo pelo download do arquivo. Agora, se você começar de novo, terá que torcer para que o mesmo problema não aconteça novamente.
Você já pensou se existe uma maneira mais fácil de resolver esse problema? É aqui que entra a árvore Merkle. As árvores Merkle podem dividir arquivos em vários blocos de dados. Por exemplo, um arquivo de 50 GB pode ser dividido em 100 cópias, cada uma com 0,5 GB de tamanho. Então, você pode baixá-los um por um. É assim que os torrents funcionam.
A origem do arquivo neste momento é um valor hash, chamado raiz Merkle. Este valor hash único representa todos os blocos de dados que compõem o arquivo. Além disso, as raízes Merkle facilitam a validação dos dados.
Para facilitar a compreensão, damos um exemplo. Abaixo, um arquivo de 8 GB é dividido em oito partes, e cada fragmento é nomeado de A a H, respectivamente. Cada fragmento é então conectado a uma função hash, resultando em oito valores hash diferentes.

Através da função hash, são calculados os valores hash dos oito fragmentos.
Esperamos que a explicação do exemplo acima seja fácil de entender. Temos os valores hash de todos os fragmentos. Se um deles estiver errado, podemos encontrar o problema comparando-o com o arquivo de origem? Talvez, mas ainda é extremamente ineficiente. Se o arquivo tiver dezenas de milhares de fragmentos, precisamos fazer o hash de todos os fragmentos e comparar os resultados detalhadamente?
desnecessário. Precisamos apenas combinar um par de valores de hash e realizar uma operação de hash combinada. Ou seja, fazemos hash com hA + hB, hC + hD, hE + hF e hG + hH. O resultado serão quatro valores de hash. Em seguida, prosseguimos para a próxima rodada de hashes mesclados até obtermos dois valores de hash. Esses dois valores de hash são então combinados e o valor de hash principal é finalmente obtido, que é a raiz Merkle (também chamada de valor de hash raiz).

A estrutura parece uma árvore invertida. A linha inferior de folhas combina-se entre si para criar nós e, finalmente, raízes.
Agora temos a raiz Merkle representando o arquivo baixado. Compare o hash raiz com o valor do arquivo de origem e, se corresponder, todos ficarão felizes! Uma vez que os valores de hash são diferentes, isso prova que os dados foram adulterados. Em outras palavras, um ou mais fragmentos geraram um valor de hash diferente. Portanto, mesmo pequenas modificações nos dados podem alterar completamente a raiz de Merkel.
Felizmente, também é fácil verificar segmentos errados. Suponha que o erro seja hE. Primeiro, pedimos a outros dois hashes (hABCD e hEFGH) para gerar a raiz Merkle. Nosso valor hABCD deve corresponder aos outros, provando que a subárvore está livre de erros. Se hEFGH não corresponder, podemos corrigir o erro aqui. Em seguida, peça aos outros os hashes hEF e hGH e compare-os com os seus. Se o hGH estiver bom, o hEF é o culpado. Finalmente, comparamos os valores de hash de hE e hF. Assim que descobrirmos que a origem do erro é hE, podemos baixar novamente o bloco de dados.
Resumindo, a função da árvore Merkle é dividir os dados em várias partes e, em seguida, executar operações hash repetidamente para finalmente formar a raiz Merkle, para que possa verificar efetivamente onde os dados errados ocorrem. Na próxima seção apresentaremos outras aplicações interessantes.
Quer começar sua jornada com criptomoedas? Acesse Binance e compre Bitcoin agora!
Por que Merkel Root é usado no Bitcoin?
Existem muitos casos de uso para árvores Merkle, mas este artigo se concentra em seu importante papel no blockchain. Bitcoin e muitas criptomoedas são inseparáveis das árvores Merkle. A árvore Merkle é parte integrante de cada bloco, geralmente localizada no cabeçalho do bloco. Através do valor hash da transação (TXID) de cada transação do bloco, podemos obter as folhas.
Neste contexto, a raiz de Merkel serve vários propósitos. Vamos dar uma olhada na aplicação do Merkle Root na mineração de criptomoedas e verificação de transações.
Mineração
Os blocos Bitcoin consistem em duas partes. A primeira parte é o cabeçalho do bloco, que tem tamanho fixo e contém metadados do bloco. A segunda parte é o corpo do bloco, que tem tamanho variável, mas geralmente é muito maior que o cabeçalho do bloco e contém a lista de transações.
Os mineradores precisam fazer hash repetidamente dos dados até que um resultado que atenda a certas condições seja produzido antes que possam desenterrar um bloco válido. Para obter o resultado correto, eles precisam tentar trilhões de vezes. A cada tentativa, o minerador altera o número aleatório no cabeçalho do bloco, o valor Nonce, para gerar resultados diferentes. No entanto, o resto do bloco permanece o mesmo e as milhares de transações dentro dele ainda precisam ser criptografadas todas as vezes.
Merkel simplificou bastante o processo. Quando a mineração começa, todas as filas de transações são compactadas e construídas em uma árvore Merkle, e o valor hash raiz de 32 bits gerado é colocado no cabeçalho do bloco. Então, não há necessidade de hash de todo o bloco, apenas do cabeçalho do bloco.
Este método evita a adulteração de dados e, portanto, é eficaz, permitindo que todas as transações em um bloco sejam resumidas de forma eficiente e compacta. A lista de transações de cabeçalhos de bloco válidos não pode ser modificada, caso contrário a raiz Merkle será alterada. Depois que o bloco é enviado para outros nós, o hash raiz é calculado a partir da lista de transações. Se não corresponder ao valor no cabeçalho do bloco, o bloco poderá ser rejeitado.
verificar
Há outra propriedade interessante que podemos utilizar das raízes Merkle, que se refere à aplicação de clientes leves (nós que não guardam uma cópia completa do blockchain). Se você estiver executando um nó em um dispositivo com recursos limitados, você não deseja baixar e fazer hash de todas as transações em um bloco. Em vez disso, basta solicitar uma prova Merkle, que é a prova fornecida por um nó completo de que uma transação foi incluída em um bloco específico. Essa prova é mais conhecida como Verificação de Pagamento Simples, ou SPV, e foi detalhada no white paper Bitcoin de Satoshi Nakamoto.

Para verificar o HD, basta verificar o hash vermelho.
Suponha que desejamos obter informações de transação sobre o TXID hD. Se hC for conhecido, hCD pode ser calculado. Então, através do hAB, o hABCD pode ser calculado. Finalmente, consultando hEFGH, você pode verificar se a raiz Merkle calculada é consistente com o hash raiz no cabeçalho do bloco. Uma correspondência bem-sucedida prova que a transação foi incluída no bloco, pois é quase impossível gerar o mesmo hash usando dados diferentes.
No exemplo acima, fizemos hash apenas três vezes. Sem a certificação de Merkel, seriam necessários sete. Os blocos de hoje contêm milhares de transações, e as provas Merkle nos poupam muito tempo e poder computacional.
Resumir
As árvores Merkle provaram ser importantes em aplicações de ciência da computação e, como vimos, também são valiosas em blockchain. As árvores Merkle tornam a verificação de informações em sistemas distribuídos mais conveniente e evitam o congestionamento de dados redundantes na rede.
Sem as árvores Merkle e as raízes Merkle, o Bitcoin e outros blocos de criptomoedas não seriam tão compactos como são hoje. Embora os clientes leves não tenham vantagens em termos de privacidade e segurança, com as provas Merkle, os usuários podem verificar se as transações estão incluídas em blocos com taxas mínimas.

