Esse artigo explica o funcionamento do Blockchain e do algoritmo de segurança Proof of Work, da forma como proposto no whitepaper do Bitcoin, de Satoshi Nakamoto.
O Consenso Descentralizado
O Blockchain é um grande banco de dados no qual não existe uma autoridade central que valide transações e na qual todos os integrantes da rede confiem. Cada integrante da rede valida novas transações e tem o seu registro próprio registro de todas as transações passadas.
Mas como todos os integrantes da rede chegam ao mesmo consenso sobre a validade de cada transação? O Proof-of-Work (PoW) é o mecanismo por meio do qual o consenso descentralizado é alcançado. O PoW, ou mineração, é a invenção que tornou o Bitcoin especial, tornando-o na base de todas as criptomoedas.
O Blockchain é uma das tecnologias mais inovadoras dos últimos anos. Em primeiro lugar vamos entender o conceito de hash, depois o funcionamento do blockchain e do Proof of Work .
O que é um Hash?
Hash é uma função criptográfica que, a partir de qualquer elemento de entrada, produz uma sequência de caracteres alfanuméricos de tamanho fixo como saída.
Veja abaixo como hashing funciona.
Veja o hash produzido abaixo a partir do texto “Livecoins”.
Fonte: www.movable-type.co.uk/scripts/sha256.html
O hash produzido nunca muda de tamanho, não importa se a mensagem tem um ou mil caracteres. Entretanto, qualquer mudança de apenas uma letra muda completamente o hash. Dessa forma um grande volume de dados pode ser transformado em um hash de tamanho fixo.
Validação de transações
Cada integrante da rede pode ter uma cópia com todo o blockchain. São os chamados full nodes (nós completos). Um full node é um carteira que possui toda a cópia do blockchain e ainda valida blocos e transações.
À medida que novas transações forem acontecendo, cada full node irá comunicar-se com um node vizinho, transmitindo as transações válidas para validação em cada node. Dessa forma, quando uma transação é considerada válida por um full node, ele a adiciona em um banco chamado mempool.
Blockchain e o Bitcoin
Todas as transações no mempool são adicionadas a um bloco candidato pelos mineradores. Ao final do bloco é feito um hash com todo o registro de transações daquele bloco.
O próximo bloco é iniciado a partir desse Hash. Ao final desse segundo bloco é feito novo hash, o qual estará contido no terceiro bloco e assim por diante. Como resultado desse processo, temos a formação de uma corrente de blocos (blockchain). Dessa forma, a cada novo bloco, as transações anteriores são reforçadas por sucessivos blocos.
Quando uma transação tem 6 confirmações, significa dizer que 6 blocos foram adicionados ao blockchain após aquela transação.
Assim, se alguma transação for alterada posteriormente naquele bloco o hash produzido será diferente e esse bloco não será aceito pela rede.
Proof of Work
Proof of Work é o algoritmo que garante o consenso na rede, através da solução de problema criptográfico. Quando a solução do problema é encontrada um novo bloco é criado. Esse processo é conhecido como mineração.
O algoritmo PoW adiciona um número arbitrário (chamado nonce) ao final do bloco, conforme figura abaixo:
A implementação do PoW exige que o minerador procure por um valor desse nonce que, adicionada aos dados do bloco e ao mempool (que contém as novas transações), gere um hash com uma determinada quantidade de zeros no seu início.
Tente produzir um hash com uma sequência de 2 zeros seguidos. Você verá que é muito difícil e é na tentativa e erro. Assim que a mineração funciona. Hoje em dia, existem placas especializadas em calcular hashes (ASIC) que calculam mais de um trilhão de hashes por segundo.
Por exemplo, observe o hash que foi a solução do bloco 523124: 00000000000000000013a77eb4a86371e7647b5251b550b61d854abf1f2ec135
Esse hash em si já é uma prova de que certa quantidade de trabalho foi necessária para produzi-lo. Assim, temos uma Prova de Trabalho, ou Proof of Work.
A dificuldade (ou quantidade de zeros no inicio do hash) é ajustada de acordo com a capacidade de processamento da rede, para que um novo bloco seja criado, em média, a cada 10 minutos.
Validando o novo bloco
Quando o minerador encontra a solução do PoW, ele cria um novo bloco. A primeira transação de um novo bloco é uma transação especial que cria bitcoins que são transferidos ao minerador, como incentivo. Essa transação é chamada de coinbase.
Esse bloco é então transmitido para todos os full nodes, os quais verificam individualmente sua validade. Isto é, as transações nele contidas, o valor do nonce e do hash, dados do hash do bloco anterior, etc.
Essa verificação garante que aqueles mineradores agindo desonestamente não apenas percam sua recompensa (a coinbase), mas também percam o trabalho despendido na solução do PoW (energia elétrica).
Dessa forma, os mineradores devem construir um bloco perfeito, contendo apenas transações válidas provenientes do mempool, todos os dados de hash do bloco anterior e a solução do PoW. Para fazer isso eles têm um enorme gasto com eletricidade.
Portanto, à medida que mais blocos são adicionados ao blockchain o esforço para mudar um bloco inclui mudar todos os blocos posteriores também, resolvendo novamente o algoritmo PoW de cada um deles. Por isso, a corrente mais longa (com mais blocos) é sempre considerada a única válida.
Por fim, enquanto a maior capacidade de processamento da rede for controlada por mineradores honestos, que não estejam cooperando com um ataque, eles irão gerar a corrente mais longa e vão estar sempre blocos a frente dos atacantes.