Il consenso distribuito su Bitcoin



Come è possibile realizzare il consenso distribuito su Bitcoin?

Abbiamo prima menzionato il fatto che Bitcoin sia completamente decentralizzato. Come può un sistema, che è completamente open source e opera attraverso internet, essere sicuro a livello di transazioni? Il problema qui è di rendere sicura una transazione che passa sopra ad un network che non è sicuro.

Questo ci riporta al famoso Problema dei Generali Bizantini. In questo classico, l’esercito bizantino è separato in divisioni, ognuna con il suo diverso generale al comando. La comunicazione tra generali è svolta attraverso messaggeri, per decidere insieme il piano di azione. Il problema è che ci sono dei generali traditori che potrebbero intenzionalmente cambiare il piano così che i generali leali non possano arrivare a un piano comune. Lo scopo del problema è di fare arrivare tutti i generali onesti allo stesso piano senza che i generali traditori possano farli arrivare invece a un piano sbagliato. È stato provato che questo problema non ha risoluzione se più di un terzo dei generali sono disonesti.

 

Il problema dei generali bizantini è un problema informatico su come raggiungere consenso in situazioni in cui è possibile la presenza di errori. Il problema consiste nel trovare un accordo, comunicando solo tramite messaggi, tra componenti diversi nel caso in cui siano presenti informazioni discordanti.

 

Lo stesso problema può essere incontrato in Bitcoin: come si può essere sicuri che senza un network protetto una transazione è condotta in maniera sicura e il pagamento è affidabile? In un sistema centralizzato, questo ruolo spetta alla banca. Ma in Bitcoin? Visto che si sta creando un sistema di pagamenti decentralizzati, quello di cui c’è bisogno è un consenso distribuito. Nel protocollo di consenso distribuito, ci sono n nodi e ognuno di essi ha un valore di input. Alcuni di questi nodi sono maligni. Un protocollo di consenso distribuito ha le seguenti due proprietà:

  • Deve terminare con tutti i nodi in accordo sul valore
  • Il valore deve essere generato da un nodo onesto

Quest’ultima proprietà in realtà, secondo il modello tradizionale di consenso, è impossibile da raggiungere. Ironicamente, il consenso nel modello di Bitcoin funziona meglio nella pratica che nella teoria.

Questo vuol dire che vediamo fisicamente il consenso funzionare ma non è ancora stata sviluppata una teoria che spieghi ampiamente il come.

Bitcoin viola le due ipotesi tradizionali del modello di consenso, e lo fa in due modi diversi.

  1. Per prima cosa, con il sistema di incentivo ai nodi (fee e mining rewards).
  2. In secondo luogo, Bitcoin “abbraccia la nozione di casualità”: questo può essere spiegato con un esempio pratico. Ci sono tanti “round” nel nostro protocollo, e ognuno di essi corrisponde ad un blocco diverso. In ognuno di essi, un nodo causale è scelto algoritmicamente per proporre quello che sarà il prossimo blocco nella catena. In questo modo, il consenso è raggiungo implicitamente. Infatti gli altri nodi decideranno se accettare o no di “costruire” sopra al blocco che è stato proposto dal nodo scelto casualmente. In questa maniera anche se il nodo che propone il blocco è maligno, gli altri nodi inizieranno a “costruire” su qualsiasi altro blocco che era stato scelto in precedenza.



Per riassumere e quindi spiegare il concetto di consenso distribuito nel contesto di Bitcoin ritorniamo all’esempio della transazione. Quando un user “firma” la sua transazione e la manda al network, ci sono molte transazioni che erano già state inviate. I nodi devono essere d’accordo esattamente su quali transazioni sono state mandate e l’ordine nel quale queste ultime sono state inviate. Quindi, a qualsiasi punto del processo, tutti i nodi del network avranno un “database” che consiste in una sequenza di blocchi, ognuno contenente una lista di transazioni sulla quale il consenso è stato raggiunto.