Principais conclusões
Uma árvore de Merkle é uma estrutura de dados criptográfica que organiza os dados em pares de hashes, combinando-os de baixo para cima até que um único hash, a raiz de Merkle, represente todo o conjunto de dados.
As raízes Merkle permitem que as redes blockchain verifiquem se uma transação está incluída em um bloco sem precisar baixar o bloco completo, usando uma prova Merkle compacta que escala logaritmicamente com o número de transações.
O Bitcoin incorpora a raiz Merkle em cada cabeçalho de bloco, permitindo que clientes leves verifiquem as transações usando apenas os cabeçalhos de bloco, em vez de toda a blockchain.
O Ethereum utiliza uma árvore Merkle Patricia Trie mais complexa para armazenar saldos de contas e o estado de contratos inteligentes, possibilitando provas de estado para clientes leves e agregações de camada 2.
Introdução
As árvores de Merkle são um dos conceitos fundamentais que tornam os sistemas blockchain eficientes e verificáveis em larga escala. Elas permitem que as redes resumam conjuntos de dados inteiros em uma única impressão digital criptográfica, ao mesmo tempo que possibilitam provar que uma transação ou informação específica está incluída. Para entender por que as árvores de Merkle são importantes no design de blockchain, vamos analisar como elas funcionam, como diferentes redes as utilizam e como estruturas mais recentes, como as árvores de Verkle, podem aprimorá-las no futuro.
Como funcionam as árvores de Merkle
Uma árvore de Merkle, nomeada em homenagem ao cientista da computação Ralph Merkle, que patenteou o conceito em 1979, é uma estrutura de dados usada para resumir e verificar com eficiência a integridade de grandes conjuntos de dados. Em um blockchain, as árvores de Merkle comprimem milhares de transações em um único valor compacto armazenado no cabeçalho do bloco.
A árvore é construída de baixo para cima usando funções hash criptográficas. Cada nó folha contém o hash de um único dado, como uma transação. Esses hashes das folhas são então emparelhados: o hash de cada par é calculado concatenando os dois hashes dos nós filhos e aplicando uma função hash ao resultado. Esse processo se repete de baixo para cima, camada por camada, até que reste apenas um hash no topo, a raiz Merkle.
Como cada nó pai depende de ambos os seus filhos, qualquer alteração em uma única folha se propagará para cima, produzindo uma raiz de Merkle completamente diferente. Essa propriedade torna as árvores de Merkle uma ferramenta eficaz para detectar adulteração: se duas cópias de um conjunto de dados produzirem a mesma raiz de Merkle, os conjuntos de dados são idênticos com uma probabilidade extremamente alta.
Raízes Merkle
A raiz Merkle é um hash de tamanho fixo, tipicamente 32 bytes (256 bits) em aplicações blockchain, que funciona como uma impressão digital para todo o conjunto de dados. Os cabeçalhos de bloco na maioria das redes blockchain incluem a raiz Merkle juntamente com outros metadados, como carimbos de data/hora e o hash do bloco anterior, mantendo os cabeçalhos pequenos e, ao mesmo tempo, garantindo criptograficamente o conjunto completo de transações dentro do bloco.
Para ilustrar de forma simples, vamos considerar um arquivo de 8 GB dividido em oito partes. Vamos chamar os diferentes fragmentos de A a H. Cada fragmento é então submetido a uma função hash, resultando em oito hashes diferentes.
Com o hash de todos os fragmentos, se um deles estiver com defeito, você saberá comparando-o com o hash da fonte, certo? Possivelmente, mas isso também pode ser incrivelmente ineficiente. Se o seu arquivo tiver milhares de fragmentos, você calculará o hash de todos eles e comparará meticulosamente os resultados?
A raiz Merkle oferece uma solução mais elegante. Pegue cada par de hashes, combine-os e, em seguida, faça um novo hash com eles. Você obterá os hashes hA + hB, hC + hD, hE + hF e hG + hH, resultando em quatro hashes.
Em seguida, após mais uma rodada de hashing, você obterá dois hashes: hABCD e hEFGH. Finalmente, faça o hashing dos dois restantes para chegar ao hash mestre, e você terá a raiz Merkle (ou hash raiz): hABCDEFGH.
Provas e Verificação de Merkle
Uma das características mais práticas das árvores de Merkle é a capacidade de provar que um dado específico pertence ao conjunto de dados sem revelar o conjunto de dados inteiro. Isso é chamado de prova de Merkle. Para verificar se uma transação está incluída em um bloco, um cliente leve precisa apenas da própria transação, de um pequeno conjunto de hashes irmãos ao longo do caminho até a raiz e da raiz de Merkle do cabeçalho do bloco. O verificador recalcula os hashes ao longo do caminho e verifica se o resultado corresponde à raiz conhecida. Se corresponder, a transação é matematicamente comprovada como parte do bloco.
Vamos analisar um cenário em que você deseja verificar uma transação cujo TXID é hD. Se hC for fornecido, você pode calcular hCD. Em seguida, use hAB para calcular hABCD. Por fim, com hEFGH, verifique se a raiz Merkle resultante corresponde à do cabeçalho do bloco. Se corresponder, isso comprova que a transação foi incluída no bloco. Seria praticamente impossível criar o mesmo hash com dados diferentes.
No exemplo acima, você precisará calcular o hash apenas três vezes. Sem uma prova Merkle, você teria que fazê-lo sete vezes. Como os blocos atualmente contêm milhares de transações, o uso de provas Merkle economiza muito tempo e recursos computacionais.
O tamanho da prova cresce logaritmicamente com o número de folhas: para um milhão de transações (uma árvore binária de profundidade 20), são necessários apenas cerca de 20 hashes, aproximadamente 640 bytes. Isso permite que nós leves, às vezes chamados de clientes de Verificação Simplificada de Pagamento (SPV), verifiquem transações sem precisar baixar toda a blockchain, um processo que, de outra forma, exigiria centenas de gigabytes de dados.
Árvores de Merkle em Redes Blockchain
Bitcoin e verificação de transações
No Bitcoin, cada cabeçalho de bloco contém uma raiz Merkle de 32 bytes que garante a inclusão de todas as transações naquele bloco. Os mineradores de Bitcoin constroem uma árvore Merkle a partir das transações que incluem, e a raiz resultante é incorporada ao cabeçalho do bloco juntamente com a solução de Prova de Trabalho (PoW). Esse design significa que o cabeçalho do bloco, tipicamente com cerca de 80 bytes, é suficiente para verificar se uma transação específica foi incluída no bloco, sem a necessidade das demais transações.
O Bitcoin também utiliza árvores de Merkle em sua proposta MAST (Merkelized Abstract Syntax Trees), que permite que condições complexas de gastos em scripts Bitcoin sejam representadas como uma árvore de Merkle. Apenas o ramo executado do script precisa ser revelado, mantendo as condições não utilizadas em sigilo e reduzindo o tamanho da transação.
Ethereum e provas de estado
O Ethereum utiliza uma variante mais sofisticada chamada Merkle Patricia Trie, uma estrutura de árvore hexagonal (de 16 vias) que armazena saldos de contas, código de contratos e dados de armazenamento. Ao contrário da simples árvore Merkle binária usada para transações de Bitcoin, a Merkle Patricia Trie foi projetada para suportar atualizações frequentes de estado: quando o saldo de uma conta muda, apenas o caminho daquela folha até a raiz precisa ser recalculado, em vez de reconstruir toda a árvore.
As provas de estado geradas a partir da Trie Merkle Patricia permitem que clientes leves do Ethereum e rollups de camada 2 verifiquem saldos de contas e armazenamento de contratos sem a necessidade de executar um nó completo. Essas provas também são essenciais para pontes entre cadeias que precisam verificar eventos em uma cadeia a partir de outra.
Limitações e desenvolvimentos futuros
Embora as árvores de Merkle ofereçam verificação eficiente, o tamanho das provas ainda cresce logaritmicamente com o conjunto de dados. No caso do Ethereum, à medida que o estado aumenta, as testemunhas de bloco, ou seja, as provas necessárias para validar um bloco, podem atingir vários megabytes. Isso representa um desafio de escalabilidade para clientes sem estado, que precisariam receber e verificar essas provas para cada bloco.
As árvores de Verkle, que utilizam compromissos vetoriais baseados em compromissos polinomiais (Kate-Zaverucha-Goldberg, ou KZG) em vez de hashing tradicional, oferecem uma solução potencial. Ao agrupar muitos filhos em cada nó (fator de ramificação de 256), as árvores de Verkle produzem provas com tamanho quase constante, aproximadamente 170 bytes, independentemente do tamanho do conjunto de dados. O Ethereum está desenvolvendo ativamente a integração com árvores de Verkle, com implementação prevista para uma futura atualização. Essa transição reduziria significativamente a carga de dados em clientes leves e melhoraria a escalabilidade da rede como um todo.
Perguntas frequentes
O que é uma árvore de Merkle em termos simples?
Uma árvore de Merkle é uma forma de organizar dados de modo que uma única pequena informação, a raiz de Merkle, possa representar um grande conjunto de dados. Ela funciona aplicando repetidamente hashes a pares de dados até que reste apenas um hash, possibilitando verificar se um item específico pertence ao conjunto sem precisar verificar cada item individualmente.
O que é uma raiz de Merkle?
A raiz Merkle é o hash único no topo de uma árvore Merkle. Ela funciona como uma impressão digital compacta para todos os dados abaixo dela. Em redes blockchain, a raiz Merkle é armazenada no cabeçalho do bloco e é confirmada para cada transação nesse bloco, permitindo a verificação eficiente de que uma transação faz parte de um bloco.
Como funciona uma prova Merkle?
Uma prova Merkle fornece uma transação juntamente com o conjunto mínimo de hashes irmãos necessários para recalcular o caminho dessa transação até a raiz Merkle. O verificador calcula o hash da transação, combina-o com os irmãos fornecidos na ordem correta e verifica se o resultado final corresponde à raiz Merkle conhecida no cabeçalho do bloco. Se houver correspondência, a transação é considerada incluída.
Por que as árvores de Merkle são importantes para o blockchain?
As árvores de Merkle permitem que as redes blockchain separem os cabeçalhos dos blocos dos dados completos das transações. Um cliente leve pode baixar apenas os cabeçalhos dos blocos, aproximadamente 80 bytes por bloco, e ainda assim verificar se uma transação foi incluída, usando uma prova de Merkle compacta. Sem as árvores de Merkle, verificar uma transação exigiria o download do bloco completo ou de toda a cadeia.
Qual a diferença entre uma árvore Merkle e uma árvore Verkle?
Ambos são acumuladores criptográficos usados para provar a pertinência de dados, mas utilizam matemática diferente. As árvores de Merkle usam funções hash e produzem provas cujo tamanho cresce logaritmicamente com o conjunto de dados (O(log n)). As árvores de Verkle usam compromissos polinomiais (KZG) e produzem provas com tamanho quase constante, algumas centenas de bytes independentemente do tamanho do conjunto de dados, tornando-as mais adequadas para provas de estado em larga escala em blockchains.
Considerações finais
As árvores de Merkle são um pilar da arquitetura blockchain, permitindo a verificação sem confiança em larga escala. Ao comprimir um bloco inteiro de transações em um único hash de 32 bytes, elas permitem que os participantes verifiquem os dados sem precisar baixar tudo, um princípio fundamental que sustenta tudo, desde carteiras SPV do Bitcoin até provas de estado do Ethereum e pontes entre blockchains. À medida que as redes blockchain continuam a crescer, novas estruturas criptográficas, como as árvores de Verkle, podem eventualmente complementar ou substituir as árvores de Merkle, mas o conceito subjacente, a integridade de dados eficiente baseada em hash, provavelmente permanecerá um componente fundamental dos sistemas distribuídos por muitos anos.
Leitura complementar
O que é um algoritmo de consenso em blockchain?
História da Criptografia
Soluções de escalabilidade de camada 1 versus camada 2 em blockchain
O que é sharding e como funciona?
Aviso: Este conteúdo é apresentado a você "no estado em que se encontra" apenas para fins informativos e educacionais gerais, sem qualquer garantia ou declaração de qualquer tipo. Não deve ser interpretado como aconselhamento financeiro, jurídico ou outro tipo de aconselhamento profissional, nem se destina a recomendar a compra de qualquer produto ou serviço específico. Você deve buscar aconselhamento de profissionais qualificados. Quando o conteúdo for contribuído por terceiros, observe que as opiniões expressas pertencem a esses terceiros e não refletem necessariamente as da Binance Academy. Os preços dos ativos digitais podem ser voláteis. O valor do seu investimento pode diminuir ou aumentar e você pode não recuperar o valor investido. Você é o único responsável por suas decisões de investimento e a Binance Academy não se responsabiliza por quaisquer perdas que você possa sofrer. Para mais informações, consulte nossos Termos de Uso, Aviso de Risco e Termos da Binance Academy.
