26 / 736MRKL

Merkle Tree

árvore de Merkle

Uma forma de resumir transações em uma impressão digital e verificar a inclusão de um pagamento sem baixar o bloco inteiro.

Uma Merkle Tree combina gradualmente impressões digitais criptográficas de dados em um único resultado. No Bitcoin, isso produz a Merkle root guardada no cabeçalho do bloco. Algumas impressões adicionais permitem verificar se uma transação corresponde à raiz, sem transmitir todas as outras.

A carteira informa que o pagamento foi incluído em um bloco. Como conferir sem baixar todo o conteúdo? É aí que a Merkle Tree ajuda. Primeiro, as transações são representadas por hashes, pequenas impressões digitais criptográficas. Eles são combinados até formar uma impressão comum, a raiz. O cabeçalho contém essa Merkle root e liga o bloco às transações. A raiz não é um arquivo do qual se possam recuperar todos os pagamentos; ela serve para verificar dados apresentados. [1] [2]

Imagine quatro transações A, B, C e D. Pegamos suas impressões, juntamos A com B e calculamos um novo hash AB. Fazemos o mesmo com C e D, obtendo CD. Por fim, combinamos AB e CD e calculamos a raiz. As letras apenas identificam transações e resultados intermediários; não são hashes reais. O processo lembra uma árvore invertida: muitas folhas convergem por ramos até uma raiz. Mais transações acrescentam níveis, sem mudar o princípio. [3]

Para verificar B, você tem os dados dela e calcula sua impressão. Basta obter a impressão de A e a impressão conjunta CD, com a ordem correta. A partir de A e B, forma AB; depois usa AB e CD para calcular a raiz e compará-la à do cabeçalho. Esse caminho complementar é chamado Merkle proof. Não é preciso conhecer o conteúdo de A, C ou D. Em uma árvore equilibrada com 1024 transações, o caminho tem 10 hashes irmãos. Assim, a prova cresce muito mais devagar que a lista completa de transações. [2] [3]

Uma prova que corresponde à raiz não permite confiar cegamente no cabeçalho fornecido. Também é preciso verificar seu Proof of Work: o resultado do cálculo de mineração atende à dificuldade exigida? Além disso, o cabeçalho deve estar ligado à cadeia correspondente. Mesmo assim, uma Merkle proof não verifica todas as assinaturas e regras de todas as transações do bloco. Isso cabe a um Full Node. A verificação simplificada de pagamentos SPV, descrita no whitepaper, tem portanto pressupostos de segurança diferentes da validação completa. Uma reorganização também pode tirar o bloco do ramo ativo: seu conteúdo continua comprovável, mas a posição do pagamento no histórico atual pode mudar. [2]

Na árvore comum do Bitcoin, as folhas são identificadores txid na ordem das transações do bloco, começando pela Coinbase Transaction, a transação especial pela qual o minerador reivindica a recompensa do bloco. Os pares são unidos como bytes e passam duas vezes por SHA-256. Se um nível termina com um hash sem par, ele é duplicado para esse cálculo; nenhum pagamento adicional é criado. Com uma única transação, seu txid já é a raiz. Essa duplicação exige verificações cuidadosas de duplicatas na implementação. A melhoria do protocolo SegWit também separa dados witness, como assinaturas. Outra impressão digital criptográfica, registrada na Coinbase Transaction, vincula esses dados ao bloco. Essa impressão é chamada de witness commitment. Portanto, a árvore txid comum não deve ser confundida com a árvore witness. [3] [4]

Para ter uma visão mais completa, leia este verbete junto com Block, Transação, Block Header. Também há referências a este verbete em Block Header, Hash, SHA-256, Confirmação.

DOC · 001Bitcoin Developer Guide — Merkle TreesDocumentação DOC · 002Bitcoin whitepaper — Simplified Payment VerificationFonte primária DOC · 003Bitcoin Core — Merkle tree implementationFonte primária DOC · 004BIP141: witness commitmentFonte primária
Revisto em: Fontes em primeiro lugar · Não é recomendação de investimento