Introduzione
Nick Szabo ha descritto per la prima volta gli smart contract negli anni '90. Allora, definì uno smart contract come uno strumento che formalizza e protegge le reti informatiche combinando dei protocolli e delle interfacce utente.
Szabo ha discusso del potenziale utilizzo degli smart contract in vari campi che coinvolgono gli accordi contrattuali, come i sistemi di credito, l'elaborazione dei pagamenti e la gestione dei diritti sui contenuti.
Gli smart contract sulla blockchain rendono possibile la creazione di protocolli trustless. Questo significa che due parti possono assumere impegni attraverso la blockchain, senza doversi conoscere o fidarsi l'una dell'altra. Possono essere certi che, se le condizioni non vengono soddisfatte, il contratto non sarà eseguito. Inoltre, l'utilizzo di smart contract può rimuovere la necessità di intermediari, riducendo significativamente i costi operativi.
Questo articolo si concentrerà sugli smart contract eseguiti sulla Ethereum Virtual Machine (EVM), una parte essenziale della blockchain di Ethereum.
Come funzionano?
In poche parole, uno smart contract funziona come un programma deterministico. Esegue un'operazione particolare se e quando vengono soddisfatte determinate condizioni. Quindi, un sistema smart contract segue spesso costrutti "if… then…". Nonostante la terminologia popolare, però, gli smart contract non sono contratti legali, né intelligenti. Sono soltanto un frammento di codice in esecuzione su un sistema distribuito (blockchain).
Sul network di Ethereum, gli smart contract sono responsabili dell'esecuzione e della gestione di operazioni blockchain che avvengono quando gli utenti (indirizzi) interagiscono tra di loro. Qualsiasi indirizzo che non sia uno smart contract viene chiamato conto di proprietà esterna (EOA, dall'inglese externally owned account). Quindi, gli smart contract sono controllati da codice informatico, e gli EOA sono controllati dagli utenti.
Fondamentalmente, gli smart contract di Ethereum sono composti da codice contrattuale e due chiavi pubbliche. La prima chiave pubblica è quella fornita dal creatore del contratto. L'altra chiave rappresenta il contratto stesso, agendo come identificatore digitale unico per ogni smart contract.
L'implementazione di qualsiasi smart contract avviene attraverso una transazione sulla blockchain, e può essere attivato solo quando chiamato da un EOA (o da altri smart contract). Tuttavia, la prima attivazione è sempre causata da un EOA (utente).
Caratteristiche principali
Uno smart contract di Ethereum presenta spesso le seguenti caratteristiche:
Distribuito. Gli smart contract vengono replicati e distribuiti in tutti i nodi del network di Ethereum. Questa è una delle differenze fondamentali rispetto ad altre soluzioni basate su server centralizzati.
Deterministico. Gli smart contract eseguono solo le azioni per cui sono stati progettati, quando i requisiti sono soddisfatti. Inoltre, il risultato sarà sempre lo stesso, a prescindere da chi li esegue.
Autonomo. Gli smart contract possono automatizzare ogni sorta di operazione, agendo da programma autoeseguibile. Nella maggior parte dei casi, se uno smart contract non viene attivato, rimarrà "dormiente" e non eseguirà nessuna azione.
Immutabile. Gli smart contract non possono essere modificati una volta implementati. Possono soltanto essere "cancellati" se è stata aggiunta in precedenza una particolare funzione. Quindi, potremmo dire che gli smart contract possono fornire codice a prova di alterazione.
Trustless. Due o più parti possono interagire attraverso smart contract senza conoscersi o fidarsi l'una dell'altra. Inoltre, la tecnologia blockchain garantisce che i dati siano accurati.
Trasparente. Dato che gli smart contract sono basati su una blockchain pubblica, il loro codice sorgente non è solo immutabile ma anche visibile a chiunque.
Posso modificare o cancellare uno smart contract?
Una volta implementato, è impossibile aggiungere nuove funzioni a uno smart contract di Ethereum. Tuttavia, se il suo creatore include nel codice una funzione chiamata SELFDESTRUCT , potrà "cancellare" lo smart contract in futuro - e sostituirlo con uno nuovo. Invece, se la funzione non viene inclusa in anticipo nel codice, non potranno cancellarlo.
Tuttavia, i cosiddetti smart contract aggiornabili permettono agli sviluppatori di avere una maggiore flessibilità sull'immutabilità dei contratti. Ci sono molti modi per creare smart contract aggiornabili, con diversi gradi di complessità.
Prendendo un esempio semplificato, immaginiamo che uno smart contract sia diviso in diversi contratti più piccoli. Alcuni di questi sono progettati per essere immutabili, mentre altri hanno abilitato la funzione 'cancella'. Questo significa che parte del codice (smart contract) può essere cancellata e sostituita, mentre altre funzionalità rimangono intatte.
Vantaggi e casi d'uso
Come codice programmabile, gli smart contract sono altamente personalizzabili e possono essere progettati in tanti modi differenti, offrendo vari tipi di servizi e soluzioni.
Come programmi decentralizzati e autoeseguibili, gli smart contract possono fornire una maggiore trasparenza e costi operativi ridotti. A seconda dell'implementazione, possono anche aumentare l'efficienza e ridurre le spese burocratiche.
Gli smart contract sono particolarmente utili in situazioni che coinvolgono il trasferimento o lo scambio di fondi tra due o più parti.
ERC-20
Limiti
Gli smart contract sono composti da codice informatico scritto da umani. Questo comporta diversi rischi dato che il codice è soggetto a vulnerabilità e bug. Idealmente, dovrebbero essere scritti e implementati da programmatori esperti, soprattutto quando andranno a gestire informazioni sensibili o grandi somme di denaro.
Oltre a questo, alcuni sostengono che i sistemi centralizzati possono fornire la maggior parte delle soluzioni e funzionalità offerte dagli smart contract. La differenza centrale è il fatto che gli smart contract vengono eseguiti su un network P2P distribuito, invece di un server centralizzato. Essendo basati su un sistema blockchain, tendono ad essere immutabili o molto difficili da modificare.
La loro immutabilità può essere perfetta in alcune situazioni, ma molto negativa in altre. Per esempio, quando una Organizzazione Autonoma Decentralizzata (DAO) chiamata "The DAO" è stata hackerata nel 2016, milioni di ether (ETH) sono stati rubati a causa di difetti nel codice del loro smart contract.
E' importante notare che il problema non è derivato dalla blockchain di Ethereum. Invece, è stato causato dall'implementazione scorretta di uno smart contract.
Un altro limite degli smart contract è legato al loro stato giuridico incerto. Non solo perché è una zona grigia in gran parte dei paesi, ma anche perché gli smart contract non sono adatti all'attuale quadro normativo.
Per esempio, molti contratti richiedono che entrambe le parti siano identificate correttamente e abbiano più di 18 anni. La pseudo-anonimità fornita dalla tecnologia blockchain, combinata alla mancanza di intermediari, potrebbe compromettere questi requisiti. Anche se esistono potenziali soluzioni a questo problema, l'applicabilità giuridica degli smart contract è una vera e propra sfida - soprattutto quando si tratta di network distribuiti e senza frontiere.
Critiche
Alcuni entusiasti della blockchain vedono gli smart contract come una soluzione che presto sostituirà e automatizzerà gran parte dei nostri sistemi commerciali e burocratici. Anche se questa è una realtà possibile, è probabilmente ancora lontana dal diventare la norma.
Gli smart contract sono certamente una tecnologia interessante. Tuttavia, essendo distribuiti, deterministici, trasparenti e relativamente immutabili potrebbero risultare meno adatti in alcune situazioni.
Essenzialmente, le critiche si basano sul fatto che gli smart contract non sono una soluzione adeguata per molti problemi nel mondo reale. Infatti, ad alcune organizzazioni conviene utilizzare alternative convenzionali basate su server.
Rispetto agli smart contract, i server centralizzati sono più facili e più economici da mantenere, e tendono a presentare una maggiore efficienza in termini di velocità e comunicazione cross-network (interoperabilità).
In chiusura
Non c'è dubbio che gli smart contract abbiano avuto un grande impatto nel mondo delle criptovalute, e hanno certamente rivoluzionato lo spazio della blockchain. Anche se gli utenti finali non interagiscono direttamente con gli smart contract, è probabile che questi permetteranno in futuro di realizzare una vasta gamma di applicazioni, spaziando dai servizi finanziari alla gestione della catena logistica.
Insieme, gli smart contract e la blockchain hanno il potenziale di rivoluzionare quasi tutte le aree della nostra società. Tuttavia, solo il tempo ci dirà se queste tecnologie all'avanguardia riusciranno a superare le molte barriere che si frappongono all'adozione su larga scala.