Un algoritmo di consenso è un processo in informatica utilizzato per raggiungere un accordo su un singolo valore di dati tra processi o sistemi distribuiti. Gli algoritmi di consenso sono progettati per ottenere l'affidabilità in una rete che coinvolge più nodi inaffidabili. Risolvere questo problema, noto come problema del consenso, è importante nell'elaborazione distribuita e nei sistemi multi-agente.
Per soddisfare questa realtà, gli algoritmi di consenso presumono necessariamente che alcuni processi e sistemi non saranno disponibili e che alcune comunicazioni andranno perse. Di conseguenza, gli algoritmi di consenso devono essere tolleranti ai guasti. In genere presumono, ad esempio, che solo una parte dei nodi risponderà ma richiederà una risposta da quella parte, come il 51%, come minimo.
Le applicazioni degli algoritmi di consenso includono:
- Decidere se eseguire il commit di una transazione distribuita su un database.
- Designare il nodo come leader per alcune attività distribuite.
- Sincronizzazione delle repliche della macchina a stati e garanzia della coerenza tra di loro.
Gli algoritmi di consenso supportano molti sistemi del mondo reale tra cui il PageRank di Google, il bilanciamento del carico, le smart grid, la sincronizzazione dell'orologio e il controllo dei droni.
Blockchain, il registro distribuito più comunemente associato a Bitcoin, si basa anche su algoritmi di consenso per raggiungere un accordo tra i nodi. Una blockchain può essere pensata come un database decentralizzato gestito da computer distribuiti su una rete peer-to-peer (P2P). Ogni peer conserva una copia del libro mastro per evitare un singolo punto di errore (SPOF). Gli aggiornamenti e le convalide si riflettono in tutte le copie contemporaneamente.
Bitcoin utilizza l'algoritmo di prova del lavoro (PoW) per garantire la sicurezza in una rete senza fiducia, includendo meccanismi che assicurano che lo sforzo di mining sia rappresentato all'interno del blocco inviato dal miner. Il software sui computer dei minatori accede alla loro capacità di elaborazione per risolvere gli algoritmi relativi alle transazioni. Il blocco è una prova di lavoro hash crittografata che viene creata in un processo ad alta intensità di calcolo. Sebbene qualsiasi parte possa inviare una catena di blocchi al libro mastro, la quantità di risorse informatiche necessarie per falsificare il consenso è troppo grande per renderlo utile a una parte disonesta.
Altri algoritmi di consenso comuni includono l'algoritmo pratico di tolleranza ai guasti bizantina (PBFT), l'algoritmo proof-of-stake (PoS) e l'algoritmo delegated proof-of-stake (DPoS).