Come funziona la Blockchain?

La blockchain serve a tenere traccia di tutte le transazioni che avvengono nel sistema. E' un meccanismo generale che non vale solo per i bitcoin.

Come si effettua una transazione?

Una transazione ha con se le informazioni che servono per fare il trasferimento, con in più la firma digitale che assicura la sua validità. Sostanzialmente per spostare fondi da un indirizzo, devi possedere le chiavi private di quell'indirizzo. Poiché un indirizzo lo crei offline, le chiavi sono segrete.

Quindi il primo assunto è che nessuno può spostare fondi da un indirizzo senza conoscerne le chiavi private. Nessuno.

Quale problema si cerca di risolvere?

Ora. Se esistesse un database centrale e autoritario (cioè il suo stato è quello che vale e tutti si adeguano) non ci sarebbe alcun problema. Si salva la transazione in quel database, si controlla che sia coerente con lo stato precedente (per esempio che il mittente abbia i fondi necessari), e la transazione è valida. Ed è così che funzionano tutti i sistemi centralizzati.

Ma un database centrale non si è voluto crearlo, e abbiamo quindi un sistema distribuito. In un sistema distribuito centinaia o migliaia di database hanno uguale autorità, e nessuno di essi può imporre il suo stato all'altro. Al contempo nessun database può fidarsi ciecamente di un altro per sincronizzarsi, perché non ha nessuna garanzia che quello sia un database "onesto".

Inoltre le varie copie non si sincronizzano contemporaneamente: di conseguenza alcune saranno un po' indietro e altre un po' avanti. Questo può creare il problema della doppia spesa: spendo gli stessi soldi inviando l'informazione a due database diversi. Quando il sistema se ne accorgerà, io avrò già ricevuto i beni o i servizi da entrambi i beneficiari.

Come risolvere?

Ogni transazione viene messa in un blocco insieme a tutte le altre in attesa. Ogni nodo della rete sceglie come formare un blocco: non è obbligato a scegliere le transazioni in ordine temporale. Per questo motivo è possibile lasciare una "mancia" (fee) per ogni transazione che invoglia i nodi a inserirti nel prossimo blocco.

Il blocco viene manipolato con una funzione di hashing. Che vuol dire?

Cenni di crittografia e di hashing

In crittografia esistono degli algoritmi che trasformano irreversibilmente un messaggio in una stringa (una sequenza di caratteri) del tutto diversa.

Il punto cruciale è l'irreversibilità: non è possibile ricavare il messaggio originale dal messaggio cifrato. Mai. L'unico modo per farlo è procedere per tentativi provando tutti i possibili messaggi e vedere se qualcuno, dato in pasto a questa funzione, mi dà la sequenza di caratteri che ho.

Per esempio, questa stringa

25c73520e69f4bf229811e8e46ffe7d80471544b9bee15ed25044b86be4115ad

è il risultato di una funzione di hashing che manipola il messaggio "Ciao". La cosa interessante è che se io cambio il messaggio anche di poco, per esempio usando la "c" minuscola invece che la maiuscola, ottengo

b133a0c0e9bee3be20163d2ad31d6248db292aa6dcb1ee087a2aa50e0fc75ae2

Che è una sequenza completamente diversa.

Testi lunghi a piacere producono una sequenza diversa. Cambiando, aggiungendo, togliendo anche solo una virgola in un punto qualsiasi, il risultato cambierà radicalmente.

Cosa c'entra con la Blockchain?

Qui sta il bello.

Nella blockchain, come regola decisa dai suoi ideatori, puoi inserire soltanto messaggi il cui hash sia una stringa con una lunga sequenza di zeri iniziali.

Per fare questo è concesso modificare il messaggio aggiungendo un numero chiamato "nonce". Inoltre hai discrezione su quali transazioni inserire nel blocco, purché il blocco di informazioni abbia una lunghezza massima (attualmente di 1MB).

Per esempio. Per trovare il nonce del messaggio "Ciao" tale per cui abbia una sequenza con 4 zeri iniziali, ho dovuto fare 84090 tentativi e ho impiegato circa 3 secondi, trovando questo hash:

00003a9b352287f9ffa1b155dfa4c73ac89e12466265c664e219d056bbb02dec

Viceversa, per verificare che questa sequenza sia l'hash di "Ciao84090", è una operazione quasi istantanea a un solo tentativo.

Le regole della Blockchain

La blockchain richiede che il blocco da inserire abbia nel suo hash una sequenza di zeri iniziali tali per cui l'intera rete debba impiegare almeno 10 minuti per poterla trovare andando per tentativi. Per cui è una difficoltà che si adatta alla potenza di calcolo della rete: più è alta la potenza, più saranno gli zeri richiesti.

La proof of work

Tale sistema certifica un enorme sforzo collettivo che è chiamata "proof of work". Dato che l'operazione inversa è quasi istantanea è facilissimo controllare che il lavoro è stato effettivamente fatto.

L'hash con una lunga serie di zeri iniziali è come un grattacielo: nessuno può guardare un grattacielo e pensare che sia stato costruito da una singola persona.

Per fare un grattacielo ci vogliono anni e centinaia di persone, di conseguenza l'esistenza di un grattacielo certifica il lavoro di anni e di centinaia di persone.

Ma perché si chiama chain (catena)?

Una piccola, e cruciale, nota che rende il sistema una catena (da cui il nome) è che nel blocco da inserire, e quindi di cui fare l'hash e tutto il lavoro, deve esserci anche l'hash del blocco precedente.

In questo modo ogni blocco è legato indissolubilmente con quello precedente. Non è possibile alterare un blocco della catena senza invalidare quelli successivi (perché cambia l'hash e quindi si deve rifare tutto il lavoro).

E qui è la forza della Blockchain. Perché se io ho intenzione per loschi scopi di alterare un blocco, per esempio diminuire l'ammontare di un pagamento che ho fatto o far sparire una transazione, devo modificare anche i blocchi successivi. Ma non posso farlo da solo, perché mi servirebbe la potenza di calcolo di migliaia di computer. La proof of work è una prova inconfutabile che il gruppo di transazioni è stato verificato dalla maggioranza della rete, e non da una minoranza disonesta.

La catena più lunga è quella autentica

Tutti i nodi della rete sono programmati per rendere "vera" la catena più lunga, ovvero quella con più lavoro.

Quindi se io mi presento con una blockchain alterata che è indietro di due o tre blocchi (perché ho dovuto calcolarmi gli hash da solo e magari ho avuto fortuna ma non abbastanza da stare al passo) essa verrà rifiutata dalla rete perché quella più lunga è quella più autentica. Una catena più lunga è indice di uno sforzo computazionale maggiore.

Le conferme: una garanzia statistica di autenticità

Per un calcolo probabilistico, si ritiene ragionevolmente affidabile un blocco che ha almeno 6 altri blocchi davanti. Le cosiddette "conferme". Quando si fa una transazione il beneficiario di essa può (ma non è obbligato) aspettare 6 conferme (circa un'ora) per ritenere la transazione autentica e quindi validata. Ma può anche farlo sulla fiducia al primo blocco confermato. E' una sua scelta. Perché 6 blocchi? Perché anche ammettendo l'onestà di tutti, due blocchi diversi possono essere inseriti ai due antipodi della rete, provocando un fork della blockchain. Due rami della catena, ugualmente validi, andranno avanti finché uno sarà più lungo dell'altro. Si è calcolato che la probabilità che rimarranno lunghi uguali per 6 blocchi è prossima allo zero.

Il premio: la coin base transaction

Ma perché la rete dovrebbe spendere risorse per validare le transazioni?

Quando si trova il magico nonce, si viene ricompensati con un premio in bitcoin. Tecnicamente è una "transazione base" a un indirizzo specifico (coin base transaction) che ogni miner inserisce nel blocco prima di cominciare il lavoro. E' una transazione fittizia di una manciata di bitcoin "nuovi" verso un indirizzo a scelta. Questi bitcoin nuovi sono creati dal nulla, ovvero "minati". L'indirizzo a scelta è ovviamente l'indirizzo del miner.

Questo premio col tempo viene dimiunuito finché non sarà zero quando saranno in circolazione 21 milioni di Bitcoin (è una cifra dettata come accordo, non è un vincolo matematico). Dopo quel giorno, il premio sarà dato esclusivamente dalle mance sulle transazioni.

Le mining pool

Attualmente molti nodi si sono organizzati in gruppi facendo un lavoro collettivo e premiando COMUNQUE tutti i nodi che hanno partecipato, dividendosi il premio equamente in base al numero di tentativi fatti. In questo modo, entrando in gruppi di lavoro grandi, si ha una entrata "certa", piccola ma costante. Ovviamente ogni gruppo di lavoro è autonomo: se il gruppo è piccolo può anche non vedere mai premi. Puoi anche essere un nodo solitario e ottenere il premio (oggi di 25 Bitcoin) senza dividerlo con nessuno: ma statisticamente avresti molte più probabilità di vincere alla lotteria.

Ma perché tutto questo

Questo è un quadro semplificato ma secondo me coerente.

Qual è la forza di tutto questo?

La forza è che abbiamo creato un sistema aperto, dove chiunque può farne parte, ma tutti quelli che ne fanno parte non hanno la possibilità di manipolare il sistema stesso. I bitcoin che hai, sono tuoi e nessuno può portarteli via. Nemmeno la rete stessa che valida le transazioni.

Cosa non vera per i sistemi centrali che possono manipolare i fondi a piacimento (basta l'accesso al sistema). Lasciano tracce, magari (se sono programmati per lasciarle), ma possono farlo.

Un'altra particolarità è che non esiste un ente che può creare i bitcoin senza regole. I bitcoin sono minati costantemente fino al limite di 21 milioni. Per minarli devi reggere il sistema. Non puoi immetterne nel sistema un numero a piacimento, ergo nessuno può controllare l'inflazione.