• Non ci sono risultati.

Capitolo 2. La tecnologia blockchain: sviluppo, caratteristiche e funzionamento

2.2 Gli aspetti tecnologici e le caratteristiche della Blockchain

2.2.1 Le componenti della Blockchain: un piccolo glossario

Prima di procedere descrivendo il processo tramite il quale i nodi verificano le transazioni nei blocchi, appare opportuno un breve excursus sui principali elementi che caratterizzano l’infrastruttura Blockchain, dandone una definizione sintetica che permetta di comprendere adeguatamente la spiegazione del processo che verrà fornita in seguito.

Criptoasset: è l’asset nativo, ovvero quella particolare tipologia di asset che deve essere

prodotta da una specifica tecnologia, la quale al contempo deve anche limitarne la distribuzione. In questo caso l’asset nativo è rappresentato dai Bitcoin dal momento che, come già ricordato, la tecnologia della quale si sta delineando il funzionamento è la tecnologia Blockchain sottostante ai Bitcoin.

Nodo: come già sopra riportato, un nodo altro non è che un server fisico capace di gestire

le transazioni in criptoasset. I nodi sono collegati fra loro attraverso un network peer-to- peer e l’oggetto delle transazioni sono risorse digitali.

Ogni nodo partecipante alla Blockchain possiede una copia esatta e immutabile dell’intera catena dei blocchi costituenti la chain, la quale viene aggiornata in maniera continua e sincronizzata dai nodi stessi quando sono connessi al network.

Transazione: è lo scambio di criptoasset tra due o più nodi. A seconda della fase del

processo una transazione può essere verificata, validata o confermata. Una transazione si dice verificata quando deve ancora essere racchiusa in un blocco ma è già stata verificata dai nodi del network, i quali controllano se il cedente disponga davvero della quantità di criptoasset che vuole trasferire al cessionario; si può dire che la transazione è validata invece quando si trova all’interno di un blocco validato in attesa di essere aggiunto alla catena, mentre una transazione si definisce confermata quando si trova in un blocco

54

validato distante dall’ultimo blocco validato di almeno cinque posizioni ed è pertanto aggiunta al network in maniera indissolubile. Dal momento che nel sistema Bitcoin un blocco viene validato e di conseguenza aggiunto alla catena ogni circa dieci minuti, si ha una transazione confermata ogni ora. All’interno della transazione sono contenute informazioni relative all’indirizzo pubblico del ricevente, le caratteristiche della transazione stessa e la firma crittografica, la quale garantisce la sicurezza e l’autenticità della transazione.

Blocco: è l’insieme delle transazioni verificate durante la creazione del blocco stesso.

Come visto, un blocco viene generato ogni circa dieci minuti: dopo la sua generazione, il blocco viene aggiunto in coda ai blocchi già presenti all’interno della catena, andando così a formare una catena di blocchi, la cosiddetta Blockchain.

Ogni blocco presenta al suo interno un header identificativo, composto da diversi campi:  Height: detto anche numero del blocco, indica la posizione di un blocco all’interno

della catena.

 Timestamp: è la marcatura temporale che segna quando un blocco è stato creato da un nodo.

 Merkle Root: è un campo che viene valorizzato con la Root Transaction. Quest’ultima si ottiene applicando più volte la funzione di Hash a un insieme di transazioni tramite uno schema ad albero di Merkle, ovvero una ramificazione della struttura dati per descrivere più transazioni; lo scopo è quello di certificare l’autenticità di un gruppo di transazioni raggruppate ad albero.

 Nonce: è la stringa di dati che deve essere utilizzata nel processo di hashing per soddisfare quanto richiesto nell’attività di mining; termini che verranno enunciati nelle pagine seguenti, a cui si fa riferimento.

 Target difficulty: è un valore a 256 bit che si modifica in virtù del tempo necessario a validare 2016 blocchi e misura quanto sia difficile trovare un Hash per un certo target. È direttamente correlato alla difficoltà nel trovare l’Hash. Nella Blockchain dei Bitcoin viene modificato ogni circa 14 giorni, il tempo necessario a convalidare 2016 blocchi.

 Previous Hash: è l’Hash del blocco precedente, già validato e verificato, che precede il blocco in questione nella catena.

 Version: è il campo nel quale è indicata la versione del protocollo impiegato nel raggiungimento del consenso nell’attività di mining.

Ledger: conosciuto anche come “libro mastro”, è un particolare registro pubblico

distribuito dove sono contenute le transazioni in maniera sequenziale e cronologica, al fine di poterne ricostruire facilmente il loro storico. Fisicamente il ledger è formato da un insieme di blocchi che sono legati fra loro attraverso una funzione crittografica e la funzione di Hash.

Il ledger è gestito dalla DLT (Distributed Ledger Technology), la quale è spesso utilizzata come sinonimo di Blokchain, seppur impropriamente. Infatti, la Blockchain è una tecnologia facente parte delle tecnologie DLT: esse possono essere definite come quell’insieme di sistemi facenti riferimento a un registro distribuito, governato in modo tale da permettere l’accesso e la possibilità di effettuare modifiche a più nodi di una rete.

55

Funzione di Hash: è un sistema matematico non invertibile che permette di convertire

un messaggio di testo avente lunghezza variabile in un messaggio alfanumerico di lunghezza fissa, chiamato Digest. L’Hash non deve consentire di risalire al testo originario del messaggio iniziale ed è identificativo per ogni blocco, essendo collocato nell’header dello stesso; grazie a tale proprietà l’Hash registra quindi tutte le informazioni relative al blocco.

Ogni blocco, oltre ad avere nel proprio header il relativo Hash, contiene anche l’Hash di quello che lo precede: la formazione della catena di blocchi è possibile proprio grazie ai vari Hash poiché, all’interno di un blocco, l’Hash contenente le informazioni relative a quello precedente permette di legare un blocco al suo antecedente. Da ciò discende che grazie ai codici Hash è possibile sia avere una visione continua e coordinata della catena e delle sue evoluzioni, sia ripercorrere la costruzione della catena stessa dal proprio incipit allo stato attuale.

Grazie all’Hash e al timestamp, ovvero un marcatore presente in ogni blocco che conferisce allo stesso una dimensione temporale, si è in grado di stabilire un ordine cronologico dei blocchi costituenti la catena.

Wallet: è il portafoglio elettronico personale di ciascun utente, nel quale sono

memorizzate sia le credenziali per accedere al sistema sia il numero di criptovalute possedute da quel determinato utente.

Miner: il “minatore” è un nodo della rete che, in modo assolutamente volontario,

convalida le transazioni attraverso il meccanismo del consenso distribuito e aggiunge i blocchi validati alla catena. L’attività del miner è detta “mining” e per il loro operato i miners possono ottenere reward o mance: le reward sono le remunerazioni in criptoasset, mentre le mance possono essere incluse nelle transazioni su iniziativa dei singoli nodi come ricompensa aggiuntiva che il miner riceve per la propria opera di validazione.

Proof-of-work: è la prova tangibile tramite la quale il sistema riconosce che un

determinato miner ha validato un blocco e che permette al miner di ottenere le rewards o le mance.

Nella Blockchain ogni partecipante, a seguito di una o più transazioni, vede modificarsi la propria disponibilità di Bitcoin. In realtà, ciò che costituisce una transazione in criptoasset sulla Blockchain sono gli UTXO (Unspent Transaction Outputs), ossia dei frammenti di criptoasset legati a uno specifico proprietario. Gli UTXO sono registrati e riconosciuti come unità costituente valore dal network e sul network stesso sono tracciati tutti gli UTXO non spesi dai partecipanti. Ogni volta che un soggetto riceve una transazione in Bitcoin, la somma ricevuta sarà registrata nel network come UTXO, cioè come quantità di criptovaluta che quel singolo partecipante alla catena ha a disposizione.

Nel network ogni transazione crea UTXO sul Distributed Ledger, affinché il sistema nel suo complesso possa essere al corrente del fatto che un determinato utente abbia ricevuto una somma di UTXO e che questa sia nella sua disponibilità. Ciascun nodo traccia la quantità di UTXO in una serie di dati, detta UTXO set, posta in un database. Da tale database gli UTXO possono essere consumati o creati: consumati se vengono usati dall’utente come

56

input della transazione, creati se vengono trasferiti al destinatario e fungono da output della transazione.

Anche se impropriamente si parla di “saldo Bitcoin” come il totale degli UTXO che appartengono a un nodo, nella tecnologia Bitcoin non esiste quindi un concetto vero e proprio di conto e di saldo inteso come differenza tra il dare e l’avere; è infatti il wallet dell’utente che calcola gli UTXO disseminati nel sistema e legati all’utente in questione per costruire ciò che viene in gergo chiamato “saldo Bitcoin”.

Inoltre appare opportuno aggiungere che ogni transazione sulla blockchain è corredata da uno script, un microcodice informatico scritto in un linguaggio di programmazione specifico che ha la finalità di informare i nodi su come comportarsi con i dati contenuti nelle transazioni; grazie allo script ogni nodo è in grado di eseguire azioni specifiche, come consentire o meno l’utilizzo della disponibilità di criptoasset che viene trasferita da un soggetto a un altro. Lo script può essere eseguito in modo distribuito da qualsiasi nodo e permette al criptoasset di essere programmabile: la programmabilità è insita nella possibilità di predeterminare delle regole e delle azioni correlate irreversibilmente a uno specifico asset.

Per meglio comprendere si propone un semplice esempio. Si supponga che un soggetto voglia trasferire Bitcoin a un utente solamente qualora questi ne sia davvero bisognoso. La transazione verrà confermata da un nodo e inserita in un blocco validato, poi la somma sarà disponibile al destinatario sotto forma di UTXO senza che il mittente possa essere in grado di verificare o meno che l’utente ricevente ne sia davvero bisognoso. Come può il mittente sapere di quanti UTXO attualmente dispone il destinatario? Attraverso uno script il mittente di una transazione può impedire che il destinatario entri in possesso della disponibilità di criptoasset fintanto che la quantità di UTXO da quest’ultimo disposta non sia inferiore a un tetto prestabilito; il destinatario riceverà comunque i Bitcoin, ma non potrà spenderli fintanto che la condizione iniziale, ossia il disporne meno di una certa soglia, non si avvererà.

Lo script funge quindi da condizione irreversibile sulla transazione, che determina la disponibilità effettiva di UTXO di un soggetto solamente al verificarsi di condizioni precedentemente pattuite fra gli utenti.