Este é o segundo artigo em uma série sobre a tecnologia de criptomoedas. Comece pelo primeiro para acompanhar desde o começo.
Retomando o estudo da pilha tecnológica de uma criptomoeda, nesse artigo vou explorar um pouco as características da blockchain.
A blockchain não foi inventada pelo Bitcoin e é uma estrutura de dados genérica, aplicável em outras situações. Ela também não é absolutamente essencial para uma moeda digital, já que aquelas controladas por uma entidade central podem ser emitidas sem necessidade de POW (proof of work, a ser abordado em um artigo futuro).
O nome dessa estrutura já diz boa parte do que você precisa saber sobre ela: a block chain (cadeia de blocos) representa um conjunto de dados em que cada grupo de informações (bloco) existe dentro de uma sequência (cadeia).
A forma de encadear as informações é fazer com que cada bloco “aponte” para um bloco anterior, criando uma sequência desde o bloco inicial (chamado bloco gênesis) até o bloco mais recente (topo).
Note os seguintes aspectos:
- Um bloco contém duas partes: o cabeçalho e o conteúdo
- Vários blocos podem apontar para o mesmo antecessor
- Para substituir um ramo inteiro de blocos basta trocar o antecessor de um único bloco
Blockchain Criptográfica
Uma blockchain puramente em memória é funcionalmente equivalente a uma lista encadeada ou árvore, e portanto qualquer nó (bloco) da rede pode ser substituído a qualquer momento.
Apenas armazenar essa estrutura em algum banco de dados, usando por exemplo um campo sequencial auto-incremento para identificar o bloco, também não garante a integridade da cadeia como um todo.
Ao combinar a blockchain com algumas primitivas criptográficas, conseguimos criar uma estrutura de dados onde um bloco mais novo é dependente da cadeia anterior inteira, o que garante que blocos mais antigos nunca poderão ser modificados.
Isso é feito através do uso de uma função de hash. Se estabelece (por convenção/consenso) que o identificador de um bloco é o hash do seu cabeçalho. Como o identificador do bloco anterior faz parte do cabeçalho, ele está incluído nesse cálculo. E como qualquer alteração nos dados de origem de um hash provoca uma alteração no seu resultado, isso garante que o apontamento de qual é o bloco anterior na cadeia não pode ser modificado.
Para garantir que o conteúdo do bloco não possa ser alterado, adiciona-se ao cabeçalho um hash calculado a partir de todo o conteúdo. No caso do Bitcoin, Decred e criptomoedas similares, o hash é a raiz de uma Merkle Tree (Árvore Merkle), construída de uma forma que especifica a existência e sequência das transações do bloco.
Dessa vez, note o seguinte:
- O hash do bloco em si não faz parte do bloco
- O identificador do bloco anterior é o hash do cabeçalho (ao invés de um número sequencial)
- Blocos com conteúdos (transações) diferentes tem uma raiz Merkle diferente
- É impossível mudar qualquer informação de um bloco anterior arbitrário (porque isso muda seu hash, o que muda seu identificador, o que muda todos os blocos sucessores)
Blockchain da Decred
A Decred contém algumas mudanças significativas no layout da sua blockchain quando comparada com a do Bitcoin. Em particular, o tamanho do cabeçalho é maior (180 bytes vs 80 bytes):
Além do hash do bloco anterior e da raiz da árvore de transações, um bloco também contém uma árvore de transações de stake, onde são armazenadas as transações de tickets, votos e revogações do sistema de votação:
Além de vários outros campos usados nos cálculos de ativação das regras e um campo ExtraData
para future proofing de hard/soft forks:
Compare os itens presentes em um cabeçalho Decred ao cabeçalho de um bloco bitcoin:
Esse foi o segundo artigo sobre a pilha tecnológica de criptomoedas. Para acompanhar os próximos lançamentos, assine meu feed RSS, minha newsletter, ou meu facebook.