Smart Contracts, la vera rivoluzione della blockchain

Contratti tradotti in codice che si auto-eseguono e applicano in automatico le proprie clausole. Scopriamo cosa sono e che cosa si sta muovendo nel settore più “caldo” dell’universo block chain, che interessa sempre più istituzioni finanziarie e non solo. Cos’è Ethereum e come funziona.

Uno smart contract è un contratto che è in grado di entrare in esecuzione e fare rispettare le proprie clausole senza intervento esterno.  A differenza di un contratto tradizionale, uno “smart contract” è scritto in un linguaggio eseguibile da un computer.  Come un contratto su carta, uno smart contract può prevedere gli obblighi, i benefici e le sanzioni che sono a carico o a vantaggio delle parti contraenti nelle diverse circostanze. Può però anche ricevere informazioni come input, elaborarle sulla base delle regole definite ed eseguire delle azioni come output.

SmartContracts

L’idea di un contratto scritto sotto forma di codice o che rimanda per l’esecuzione di alcune o tutte le sue clausole ad un programma per computer non è nuova. Quando negli anni ’70 del secolo scorso venne introdotto il concetto di licenza per l’utilizzo di software tramite una chiave alfanumerica, il meccanismo che abilitava o disabilitava il software in questione rappresentava una forma molto rudimentale di smart contract. Anche oggi la forma più diffusa di smart contract, pur se nel 99 per cento dei casi chi ci ha a che fare non la percepisce con questa denominazione, è costituita agli innumerevoli sistemi di Digital Rights Management che, con maggiore o minore successo, sono stati creati per tenere sotto controllo l’utilizzo di contenuti digitali acquisiti in modo legale.

Il termine smart contract ha un padre e una data di nascita. Il padre è Nick Szabo, un informatico e laureato in legge americano di origine ungherese esperto di crittografia,con un interesse verso la storia della proprietà e della sua protezione, nonché per i big data e le serie statistiche. Nel 1993, anche se la prima descrizione completa è datata 1997 (First Monday, Vol 2 N 9 ) , Szabo ebbe l’idea  inserire in oggetti del mondo fisico (un’automobile, per esempio) componenti hardware e software che ne potevano modificare il funzionamento sulla base di condizioni previste nelle clausole di un contratto che ne regolasse l’uso. Per restare nel caso di un’automobile, per un’auto pagata a rate, in caso di non pagamento di un certo numero di rate, lo smart contract entrerebbe in azione e per esempio disabiliterebbe la messa in moto.

Anche se la tecnologia non era ancora sviluppata a sufficienza per consentire una realizzazione pratica, l’idea di Szabo cominciò ad essere presa in considerazione a diversi livelli.  Il concetto di smart contract si compone di tre parti: l’espressione di una logica contrattuale come codice di un programma; la rappresentazione degli eventi che attivano la logica come messaggi inviati al programma stesso; un meccanismo che ponga in essere gli effetti previsti dalla logica (per esempio, l’effettuazione di un trasferimento di denaro da un contraente all’altro).

L’esecuzione di un programma per computer è deterministica, nel senso che a medesimi input corrispondono uguali risultati. Come si dice in gergo, nel cyberspazio il codice è legge. In altre parole, una volta che un contratto è diventato uno smart contract e i contraenti concordano nell’accettarne le clausole, gli effetti non sono più legati alla loro volontà. Affinché il tutto funzioni, sono necessarie delle garanzie: che il codice non venga modificato, che i messaggi provengano da chi deve inviarli (per esempio, la banca che non ha ricevuto il pagamento della rata dell’auto), che l’avviamento venga disabilitato.  In altri termini deve esistere un meccanismo che garantisca la fiducia che i contraenti pongono nello smart contract.

Tradizionalmente la fiducia nell’efficacia di un contratto viene garantita da una terza parte, un intermediario che si pone tra i contraenti e che naturalmente viene retribuito per i suoi servizi. Con l’avvento dell’informatica e dell’integrazione tra cyberspazio e mondo fisico, sono sorti intermediari in grado di garantire le transazioni avviate in modo digitale. Prendiamo il caso della compravendita tra individui che non si conoscono e che si trovano per esempio in due nazioni diverse. Anche nell’epoca di Internet, era estremamente complicato fare in modo che ciò avvenisse in modo che sia il venditore che il compratore fossero garantiti, almeno fino a che Pierre Omidyar nel 1995 non ebbe l’idea di eBay:un intermediario che garantisce la fiducia dei partecipanti ad un contratto di trasferimento di proprietà, senza che le parti debbano nemmeno entrare in contatto direttamente.

Il sistema delle aste e delle vendite online di eBay incorpora degli smart contracts, sotto forma di  procedure automatizzate che eseguono le clausole del contratto che i contraenti sottoscrivono quando si affidano a eBay. Questi smart contracts vengono eseguiti sui server di eBay.  Lo stesso avviene genericamente per i marketplace, quando essi siano piattaforme che garantiscano la fiducia delle contropartie per i mercati finanziari online, soprattutto nei casi di esecuzione automatica degli ordini, Le stesse borse oggi possono essere viste come piattaforme per l’esecuzione di smart contracts standardizzati che comportano lo scambio di prodotti finanziari. Questa caratterizzazione è più evidente nel caso dei derivati standard. Uno swap, legato per esempio al valore di un indice, comprende alcune clausole di esecuzione automatica, un input (un messaggio) sotto forma del valore dell’indice,  che fa scattare in una direzione o in un’altra le clausole. Infine c’è il messaggio di output, che indica chi deve pagare e chi deve essere pagato, in moneta o collaterale. Se lo swap è stato sottoscritto su una piattaforma dotata di una cassa di compensazione e garanzia, gli effetti di scambio monetario o di collaterale sono automatici, quindi soddisfacendo le tre caratteristiche degli smart contracts.

Se gli smart contracts sono così diffusi, anche sotto mentite spoglie, perché da un paio d’anni se ne parla tanto? Persino l’EBA, come scrivevamo in un precedente numero di questo magazine, li considera un importantissimo ambito di sviluppo in ambito finanziario e bancario Le risposte in realtà sono due, e vanno sotto il nome di block chain e Internet of Things (IoT).  Il primo aspetto viene trattato nella seconda parte dell’articolo. Di IoT e degli aspetti legali tratteremo nel prossimo articolo di questa serie sulle applicazioni della block chain.

Business logic with smart contracts - BBVA Research

Lo schema funzionale di una piattaforma dove la business logic viene espressa sotto forma di smart contracts

Una block chain è un libro mastro replicato su una rete di nodi paritari dove sono registrati in modo indelebile le informazioni di proprietà di uno o più asset. L’immodificabilità dei record è garantita da tecnologie crittografiche e dal fatto che, una modifica, per essere accettata (per esempio un trasferimento di proprietà di un asset), deve essere confermata dalla maggioranza dei nodi della rete. Oltre che come libro mastro, una block chain può però anche agire come piattaforma di esecuzione di operazioni. Per esempio, la block chain di Bitcoin esegue del codice (molto semplice) che effettua i trasferimenti di proprietà dei bitcoin da un utente all’altro sulla base di un input proveniente dall’esterno (un messaggio da un utente). Già così com’è, quindi, l’infrastruttura Bitcoin può essere usata per effettuare il trasferimento di fondi (in Bitcoin) previsto per esempio dalle clausole di uno smart contract eseguito da qualche altra parte.

Di più, l’architettura software di Bitcoin permette di associare ad un indirizzo una piccola quantità di dati (metadati) che possono essere usati per descrivere un “asset” diverso da un Bitcoin e le istruzioni per il trasferimento di quell’asset da un indirizzo ad un altro. Questi gettoni digitali (digital tokens) sono definiti “monete colorate” (colored coins) e possono essere associati ad un valore che corrisponde a un oggetto o servizio nel mondo reale. Per fare un esempio classico, un cinema potrebbe emettere 100 token dell’asset “assisti al film X all’ora Y” e impegnarsi a scambiare l’acquisto di ogni token da parte di un utente con il biglietto di entrata.

La comunità Bitcoin ha tentato di stabilire uno standard unico per i colored coins sulla block chain ma il tentativo è fallito a metà dello scorso anno.  Diverse start-up e gruppi no-profit hanno quindi sviluppato diverse modalità di integrare i colored coins che però non sono interoperabili tra di loro. Il sistema lanciato a fine 2015 dal Nasdaq per permettere lo scambio di azioni di società nella fase di pre-quotazione utilizza, sulla blockchain di Bitcoin, proprio una implementazione del concetto di colored coins implementata della start-up Chain e basata sul protocollo Open Assets sviluppato da un’altra start-up, CoinPrism.

Il concetto di colored coins può anche essere integrato su altre block chain separate da quella di Bitcoin che, se collegate a questa, sono definite sidechains. In ogni caso, per le dimensioni ristrette dei dati associabili ad un indirizzo della block chain di Bitcoin e per le limitate capacità di elaborazione dell’infrastruttura, i colored coins possono essere utilizzati solo per trasferimenti di proprietà, quindi solo per uno dei possibili effetti di un contratto, sia esso tradizionale o smart. I vantaggi di realizzare gli smart contracts su una block chain sono però notevoli. Innanzitutto, si ottiene la registrazione del contratto su un libro mastro che ne garantisce l’immodificabilità. In secondo luogo, la block chain garantisce con sistemi crittografici estremamente robusti che i messaggi che costituiscono l’input del programma/smart contract vengano effettivamente da chi è autorizzato a mandarli (ogni messaggio è firmato). Questo fa sì che una infrastruttura di smart contracts possa avere aderenti che non si conoscono tra di loro e non si fidano l’un l’altro senza la necessità di un intermediario che dia fiducia a tutti. E’ così per esempio possibile costruire in teoria una eBay distribuita su una rete peer-to-peer senza alcuna entità societaria che la faccia funzionare.

Prima di spiegare fino a che punto ciò è vero, torniamo agli smart contracts più complessi di un semplice trasferimento di asset. Anche prima che emergessero i colored coins (il meccanismo ufficiale di gestione dei blocchi di dati associati ad un indirizzo, i metadati, è stato inserito in Bitcoin nel marzo del 2014) una serie di start-up e organizzazioni nonproft ha iniziato a sviluppare block chain alternative o tecnologie simili ma differenti, come i ledger distribuiti, dotate di caratteristiche a livello di esecuzione di codice e di funzionalità più estese dell’originale. Sono così nate per esempio, solo per rimanere in ambito finanziario, NXT, Ripple, Bitshares e Stellar.

NXT ha funzioni specifiche per lo scambio di asset simili ad azioni e con la possibilità da parte degli utenti di creare nuove valute. NXT non utilizza un meccanismo di mining e quindi la sua valuta e quelle create dagli utilizzatori vengono emesse una volta, o in più step, da un issuer. Inoltre, per validare la creazione di un blocco, NXT non usa il metodo proof-of-work di Bitcoin ma quello proof-of-stake, che prevede che il diritto a creare un nuovo blocco venga assegnato tramite un protocollo pseudo-casuale, con probabilità crescente di assegnazione in base alla quantità di valuta posseduta da ogni nodo.

Ripple, che era nato nei primi anni 2000 come un sistema di pagamento, solo in seguito ha adottato una tecnologia di libro mastro distribuito, definita ledger distribuito, diverso dalla block chain di Bitcoin soprattutto nel fatto che la creazione di blocchi e la conferma delle transazioni non avviene tramite mining e hash ma con un sistema a permessi. Ripple è specializzato nel trasferimento di fondi tra istituzioni finanziarie. Viene usato da diverse banche per il trading in valuta e per il settlement transfrontaliero in tempo reale. Ripple aveva sviluppato Codius, una piattaforma per l’esecuzione di smart contracts basata su server distribuiti e controllati ma ha interrotto lo sviluppo a metà 2015 dopo la release 1.0 rendendo disponibile liberamente il codice sorgente.

Bitshares, creato da Cryptonomex, è alla release 2.0 ed è un sistema basato su block chain specializzato nel trading di strumenti finanziari di ogni tipo che si autodefinisce una DEX (Decentralized Exchange). Nel trading viene usato come collaterale di ogni strumento il bitUSD, una valuta che ha un valore fisso uguale ad un dollaro USA. In ogni momento un bitUSD può essere cambiato in un dollaro. Di recente Bitshares ha aggiunto una funzione Stealth che permette lo scambio di asset tra utenti senza che il resto dei partecipanti alla block chain sappiano chi sono le controparti della transazione. Gli strumenti scambiabili su Bitshares sono estendibili dagli utenti ma per essere accettati devono avere il consenso dei partecipanti.

Stellar, infine, è un sistema per lo scambio di valori che si basa sul libro mastro (ledger) distribuito sui server che compongono la rete Stellar. Tutte le copie del ledger vengono mantenute allineate con un sistema a consenso. La prima versione di Stellar era costruita su Ripple e utilizzava lo stesso protocollo di consenso. Dopo un crash della rete Stellar all’inizio del 2014, Stellar Development Foundation, la nonprofit che sviluppa la tecnologia del sistema, stabilì che il protocollo di consenso di Ripple aveva problemi di fondo (Ripple naturalmente nega e incolpa l’implementazione errata del suo protocollo da parte di Stellar) e ha deciso di cambiare protocollo e ne ha sviluppato uno ex-novo. Si tratta della prima realizzazione di un nuovo concetto denominato Federated Byzantine Agreement (FBA) basato su unità di fiducia (quorum slices) decise dai singoli server che insieme stabiliscono il livello di consenso del sistema. Dalla seconda metà del 2015 la rete Stellar usa il nuovo protocollo. Rispetto ai modelli di validazione totalmente decentralizzati usati dalle block chain tradizionali (proof-of-work e proof-of-stake) il protocollo Stellar richiede poche risorse di calcolo e di banda di rete, consentendo applicazioni a più basso costo. Per questo motivo la rete Stellar viene usata da aziende e non-profit per sviluppare applicazioni finanziarie nei Paesi in via di sviluppo.

Di fronte alla proliferazione di blockchain  e tecnologie simili specializzate, un gruppo di programmatori e sistemisti guidati da Vitalik Buterin, un programmatore di origine russa cresciuto in Canada e oggi residente in Svizzera che si occupa di tecnologie block chain dal 2011 (è nato nel 1994….), e altri sei cofondatori, due anni fa hanno iniziato a lavorare su Ethereum. Ethereum è una piattaforma basata su block chain sullo stile di Bitcoin con una propria cryptovaluta (Ether) che permette l’esecuzione di piccoli programmi che incorporano una logica di business. In altre parole una piattaforma per l’esecuzione di smart contracts. Ethereum può quindi essere utilizzato per qualunque finalità che sia esprimibile con del codice scritto in una serie di linguaggi specializzati come Serpent (simile a Python), Solidity (simile a Javascript) ed LLL (Lisp Like Language, un linguaggio di basso livello molto veloce). Questi linguaggi sono “Turing complete”, ossia possono essere utilizzati per codificare qualunque funzione. In Ethereum gli smart contract sono un programma con associato un database in miniatura. La modifica del database è possibile solo da parte del programma che lo controlla, ossia codice e dati sono incapsulati.  Il programma può ricevere dall’esterno messaggi che devono essere firmati digitalmente. Il programma esamina il messaggio e decide se e come agire.

Gli smart contract (codice più dati) in Ethereum vengono eseguiti in una macchina virtuale presente su ogni nodo della rete. Quando un contratto viene creato sulla block chain, definisce lo stato iniziale del database e poi si ferma, fino a che non viene richiamato da un messaggio, che può provenire da un utente sulla blockchain o da un altro contratto. A questo punto si attiva e compie le operazioni previste dal codice nella situazione attivata dal messaggio. Questo avviene n modo indipendente su tutti i nodi della rete, con risultati identici (stesso programma, stesso input, medesimo output).

Per gestire il caso che un contratto non finisca mai la sua esecuzione (il cosiddetto halting problem di Turing) Ethereum introduce dei costi di transazione (il gas, ossia il carburante) che vengono pagati al miner che la conferma in un blocco. Ogni transazione Ethereum esplicita all’inizio quanti Ether il mittente del messaggio che l’avvia può spendere. Una volta avviato, il contratto consuma il budget di Ether. Se si completa con successo, il budget rimanente viene restituito al mittente. Se invece esaurisce il budget prima di completarsi, il programma si arresta, le modifiche effettuate al database vengono annullate e gli Ether non vengono restituiti. In questo modo una transazione può caricare la rete solo per un tempo finito garantito e viene risolto l’halting problem, che in un sistema distribuito a block chain rappresenta un problema particolarmente grave.

Infatti i singoli nodi non possono essere lasciati liberi di bloccare un programma fuori controllo, altrimenti nodi diversi potrebbero avere opinioni diverse sul risultato di una transazione e il consenso cesserebbe,  e con esso l’affidabilità della rete. Quanto detto è importante anche perché per permettere a un contratto di invocare ed attivare altri contratti, tutti i contratti devono essere eseguiti su tutti i nodi della rete (global execution). Da alcuni commenti di esperti emerge che l’abbandono di Codius da parte di Ripple sia derivato proprio dal fatto che i contratti Codius non garantivano di potere invocare tutti gli altri contratti in quanto non era prevista la global execution.

Esempio di smart-contract in Ethereum espresso in istruzioni di alto livello

Esempio di smart-contract in Ethereum espresso in istruzioni di alto livello

Da quanto detto sembra che Ethereum sia una piattaforma in grado di consentire l’utilizzo di smart contracts secondo la definizione canonica degli stessi: codice non limitato ad un settore applicativo, codice non modificabile senza autorizzazione di tutti i contraenti del contratto, messaggi in entrata e uscita firmati in modo digitale, e in più su una piattaforma distribuita con la garanzia della decentralizzazione data dall’utilizzo di una block chain. Le caratteristiche stanno interessando in effetti il mercato

Di seguito elenchiamo i progetti in corso che coinvolgono la rete Ethereum (naturalmente non sono inseriti quelli rappresentati da semplici contratti caricati sulla piattaforma e non c’è garanzia che la lista sia comunque completa)

Plutus, una piattaforma con una app per smartphone che permette di spendere Bitcoin per acquisti via terminali NFC. I Bitcoin vengono convertiti in tempo reale nella valuta da utilizzare su un mercato dei cambi decentralizzato PlutusDEX e chi spende riceve in cashback dei token, i Pluton, che vengono emessi via smart contract su Ethereum. I Pluton possono essere riconvertiti in Bitcoin.

Da alcuni di questi progetti emerge come l’ecosistema che ruota attorno ad Ethereum (che rappresenta una buona parte dell’universo smart contract oggi)  sta iniziando a uscire dal cyberspazio. E proprio l’interfaccia tra il cyberspazio degli smart contract e il mondo fisico, dove valgono le regole legali e il codice non è legge, è la sfida che devono affrontare gli smart contracts. Ne parleremo nel prossimo articolo di questa serie, dove tratteremo anche di oracoli e di smart property.