O pai do consenso: guia completo sobre proof-of-work
Este artigo está disponível nos seguintes idiomas:
Principais insights
O artigo traça as origens e a evolução do proof-of-work (PoW), explicando como começou como uma ferramenta contra abusos de recursos antes de se tornar a base da blockchain descentralizada do Bitcoin. Detalha como o PoW protege transações e evita o gasto duplo por meio de desafios computacionais resolvidos por mineradores, mas também destaca desafios de escalabilidade e consumo de energia. Para superar essas limitações, o artigo aponta o desenvolvimento de camadas de blockchain e novos mecanismos de consenso que buscam mais eficiência sem perder segurança e descentralização.
Hoje, redes descentralizadas utilizam diferentes mecanismos de consenso, mas tudo começou com o proof-of-work (PoW). Vamos contar como essa ideia surgiu, como funciona e por que ainda é um dos algoritmos centrais do Web3.
No início, o proof-of-work não foi criado pensando em redes descentralizadas. Ele não tinha relação com criptomoedas e, na verdade, foi projetado para proteger usuários de “recursos compartilhados” contra vários tipos de abuso. Os criadores do conceito, apresentado em 1993, sugeriram uma solução que restringia o acesso a determinado recurso exigindo que os participantes realizassem cálculos complexos. Também ficou definido que os resultados desses cálculos seriam fáceis e rápidos de verificar.
A primeira versão viável para implementação prática só surgiu cinco anos depois, quando Adam Back criou o projeto Hashcash, cuja principal função era combater o spam. A ideia era usar criptografia para dificultar o envio de e-mails em massa. Antes de enviar cada mensagem, o remetente precisava realizar cálculos complexos — encontrar um valor de x tal que o hash SHA(x) tivesse N bits iniciais iguais a zero — e incluir o resultado (proof-of-work) no cabeçalho do e-mail.
Para que o e-mail chegasse ao destinatário, era preciso verificar se o remetente resolveu o desafio criptográfico. Isso podia ser feito rapidamente com um cálculo SHA-1 usando um rótulo preparado previamente. Esse rótulo era gerado pelo remetente antes de começar a resolver o problema e ficava disponível publicamente para todos os participantes do sistema. Assim, enviar alguns e-mails não causava problemas, mas para disparar campanhas em massa, seria necessário muito poder computacional.
Parece familiar, certo? Esse conceito foi utilizado em 2008 por Satoshi Nakamoto para criar o Bitcoin e sua blockchain baseada em proof-of-work.
Como funcionam as blockchains PoW
No centro da ideia de Nakamoto (não se sabe se é uma pessoa ou um grupo de desenvolvedores) estava o objetivo de criar um sistema de dinheiro eletrônico descentralizado, independente de terceiros. Isso permitiria enviar valores diretamente, sem intermediários como bancos.
As informações das transações ficam registradas em um livro-razão distribuído entre os participantes do sistema. O processo de ordenação envolve agrupar as transações em blocos, que têm tamanho limitado. Cada bloco deve conter informações sobre o bloco anterior. Para isso, todos os dados relevantes (transações, hash do bloco anterior, timestamp etc.) são convertidos em um código único chamado hash. Isso é feito por uma função de hash, que no caso do Bitcoin é a SHA-256. “Full nodes” especiais gerenciam as cadeias, enquanto os mineradores criam novos blocos.
É importante entender que a função de hash funciona de modo que, a partir de um mesmo conjunto de dados, sempre se obtém o mesmo hash. Qualquer pequena alteração gera um hash totalmente diferente.
Como mencionado antes, os mineradores precisam calcular o hash do bloco para adicioná-lo à cadeia. Isso não é algo demorado por si só, então, para evitar que o problema seja resolvido rápido demais, a rede ajusta a dificuldade a cada 2.016 blocos — um período de cerca de duas semanas. Isso garante que o tempo de mineração de cada bloco fique em torno de dez minutos, mantendo a blockchain estável.
Na prática, como isso funciona? Os mineradores recebem blocos como entrada e calculam o hash. Porém, a rede exige que esse hash seja menor que um determinado valor. Mas, se o hash não pode ser alterado, como isso é possível? É aí que entra o nonce — um número usado apenas uma vez. Ele é adicionado ao bloco e alterado pelos mineradores durante os cálculos, resultando em hashes diferentes. Os mineradores comparam o hash obtido com o alvo de dificuldade e, se o valor for maior, mudam o nonce e recalculam. Esse processo se repete até encontrar um hash igual ou menor que o alvo, podendo ser necessário repetir milhões de vezes.
Para ter uma ideia da escala desse desafio, veja o número abaixo:
115792089237316195423570985008687907853269984665640564039457584007913129639936
Esse é o número de combinações possíveis no hash SHA-256. É equivalente ao número de estrelas do universo, 115 bilhões de vezes.
A cadeia de transações
Agora, vamos ver um exemplo prático. Suponha que você está enviando fundos em BTC para alguém. Depois de gerar e assinar a transação com sua chave privada, ela é enviada para a rede. O full node verifica se está tudo certo e, se não houver problemas, libera para circular na rede. Outros nós também fazem checagens e colocam a transação na fila de não confirmadas (mempool).
Os mineradores coletam transações da mempool (priorizando as que pagam taxas maiores), agrupam em um bloco e começam os cálculos. Quando um minerador resolve o problema, os full nodes verificam a solução e, se estiver correta, o minerador recebe a recompensa. Nesse momento, o bloco é considerado “minerado” e adicionado à blockchain, e a informação é enviada a todos os participantes. Depois disso, os mineradores partem para o próximo bloco. Quanto mais blocos forem adicionados após o bloco da sua transação, maior o nível de confirmação dela.
Resumindo: para uma transação ser considerada legítima, a maioria dos nós da rede precisa concordar que o bloco foi calculado corretamente.
Tudo isso é mesmo necessário?
Nakamoto não foi o primeiro a tentar criar um sistema descentralizado, mas foi o primeiro a usar o mecanismo de consenso proof-of-work. Sem ele, não seria possível resolver o problema do gasto duplo, que ocorre quando alguém tenta gastar os mesmos fundos duas vezes antes da confirmação da transação. Os mineradores verificam cada transação recebida da mempool para evitar o gasto duplo.
É verdade que, numa blockchain PoW, dois mineradores podem minerar o mesmo bloco. Isso não é necessariamente malicioso e pode acontecer se ambos terminarem o cálculo quase ao mesmo tempo e um deles não receber a informação de que o bloco já foi minerado. Nesse caso, surge uma cadeia paralela a partir do bloco duplicado. Para eliminar esse “ramo” errado, o mecanismo de consenso compara as duas blockchains e dá preferência para a versão mais longa.
Problemas e limitações
O maior problema do PoW — pelo menos em sua forma pura — é a escalabilidade. Por exemplo, a blockchain do Bitcoin processa cerca de 7 transações por segundo, um número baixo. Por isso, durante períodos de pico, a mempool enche e transações com taxas baixas podem ficar presas por horas ou até dias. À primeira vista, pode parecer que aumentar o tamanho dos blocos ou minerá-los mais rápido resolveria o problema.
Mas aumentar o tamanho dos blocos exige muito poder computacional, o que faria apenas grandes mineradores ou pools continuarem na rede, reduzindo a descentralização.
Se o tempo de processamento for reduzido, há o risco de os nós não conseguirem chegar a um consenso antes do próximo bloco ser criado. Isso aumentaria o número de “ramos” da blockchain e poderia permitir o gasto duplo.
Tudo isso faz parte do chamado trilema da blockchain, que diz que redes descentralizadas só conseguem garantir dois dos três pilares ao mesmo tempo — descentralização, segurança e escalabilidade. Para contornar isso no PoW, são usadas camadas de blockchain. Elas funcionam “por cima” do sistema principal e aumentam a velocidade de processamento das transações.
Além disso, estão sendo desenvolvidos novos protocolos de consenso que funcionam junto com o PoW. Por exemplo, Kaspa usa PoW como mecanismo de segurança, mas os blocos são organizados em um grafo acíclico direcionado em vez de uma blockchain, permitindo que mineradores trabalhem em blocos diferentes ao mesmo tempo.
Outro ponto importante: quanto mais poder computacional uma blockchain acumula, maior a complexidade dos cálculos e maior o consumo de energia para mineração.