Desde o início do Bitcoin em 2008, como um sistema de dinheiro eletrônico peer-to-peer, muitas outras criptomoedas foram criadas, cada uma com um mecanismo específico. Mas uma coisa que quase todas as criptomoedas têm em comum é o blockchain, como elemento central da sua arquitetura.

Com poucas exceções, os blockchains são intencionalmente projetados para serem descentralizados, funcionando 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 sem confiança, onde transacções financeiras transparentes e fiáveis ​​poderiam ser executadas sem a necessidade 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 precisam concordar regularmente sobre o estado atual da blockchain, e é isso que chamamos de obtenção de consenso. Porém, chegar a um consenso sobre redes distribuídas, de forma segura e eficiente, está longe de ser uma tarefa fácil.

Então, como pode uma rede distribuída de nós de computador concordar com 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.


Qual é o problema dos generais bizantinos?

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

O dilema pressupõe que cada general tenha o seu próprio exército e que cada grupo esteja situado em locais diferentes da cidade que pretende atacar. Os generais precisam 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 comum para executá-la de forma coordenada.

Portanto, podemos considerar os seguintes requisitos:

  • Cada general tem que decidir: atacar ou recuar (sim ou não);

  • Depois de tomada a decisão, ela não poderá ser alterada;

  • Todos os generais têm de concordar com a mesma decisão e executá-la de forma sincronizada.

Os problemas de comunicação acima mencionados estão relacionados com o facto de um general só conseguir comunicar com outro através de mensagens, que são reencaminhadas por um estafeta. Consequentemente, o desafio central do Problema dos Generais Bizantinos é que as mensagens podem ser de alguma forma 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, levando ao fracasso total.

Se aplicarmos o dilema ao contexto das blockchains, cada general representa um nó da rede, e os nós precisam chegar a um consenso sobre o estado atual do sistema. Dito de outra forma, a maioria dos participantes de uma rede distribuída tem que concordar e executar a mesma ação para evitar o fracasso total.

Portanto, a única maneira de alcançar consenso nesses tipos de sistemas distribuídos é ter pelo menos ⅔ ou mais 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á suscetível 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) é a propriedade de um sistema capaz de resistir à classe 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 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 implementações mais comuns são Prova de Trabalho (PoW) e Prova de Participação (PoS). Mas tomemos o caso do Bitcoin como exemplo.

Enquanto o protocolo Bitcoin prescreve as regras primárias do sistema, o algoritmo de consenso PoW é o que define como essas regras serão seguidas para chegar ao consenso (por exemplo, durante a verificação e validação de transações).

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 PoW não é 100% tolerante às falhas bizantinas, mas devido ao processo de mineração caro 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 geniais para as falhas bizantinas.


Pensamentos finais

O Problema dos Generais Bizantinos é um dilema intrigante que eventualmente deu origem aos sistemas BFT, que estão sendo amplamente aplicados em vários cenários. Além da indústria de blockchain, alguns casos de uso de sistemas BFT incluem as indústrias de aviação, espaço e energia nuclear.

Dentro do contexto da criptomoeda, ter uma comunicação de rede eficiente juntamente com um bom mecanismo de consenso é vital para qualquer ecossistema blockchain. Proteger estes sistemas é um esforço contínuo e os algoritmos de consenso existentes ainda não superaram algumas limitações (como a escalabilidade). No entanto, PoW e PoS são abordagens muito interessantes como sistemas BFT, e as aplicações potenciais certamente inspiram inovação generalizada.