Desde a criação do Bitcoin em 2008 como um sistema de pagamento eletrônico peer-to-peer, muitas outras criptomoedas foram criadas, cada uma com um mecanismo operacional específico. Mas uma coisa que quase todas as criptomoedas têm em comum é o blockchain, um elemento central da sua arquitetura.
Com poucas exceções, os blockchains são intencionalmente projetados para serem descentralizados e operarem como um livro-razão digital gerenciado por uma rede distribuída de nós de computador. Neste contexto, a tecnologia blockchain permitiu a criação de sistemas económicos livres da necessidade de confiança, nos quais transacções financeiras transparentes e fiáveis poderiam ser executadas sem a utilização de intermediários. As criptomoedas estão a ser adotadas como uma alternativa viável aos sistemas bancários e de pagamento tradicionais, que dependem fortemente da confiança.
Assim como a maioria dos sistemas de computação distribuídos, os participantes de uma rede de criptomoedas devem concordar muito regularmente sobre o estado da blockchain, o que é chamado de consenso. No entanto, alcançar consenso em redes distribuídas, de forma segura e confiável, está longe de ser uma tarefa fácil.
Então, como uma rede distribuída de nós de computador pode chegar a um acordo sobre uma decisão se alguns dos nós têm probabilidade de falhar ou agir desonestamente? Esta é a questão fundamental do chamado problema dos generais bizantinos, que deu origem ao conceito de tolerância a falhas bizantinas.
O que há de errado com os generais bizantinos?
Simplificando, o Problema dos Generais Bizantinos foi concebido em 1982 como um dilema lógico que descreve como um grupo de generais bizantinos pode ter problemas de comunicação ao tentar chegar a acordo sobre o seu próximo movimento estratégico.
O dilema pressupõe que cada general tem o seu próprio exército e que cada grupo armado está localizado em locais diferentes em torno de uma cidade que deseja sitiar. Os generais devem concordar em atacar ou recuar. Quer ataquem quer recuem, todos os generais devem chegar a um consenso, isto é, chegar a acordo sobre uma decisão comum para executá-la de forma coordenada.
Portanto, podemos considerar os seguintes objetivos:
Cada general deve tomar uma decisão: atacar ou recuar (sim ou não);
Uma vez tomada a decisão, ela não poderá ser alterada.
Todos os generais devem concordar com a mesma decisão e executá-la de forma sincronizada.
Os problemas de comunicação acima mencionados estão ligados ao facto de um general só poder comunicar com outro através de mensagens que são transmitidas por um emissário. Portanto, o desafio central do problema dos generais bizantinos é este: as mensagens podem ser atrasadas, destruídas ou perdidas.
Além disso, mesmo que uma mensagem seja entregue com sucesso, um ou mais generais podem optar (por qualquer motivo) por agir maliciosamente e enviar uma mensagem fraudulenta para confundir os outros generais, resultando assim num fracasso total.
Se aplicarmos o dilema ao contexto das blockchains, cada general representa um nó da rede e os nós devem chegar a um consenso sobre o estado atual do sistema. Em outras palavras, a maioria dos participantes de uma rede distribuída deve concordar e realizar a mesma ação para evitar o fracasso total.
Portanto, a única maneira de alcançar consenso nestes tipos de sistemas distribuídos é ter pelo menos ⅔ nós de rede confiáveis e honestos. Isso significa que se a maior parte da rede decidir agir de forma maliciosa, o sistema estará sujeito a falhas e ataques (como o ataque de 51%).
Tolerância a Falhas Bizantinas (BFT)
Em poucas palavras, a Tolerância a Falhas Bizantinas (BFT) caracteriza um sistema capaz de suportar a gama de falhas derivadas do Problema dos Generais Bizantinos. Isso significa que um sistema BFT é capaz de continuar operando mesmo se alguns dos nós falharem ou agirem de forma maliciosa.
Há mais de uma solução possível para o problema dos generais bizantinos e, portanto, múltiplas maneiras de construir um sistema BFT. Da mesma forma, existem diferentes abordagens para uma blockchain alcançar a tolerância a falhas bizantinas, o que nos leva a algoritmos de consenso.
Algoritmos de consenso Blockchain
Podemos definir um algoritmo de consenso como um mecanismo pelo qual uma rede blockchain alcança consenso. As implementações mais comuns são prova de trabalho e prova de aposta. Mas tomemos o caso do Bitcoin como exemplo.
Embora o protocolo Bitcoin prescreva as principais regras do sistema, é o algoritmo de consenso PoW que define como essas regras serão seguidas para alcançar o consenso (por exemplo, ao verificar e validar transações).
Embora o conceito de prova de trabalho seja mais antigo que as criptomoedas, Satoshi Nakamoto desenvolveu uma versão modificada dele como o algoritmo e sistema BFT que permitiu a criação do Bitcoin.
Observe que o algoritmo PoW não é 100% tolerante às falhas bizantinas, mas devido ao caro processo de mineração e às técnicas criptográficas subjacentes, o PoW provou ser uma das implementações mais seguras e confiáveis para redes blockchain. Nesse sentido, o algoritmo de consenso Proof of Work, desenhado por Satoshi Nakamoto, é considerado por muitos como uma das soluções mais relevantes para os erros bizantinos.
Conclusão
O Problema dos Generais Bizantinos é um dilema intrigante que deu origem aos sistemas BFT, que são amplamente utilizados em vários cenários. Além do setor blockchain, alguns casos de uso de sistemas BFT incluem os setores de aviação, espaço e energia nuclear.
No contexto da criptomoeda, uma comunicação de rede eficaz aliada a um bom mecanismo de consenso são essenciais para qualquer ecossistema blockchain. A segurança destes sistemas é um esforço contínuo e os algoritmos de consenso existentes ainda precisam de superar algumas limitações (como a escalabilidade). No entanto, PoW e PoS são abordagens muito interessantes como sistemas BFT, e as suas aplicações potenciais certamente exigem inovação generalizada.

