Blockchain – Capitolo “Cos’è una blockchain” – bozza

1.  Cos’è una blockchain

Dare una definizione di blockchain non è difficile; anzi, è così facile che possiamo trovare decine di queste definizioni in giro per la rete e sui primi testi che affrontano il tema.

Vitalik Buterin, il creatore della criptovaluta Ethereum di cui parleremo più avanti, da questa definizione:

Una blockchain è un sistema decentralizzato che contiene una qualche sorta di memoria condivisa.”[1]

Don & Alex Tapscott nel loro libro “Blockchain revolution” affermano che

La blockchain è un registro digitale incorruttibile di transazioni economiche che può essere programmato per registrare non solo transazioni finanziarie ma praticamente ogni cosa abbia un valore.” (Tapscott & Tapscott, 2016)

Un’ulteriore definizione, più articolata, viene da Christian Catalini, docente del MIT ed esperto di tecnologie blockchain e criptovalute.

Ad alto livello, una tecnologia blockchain permette a una rete di computer di accordarsi a intervalli regolari sul vero stato di un “ledger” (libro mastro contabile) distribuito. Questo ledger può contenere differenti tipi di dati condivisi, come un registro delle transazioni, attributi di tali transazioni, credenziali o altri parti di informazioni. Il ledger è spesso messo in sicurezza da un ingegnoso mix di crittografia e teoria dei giochi, e non richiede nodi autenticati come le reti tradizionali.” (Church & Catalini) (traduzione mia)

Da quest’ultima definizione deriva anche un acronimo che cattura un aspetto delle blockchain: DLT (“Distributed Ledger Technology”).

In genere, comunque, ricorrono alcuni termini: decentralizzazione, registro distribuito o memoria condivisa, transazioni.

Proviamo anche noi a dare una definizione.

Una blockchain è un insieme di tecniche, protocolli e strumenti che permettono di avere un archivio digitale non modificabile di transazioni, distribuito tra i nodi di una rete e da essi validato periodicamente.

 

Lo scopo principale delle transazioni è quello di trasferire la proprietà di un bene (monetario o di altro tipo) da una persona/parte a un’altra persona/parte senza necessità di convalida da parte di una terza parte (un governo o un’autorità esterna). Esistono diverse tipologie di blockchain ma ognuna mantiene la caratteristica fondamentale di non essere alterabile e di rendere sempre possibile accedere a uno “storico” di tutte le operazioni compiute in quella rete. Se tutti sono d’accordo sulla storia, tutti concordando sull’attuale stato del mondo. O almeno di un suo piccolo sott’insieme, quello delle transazioni in un certo ambito.

Per chi mastica un po’di informatica l’analogia che subito viene alla mente è quella con un database; la differenza sostanziale e cruciale è che questo database non è centralizzato ma è replicato e sincronizzato in ogni nodo della rete. Inoltre al suo interno non possono essere effettuate cancellazioni.

Una blockchain non è un sistema semplice; contribuiscono alla sua implementazione tecnologie legate ai sistemi distribuiti e alle reti peer-to-peer, concetti di crittografia come le funzioni hash e le chiavi pubbliche e private, algoritmi di consenso come la “proof-of-work” o la “proof-of stake” e altre, spesso esotiche, tecniche matematiche, informatiche ed economiche.

In ultima analisi, comunque, una blockchain è un file che contiene dei dati strutturati, come un file excel o un file di testo.

Non spaventiamoci, dunque. Possiamo partire da un esempio semplice, che ci aiuti a comprendere i meccanismi di base della “catena a blocchi”. In seguito approfondiremo la maggior parte dei singoli aspetti.

 

1.1.  Un semplice esempio di blockchain

Alcuni bibliofili hanno fondato un club privato in cui è possibile prestarsi a vicenda libri rari. I membri del club sono piuttosto gelosi della loro privacy. Non conoscono i loro veri nomi, usano pseudonimi. Ogni sabato si riuniscono, discutono, leggono passi da vari testi e, alla fine, si scambiano alcuni libri.

Tengono traccia dei vari prestiti con un meccanismo particolare, che permette di far fronte a possibili disguidi, come la distruzione di un semplice registro o a manipolazioni, come il tentativo di rivendicare in maniera fraudolenta la proprietà di un libro.

Il meccanismo è questo: se Ulisse (uno pseudonimo) presta un libro a Werther (un altro pseudonimo), il primo compila un foglio block notes segnando su un rigo il titolo del libro, data del prestito e pseudonimo del ricevente, ovvero Werther. Werther e tutti gli altri partecipanti fanno lo stesso su un loro foglio, segnando i dati dello scambio tra Ulisse e Werther; per ogni altro scambio si segue la stessa procedura, aggiungendo righe ai fogli. Alla fine della sessione, ciascun foglio conterrà tutta la lista degli scambi di quel giorno e ogni socio avrà quindi la sua copia. Periodicamente, quando vi è un certo numero di fogli, questi vengono inseriti in una busta siglata con una “firma” costituita dalle prime parole dei titoli riferiti a ogni transazione. Inoltre sulla busta viene anche segnata la “firma” della busta precedente, cosicché ogni busta ha un riferimento alla precedente. Queste buste vengono riportate a casa dai soci, in modo che ognuno abbia una copia aggiornata dell’intero storico degli scambi.

Il meccanismo può sembrare inutilmente complicato ma garantisce un buon livello di anonimato e sicurezza.

Per esempio, un libro può essere prestato più volte ma in ogni momento può essere fatta una verifica su chi ne sia il proprietario andando a ritroso nelle liste dei prestiti.

È difficile per qualcuno manomettere questo registro distribuito dei prestiti: occorrerebbe modificare tutti i fogli di tutti i soci e anche la sigla di ogni busta perché, alterando la lista anche la “firma” della busta risulta alterata.

Ora, se invece di fogli e buste di carte pensiamo a un file word che contiene le transazioni e a una directory, magari criptata, invece della busta abbiamo una approssimazione di blockchain: un archivio di file – inseriti in una directory criptata con un riferimento alla precedente – che ogni socio possiede, archivio sempre sincronizzato con quello degli altri soci.

 

1.2. La funzione hash

Un buon punto di partenza per esplorare le componenti di una blockchain è presentare le funzioni hash, una sorta di macchina magica a cui si può dare in pasto un testo di qualunque lunghezza ricevendone sempre in cambio una sequenza con un numero fisso di caratteri.

Più precisamente, una funzione hash è una funzione matematica che ha tre proprietà:

  • Il suo input è una stringa di lunghezza arbitraria
  • Il suo output è una stringa di lunghezza fissata
  • Può essere sempre calcolata in un ragionevole lasso di tempo(Arvind Narayanan, 2016)

Facciamo subito un esempio che chiarirà la potenza di questa funzione e degli algoritmi su di essa costruiti.

Ne usiamo un tipo, chiamato SHA-256[2], che produce in uscita una stringa di 256 bit (32 byte).

Input: Io sono Federico

Output: eb59b5ca80b3c44a5085566f36d9d28e29cea82771119c663e724e4487e0fcb8

Ripetiamo che l’input può avere qualsiasi dimensione: possiamo usare “La Divina Commedia” in entrata, ma in uscita avremo sempre una stringa di 32 byte.

C’è poi da notare che basta cambiare una sola lettera per avere un output completamente diverso.[3]

Input: Io sono Federica

Output: 3c46e8f2cd56dfbcb005ad0327df98218cb9ad426e252216abe7cfa4ebdcd857

Questa caratteristica rende l’algoritmo basati su funzioni hash molto usati in crittografia, per le firme digitali o per assicurare l’integrità dei dati.

Inoltre, dato un certo output, non è facile trovare l’input che lo ha generato; per questo generalmente nei database dei siti web non sono memorizzate le password degli utenti, ma l’output di una funzione hash.

Un’altra caratteristica importante risiede nel fatto che è molto difficile, quasi impossibile, trovare due o più input che producano lo stesso output: si dice, in termini tecnici, che la funzione è “resistente alle collisioni”.

Queste peculiarità rendono le funzioni hash estremamente utili (e onnipresenti) nel contesto delle blockchain così come la crittografia a chiave pubblica/privata.

 

1.3. Crittografia a chiave pubblica/privata

Uno dei sistemi crittografici più usati, anche su Internet, è il sistema a chiave pubblica/privata (detta anche crittografia asimmetrica). Quanto vi collegate a un sito il cui indirizzo inizia con https il vostro browser utilizza un protocollo di questo genere, noto come HTTP over TLS.

 Partiamo dalla chiave privata. Questa sorta di password è una stringa numerica usata per criptare dati e non può essere diffusa all’esterno. La chiave pubblica è anch’essa una stringa numerica, collegata alla chiave privata, che, come si deduce dal nome, può essere pubblicamente accessibile.

Facciamo un esempio per spiegare il funzionamento.

Poniamo che Tristano voglia comunicare segretamente con Isotta. Tristano crea le sue due chiavi, privata e pubblica. Invia quest’ultima a Isotta, via email o anche pubblicandola sul Facebook.

Il punto è che le due chiavi sono piuttosto facili da creare, mentre è computazionalmente quasi impossibile risalire dalla chiave pubblica a quella privata o risalire al messaggio originale conoscendo solo la chiave pubblica.

Isotta ora cifra il suo messaggio con la chiave pubblica di Tristano quindi glielo invia, con qualunque mezzo desideri. Solo Tristano, con la sua chiave privata, è in grado di decifrare quel messaggio (che auspicabilmente conterrà parole d’amore…).

È da notare che Tristano e Isotta non devono incontrarsi o scambiarsi messaggi per mettersi d’accordo sulla chiave segreta da usare.

Si può facilmente passare da questo esempio a uno di firma digitale che, visto che ora sappiamo cos’è, usa anche un algoritmo hash.

Tristano crea un messaggio e ne crea un hash. Usa quindi la sua chiave privata per crittare l’hash ottenendo una “firma digitale”. Invia quindi il messaggio così trasformato a Isotta che prima lo decodificherà con la chiave pubblica, ottenendo l’hash. Quindi, utilizzando lo stesso algoritmo di hash (occorre consenso su questo tra i due), riuscirà ad avere il messaggio originale di Tristano.

Figura

I vantaggi della procedura descritta sono diversi:

  • il messaggio è stato creato da un mittente conosciuto (autenticazione)
  • il mittente non può affermare di non averlo inviato (non-ripudio)
  • il messaggio non è stato alterato durante la trasmissione (integrità)

 

1.4. Le transazioni

Torniamo alle blockchain e, in particolare, alle transazioni. Lo scopo principale delle transazioni in una blockchain è quello di trasferire la proprietà di un asset digitale (una criptovaluta o un altro bene) da una persona/parte a un’altra persona/parte senza necessità di convalida da parte di una terza parte (un governo o un’autorità esterna).

Come abbiamo visto nell’esempio, nella sua forma più semplice una transazione ha un input rappresentato dall’“indirizzo” del trasferente e uno o più output che specificano gli indirizzi dei riceventi insieme agli importi che devono ricevere. Ogni transazione ha un identificatore univoco, un ID che la contraddistingue.

Figura https://anders.com/blockchain/coinbase.html

Deve essere chiaro un aspetto fondamentale: le blockchain – almeno quelle legate alle crittovalute – si basano unicamente sulle transazioni. Non esiste il concetto di “proprietà” o di conto corrente sul tipo di quelli bancari. Non si possiedono criptovalute / asset digitali, se ne ha il controllo di un determinato ammontare e quel controllo può essere trasferito a qualcun altro.

Una transazione può quindi essere vista anche come un’operazione di sblocco e successivo, immediato blocco di un certo quantitativo di asset (di bitcoin, di azioni, di….) che ne permette il passaggio del controllo da un utente all’altro.

Per far sì che una transazione abbia successo devono essere verificate almeno due condizioni. Chi ha intenzione di inviare, o meglio di trasferire il controllo, di un certo ammontare di criptovaluta deve poter dimostrare che

  • il controllo su quella somma è suo,
  • quell’ammontare non sia già stato inviato (problema della doppia spesa)(How do Bitcoin Transactions Work?, 2018).

Per questo ogni transazione contiene un “puntatore” all’output di una transazione precedente.

Chi si occupa di queste verifiche? Un particolare sott’insieme di nodi della rete, con un meccanismo, il “mining”, che sveleremo tra poco.

In attesa della verifica, la transazione è sospesa. Se le verifiche vanno a buon fine, la transazione verrà inserita in un blocco che raccoglie, come una cartella, un certo numero di transazioni.

Solitamente a ogni transazione è associata una piccola commissione che andrà a chi effettuerà le verifiche.

Abbiamo accennato all’identificatore unico che accompagna ogni transizione.

Alcune blockchain, come i Bitcoin, usano come ID l’hash dei dati della transazione stessa.

Ogni transazione contiene: 1. hash transazione precedente 2. chiave pubblica destinatario 3. firma mittente 4. valore da trasferire hash( )

 

1.5.  Indirizzi

Nel nostro esempio abbiamo usato nomi fittizi di persone; qualcosa di simile accade anche nella realtà. Anzi, in realtà non esistono nomi, neanche criptati, associati alle transazioni in una blockchain. Si dice che il modello non è “account-based”.

Quel che è necessario per una transazione sono due indirizzi, di chi invia e di chi riceve asset (ma ricordiamo che si tratta di un passaggio di “controllo”).

Prendiamo una chiave privata/pubblica. La parte pubblica viene passata a una funzione hash. Il risultato è l’indirizzo. Nel mondo Bitcoin e in quello Ethereum vi sono altri passaggi rispetto a quelli semplificati appena descritti.

Un utente può generare quanti indirizzi desidera, anzi, in genere è consigliato non usare un indirizzo per più di una transazione.

Questo sistema garantisce quel che è definita pseudo-anonimità: in prima istanza non si sa a chi appartenga un indirizzo ma analizzando le tracce che vengono lasciate in rete è possibile, teoricamente, risalire all’utente che ha utilizzato quell’indirizzo. (Bitcoin Transactions Aren’t as Anonymous as Everyone Hoped, 2017)

Figura

public key -> hash function -> address

 

1.6. Blocchi

Nel nostro viaggio di esplorazione siamo giunti a una fase cruciale: perché la blockchain si chiama così? Cosa sono i blocchi che formano la catena? Tra le varie definizioni citate in precedenza, una richiama il libro mastro (il “ledger”); possiamo vedere un blocco come una pagina di questo registro contabile, in cui sono segnate, rigo per rigo, le transazioni durante un certo periodo di tempo. Il libro con tutte le pagine rappresenta la blockchain.

Ogni blocco contiene, oltre ai dati delle transazioni, un “header” (testata) contenente alcune meta-informazioni, dati tecnici, una marca temporale e l’hash del blocco precedente.

 

Figura catena di blocchi

 

Questo punto è cruciale. Ogni blocco ha la sua “impronta digitale” rappresentata dall’hash dei dati in esso contenuti, come un riassunto cifrato. Il blocco successivo contiene questo hash: è questo riferimento “all’indietro” che crea la catena di blocchi. Quest’ordine è diverso da quello delle pagine di un libro e risulta molto utile per verificare la consistenza interna della catena. Se qualcuno volesse cambiare i dettagli di una transazione all’interno di un blocco, ne cambierebbe l’hash. Quindi dovrebbe cambiare l’hash del blocco successivo. Ma questo ne cambierebbe l’hash e via dicendo. Questo meccanismo determina il carattere immutabile delle blockchain. (Lewis, 2015)

 

Le blockchain contengono in genere anche un numero seriale (chiamato anche “block height”), ma non è l’identificatore principale.

Ora concentriamoci su una blockchain di una criptovaluta come i Bitcoin. Anticipiamo qualche nozione che poi riprenderemo nel capitolo dedicato a questa valuta digitale.

Insieme agli altri dati, in ogni blocco è presente un “nonce”, un numero casuale.

Perché è presente? La spiegazione richiede un po’ di attenzione.

I blocchi devono essere una risorsa scarsa; crearli deve essere difficile, perché il nodo della rete che ne crea uno viene remunerato con un certo numero di Bitcoin (nel nostro esempio). Se fosse facile, verrebbero generati troppi Bitcoin e si creerebbe una spirale inflazionistica che ridurrebbe drasticamente il valore di ogni Bitcoin.

Questa è una spiegazione semplificata, ma può rendere l’idea.

Come fare a rendere difficile la creazione di blocchi? Si può richiedere che l’hash di un blocco inizi con un certo numero di zeri. Visto che l’unico dato variabile è il nonce, si deve procedere per tentativi, cercando quel nonce che, insieme agli altri dati, restituisca una funzione hash con quel determinato numero di zeri. Questa operazione, chiamata “proof of work” (PoW), richiede un grande sforzo computazionale. Nella rete Bitcoin il livello di difficoltà (ovvero il numero di zeri iniziale) viene periodicamente variato in base alla potenza computazionale globale per far sì che un blocco venga creato circa ogni dieci minuti. (Sangtani, 2017).

Chi può cercare di creare un blocco? Chiunque acceda alla rete che incorpora la blockchain, quindi in teoria ogni nodo. Ma nella realtà vi sono nodi specializzati nella creazione di blocchi. Questi nodi vengono chiamati “miners” (minatori) e l’attività di creazione di blocchi “mining” (estrazione). Dietro questi nodi può esserci chiunque, una persona, un team, un’azienda. Data la potenza computazionale – e conseguentemente l’energia elettrica – sempre crescente necessaria per creare un singolo blocco, ormai i miners delle principali criptovalute sono aziende dotate di infrastrutture con migliaia di server specializzati. [4]

Scopo dei miners è risolvere la PoW, verificare le transazioni rimaste in sospeso dalla creazione del precedente blocco e raccogliere quelle valide in un blocco.

Il blocco appena creato viene inviato a tutti gli altri nodi che verificheranno anch’essi le transazioni. Lo ricordiamo, l’operazione di verifica è piuttosto semplice a differenza del PoW. Per esprimere la loro accettazione del blocco e delle transazioni in esso contenute, gli altri nodi cominciano a lavorare alla creazione del blocco successivo, usando l’hash del blocco accettato come riferimento al precedente.

Il miner che ha creato un blocco accettato dagli altri nodi viene quindi ricompensato, con nuovi Bitcoin.

È importante sottolineare questo punto: creare un blocco è un’operazione fondamentale per la blockchain perché serve a validare le transazioni. Il fatto che ci si possa guadagnare è un incentivo, creato apposta per rendere appetibile un’attività cruciale del sistema.

Può capitare che due o più blocchi siano creati più o meno nello stesso momento. In questo caso la regola è che la catena più lunga vince: dopo un certo periodo di tempo viene accettato il blocco che ha il numero maggiore di altri blocchi agganciati successivamente. Le altre catene, con gli altri blocchi creati in concomitanza, vengono scartate e i loro miners non vengono ricompensati.

A proposito di nodi. Esistono principalmente due tipologie di nodi: “full node” e “lightweight nodes”; il compito di un full node è quello di passare i dati agli altri nodi e controllare che i nuovi blocchi aggiunti siano validi. Le operazioni di questo tipo – computazionalmente semplici – consistono nella verifica delle transazioni, nel controllare che esista l’hash al precedente blocco, nel controllare che gli hash del nuovo blocco siano corretti e altre operazioni simili. Di solito, ma non è obbligatorio, un full node conserva in locale copia dell’intera blockchain (ricordiamolo, sostanzialmente è un file).[5]

I “lightweight nodes” che si trovano in dispositivi con limitate risorse, come smartphone o devices dell’Internet of Things; questi nodi non hanno la copia dell’intera blockchain e passano ai nodi principali i dati per l’elaborazione.

 

Pruning merkle roots

 

1.7.  Il meccanismo del consenso

 

Riepiloghiamo. In una rete viene implementata una blockchain pubblica per effettuare transazioni tra utenti in maniera pseudoanonima. Le transazioni verificate sono raccolte in blocchi. Alcuni nodi della rete competono tra di loro per creare il prossimo blocco e guadagnare la ricompensa.

Questo accade in una rete di pari (“peer to peer”), in cui ogni nodo ha la stessa importanza degli altri e ognuno è sconosciuto agli altri.; non esistono super-nodi, non esistono “direttori”, non si è sottoposti ad alcuna autorità.

Per far funzionare una rete del genere deve esserci un sistema interno che permetta ai nodi di trovare periodicamente l’accordo sullo stato della rete e della blockchain. Questo sistema è chiamato “meccanismo di consenso”: un sistema di regole e procedure scritte in forma di codice all’interno della blockchain. Attraverso questo meccanismo i nodi verificano la validità dei dati che fluiscono nella rete (le transazioni, i blocchi e altro) e possono lavorare insieme anche senza coordinamento o “fiducia” tra di loro.

Il concetto di consenso non è nato con le blockchain; ogni gruppo di individui interagisce secondo norme e leggi comuni, come quelle di uno Stato.

Nel contesto che stiamo trattando il meccanismo, il codice di consenso viene “embeddato” nella blockchain grazie al primo blocco, chiamato “genesis”, l’unico senza un riferimento a un blocco precedente.

Vi sono diversi di questi meccanismi – o algoritmi – che possono essere implementati in una blockchain. Ne abbiamo già incontrato uno, il proof of work che funziona grazie al “puzzle degli zeri” legato agli hash dei blocchi. Uno dei problemi principali legati a questo meccanismo, come accennato in precedenza, è il grande dispendio energetico che comporta, a livello del singolo nodo e a livello globale. Attualmente (febbraio 2018) la blockchain Bitcoin, che lo utilizza, consuma qualcosa come 50 TWh annui, pari al consumo di un paese come il Portogallo[6].

Anche per questa ragione sono utilizzati, in altre crittovalute e blockchain, diversi sistemi alternativi attraverso i quali viene gestito il consenso. Ne citiamo di seguito alcuni, descrivendoli brevemente. Non essendoci in questi casi una vera e propria operazione di “mining” dei blocchi vengono anche chiamati meccanismi di “virtual mining”. (Arvind Narayanan, 2016)

 

 

Proof of Stake (PoS)

Con questo meccanismo solo una parte dei nodi è coinvolta nei processi di verifica e creazione blocchi; di volta in volta un solo nodo viene scelto per quest’attività.

Come? Con una specie di lotteria (una scelta deterministica) che vede coinvolti i nodi che hanno un reale “interesse” (stake) nella blockchain: più “valore” si possiede (cioè si ha il controllo di un numero maggiore di criptovaluta, per esempio) più probabilità si hanno di essere il vincitore.

Le verifiche non coinvolgono gli hash ma solo le firme digitali.

Chi crea il blocco – definito “forgers” (forgiatore) –  non viene ricompensato con un certo numero di nuove “monete” ma permettendogli di accreditarsi le piccole commissioni (“fee”) che, come abbiamo visto, ogni transazione produce.

Il meccanismo ha il pregio di essere assai meno dispendioso ma può intaccare la natura paritaria e decentralizzata di una blockchain; chi è più ricco, possedendo più valore all’interno della rete, ha più probabilità di creare blocchi, di guadagnare sulle transazioni e di diventare più ricco. Anche per questa ragione sono stati proposti e implementate diverse versioni del PoS.

Una versione modificata è il Delegated Proof of Stake (DPoS); simile al precedente permette però a un utente di “delegare” un altro nodo a rappresentarlo (a rappresentare i suoi “interessi” nel senso specificato in precedenza). Questo meccanismo -usando una terminologia di Borsa – permette di creare dei gruppi di piccoli azionisti in grado di competere con chi possiede grandi quantità di azioni.

In altri meccanismi i nodi che vogliono partecipare alla “lotteria” mettono in garanzia un certo ammontare del valore da loro posseduto; se vengono scelti per creare il blocco e convalidano transazioni non valide, perderanno quanto versato altrimenti lo riavranno indietro insieme alle commissioni sulle transazioni verificate. In questo caso, più che basarsi sulle ricompense, ci si basa sulle punizioni.

Esistono altre variazioni sul tema: per esempio la cifra impegnata non potrà essere di nuovo utilizzata per un certo intervallo di tempo, come 30 giorni. In questo modo si attenua il potere dei più ricchi.

Altri algoritmi implementati in alcune blockchain derivano da un famoso articolo di ricerca legato al campo del calcolo distribuito, Problema dei Generali Bizantini (Leslie Lamport, 1982). Per spiegare il problema viene usata un’allegoria. In breve, dei generali bizantini che assediano una città devono trovare l’accordo se attaccare o meno. Non si possono incontrare di persona e possono comunicare solo attraverso messaggeri. Per complicare le cose, tra loro possono annidarsi dei traditori. Si è dimostrato che se questi sono in numero maggiore di 1/3 rispetto a tutti i generali non si può garantire la riuscita dell’azione militare ma come si fa a rendere una rete il più possibile robusta agli attacchi, dato questo limite?[7]

Abbandonando l’allegoria bellica, in una blockchain l’obbiettivo è di far sì che i dati e in particolare le transazioni autentiche siano validate correttamente e quelle fraudolente scartate; i nodi “lealisti” dovrebbero poter prevalere sui “sabotatori”. Alcune blockchain, come quella della criptovaluta Ripple e alcuni protocolli come Stellar implementano soluzioni derivate dalla pubblicazione del 1982; lo scopo è avere un sistema che soccomba solo con il massimo teorico di nodi “sabotatori” (cioè il 33%). Per fare un esempio, una blockchain come Bitcoin che utilizza il PoW resiste al massimo al 25% di nodi infedeli.[8]

Una blockchain privata (ne parleremo tra poco) può implementare l’algoritmo Simplified Byzantine Fault Tolerance (SBFT): un validatore (solitamente un’entità conosciuta) propone un blocco per la verifica. Se f è il numero di nodi non affidabili, il blocco deve essere validato almeno da 2f+1 nodi.

Un punto chiave della filosofia delle blockchain è il fatto che, in linea teorica, dovrebbe comunque non essere profittevole diventare “padroni” del sistema accaparrandosi una certa percentuale del suo valore.

Nel caso ci siano diatribe sulla gestione e sul funzionamento stesso della blockchain, esistono soluzioni affrontarle in modo – più o meno – concordato: le “forks” (biforcazioni).

 

Sybil attack princeton pag 56

1.8. Forks

Come in ogni sistema, anche per una blockchain può esserci la necessità o il desiderio di effettuare modifiche, sia per aggiornarla che per modificare o aggiungere funzionalità. Essendo un sistema decentralizzato, senza un’autorità che decida questi cambiamenti, è necessario che la comunità dietro la blockchain – in particolare sviluppatori e validatori, trovi un accordo, operazione non sempre facile.

Da molti utenti e sostenitori della tecnologia blockchain, “il codice è legge”; qualsiasi sua modifica ex-post è visto quasi come un tradimento del contratto “morale” stabilito tra i creatori della blockchain e la community che l’ha adottata, sostenuta e fatta crescere. (Intesa San Paolo, 2017)

Ma si è visto nella pratica che modifiche e correzioni sono a volte necessarie.

 

Figura fork

Esistono essenzialmente due tipi di fork.

La soft fork è una modifica solitamente consensuale: la catena non si “divide”. In una soft fork i nodi che non adottano il cambiamento possono continuare a utilizzare la blockchain; può essere paragonato a un update che mantiene la compatibilità all’indietro (alle vecchie versioni). L’importante è che la maggioranza dei nodi adottino l’aggiornamento; in ogni caso tutti i nodi continueranno a riconoscere i nuovi blocchi e manterranno il consenso nella rete. Gli utenti che non siano miners o validatori non sono coinvolti nell’operazione.

Una hard fork è un’operazione più drastica: le modifiche che vengono implementate non sono compatibili all’indietro. Se un nodo vuole continuare a operare nella blockchain deve accettare le modifiche. Questo tipo di fork, benché preferito dagli sviluppatori perché garantisce maggior libertà, è quello che solitamente genera più controversie. Può addirittura portare a una divisione in due della catena originaria (“chain split”): se un certo numero di nodi non accetta le modifiche e continua a operare sulla vecchia versione della blockchain, mantenendola attiva, si ha de fatco la creazione di due blockchain indipendenti (dal momento della messa in atto delle modifiche). In caso di criptovalute, gli utenti si ritroveranno con monete digitali di entrambe le valute, quella vecchia e quella nuova. Una specie di criptomiracolo…

 

1.9. Smart contracts

Poco tempo la nascita di Bitcoin si è sentita l’esigenza di una blockchain in grado di effettuare operazioni più complesse che non delle semplici transazioni. Benché l’architettura Bitcoin consenta una limitata capacità di inserire codice nelle transazioni la vera svolta si è avuta con la blockchain Ethereum che non solo permette di controllare e gestire una criptovaluta (l’Ether) ma permette anche di implementare veri e propri programmi al suo interno, gli “smart contracts”.

Già nel 1994 Nick Szabo anticipò il concetto di “contratti intelligenti”, contratti cioè che possono essere inseriti nel codice informatico ed eseguiti automaticamente al verificarsi di certe condizioni.[9]

Parleremo degli smart contracts più approfonditamente nel capitolo dedicato a Ethereum ma voglio dare subito qualche nozione di base.

Figura 1- https://bitsonblocks.net/2016/02/01/a-gentle-introduction-to-smart-contracts/

 

Uno smart contract, dal punto di vista informatico, è formato da codice e dati; sostanzialmente si tratta di un programma che risiede in uno specifico indirizzo della blockchain Ethereum. Da un altro punto di vista, può essere considerato un contratto tra diverse parti gestito in maniera automatica che specifica le condizioni sotto le quali una transazione, un pagamento, può essere effettuato.

Un semplice esempio può spiegare la sua utilità. Credo che il lettore sappia cos’è il crowdfunding: una raccolta fondi online per finanziare un progetto di qualsiasi tipo. Una condizione che spesso viene richiesta è che i soldi donati dagli utenti vengano dati al progettista se e solo se la campagna raccoglie (o supera) la cifra prefissata. Bene, questa è proprio una situazione ideale per usare uno smart contract: i donatori fanno un pre-versamento attraverso la blockchain all’indirizzo Ethereum fornito dal progettista, sotto il controllo dello smart contract. Il codice si occupa di fare la somma dei pre-versamenti, di controllare il risultato alla fine della campagna di crowdfunding e di confrontarlo con l’obbiettivo iniziale: se si è raggiunto l’obbiettivo iniziale, le transazioni tra i donatori e il progettista hanno luogo, altrimenti no.

Questa è solo la punta dell’iceberg di ciò che gli smart contracts possono fare, in molti settori e anche con blockchain diverse da Ethereum, visto che questa funzionalità, in forme diverse, comincia a essere implementata in altre “catene”.

 

1.10.                  Tipi di blockchain

 

Finora ho cercato di descrivere una blockchain generica, una sorta di archetipo che, lo ammetto, si ispira in particolare alla tecnologia dei Bitcoin. Del resto il termine è nato con questa criptovaluta.

In realtà esistono due grandi famiglie di blockchain con caratteristiche anche molto diverse tra di loro; entrambe condividono però la loro funzione “abilitatrice di fiducia” tra gli utenti e la caratteristica di immutabilità dei dati convalidati.

Le blockchain pubbliche o “permissionless” (“senza permesso”) sono quelle tipiche delle criptovalute (ma non solo); non esiste un proprietario e chiunque può accedervi, inserirvi dati, mantenere una copia della blockchain e/o partecipare alle attività di verifica e di mining. Questo permette al sistema di essere “resistente alla censura”, visto che è possibile per tutti memorizzarvi dati che non potranno essere cancellati.

Una blockchain privata o “permissioned” (“con permesso”) ha invece uno o più proprietari e necessita di credenziali per l’accesso; non ha bisogno di un meccanismo di consenso particolarmente sofisticato né di operazioni di mining. Per questo motivo in molti preferiscono la definizione di DLT (Distributed Ledger Technology), che più che al concetto di blockchain si avvicina alla struttura di un database distribuito, reso sicuro dalla crittografia e con una gestione centralizzata degli accessi. I nodi non sono paritari, hanno ruoli diversi. Vi sono nodi abilitati a effettuare transazioni o simili, altri a verificare i dati, altri possono solo visualizzarli ecc. In generale si conosce l’identità dei membri della rete ma le transazioni rimangono anonime. Le transazioni devono esser considerate in maniera più ampia rispetto al semplice trasferimento di asset; inoltre vi sono “transazioni di sistema” (“system transactions”) che comprendono operazioni come la definizione di un asset o la creazione di un utente con annesso livello di accesso.

La nozione di smart contract è, in questo ambito, fondamentale.

Il vantaggio che reti di business costituite da più attori (pensate a una “supply chain”, una catena di fornitura di una certa produzione industriale) hanno dall’utilizzo di DLT è il drastico abbassamento dei costi di intermediazione e la riduzione delle tempistiche. Ne parleremo più avanti.

 

1.11.                   I token e le ICO

1.12.                  I vantaggi di una blockchain

 

 

 

 

[1] Dall’evento Techcrunch Disrupt 2017, riportato da https://hackernoon.com/vitalik-buterin-on-the-future-of-ethereum-d3577317b0cf, visitato il 30/01/2018

[2] Dove SHA sta per Secure Hash Algorithm.

[3] Potete fare delle prove in uno dei tanti generatori SHA-256 presenti sul web, ad esempio https://www.freeformatter.com/sha256-generator.html

[4] Queste “farm” di server sono spesso situate in Cina in zone con un basso costo dell’energia e/o in paesi freddi come l’Islanda, per risparmiare sul raffreddamento.

 

[5] A febbraio 2018 la dimensione della blockchain dei Bitcoin era di circa 157 GB.

[6] https://digiconomist.net/bitcoin-energy-consumption; in questo sito sono presenti numerose statistiche e informazioni su questo argomento.

[7] Da notare che, in pratica, sia PoW che PoS sono dei tentativi di risolvere questo problema.

 

[8] In realtà in questo caso ci si riferisce alla percentuale del potere computazionale totale più che ai nodi.

[9] Szabo fece l’esempio semplice ma illuminante di un distributore automatico, che ha embeddato un “contratto” nel suo software/hardware: tu utente mi dai una moneta e io macchina ti do un caffè (o un tè..). L’ho sempre trovato divertente.

 

1.  Bibliografia

Antonopoulos, A. M. (2014). Mastering Bitcoin. Tratto il giorno 02 24, 2018 da Safari Books Online: https://www.safaribooksonline.com/library/view/mastering-bitcoin/9781491902639/

Arvind Narayanan, J. B. (2016). Bitcoin and Cryptocurrency Technologies. Princeton. Tratto il giorno 02 05, 2018 da https://d28rh4a8wq0iu5.cloudfront.net/bitcointech/readings/princeton_bitcoin_book.pdf?a=1

Bitcoin Transactions Aren’t as Anonymous as Everyone Hoped. (2017, 08 23). Tratto il giorno 02 2018, 06 da MIT Technology Review: https://www.technologyreview.com/s/608716/bitcoin-transactions-arent-as-anonymous-as-everyone-hoped/

Bitcoin: A Peer-to-Peer Electronic Cash System. (2015, 08 07). Tratto il giorno 02 23, 2018 da Bitcoinwiki: https://en.bitcoin.it/wiki/Essay:Bitcoin:_A_Peer-to-Peer_Electronic_Cash_System

Calvin, J. (2017). When (and If) Income is Realized from Bitcoin Chain-Splits. Deloitte. Tratto il giorno 02 26, 2018 da https://www2.deloitte.com/content/dam/Deloitte/us/Documents/financial-services/us-fsi-tax-bitcoin-chain.pdf

Catalini C., G. J. (2017, 09 21). Some Simple Economics of the Blockchain. Tratto il giorno 02 26, 2018 da SSRN: https://papers.ssrn.com/sol3/Delivery.cfm/SSRN_ID3040221_code1556445.pdf?abstractid=2874598&mirid=1

Church, Z., & Catalini, C. (2017, 05 17). Blockchain, explained. Tratto il giorno 01 30, 2018 da MIT Management Sloan School: http://mitsloan.mit.edu/newsroom/articles/blockchain-explained/

Coscia, E. (2017, 04 13). Coercizione, secessione e forks: le difficoltà nella decentralizzazione. Tratto il giorno 02 25, 2018 da next generation currency: https://nextgenerationcurrency.com/coercizione-secessione-e-forks-le-difficolta-nella-decentralizzazione/

Coscia, E. (2017, 12 20). Soft e hard forks: quali sono le differenze? Tratto il giorno 02 25, 2018 da next generation currency: https://nextgenerationcurrency.com/soft-hard-forks-quali-le-differenze/

Ethereum Homestead Documentation. (2017, 03 01). Tratto il giorno 02 27, 2018 da Ethereum Homestead: http://www.ethdocs.org/en/latest/contracts-and-transactions/index.html

Gallone, M. (2017, 12 24). Blockchain | Il problema dei generali bizantini rivoluziona l’economia. Tratto il giorno 02 23, 2018 da Antifragile: https://blogantifragile.com/blockchain-problema-generali-bizantini/

Genesis block. (2017, 11 30). Tratto il giorno 02 19, 2018 da Bitcoinwiki: https://en.bitcoin.it/wiki/Genesis_block

Giles, A. (2015, 07 15). A Complete Beginners Guide to Blockchain Technology. Tratto il giorno 02 08, 2018 da Slideshare: https://www.slideshare.net/Blockstrap/cbgtbt-part-1-workshop-introduction-primer

Graham, W. (2018, 02 05). Building it Better: A Simple Guide to Blockchain Use Cases. Tratto il giorno 02 26, 2018 da Blockchain at Berkley: https://blockchainatberkeley.blog/building-it-better-a-simple-guide-to-blockchain-use-cases-de494a8f5b60

Hammerschmidt, C. (2017, 01 27). Consensus in Blockchain Systems. In Short. Tratto il giorno 02 2018, 2018 da Medium: https://medium.com/@chrshmmmr/consensus-in-blockchain-systems-in-short-691fc7d1fefe

Hartikka, L. (2017, 31 12). Naivecoin: a tutorial for building a cryptocurrency. Tratto il giorno 02 08, 2018 da Naivecoin: a tutorial for building a cryptocurrency: https://lhartikk.github.io/

How do Bitcoin Transactions Work? (2018, 01 28). Tratto il giorno 02 02, 2018 da Coindesk: https://www.coindesk.com/information/how-do-bitcoin-transactions-work/

Intesa San Paolo. (2017). The Blockchain report – Overview on the Second Half of 2016. Innovation Center, Torino.

Kelsey, J. (2017, 07 18). Introduction to blockchains. Tratto il giorno 2 12, 2018 da https://csrc.nist.gov: https://csrc.nist.gov/csrc/media/projects/supply-chain-risk-management/documents/ssca/2016-fall/wed_am2-block_chain_john_kelsey.pdf

Leslie Lamport, R. S. (1982, 07 05). The Byzantine Generals Problem. Tratto il giorno 02 23, 2018 da microsoft.com: https://www.microsoft.com/en-us/research/publication/byzantine-generals-problem/?from=http%3A%2F%2Fresearch.microsoft.com%2Fen-us%2Fum%2Fpeople%2Flamport%2Fpubs%2Fbyz.pdf

Lewis, A. (2015, 09 09). A gentle introduction to blockchain technology. Tratto il giorno 02 12, 2018 da Bits on blocks: https://bitsonblocks.net/2015/09/09/a-gentle-introduction-to-blockchain-technology/

Lie, R. (2017, 03 30). Blockchain tutorial 6: Digital signature. Tratto il giorno 02 09, 2018 da You Tube: https://www.youtube.com/watch?v=OKg4PqD01Z0

Murch. (2016, 09 06). What is the meaning of the term “full-node”? Tratto il giorno 02 18, 2018 da Bitcoin Stack Exchange: https://bitcoin.stackexchange.com/questions/48436/what-is-the-meaning-of-the-term-full-node

Permissionless VS Permissioned. (2017, 07). Tratto il giorno 02 26, 2018 da next generation currency: https://nextgenerationcurrency.com/blockchain-2/le-3-tipologie-di-blockchain/

Playground Tutorial. (2018, 02 28). Tratto da hyperledger.github.io: https://hyperledger.github.io/composer/tutorials/playground-tutorial.html

Rosic, A. (2017, 03). Proof of Work vs Proof of Stake: Basic Mining Guide. Tratto il giorno 02 21, 2018 da Blockgeeks: https://blockgeeks.com/guides/proof-of-work-vs-proof-of-stake/

Sangtani, G. (2017). Blockchain Simplified. Tratto il giorno 02 15, 2018 da academia.edu: https://www.academia.edu/35559952/Blockchain_Simplified

Schneier, B. (2001). Sicurezza digitale. Miti da sfatare, strategie da adottare. Milano: Tecniche nuove.

Sigrid Seibold, G. S. (2016). Consensus. Immutable agreement for the Internet of value. Tratto il giorno 19 02, 2018 da DisLedger: https://www.disledger.com/kpmg-blockchain-consensus-mechanism.pdf

Szabo, N. (1997). The Idea of Smart Contract. Tratto il giorno 03 03, 2018 da Phonetic Sciences – University of Amsterdam: http://www.fon.hum.uva.nl/rob/Courses/InformationInSpeech/CDROM/Literature/LOTwinterschool2006/szabo.best.vwh.net/idea.html

Tapscott, D., & Tapscott, A. (2016). Blockchain Revolution: How the Technology Behind Bitcoin Is Changing Money, Business and the World. Portfolio Penguin.

Vukolić, M. (2017, 05). The Quest for Scalable Blockchain Fabric: Proof-of-Work vs. BFT Replication. Tratto il giorno 02 23, 2018 da Semantic Scholar: https://pdfs.semanticscholar.org/efb1/a85cf540fd4f901a78100a2e450d484aebac.pdf

Witherspoon, Z. (2018, 02 13). A Hitchhiker’s Guide to Consensus Algorithms. Tratto il giorno 02 19, 2018 da Hackernoon: https://hackernoon.com/a-hitchhikers-guide-to-consensus-algorithms-d81aae3eb0e3

Zhao, W. (2017, 11 25). Proof of Work vs Proof of Stake. Tratto il giorno 02 22, 2018 da One Month: https://learn.onemonth.com/proof-of-work-vs-proof-of-stake/