HomeWikiBitcoin Genesis Block - Algoritmo di Consenso

Bitcoin Genesis Block – Algoritmo di Consenso

Un Algoritmo di Consenso è un meccanismo utilizzato nei sistemi informatici e nelle blockchain per ottenere l’accordo necessario su un singolo valore di dati o su un singolo stato della rete, tra processi distribuiti o sistemi multi-attori, come le criptovalute.

La blockchain ha visto il suo primo reale caso d’uso attraverso l’integrazione di un algoritmo di consenso con la tecnologia P2P ed open source che, grazie a Satoshi Nakamoto, ha portato alla nascita di Bitcoin. Gli algoritmi di consenso permettono la condivisione della blockchain tra i partecipanti di quella rete in modo sicuro, autentico e tendenzialmente immutabile; essi non sono altro che un insieme di regole ed incentivi, inseriti in una teoria dei giochi, che permettono ad una rete distribuita di raggiungere l’unanimità sul suo stato.

Il primo utilizzo di un algoritmo di consenso lo abbiamo dunque con la nascita di Bitcoin, che tuttora ne permette lo sviluppo e la sua resilienza, stiamo parlando della Proof of Work. Dichiarata troppo energivora ed inquinante dai detrattori, e alla ricerca di una soluzione a minor impatto ambientale, nel 2011 venne ripreso un protocollo introdotto da Wei Dai nel lontano 1998, dal suo progetto B-Money, che può essere definito il precursore di un algoritmo di consenso alternativo alla PoW, largamente utilizzato tutt’oggi, la Proof of Stake.

La Blockchain

La blockchain è una struttura sequenziale in cui vengono immagazzinate delle informazioni in una catena di blocchi. Come suggerisce il nome, questi blocchi sono concatenati l’uno all’altro, in ordine cronologico e impressi in questa catena dai miner, gli attori principali di questo protocollo, i quali confermano le informazioni all’interno dei blocchi, distribuendo a tutti i nodi della rete.

La blockchain è quindi un grande database che ogni utente può passare in rassegna e controllare se il dato immesso, in questo caso i fondi, siano stati spesi in precedenza, questo perché ogni volta che si effettua una transazione si fa sempre riferimento alla transazione precedente, in un ordine cronologico protetto dalla crittografia che lo rende sia nella teoria, ma anche nella pratica come vedremo, immutabile. I blocchi sono organizzati cronologicamente e uniti indissolubilmente l’uno all’altro da un timestamp cronologico in modo incontrovertibile: ogni blocco è legato al precedente da una funzione di hash che non può essere invertita: più lunga sarà la catena di blocchi più essa sarà resiliente alla manomissione, anche se un singolo blocco venisse alterato: maggiore è la profondità del blocco alterato, maggiore sarà lo sforzo computazionale necessario per la sua manomissione come vedremo più avanti.

Bitcoin Genesis block Proof of Work

È una funzione che impone di soddisfare determinati requisiti svolgendo un lavoro molto costoso in termini di tempo ed energia, ma che tuttavia permette al richiedente di verificare in modo semplice che tali requisiti siano soddisfatti.

Nel caso del protocollo Bitcoin il sistema PoW utilizzato è quello di hashcash introdotto da Adam Back nell’omonimo Paper del 1997: sebbene in origine tale funzione venne creata per filtrare lo spam nelle mail, nella blockchain di Bitcoin, hashcash svolge la funzione di algoritmo di consenso dove, in un protocollo distribuito come quello di Bitcoin, garantisce che tutti i partecipanti (nodi) del network possano concordare sullo stato del network stesso. 

Bitcoin Genesis block

Come funziona la PoW

Nella Proof of Work è il miner l’attore principale di questo meccanismo: egli mette al servizio della rete la sua potenza computazionale per confermare le transazioni. Affinché venga eletto per scegliere il blocco successivo da aggiungere alla blockchain, egli deve trovare una soluzione a un particolare problema matematico, deve dare quindi prova di aver svolto un lavoro e aver risolto tale problema prima di potersi aggiudicare il blocco contenente le nuove transazioni. In cambio di questo servizio il miner verrà ricompensato con le commissioni che affiancano le transazioni da validare e soprattutto con il conio di nuova moneta, tutto questo viene chiamato coinbase. Il processo appena descritto viene chiamato “Mining”, ed ha una duplice caratteristica: da un lato serve a rendere sicura la rete tramite la “prova di lavoro” del miner, dall’altro emettere nuova moneta per la rete, in un protocollo a rilascio controllato e finito, che rende Bitcoin un asset deflazionistico.

In un contesto decentralizzato in cui i partecipanti non si conoscono e vige il concetto di “trustless”, questo consenso viene raggiunto grazie alla Pow che disincentiva l’azione di partecipanti malevoli rendendo questo sistema sicuro, che viene infatti definito “fault tolerance”. Con l’utilizzo della Proof of Work, Nakamoto è riuscito a risolvere infatti un problema matematico e di teoria dei giochi irrisolto fino ad allora: il problema dei generali bizantini!

“The proof-of-work chain is the solution to the synchronisation problem, and to knowing what the globally shared view is without having to trust anyone.” 

Satoshi Nakamoto

Nel dettaglio della PoW di Bitcoin

Ogni 10 minuti un blocco viene “chiuso”, ovvero confermato dai miners, ed aggiunto alla blockchain; questo processo viene svolto attraverso la proof of work: il miner sfrutta la sua potenza di calcolo per trovare la soluzione all’hash iniziale del blocco precedente, per farlo effettua dei tentativi consecutivi detti “nonce” fino a quando non troverà la soluzione, la risoluzione e successiva chiusura di un blocco è infatti un processo del tutto casuale che vede moltissimi miners competere per aggiudicarselo.

Ma cosa è una funzione di hash:

Nel linguaggio matematico e informatico, l’hash è una funzione non invertibile che mappa una stringa di lunghezza arbitraria in una stringa di lunghezza predefinita. Esistono numerosi algoritmi che realizzano funzioni hash con particolari proprietà che dipendono dall’applicazione.

Il miners parte quindi dall’hash precedente e vi aggiunge il nonce generando una stringa alfanumerica che sarà l’hash del blocco successivo, e così via.

Bitcoin Genesis block

Il sistema utilizzato nel protocollo Bitcoin si serve di un algoritmo SHA-256 che produce un hash che cambia con qualsiasi modifica dei dati anche minima (chiamato “effetto valanga”), è pertanto impossibile derivare l’input di quell’hash partendo dal suo output, l’unico modo per risolvere questa sfida è tramite prove continue molto costose, ovvero la proof of work.

Il primo miner che trova la soluzione alla “prova di lavoro” trasmette la propria soluzione a tutta la rete notificando a tutti i nodi che è stato rilevato un nuovo blocco, questi controlleranno la soluzione all’hash e, se valida, provvedono a lavorare al blocco successivo. Questo lavoro è altamente ridondante; tutti i miner competono sullo stesso insieme di transazioni per trovare una soluzione.

“La Proof of Work è necessaria per garantire la sicurezza, per prevenire le frodi e per perpetrare la veridicità del dato.”

Il protocollo considera valida e autentica solo la catena con il maggior numero di “prove di lavoro”, dunque la più lunga e anziana. Una catena fraudolenta non è pratica a lungo termine perché un minatore ha una bassa probabilità di vincere costantemente il premio in blocco per mantenere la catena. Nel tempo, altri minatori estenderanno la catena valida più velocemente della catena manomessa, perché sarà quella contenente più fees.

Consensus

La principale innovazione introdotta da Satoshi Nakamoto nel suo protocollo è l’utilizzo della proof of work (POW) per creare un consenso distribuito senza fiducia tra gli attori e risolvere allo stesso tempo il problema della doppia spesa.

La blockchain è dunque un sistema decentralizzato che consta di diversi attori, ognuno dei quali agisce in base ad un incentivo e alle informazioni a loro disposizione. Ogni qual volta una nuova transazione viene trasmessa alla rete, i miner hanno la possibilità di includere quella transazione nella loro copia del registro (ledger), ma nelle loro facoltà esiste, altresì, quella di ignorarla. Quando la maggioranza degli attori che compongono la rete decide su un’unica scelta, viene raggiunto il consenso.

Un problema fondamentale nei sistemi distribuiti con più attori che non si conoscono è quello di raggiungere l’affidabilità complessiva del sistema e dunque il consenso unanime. La difficoltà nel realizzare questo scopo in un network decentralizzato e distribuito è di richiedere a questi attori, ignari gli uni agli altri, di concordare su fattori comuni in assenza di fiducia. In questo contesto l’introduzione degli algoritmi di consenso come la Proof of Work svolge un ruolo chiave nel protocollo Bitcoin e in protocolli simili, andando a risolvere tutte queste problematiche.


Proof-of-work has the nice property that it can be relayed through untrusted middlemen. We don’t have to worry about a chain of custody of communication. It doesn’t matter who tells you a longest chain, the proof-of-work speaks for itself.”

– Satoshi Nakamoto

Nel prossimo articolo andremo a conoscere la Proof of Stake!

RELATED ARTICLES

MOST POPULARS

GoldBrick