Desde o início do Bitcoin em 2008 como um sistema financeiro eletrônico peer-to-peer, muitas moedas digitais foram criadas, cada uma delas operando com um mecanismo especial. Mas a única coisa que todas as moedas digitais têm em comum é o blockchain como elemento básico da sua estrutura.

Todos os blockchains são intencionalmente projetados para serem descentralizados e, com poucas exceções, atuam como um livro-razão digital mantido por uma rede distribuída de nós de computador. Por esta razão, a tecnologia blockchain permitiu a criação de sistemas económicos confiáveis ​​onde as transações financeiras podem ser realizadas de forma transparente e confiável, sem a necessidade de intermediários.

A utilização de moedas digitais está atualmente a ser adotada como uma alternativa viável aos sistemas bancários tradicionais e aos métodos de pagamento que dependem fortemente da confiança.

Como é o caso na maioria dos sistemas de computação distribuídos, os participantes de uma rede de criptomoedas precisam concordar regularmente sobre o estado atual em que o blockchain opera. Isto é o que chamamos de conquista de consenso. No entanto, chegar a um consenso sobre redes distribuídas de forma segura e protegida é uma tarefa muito difícil.

Então, como uma rede distribuída de nós de computador pode concordar sobre a probabilidade de alguns nós falharem ou agirem ilegalmente? Esta é a questão fundamental do chamado Problema dos Generais Bizantinos, do qual surgiu o conceito de Tolerância a Falhas Bizantinas.


Qual é o problema dos generais bizantinos?

Em suma, o Problema dos Generais Bizantinos de 1982 foi concebido como um dilema lógico que ilustra como um grupo de generais bizantinos pode ter problemas de comunicação entre si ao tentar chegar a acordo sobre o próximo passo do seu plano.

O dilema pressupõe que cada general tem o seu próprio exército, que cada grupo está localizado em locais diferentes ao redor da cidade que pretende atacar e que cada general deve concordar em atacar ou recuar. Não importa se atacam ou recuam, desde que todos os generais cheguem a um consenso, ou seja, concordem com uma decisão conjunta a fim de implementá-la de forma coordenada.

Portanto, podemos considerar os seguintes objetivos:

  • Cada general deve decidir: atacar ou recuar (sim ou não).

  • Uma vez tomada uma decisão, ela não pode ser alterada.

  • Todos os generais devem chegar a acordo sobre a mesma decisão e implementá-la de forma sincronizada.

Os problemas de comunicação acima referidos estão relacionados com o facto de cada general só conseguir comunicar com outro general através de mensagens que são enviadas pelo transportador/correio. Assim, o principal desafio do problema para os generais bizantinos é que as mensagens podem ser atrasadas, danificadas ou perdidas.

Além disso, mesmo que a mensagem seja entregue com sucesso, um ou mais generais podem (por qualquer motivo) optar por agir maliciosamente e enviar uma mensagem falsificada para confundir os outros generais, levando ao fracasso total da missão.

Se aplicarmos este dilema no contexto do blockchain, cada geração representa um nó da rede e os nós têm que chegar a um consenso sobre o estado atual do sistema. Dito de outra forma, a maioria dos participantes de uma rede distribuída precisa concordar e executar a mesma ação para evitar uma falha completa.

Portanto, a única forma de chegar a um consenso nestes tipos de sistemas distribuídos é ter ⅔ (dois terços) ou mais nós honestos. Isto significa que se a maior parte da rede decidir agir de forma maliciosa, o sistema ficará vulnerável a falhas e ataques (por exemplo, ataque de 51%).


Tolerância a Falhas Bizantinas - BFT

Em suma, a tolerância a falhas bizantinas (BFT) é a propriedade de um sistema capaz de resistir ao tipo de falha derivada do Problema dos Generais Bizantinos. Isso significa que o sistema BFT é capaz de continuar operando mesmo se alguns nós falharem ou se comportarem de forma maliciosa.

Existe mais de uma solução possível para o problema dos generais bizantinos, e isso significa que existem várias maneiras de construir um sistema BFT. Da mesma forma, existem várias abordagens diferentes para blockchains alcançarem tolerância a falhas bizantinas e isso nos leva aos chamados algoritmos de consenso.


Algoritmos de consenso Blockchain

Podemos definir um algoritmo de consenso como o mecanismo através do qual uma rede blockchain chega a um consenso. As aplicações mais comuns são Prova de Trabalho (PoW) e Prova de Participação (PoS). Mas tomemos o caso do Bitcoin como exemplo.

Embora o protocolo Bitcoin estipule as regras básicas do sistema, é o algoritmo de consenso conhecido como Prova de Trabalho (PoW)  que define como essas regras são seguidas para chegar a um consenso (por exemplo, durante a verificação da transação).

Embora o conceito de Prova de Trabalho seja mais antigo que as criptomoedas, Satoshi Nakamoto desenvolveu uma versão modificada dele como um algoritmo que permitiu a criação do Bitcoin como um sistema BFT.

Observe que o algoritmo de Prova de Trabalho (PoW) não é 100% tolerante a falhas bizantinas, mas devido ao processo de mineração de alto custo e às técnicas criptográficas, o PoW provou ser uma das implementações mais seguras e confiáveis ​​de redes blockchain.

Portanto, o algoritmo de Prova de Trabalho desenvolvido por Satoshi Nakamoto é usado por muitos como uma das soluções mais engenhosas para erros bizantinos.


Conclusão

O problema dos generais bizantinos é um dilema interessante que eventualmente deu origem aos sistemas BFT, que são amplamente aplicados em vários cenários. Mesmo fora da indústria de blockchain, alguns casos de uso de BFT incluem as indústrias de aviação, espaço e energia nuclear.

No contexto das moedas digitais, ter uma rede de comunicação eficiente juntamente com um mecanismo de consenso é vital para qualquer sistema blockchain. A segurança destes sistemas é um esforço contínuo e os algoritmos de consenso existentes ainda estão a trabalhar para superar algumas limitações (como a escalabilidade). No entanto, a Prova de Trabalho (PoW) e a Prova de Participação (PoS) são duas abordagens muito interessantes para sistemas BFT e as aplicações potenciais são certamente uma fonte de inspiração generalizada.