Um algoritmo de consenso é um processo na ciência da computação usado para alcançar um acordo sobre um único valor de dados entre processos ou sistemas distribuídos. Os algoritmos de consenso são projetados para alcançar confiabilidade em uma rede que envolve vários nós não confiáveis. Resolver esse problema -- conhecido como problema de consenso -- é importante em computação distribuída e sistemas multi-agentes.
Para acomodar essa realidade, os algoritmos de consenso necessariamente assumem que alguns processos e sistemas estarão indisponíveis e que algumas comunicações serão perdidas. Como resultado, os algoritmos de consenso devem ser tolerantes a falhas. Eles normalmente assumem, por exemplo, que apenas uma parte dos nós responderá, mas requer uma resposta dessa parte, como 51%, no mínimo.
Aplicações de algoritmos de consenso incluem:
- Decidindo se deve comprometer uma transação distribuída a um banco de dados.
- Desenhando o nó como um líder para alguma tarefa distribuída.
- Sincronizar réplicas de máquinas de estado e garantir a consistência entre elas.
Algoritmos de consenso suportam muitos sistemas do mundo real, incluindo o PageRank do Google, balanceamento de carga, redes inteligentes, sincronização de relógio e controle de drone.
Blockchain, o ledger distribuído mais comumente associado ao Bitcoin, também se baseia em algoritmos de consenso para chegar a um acordo entre os nós. Uma blockchain pode ser pensada como uma base de dados descentralizada que é gerenciada por computadores distribuídos em uma rede peer-to-peer (P2P). Cada par mantém uma cópia do ledger para evitar um único ponto de falha (SPOF). Atualizações e validações são refletidas em todas as cópias simultaneamente.
Bitcoin usa o algoritmo de prova de trabalho (PoW) para garantir a segurança em uma rede sem confiança, incluindo mecanismos que garantem que o esforço de mineração seja representado dentro do bloco submetido pelo mineiro. O software nos computadores dos mineiros acessa sua capacidade de processamento para resolver algoritmos relacionados à transação . O bloco é uma prova de hash criptografada do trabalho que é criado em um processo computacional intensivo. Embora qualquer parte possa submeter uma cadeia de blocos ao ledger, a quantidade de recursos computacionais necessários para falsos consensos é muito grande para fazer valer a pena para uma parte desonesta.
Outros algoritmos de consenso comum incluem o prático algoritmo de tolerância a falhas bizantinas (PBFT), o algoritmo de prova de falhas (PoS) e o algoritmo delegado de prova de falhas (DPoS).