Categorias
Como funcionam? Mastering Bitcoin

Bloco – o Componente da Blockchain

O bloco é a peça fundamental que compõe a blockchain. É através da ligação de milhares que a Bitcoin se consegue considerar segura. De facto, torna-se cada vez mais segura à medida que se vão adicionando mais no topo da cadeia.

Este é o constituinte mais simples da cadeia. Mas o que o compõe ?

bloos

Esta estrutura agrega as transacções para serem incluídas no livro-razão público, a blockchain. É composto por:

  • a descrição do seu tamanho, em bytes;
  • o cabeçalho;
  • o número de transacções que nele estão guardadas;
  • a lista dessas transacções.

O cabeçalho é uma pequena parte do bloco – a lista de transacções é, em média, 10000 vezes maior do que o cabeçalho. No entanto, é no cabeçalho que está a informação essencial e que identifica esse bloco. O cabeçalho tem o tamanho de 80 bytes e consiste em 3 conjuntos de metadados – dados que contém outros dados.

  • o primeiro conjunto de metadados, aponta a hash do bloco anterior, fazendo assim a ligação para a peça que o antecede na cadeia.
  • o segundo conjunto é a dispersão (hash) de raíz de Merkle que agrega todas as transacções incluídas nesse bloco.
  • o terceiro conjunto inclui o nonce, o alvo e a data em que foi publicado.

Além destes conjuntos de metadados, os primeiros 4 bytes identificam a versão usada pelo nó que publicou esse bloco.

Cada bloco pode ser identificado de duas formas diferentes: através da hash ou da altura.

A principal forma de identificação é a hash criptográfica. Um resultado único que se obtém ao passar o cabeçalho duas vezes pelo algoritmo SHA256, como se fosse a impressão digital electrónica daquele bloco. Uma Função de Dispersão Segura (Safe Hash Algorithm – SHA) transforma quaisquer dados que sejam introduzidos num output com uma dimensão fixa de 256 bits, ou seja, 32 bytes. O resultado devolvido pelo algoritmo é chamado a hash do bloco. De forma mais correcta, seria a hash do cabeçalho, já que é apenas utilizado o cabeçalho para a criação da hash. Este valor identifica o bloco de forma única e inequívoca.

Não é possível ter duas hashes iguais, introduzindo valores diferentes no algoritmo. No entanto, introduzindo os mesmos dados teremos sempre o mesmo valor, sem ser necessário dedicar muitos recursos. Desta forma, qualquer nó consegue identificar qualquer bloco utilizando este algoritmo. O processo inverso também é possível: através da hash qualquer nó, pode procurar pelo bloco e verificar que ele existe e está validado na blockchain.

A segunda forma de identificação é a altura na cadeia. A altura refere-se à posição de um bloco na cadeia. A blockchain é muitas vezes imaginada como uma pilha vertical. A altura indica a distância ao bloco inicial – conhecido como Genesis. No entanto, a altura pode não ser única. Devido a um fork (uma bifurcação), por exemplo, podem existir mais do que um bloco na mesma altura.

Nenhum destes identificadores faz parte da estrutura desta peça, nem é transmitido pela rede. Os nós descobrem estes valores, independentemente, e podem guardá-los numa base de dados individual para poder obter as informações lá guardadas mais rapidamente.

O bloco Genesis é o início da blockchain da Bitcoin e já vem incluído no código-fonte de um cliente Bitcoin. Serve como pedra basilar para que um nó possa começar a construir a sua cópia da blockchain. Empilhará em cima dele, todos os blocos que receber das transmissões da rede, depois de os verificar. Curiosamente, contém apenas uma transacção coinbase, que contém a mensagem “The Times 03/Jan/2009 Chancellor on brink of second bailout for banks.” Esta mensagem referencia a capa do jornal britânico The Times, provando a data mais recente em que pode ter sido criado. Serve também para relembrar a importância de um sistema monetário independente, num tempo em que o mundo sofria uma das piores crises financeiras de sempre.

A informação guardada na blockchain está ordenada de forma temporal e armazenada em conjuntos de transacções. Essa ordem é conseguida através de uma referência para o bloco anterior. De cada vez que um nó recebe um bloco, irá procurar esta identificação para o conseguir posicionar correctamente na cadeia. Para isso, procura no cabeçalho o campo “hash do bloco anterior”. Se reconhecer esta hash na blockchain, conseguirá colocá-lo em cima do seu bloco-pai, estendendo assim a cadeia.

Actualmente, a Bitcoin está a chegar ao bloco com a altura 607000.

merkle
A raiz de Merkle contém todas as transacções que estão na árvore por baixo dela.

A árvore de Merkle é um mecanismo para tornar a rede mais eficiente. Esta estrutura de dados permite agregar dados de forma eficiente. Na rede Bitcoin, é utilizada para juntar todas as transacções contidas num bloco. Para o conseguir, aplica-se o algoritmo SHA256, para obter uma hash de 32 bytes para cada transacção. Depois, são concatenadas aos pares para obter uma nova hash de 32 bytes. Este processo é repetido até que todas estejam conjugadas numa única hash – a raiz de Merkle.

É possível chegar à transacção desejada através de um caminho de Merkle. Este vai desdobrando a raiz até chegar à que se quer validar. Desta forma, em vez de ter que se descarregar o bloco completo e as centenas de transacções lá incluídas, é possível descarregar apenas 12 hashes que indicam o caminho até àquela que procuramos.

Desta forma, um nó simples pode fazer apenas o download do cabeçalho do bloco e do caminho de Merkle para validar a transacção que lhe está destinada. Através deste mecanismo, o nó descarrega um kylobyte de informação em vez do bloco completo que tem um megabyte. Isto significa uma proporção mil vezes inferior!

O último conjunto de metadados – onde estão incluídos o nonce, o alvo e a data – é utilizado para o algoritmo Proof-of-Work, que podem ver mais aprofundado no artigo exclusivamente sobre ele.

One reply on “Bloco – o Componente da Blockchain”

Deixe um comentário