Introduzione alla tecnologia Blockchain

I parte: Quali sono le reali applicazioni?di

Introduzione

La tecnologia Blockchain, tipica “materia” da esperti informatici anche abbastanza nerd, è assurta negli ultimi tempi ad argomento di dibattito relativamente comune; non proprio la discussione tipica “da bar”, ma di blockchain si sono occupati a più riprese, spesso anche in maniera superficiale e distorta, tanti media tradizionali, legandola sempre all’altro tema caldo, quello delle criptovalute e della impressionante crescita di valore del Bitcoin.

Ma su quali concetti si basa? E, soprattutto, quali sono le possibili applicazioni di Blockchain in applicazioni reali?

Blockchain e applicazioni reali

Mentre tutti ne parlano per idolatrarla come la “killer application” che risolverà qualsiasi problema legato a qualsiasi settore, in realtà le applicazioni legate al mondo Blockchain non hanno ancora trovato modo di essere concretamente applicate in tanti ambiti reali. Certo, dobbiamo tenere in considerazione la raccolta fondi tamite gli ICO (Initial Coin Offering) e le rispettive “criptovalute”, ma al di là di questo, sembrano esserci molte promettenti possibilità, ma non troppe reali applicazioni in svariati ambiti.

 

Che cosa è Blockchain

Innanzitutto, partirei dal concetto fondamentale: Blockchain è un database in sola scrittura nel quale possono essere salvati dati sotto forma di “transazioni”.

L’esempio applicato più evidente a tutti è quello utilizzato per l’ambito delle criptovalute, una forma di “moneta digitale” che può essere trasferita tra due “indirizzi”: l’individuo “A” decide di inviare una certa somma all’individuo “B”.

Le transazioni

Viene generata una transazione che viene elaborata da tutti i nodi partecipanti nel Blockchain. Una volta che tutti hanno verificato il corretto esito della transazione — ossia che “A” abbia fondi sufficienti per poter effettuare l’operazione — questa viene racchiusa all’interno di un “blocco” che viene aggiunto al Blockchain. Il blocco aggiunto ha caratteristiche che lo legano univocamente al blocco precedente, da cui deriva il concetto di “catena di blocchi”.

Figura 1 — Struttura Blockchain (CC BY-NC-ND by En3pY)

Figura 1 — Struttura Blockchain (CC BY-NC-ND by En3pY)

 

Smart Contract

Una seconda applicazione della tecnologia Blockchain è quella degli Smart Contract. Introdotta nel progetto di Ethereum [1]. Lo Smart Contract consiste nella possibilità di avere un “contratto digitale” sviluppato con un linguaggio apposito, del tutto simile a JavaScript; quello più diffuso è Solidity.

Uno Smart Contract può possedere sia variabili che funzioni. Le variabili di uno Smart Contract possono essere modificate chiamando le funzioni a loro volta definite nello stesso Smart Contract oppure in un altro. Un esempio di Smart Contract sviluppato in questo modo è CryptoKitties [2], di cui parlerò ancora successivamente.

Di seguito, riportiamo un esempio di codice Solidity [3]

contract mortal {
   /* Define variable owner of the type address */
   address owner;
   /* This function is executed at initialization and sets the owner of the contract */
   function mortal() { owner = msg.sender; }
   /* Function to recover the funds on the contract */
   function kill() { if (msg.sender == owner) selfdestruct(owner); }
}
contract greeter is mortal {
   /* Define variable greeting of the type string */
   string greeting;
   /* This runs when the contract is executed */
   function greeter(string _greeting) public {
       greeting = _greeting;
   }
   /* Main function */
   function greet() constant returns (string) {
       return greeting;
   }
}

Una blockchain… è per sempre

Prima regola della Blockchain: una volta che un dato viene inserito nella Blockchain, non può più essere rimosso.

Quando si pensa ad applicazioni che devono basarsi su questa tecnologia, è fondamentale cercare di capire se i dati che verranno salvati al suo interno possono rimanerci per sempre, o se ci sia un modo per “correggere” le informazioni al suo interno in caso di necessità… sempre che sia possibile.

 

La sicurezza

Spesso ho sentito dire che Blockchain garantisce la sicurezza dei dati al suo interno, perché questi sono cifrati e anonimi. In realtà non è propriamente così: è vero che è una tecnologia che fa utilizzo intensivo di meccanismi crittografici; tuttavia è anche vero che i dati sono accessibili e visibili da chiunque abbia accesso a un nodo Blockchain.

Per intenderci, è possibile vedere chiaramente quando è stata fatta la primissima transazione [4] di BTC tra Satoshi Nakamoto e Hal Finney. A quel punto è anche possibile vedere tutte le transazioni che sono state fatte da uno o dall’altro account. Sapendo quale fosse l’indirizzo di Nakamoto e Finney, è possibile sapere non solo il saldo di ciascuno, ma anche l’identità di ognuno. E, di nuovo, sono informazioni che una volta scritte, non possono essere rimosse.

Quindi il punto di forza di Blockchain — la chiarezza nella storia delle transazioni effettuate — può diventare anche un punto debole per alcune applicazioni reali. In fase di progettazione delle applicazioni è pertanto bene tenere in considerazione quali siano le limitazioni e quali possano essere gli inconvenienti di questa tecnologia [5].

 

Consumo di risorse

Un secondo aspetto da tenere in considerazione è quello del consumo di risorse. Il Blockchain, durante la fase di “mining”, ha un consumo di risorse piuttosto sostenuto. Diciamo anche il 100% delle risorse CPU disponibili. I due aspetti da tenere in considerazione sono:

  1. L’installazione di un nodo Blockchain presso un provider di servizi cloud (VPS e simili) potrebbe comportare un addebito di costi per l’utilizzo intensivo della CPU o la dismissione del servizio, dal momento che generalmente le risorse sono condivise tra più provider.
  2. Dal punto di vista applicativo, potrebbe rendersi necessario lasciare il nodo dedicato al “mining” Blockchain per non penalizzare altre applicazioni in esecuzione che si troverebbero con risorse ridotte.

 

Pubblico e privato

Quando si parla di Blockchain, un ulteriore aspetto da considerare, peraltro non l’ultimo in termini di importanza, è un’implementazione privata oppure pubblica.

Blockchain pubblico

Il Blockchain pubblico lo conosciamo tutti come quello di “Bitcoin” o quello di “Ethereum”. Chiunque può diventare un nodo del Blockchain installandosi l’apposito programma e, avendo a disposizione dei fondi, rispettivamente in BTC o ETH, può inserire dati al suo interno. Chiunque è anche in grado di vedere il contenuto di tutte le transazioni presenti al suo interno.

Oltre a tenere in considerazione tutti gli aspetti trattati precedentemente (sola scrittura, immutabilità, accesso ai dati) è opportuno ricordare che ogni transazione effettuata sui Blockchain ha un “costo”.

Rilasciare uno Smart Contract, chiamare una funzione da esso o effettuare un trasferimento di fondi da un indirizzo a un altro ha un costo in Ether. Più precisamente il costo è in “Gas”, un’unità di misura che viene successivamente convertita in Ether; ma, per comodità del discorso e visto che non cambia la natura del discorso, mantengo il termine “Ether” nonostante sia tecnicamente impreciso.

In altri termini è necessario acquistare od ottenere Ether prima di poter fare qualsiasi operazione. La quantità di Ether necessario per effettuare un’operazione dipende di fatto dalla quantità di byte che compongono la transazione: sicuramente maggiore se si tratta di rilasciare uno Smart Contract, più ridotta se è solo questione di chiamare una funzione.

Un altro aspetto da considerare sono le prestazioni. Il Blockchain di Bitcoin ha una “capacità” che oscilla tra le 3,3 e le 7 transazioni al secondo, con un blocco generato ogni 10’: in altri termini. Ethereum è leggermente più prestante, aggirandosi attorno alle 15 transazioni al secondo, con un blocco generato mediamente ogni 15 secondi. Da quando si inserisce una transazione a quando essa viene confermata possono passare svariate decine di minuti (su Bitcoin) o qualche minuto (in Ethereum). Trattandosi di un Blockchain pubblico a cui accedono migliaia di nodi, possono verificarsi casi di “congestione” in grado di bloccare le funzionalità computazionali.

È successo a dicembre 2017 con “CryptoKitties” che è un gioco basato sulla Blockchain. L’elevato volume di transazioni ha causato un rallentamento dell’intero Blockchain, mettendo in difficoltà anche alcune aziende che stavano raccogliendo fondi attraverso ICO [6]. È chiaro che si tratta di un aspetto che potrebbe rappresentare enormi penalizzazioni in alcuni ambienti applicativi.

Blockchain privato

Esiste l’opportunità di realizzare applicazioni basate su Blockchain privati, ossia i cui nodi sono controllati da una o più entità che vogliono sfruttare le caratteristiche di questa tecnologia. Il Blockchain privato ha il vantaggio di offrire funzionalità di “controllo accessi”, grazie al quale è possibile regolamentare chi può e chi non può accedere ai nodi e alle informazioni.

Offre anche il vantaggio di non dover ricorrere all’acquisto di criptovalute per potervi operare sopra. Ultimo vantaggio — e non per importanza — sta nel fatto che, a seconda del “motore” utilizzato, è possibile raggiungere prestazioni considerevolmente maggiori, anche più di 1000 transazioni al secondo [7]. Come valore di riferimento, si pensi che Visa ha un volume di circa 1667 transazioni al secondo in media, con una rete capace, secondo le loro stime, di gestire fino a 56.000 transazioni al secondo [8].

Restano invece vive le caratteristiche legate ai dati salvati (solo in aggiunta, non modificabili, accessibili completamente se si ha accesso al Blockchain) e alle risorse necessarie.

 

Conclusione

Blockchain sì o no? Pubblico o privato? Quanto è importante la reattività dei dati? I dati possono essere pubblici?

L’analisi dell’applicazione della tecnologia Blockchain richiede un approccio che non è solo sistemistico o di programmazione, ma ha anche altri aspetti di sicurezza, prestazione e “architettura” generale dell’applicazione, che prevalgono — per importanza — sulla decisione finale. Sottovalutare questi aspetti potrebbe rivelarsi problematico o fatale per il successo del progetto.

 

Riferimenti

[1] Ethereum project

https://www.ethereum.org

 

[2] CryptoKitties

https://www.cryptokitties.co/

 

[3] Building a smart contract using the command line

https://www.ethereum.org/greeter

 

[4] Il nodo Blockchain con la primissima transazione in Bitcoin

https://goo.gl/AqagMz

 

[5] Beware of the Blockchain

https://goo.gl/FP5Vc3

 

[6] CryptoKitties craze slows down transactions on Ethereum

http://www.bbc.com/news/technology-42237162

 

[7] MultiChain 1.0 beta 2 and 2.0 roadmap

https://www.multichain.com/blog/2017/06/multichain-1-beta-2-roadmap/

 

[8] Bitcoin and Ethereum vs Visa and PayPal – Transactions per second

http://www.altcointoday.com/bitcoin-ethereum-vs-visa-paypal-transactions-per-second/

 

Condividi

Pubblicato nel numero
235 gennaio 2018
Mi occupo della progettazione e della protezione di architetture di sistema e di rete da ormai più di 20 anni. Trasformare l’esigenza in una soluzione tecnologica quanto più semplice ed efficace possibile è una delle attività che maggiormente mi divertono, sfruttando le tecnologie più recenti e adeguate ai vari problemi…
Articoli nella stessa serie
Ti potrebbe interessare anche