Compre Cripto
Mercados
Contrato
À vista (Spot)
Ganhe
Web3 new
Aprender
Academy > Insights Cripto > Merkle Tree e Merkle Root Blockchain: Como o algoritmo do Bitcoin faz transações de hashes >

Merkle Tree e Merkle Root Blockchain: Como o algoritmo do Bitcoin faz transações de hashes

2022-11-09 17:19:51

Merkle Tree (Árvore de Merkle) e Merkle Root (Raízes de Merkle) são estruturas de dados criptográficos inventadas na década de 1980. Satoshi Nakamoto, fundador do Bitcoin (BTC), implementou essa tecnologia para o algoritmo de hash SHA-256 do Bitcoin para ajudar a verificar transações e blocos no blockchain do Bitcoin.

A Merkle Tree em Bitcoin e outras criptomoedas é usada como uma pegada digital para processar e verificar transações. Se precisarmos voltar às primeiras transações do Bitcoin em 2009, podemos usar os hashes dessas transações e localizá-los no blockchain usando exploradores de blocos.

Em 1995, um serviço de registro de data e hora chamado Surely publicou valores de hash para anúncios no NY Times. Esta foi a primeira implantação comercial da tecnologia blockchain e, como Satoshi Nakamoto a implementou no Bitcoin, foi usada em todas as outras altcoins populares.

O que é uma Merkle Tree?

Uma Merkle Tree é uma árvore de hash digital composta por vários nós (computadores). Esses nós se unem para criar uma estrutura semelhante a uma árvore. Os mineradores usam os valores de hash para transmitir transações e produzir novos blocos no blockchain.

Ao contrário de uma árvore física no mundo real, as estruturas de árvore geralmente são invertidas com o nó raiz no topo e os ramos se espalhando para baixo, cada um terminando em um ou mais nós folha.

As Árvores de Merkle são compostas por vários hashes de transação. Por exemplo, um único hash de transação Bitcoin pode ser incluído em uma das folhas inferiores, que são então unidas e interligadas (hashed) em outro galho de árvore chamado bloco.

O que é um Merkle Root?

Um Merkle Root é o hash final que combina todos os hashes na Merkle Tree. Uma vez que todas as transações em uma Merkle Tree são combinadas, elas produzem o hash final conhecido como Merkle Root.

Digamos que você tenha 200 transações na parte inferior da Merkle Tree. Elas são criptografadas para 50 transações, depois 10, depois 5 e depois 1. O hash final representaria todos os hashes anteriores em um grupo e seria usado como um identificador para todos aqueles transações combinadas.

Cada bloco é representado por um único hash raiz. Os Merkle Root são usados para verificar a precisão dos blocos anteriores. Cada bloco pode ter apenas um Merkle Root e os dados históricos podem ser sincronizados.

História da Merkle Tree

A tecnologia por trás da Árvore de Merkle foi patenteada em 1989. Seu nome é uma homenagem ao professor de Stanford, Ralph Merkle, que inventou a tecnologia publicando um artigo sobre assinaturas digitais chamado “A Certified Digital Signature”.

Décadas antes do Bitcoin ser inventado, a criptografia era usada no desenvolvimento de software para proteger os dados. A Merkle Tree era uma das maneiras de verificar lotes gigantes de dados e economizar memória.

Se você tiver um grande banco de dados criptografado e não quiser verificar individualmente a validade de pequenas partes do banco de dados, poderá usar Merkle Root para verificar os dados de hash de uma parte individual do banco de dados e economizar memória.

O artigo de Merkle foi apresentado no Bitcoin Whitepaper como um dos principais componentes do Bitcoin. Ele permaneceu um defensor da criptomoeda e defendeu o avanço das DAOs (Organizações Autônomas Descentralizadas).

Dados de hash no Bitcoin

Para entender como as Merkle Trees ajudam a economizar memória, começamos pelo hash. Hashing é uma tecnologia criptográfica que produz um número único para cada computação criptografada.

Se você compilar um conjunto de dados e fazer um hash, ele produzirá um número que não pode ser alterado para esse conjunto de dados. Por exemplo, se você fizer o upload de suas chaves privadas Bitcoin e as fizer hash, a saída será a mesma, não importa quantas vezes você faça o hash. Se você alterar um número, o hash de saída será diferente.

No blockchain, os números de hash do bloco são fixos para garantir que o blockchain não possa ser violado. Se os hashes da transação não corresponderem à Merkle Root do blockchain Bitcoin, a transação será invalidada pelos nós na rede Bitcoin.

O problema é que grandes bancos de dados, como blockchains, precisam agrupar milhões de transações ao mesmo tempo. Desde 2017, mais de 5 milhões de transações foram processadas na blockchain Bitcoin.

Transações cumulativas na blockchain Bitcoin desde 2017. (Fonte: Statista)

Se cada ID de transação fosse indexada em um arquivo hash grande, seria necessária muita memória para acessar uma transação específica. Isso tornaria o blockchain do Bitcoin inutilizável para usuários que não são mineradores.

No entanto, se todas as transações tiverem hash em uma única Merkle Root, você poderá acessar instantaneamente essa transação sem precisar baixar todo o blockchain do Bitcoin (350 GB no momento da redação).

A Merkle Tree permite que os usuários enviem instantaneamente transações na blockchain Bitcoin. Em vez de baixar uma blockchain com muitos dados, um usuário pode baixar um cliente leve para a rede Bitcoin, como Electrum (uma das carteiras Bitcoin mais antigas) e fazer transações dessa carteira.

Satoshi Nakamoto usou as Merkle Roots para o recurso “Simple Payment Verification” (SPV) do Bitcoin para oferecer suporte a clientes leves. Essas carteiras podem se conectar a nós de blockchain e enviar ou receber Bitcoin sem baixar todo o blockchain do Bitcoin.

Metadados do Bloco Bitcoin

O blockchain do Bitcoin é composto por milhares de “blocos” que contêm transações, e o resumo líquido desses blocos cria o blockchain. O limite de tamanho de memória para blocos é de 1 MB.

Satoshi implementou um limite de 1 MB para o tamanho do bloco. (Fonte: Bitcoin Insider)

A uma taxa média de 550 bytes por transação, a rede Bitcoin pode processar até 3.500 transações por bloco. Na média atual, a maioria dos blocos carrega entre 1.500 e 2.000 transações por bloco. Isso reduz a média para 4 a 6 transações por segundo.

Os blocos Bitcoin possuem “cabeçalhos” contendo metadados sobre o bloco. Os dados do cabeçalho são criptografados para criar uma prova de trabalho que fornece recompensas de mineração para nós – computadores que validam a rede.

O Bitcoin é executado em um algoritmo de consenso que especifica certos padrões de hash e trabalho que um nó deve calcular para receber prêmios. Um minerador precisa fazer o hash de dados milhares de vezes para produzir condições matemáticas ideais que permitem minerar um bloco. Um minerador pode até fazer bilhões de tentativas antes de poder minerar um bloco e receber um prêmio.

À medida que a dificuldade de mineração aumenta, a rede consome mais energia para computação. No passado, quando os requisitos de dificuldade de computação eram menores, as pessoas podiam minerar Bitcoin em seus laptops usando suas placas gráficas.

Recentemente, o trabalho de mineração é feito em mineradores ASIC, como o AntMiners, que consomem muita energia e custam dezenas de milhares de dólares.

Quando um minerador faz uma tentativa de computação, ele precisa fazer o hash do cabeçalho do bloco e de todas as transações nele. O cabeçalho pesa 80 bytes e contém o hash raiz Merkle em 32 bytes. Isso é menor que as transações no bloco, cada uma ocupando uma média de 550 bytes.

As transações de Bitcoin têm consumo de memória mensurável, que pode ser visualizado em exploradores de blocos, como Blockchair, em “tamanho”. Neste exemplo, uma transação Bitcoin consumiu 343 bytes:

Dados de uma transação Bitcoin que consumiu 343 bytes (Fonte: Blockchair.com).

À medida que os blocos são passados, os mineradores precisam apenas do hash de cabeçalho dos blocos anteriores em vez de blocos inteiros para avançar na cadeia.

A Merkle Tree permite que os mineradores agilizem o processo de hash. Satoshi projetou o Bitcoin de tal forma que todas as transações em bloco são compactas e fáceis de validar. Posteriormente, se um bloco for aceito como válido por outros nós, a lista de transações não poderá ser revertida, pois isso reverteria o blockchain irreversível e alteraria a Merkle Root.

Validando Blocos Usando a Merkle Tree

A Merkle Tree é usada para validar a autenticidade dos blocos.

As transações e blocos de Bitcoin são armazenados em uma ordem sequencial desde o Genesis Block of Bitcoin original em 2009.

O candidato bloqueia a passagem de dados no Bitcoin ledger. (Fonte: OpenNode)

No nível mais alto está a única Merkle Root. Tudo abaixo dela compreende a Merkle Tree. Existem dois tipos de nós abaixo da Merkle Root: nós folha e nós não folha.

Nós folha são transações na rede Bitcoin. Pode haver milhares de transações/nós de folha em um único bloco. Cada nó folha é identificado com um ID de transação (TXID).

Os nós folha são agrupados para criar nós não folha. Dependendo do tamanho do bloco, o número de nós folha e nós não folha com hash varia. No entanto, no topo há sempre dois nós finais não-folha e uma Merkle Root.

Por exemplo, em um bloco com 1.500 transações, haveria apenas dois hashes de transação (nós não-folha) no nível mais alto. Abaixo disso, teríamos uma árvore terminando em 1.500 nós folha. Cada um desses hashes alimenta um ao outro até atingir os dois nós superiores.

Os dois nós superiores são os nós abaixo da principal Merkle Root, daí o nome “Binary Tree”. Acima dos dois nós superiores, há a Merkle Root, um hash que contém informações sobre cada hash que ocorreu na rede Bitcoin. Ele pode ser invocado para validar a autenticidade de cada bloco e transação.

Se um minerador quiser verificar se uma determinada transação veio de um determinado bloco, ele pode verificar a Merkle Root desse bloco específico e validá-lo.

O processo de verificação de pagamento no Bitcoin. (Fonte: CoinGeek)

É assim que o cabeçalho do bloco fica no código C++ nativo em que o blockchain do Bitcoin está escrito:

Se uma transação alegar vir do bloco nº 12.213 na rede Bitcoin, o minerador precisaria apenas verificar o cabeçalho do bloco nº 12.213. Para obter informações, não teria que se conectar ao bloco nº 12.212 ou nº 12.214, ou qualquer outro bloco. Assim consegue facilmente verificar a autenticidade da transação.

Esse processo forma uma relação pai-filho entre a principal Merkle Root da blockchain e os milhões de nós folha que a carregam. Também torna mais fácil para os mineradores fazerem seus trabalhos, como validar blocos e produzir novos.

Conclusão

As Merkle Tree e as Merkle Root são ferramentas cujo objetivo principal é fazer hash de dados criptográficos e torná-los acessíveis para aplicativos de software.

As Merkle Root têm sido usadas em criptografia, em particular Bitcoin, desde o início do bloco Genesis para hash de IDs e blocos de transações. Eles foram posteriormente adotados por altcoins como Ethereum (ETH) e milhares de outras criptomoedas.

A visão de Satoshi era escalar o Bitcoin para milhões de usuários, e a única maneira de conseguir isso era simplificar a sincronização do blockchain. Assim, os dados podem ser usados ​​por carteiras leves, como carteiras móveis, que podem interagir com o blockchain sem ter que baixar todo o blockchain.

Satoshi também introduziu o recurso “Simplified Payment Verification” (SVP) que permite que os usuários usem Bitcoin sem executar seu próprio nó. Essa é uma das principais razões pelas quais a criptomoeda atingiu massa crítica e adoção entre milhões de usuários.


Se tiver qualquer dúvida, entre em contato conosco em support@phemex.zendesk.com
Siga nossa página oficial no Twitter e no Instagram | Junte-se à nossa comunidade no Telegram
Negocie criptomoedas em qualquer lugar:Download para iOS | Download para Android
Phemex | Conquiste, liberte-se

 

giftRegister to get $180 Welcome Bonus!
Email
Password
Código de convite (opcional)
  • Facebook
  • Twitter
  • LinkedIn
  • Telegram
  • Discord
  • Youtube
Subscribe Phemex

Register on Phemex and begin your crypto journey today

Get $180 to Sign Up

Bonus

The Social Network that Pays YOU!

Engage to Earn 1,350 PT Every Day