Uma árvore Merkle é uma estrutura de dados usada em aplicativos de ciência da computação. Em bitcoin e outras criptomoedas, as árvores Merkle servem para codificar dados de blockchain de maneira mais eficiente e segura.
Eles também são chamados de "árvores binárias de hash".
Quebrando a árvore Merkle
Na blockchain do bitcoin, um bloco de transações é executado através de um algoritmo para gerar um hash, que é uma sequência de números e letras que podem ser usadas para verificar se um determinado conjunto de dados é o mesmo que o conjunto original de transações, mas para não obter o conjunto original de transações. O software da Bitcoin não executa todo o bloco de dados da transação - representando 10 minutos em média de transações - através da função hash de uma vez. Em vez disso, cada transação é hash, então cada par de transações é concatenado e hash juntos, e assim por diante, até que exista um hash para todo o bloco. (Se houver um número ímpar de transações, uma transação será dobrada e seu hash será concatenado consigo mesmo.)
Visualizada, essa estrutura se assemelha a uma árvore. No diagrama abaixo, "T" designa uma transação, "H" um hash. Observe que a imagem é altamente simplificada; um bloco médio contém mais de 500 transações, não oito.
Os hashes na linha inferior são chamados de "folhas", os hashes intermediários como "ramificações" e o hash na parte superior como "raiz". A raiz Merkle de um determinado bloco é armazenada no cabeçalho: por exemplo, a raiz Merkle do bloco # 482819 é e045b18e7a3d708d686717b4f44db2099aabcad9bebf968de5f7271b458f71c8. A raiz é combinada com outras informações (a versão do software, o hash do bloco anterior, o carimbo de data e hora, o destino da dificuldade e o nonce) e, em seguida, executa uma função de hash para produzir o hash exclusivo do bloco: 000000000000000000bfc767ef8bf28c42cbd4bdbafd9aa1b5c3c33c2b089594 no caso do bloco # 48. Esse hash não está realmente incluído no bloco relevante, mas no próximo; é distinto da raiz de Merkle.
A árvore Merkle é útil porque permite que os usuários verifiquem uma transação específica sem baixar todo o blockchain (mais de 130 gigabytes no final de agosto de 2017). Por exemplo, diga que você deseja verificar se a transação TD está incluída no bloco no diagrama acima. Se você possui o hash raiz (H ABCDEFGH), o processo é como um jogo de sudoku: você consulta a rede sobre H D e retorna H C, H AB e H EFGH. A árvore Merkle permite verificar se tudo é contabilizado com três hashes: dado H AB, H C, H EFGH e a raiz H ABCDEFGH, H D (o único hash ausente) deve estar presente nos dados.
As árvores Merkle têm o nome de Ralph Merkle, que as propôs em um artigo de 1987 intitulado "Uma assinatura digital baseada em uma função de criptografia convencional". Merkle também inventou o hash criptográfico.
