Smart contract: quando il codice esegue le regole
La blockchain è stata inizialmente associata soprattutto al trasferimento di valore digitale. Bitcoin ha dimostrato che è possibile inviare denaro attraverso internet senza che ogni transazione debba essere confermata da una banca o da un'altra istituzione centrale. La blockchain, però, non sa gestire solo l'informazione su chi ha inviato qualcosa a chi. Può anche conservare ed eseguire regole programmate in anticipo.
È proprio qui che entrano in gioco gli smart contract: programmi che girano direttamente sulla blockchain e che, al verificarsi di condizioni stabilite in precedenza, eseguono un'azione definita. Possono per esempio trasferire un token, scambiare asset digitali, gestire il collaterale di un prestito o emettere un NFT.
Grazie agli smart contract la blockchain si è trasformata da tecnologia pensata soprattutto per il trasferimento di criptovalute in un ambiente su cui possono funzionare intere applicazioni. Sono alla base, per esempio, degli exchange decentralizzati, della DeFi, delle stablecoin, degli NFT o degli asset tokenizzati.
Che cos'è uno smart contract
Il nome smart contract può risultare un po' fuorviante. Non si tratta necessariamente di un contratto in senso giuridico e tanto meno di un programma «intelligente» come l'intelligenza artificiale.
Uno smart contract è, nella sua essenza, un programma salvato sulla blockchain che contiene regole stabilite in anticipo ed esegue determinate operazioni in base a esse.
Su Ethereum uno smart contract ha un proprio indirizzo sulla blockchain, contiene il proprio codice e insieme i dati che rappresentano il suo stato attuale. Può per esempio detenere criptovalute o token e gli utenti possono interagire con esso tramite transazioni sulla blockchain. Il contratto esegue poi la funzione programmata nel suo codice.
Se si verifica la condizione A → esegui l'azione B.
Per esempio:
- – Se l'utente invia l'importo richiesto → consegnagli il token.
- – Se il valore del collaterale scende sotto la soglia stabilita → avvia la liquidazione.
Uno smart contract quindi non cerca di comprendere l'intenzione dell'utente. Esegue soltanto le regole che ha programmate.
Lo smart contract come distributore automatico
Uno dei paragoni più semplici per uno smart contract è il distributore automatico. Quando ci avviciniamo, non dobbiamo negoziare con un commesso. Inseriamo l'importo giusto, scegliamo il prodotto e il distributore, secondo le proprie regole, eroga la merce.
denaro + scelta del prodotto = erogazione del prodotto
Se inseriamo troppo poco denaro, la condizione non è soddisfatta e il distributore non esegue l'operazione richiesta. Se invece le condizioni sono soddisfatte, non serve che qualcun altro decida manualmente se abbiamo diritto alla merce.
Lo smart contract funziona in modo simile. La differenza è che al posto di un distributore fisico abbiamo un programma salvato sulla blockchain e al posto di una lattina il risultato può essere per esempio il trasferimento di una criptovaluta, l'emissione di un token o l'esecuzione di un'operazione finanziaria.
Lo smart contract non decide. Esegue.
Quali problemi risolvono gli smart contract
Nel sistema finanziario o commerciale tradizionale abbiamo spesso bisogno di una qualche forma di intermediario.
Immaginiamo uno scambio fra due persone che non si conoscono. Una deve pagare del denaro e l'altra deve poi consegnare un determinato asset. Nasce un semplice problema di fiducia.
Chi deve adempiere per primo alla propria parte dell'accordo?
Proprio per questo nel mondo tradizionale esistono banche, borse, depositari, società di pagamento o altre istituzioni che controllano le regole, custodiscono i fondi e garantiscono il regolamento delle transazioni.
Lo smart contract permette di trasferire parte di questo ruolo a un programma.
Immaginiamo per esempio lo scambio di un asset digitale contro 1 000 USDC. L'acquirente deposita 1 000 USDC nello smart contract. Il venditore deposita l'asset digitale richiesto. Lo smart contract verifica se entrambe le condizioni sono soddisfatte. In caso affermativo, invia l'asset all'acquirente e gli USDC al venditore.
In questo caso una parte non deve fidarsi ciecamente del fatto che l'altra, dopo aver ricevuto i fondi, rispetti davvero il proprio impegno. Le regole di regolamento fanno parte del programma.
Questo naturalmente non significa che gli smart contract abbiano eliminato del tutto gli intermediari. Possono però automatizzare alcune attività che in passato richiedevano un gestore o un'istituzione separata.

Ethereum e la blockchain programmabile
Bitcoin supporta una certa logica programmabile, ma la sua funzione principale resta il trasferimento sicuro e la conservazione del valore digitale.
Ethereum ha ampliato notevolmente questa idea. La sua blockchain è stata progettata per poter eseguire programmi più generali. Gli smart contract su Ethereum oggi possono essere scritti per esempio nei linguaggi di programmazione Solidity o Vyper e, una volta pubblicati, vengono eseguiti dalla rete Ethereum.
Per esempio un utente deposita ETH in un protocollo di prestito, lo smart contract calcola il valore del collaterale, consente di prendere in prestito una stablecoin a fronte di esso e poi verifica continuamente se il collaterale soddisfa ancora le condizioni richieste.
È proprio questa programmabilità ad aver creato le fondamenta di gran parte dell'attuale ecosistema di applicazioni decentralizzate.
Usare gli smart contract ha un costo
Anche se uno smart contract può automatizzare parte di un processo, la sua esecuzione non è gratuita.
Ogni operazione eseguita dalla blockchain richiede determinate risorse di calcolo. Su Ethereum il costo di questo lavoro viene chiamato gas.
L'utente quindi non paga soltanto per il classico trasferimento di ETH. La commissione si paga anche quando si interagisce con gli smart contract. La pubblicazione di un nuovo smart contract è di per sé una transazione sulla blockchain e di norma richiede più gas di un semplice trasferimento di criptovaluta.
Per questo i costi delle diverse operazioni possono variare in modo significativo. Un semplice trasferimento di token può richiedere meno lavoro computazionale di un'operazione complessa in un'applicazione di finanza decentralizzata che, nel corso di una sola transazione, interagisce con diversi smart contract.
Proprio i costi più elevati e la capacità limitata della rete principale sono fra i motivi dello sviluppo delle reti Layer 2, che permettono di elaborare molte operazioni in modo più efficiente ed economico.
Che cosa è nato grazie agli smart contract
Exchange decentralizzati
Su un classico exchange di criptovalute il sistema di trading è gestito da una società specifica. Un exchange decentralizzato, ossia un DEX, può gestire parte di questo processo tramite smart contract.
L'utente per esempio collega il proprio wallet, sceglie il token che vuole scambiare e conferma la transazione. Lo smart contract esegue poi lo scambio secondo le proprie regole e determina per esempio:
- – come viene calcolato il prezzo,
- – quanti token riceve l'utente,
- – quanto è alta la commissione,
- – come viene gestita la liquidità,
- – dove verranno inviati i fondi.
Lo scambio stesso quindi non deve avvenire all'interno di un database gestito da un singolo exchange, ma tramite regole scritte sulla blockchain.
DeFi
Ancora più marcato è il ruolo degli smart contract nella finanza decentralizzata, ossia nella DeFi. Qui gli smart contract possono gestire per esempio:
- – i prestiti,
- – le garanzie in criptovaluta,
- – lo scambio di asset,
- – la gestione della liquidità,
- – i derivati,
- – il pagamento delle ricompense,
- – alcune forme di staking.
In un prestito garantito da criptovalute lo smart contract può stabilire il valore minimo del collaterale e, in caso di discesa sotto la soglia stabilita, avviare automaticamente la liquidazione. Le regole quindi non devono essere controllate manualmente da un dipendente di un'istituzione.
Stablecoin
Gli smart contract sono importanti anche per le stablecoin. Grazie a uno smart contract un token può essere creato, trasferito fra indirizzi o nuovamente rimosso dalla circolazione.
In alcuni sistemi di stablecoin più decentralizzati gli smart contract gestiscono inoltre la garanzia in criptovaluta e verificano automaticamente se il suo valore resta sufficiente.
La stablecoin è un asset. Lo smart contract è uno degli strumenti che possono gestire le regole del suo funzionamento.
NFT
Anche gli NFT si basano tipicamente su smart contract. Il contratto può definire:
- – quanti NFT esistono,
- – a chi appartiene un determinato token,
- – come può essere trasferito,
- – quali dati identificativi sono a esso collegati,
- – quali regole si applicano a esso.
L'immagine, la musica o un altro contenuto multimediale non devono peraltro essere necessariamente archiviati per intero all'interno dello smart contract. Il contratto può però rappresentare la registrazione sulla blockchain della proprietà di quel token e delle regole del suo trasferimento.
Tokenizzazione degli asset
Gli smart contract hanno un ruolo importante anche nella tokenizzazione. Un token sulla blockchain può, a determinate condizioni, rappresentare una quota di un altro asset o un certo diritto economico. Può trattarsi per esempio di:
- – un'obbligazione,
- – un fondo,
- – una materia prima,
- – un immobile,
- – un altro strumento finanziario.
Lo smart contract può quindi gestire per esempio i trasferimenti del token, le autorizzazioni dei singoli utenti o il modo in cui vengono ripartiti determinati pagamenti.
Qui è però importante distinguere fra il token sulla blockchain e il diritto che dovrebbe rappresentare. Lo smart contract sa gestire il token, ma il rapporto giuridico con l'asset reale dipende ancora dalla concreta struttura del prodotto e dalle regole in vigore.
Gli smart contract non riguardano solo le criptovalute
Il principio dello smart contract può essere utilizzato anche al di fuori delle applicazioni puramente cripto.
IBM descrive gli smart contract come un modo per automatizzare processi basati sulla logica «se o quando si verifica una certa condizione, esegui una determinata azione». Fra i possibili utilizzi cita per esempio lo sblocco di fondi, la registrazione di eventi o l'avvio del passo successivo di un processo di lavoro.
Un principio simile può essere applicato per esempio nella catena di fornitura. Immaginiamo il trasporto di una determinata merce. Il sistema può registrare le informazioni sulle singole fasi del trasporto. Dopo la conferma della consegna può seguire l'avvio automatico di un altro processo, per esempio lo sblocco del pagamento o la modifica dello stato dell'ordine.
IBM riporta esempi di sistemi blockchain utilizzati nel tracciamento dei prodotti farmaceutici, nella gestione dei rapporti fra fornitori e clienti o nell'ambito del commercio internazionale.

Gli smart contract come LEGO digitali
Una delle caratteristiche più interessanti degli smart contract è la loro capacità di collaborare fra loro.
Su una blockchain pubblica le applicazioni e gli smart contract possono comunicare con contratti già pubblicati e utilizzarne le funzioni in modo simile alle interfacce software aperte. Questo principio viene chiamato componibilità.
Il modo più semplice è immaginare i singoli smart contract come mattoncini LEGO. Ogni mattoncino può svolgere una determinata funzione. Uno gestisce una stablecoin. Un altro un exchange decentralizzato. Un terzo eroga prestiti. Un quarto recupera i dati di prezzo.
Lo sviluppatore di una nuova applicazione non deve creare tutte queste funzioni da zero. Può utilizzare alcuni smart contract già esistenti come elementi costruttivi.
Immaginiamo per esempio un'applicazione per la gestione automatica di un portafoglio di criptovalute. Essa può:
- – utilizzare una stablecoin creata da un altro protocollo,
- – ottenere il prezzo di un asset da un oracle,
- – scambiare un token tramite un exchange decentralizzato,
- – depositare poi i fondi in un altro protocollo DeFi.
Tutto questo può avvenire tramite diversi smart contract collegati fra loro.
È proprio la componibilità uno dei motivi per cui l'ecosistema delle applicazioni decentralizzate riesce a nascere così rapidamente.
Ha però anche un rovescio della medaglia. Se un'applicazione dipende da diversi altri smart contract, un problema in uno di essi può propagarsi. Il vantaggio dell'interconnessione diventa così anche un nuovo tipo di rischio.
Lo smart contract non vede il mondo reale
Uno smart contract sa lavorare molto bene con le informazioni che esistono direttamente sulla blockchain. Può per esempio verificare:
- – quanti token possiede un determinato indirizzo,
- – se è avvenuta una specifica transazione,
- – quanti fondi sono depositati in un altro contratto,
- – qual è lo stato di una determinata applicazione blockchain.
Da solo, però, normalmente non è in grado di sapere che cosa accade al di fuori della blockchain. Non sa per esempio:
- – qual è il prezzo attuale dell'oro,
- – se oggi piove,
- – chi ha vinto un incontro sportivo,
- – qual è il cambio EUR/USD,
- – se una spedizione è davvero arrivata,
- – se un'azienda ha adempiuto a un determinato obbligo.
Se uno smart contract ha bisogno di lavorare con dati esterni alla blockchain, deve ottenerli tramite altri sistemi. È proprio qui che entrano in gioco gli oracles.
Oracles: il ponte fra la blockchain e il mondo esterno
Un oracle fornisce allo smart contract informazioni che provengono dall'esterno della blockchain.
Immaginiamo di nuovo un'applicazione di prestito. L'utente deposita ETH per un valore di 10 000 dollari come garanzia e prende in prestito a fronte di essa una stablecoin. Lo smart contract conosce la quantità di ETH depositata nel sistema. Non sa però automaticamente quanto costa un ETH in quel momento in dollari.
Se deve monitorare il valore del collaterale, ha bisogno di un dato di prezzo esterno. Questo può essere fornito da un oracle. Grazie a ciò lo smart contract può lavorare per esempio con i prezzi di asset finanziari, con i risultati di eventi o con altri dati provenienti dall'esterno della blockchain.
In questo modo nasce però un nuovo problema.
Che cosa succede se un oracle fornisce un valore errato?
Uno smart contract può essere programmato alla perfezione e nonostante questo eseguire un'azione sbagliata, se riceve dati di input non corretti.
Per esempio un prezzo errato di un asset può portare il sistema di prestito a liquidare una posizione che in condizioni normali non sarebbe stata liquidata.
Questo problema viene spesso chiamato oracle problem. La sicurezza del sistema quindi non dipende soltanto dallo smart contract in sé, ma anche dalla qualità e dall'affidabilità dei dati che utilizza.
Lo smart contract fa ciò che è scritto nel codice
Uno dei maggiori vantaggi degli smart contract è la prevedibilità: se il contratto ha regole stabilite in modo fisso, le esegue senza decidere autonomamente. Allo stesso tempo questa è una delle loro maggiori debolezze. Il programma non sa che cosa intendeva lo sviluppatore, ma solo che cosa ha effettivamente programmato.
Per questo nello sviluppo degli smart contract la sicurezza è straordinariamente importante. Questi programmi gestiscono spesso asset digitali reali e un errore può avere conseguenze finanziarie immediate. Un ruolo importante lo giocano quindi i test, i controlli di sicurezza e l'audit prima ancora della pubblicazione del contratto sulla rete principale.
La storia delle criptovalute dimostra che un errore in uno smart contract non è solo un problema teorico.
Uno dei casi più noti è stato il progetto The DAO nel 2016. Un errore nel suo smart contract è stato sfruttato per sottrarre circa 3,6 milioni di ETH. L'evento ha poi generato una discussione molto complessa su se e come Ethereum dovesse reagire all'incidente e alla fine ha contribuito alla divisione della rete in Ethereum ed Ethereum Classic.
Questo caso ha mostrato un principio molto importante. La blockchain può eseguire correttamente le regole di uno smart contract, ma se l'errore è già nelle regole stesse, la decentralizzazione non lo corregge automaticamente.
La tecnologia può quindi eliminare parte della fiducia operativa nell'intermediario, ma allo stesso tempo aumenta l'importanza della correttezza del programma.

Immutabilità, aggiornamenti e controllo
Si dice spesso che uno smart contract, una volta pubblicato, non può più essere modificato.
Il principio di base è effettivamente questo: il codice salvato su un determinato indirizzo blockchain è normalmente immutabile. Questo aiuta a creare fiducia nel fatto che nessuno possa riscrivere le regole senza preavviso.
Ha però anche uno svantaggio. Se nel contratto emerge un errore critico, non sarebbe possibile correggerlo con la stessa semplicità con cui aggiorniamo una normale applicazione per smartphone.
Per questo sono nati diversi meccanismi che permettono di aggiornare le applicazioni. Per esempio il cosiddetto modello proxy separa la parte del sistema con cui l'utente interagisce dal programma che contiene la logica attuale. Gli sviluppatori possono poi, a determinate condizioni, pubblicare una nuova versione della logica senza che cambi l'indirizzo principale utilizzato dagli utenti.
Nasce però così un altro compromesso. Se qualcuno può aggiornare le regole del sistema, dobbiamo sapere:
Chi detiene questo potere?
- – una singola azienda,
- – una singola persona,
- – un gruppo di sviluppatori,
- – una DAO,
- – un multisig.
Uno smart contract può quindi essere tecnicamente basato su una blockchain decentralizzata, ma alcune sue parti importanti possono dipendere ancora da un gruppo di persone relativamente ristretto.
Uno dei modi per ridurre la dipendenza da una sola persona o da una sola chiave privata è il multisig.
Il multisig, ossia multiple signature, richiede diverse firme indipendenti per eseguire una determinata azione.
Per esempio una configurazione 3 su 5 significa che esistono cinque chiavi autorizzate, ma per eseguire l'operazione devono essere d'accordo almeno tre.
Il multisig viene utilizzato per esempio nella gestione dei fondi o di alcune parti di una DAO. Il vantaggio è che la perdita o la compromissione di una chiave non comporta automaticamente la perdita del controllo sull'intero sistema.
Il multisig non è però sinonimo di decentralizzazione. Se su una modifica importante decidono per esempio tre persone su cinque, si tratta comunque di un gruppo piuttosto ristretto.
Per questo con gli smart contract ha senso non guardare soltanto se utilizzano una blockchain, ma anche chi ha realmente il potere di modificarne il funzionamento.
Questo è uno degli equivoci più frequenti.
Un'applicazione può girare su una blockchain decentralizzata e contenere comunque numerosi elementi centralizzati:
- – l'interfaccia web è gestita da una singola società,
- – l'aggiornamento del contratto è controllato da alcuni amministratori,
- – i dati sono forniti da un numero limitato di servizi oracle,
- – il gestore può sospendere alcune funzioni,
- – una determinata chiave può modificare alcuni parametri del sistema.
Per questo non è corretto dire:
«Usa uno smart contract, quindi è decentralizzato.»
La domanda più corretta è:
«Quali parti del sistema sono decentralizzate e quali richiedono ancora fiducia in persone o infrastrutture specifiche?»
Lo stesso principio vale per le stablecoin, per le reti Layer 2 e per altri ambiti del mercato delle criptovalute.
Uno smart contract non è automaticamente un contratto giuridico
La parola «contract» può dare l'impressione che si tratti di un contratto giuridicamente vincolante. Lo smart contract è però prima di tutto un programma.
Può eseguire le condizioni di un determinato accordo, ma di per sé non deve necessariamente rappresentare un contratto in senso giuridico classico.
I vantaggi degli smart contract
Automazione: non appena le condizioni definite sono soddisfatte, il programma può eseguire il passo successivo senza intervento manuale.
Trasparenza: sulle blockchain pubbliche è spesso possibile seguire le transazioni di uno smart contract e in molti casi anche il suo codice sorgente pubblicato. Il codice pubblico di per sé non significa però ancora che sia semplice valutarne la correttezza.
Programmabilità: gli smart contract permettono di creare regole molto più complesse di un semplice trasferimento di criptovaluta.
Componibilità: i singoli contratti possono essere combinati e utilizzati come elementi costruttivi di altre applicazioni.
Disponibilità globale: un'applicazione blockchain pubblica può essere accessibile agli utenti con un wallet compatibile indipendentemente dal luogo da cui si collegano alla rete. Nella pratica l'accesso può però essere influenzato per esempio dalla specifica interfaccia utente, dalla regolamentazione o da altri servizi attorno allo smart contract stesso.
Quali rischi comportano gli smart contract
Rischio di errore nel codice: se il contratto gestisce asset reali, anche un piccolo errore di programmazione può avere conseguenze finanziarie molto gravi.
Rischio oracle: lo smart contract può essere corretto, ma lavorare con dati esterni errati.
Rischio dell'amministratore: se il sistema può essere aggiornato o sospeso, conta molto chi detiene questi poteri.
Rischio di altri smart contract: la componibilità significa che le applicazioni possono essere interconnesse. Un problema in un protocollo può influenzare il sistema che dipende da esso.
Rischio della blockchain: lo smart contract dipende inoltre dalla rete blockchain su cui funziona, comprese le sue commissioni, la sua disponibilità e le sue caratteristiche di sicurezza.
Rischio dell'utente: le transazioni sulla blockchain sono spesso difficilmente reversibili. L'utente può interagire con un contratto fraudolento, approvare una transazione pericolosa, concedere al contratto autorizzazioni troppo ampie per operare con i token o utilizzare un'interfaccia utente falsa.
La sicurezza di uno smart contract non significa quindi automaticamente la sicurezza dell'intero percorso dall'utente fino alla blockchain.
Che cosa verificare prima di usare uno smart contract
Un utente comune naturalmente non studierà il linguaggio di programmazione Solidity prima di ogni transazione. Esistono comunque alcune semplici domande che aiutano a comprendere meglio il rischio di un'applicazione.
Chi ha creato l'applicazione? Il team di sviluppo è noto e il progetto ha una storia verificabile?
Da quanto tempo funziona il sistema? Una tecnologia nuova può essere interessante, ma allo stesso tempo ha alle spalle un periodo più breve di funzionamento reale.
Gli smart contract sono stati sottoposti ad audit? Un audit di sicurezza non è la garanzia che nel programma non esista alcun errore, ma può individuare alcuni rischi significativi.
Il contratto può essere aggiornato? Se sì, chi può effettuare la modifica?
Esiste una chiave di amministrazione o un multisig? È importante sapere chi ha la possibilità di modificare le parti importanti del sistema.
L'applicazione usa un oracle? Se sì, in che modo ottiene i dati esterni?
Da quali altri protocolli dipende? Il collegamento con altri smart contract può portare benefici, ma anche ulteriori dipendenze.
Che cosa succede in caso di problema? Il sistema ha la possibilità di fermare alcune funzioni o di effettuare un aggiornamento di sicurezza?
Più un'applicazione è complessa, più è importante capire che la sua sicurezza non è determinata da un singolo smart contract, ma dall'intera architettura che lo circonda.
Conclusione
Lo smart contract è alla base un concetto semplice: un programma salvato sulla blockchain riceve un determinato input, verifica le regole stabilite in anticipo ed esegue un'azione concreta. È proprio questa idea ad aver permesso alla blockchain di estendere il proprio utilizzo dal trasferimento di criptovalute alle applicazioni finanziarie, agli asset digitali e ai processi automatizzati.
Allo stesso tempo gli smart contract non significano che dal mondo digitale siano scomparsi il bisogno di fiducia o il rischio. La fiducia si sposta soltanto in parte. Invece di chiederci soltanto «Posso fidarmi dell'intermediario?», dobbiamo chiederci anche «Posso fidarmi del codice, dei dati che utilizza e delle persone che possono eventualmente modificarne il funzionamento?»
Non basta quindi sapere che un determinato servizio «usa smart contract». Più importante è capire che cosa fa realmente il contratto, da dove ottiene le informazioni, chi ha il controllo su di esso e da che cosa dipende. Gli smart contract non sono automaticamente sicuri né decentralizzati, ma sono uno dei principali elementi costruttivi delle attuali applicazioni blockchain.
Questo testo ha finalità puramente informative ed educative e non costituisce consulenza in materia di investimenti. Le cripto-attività sono volatili e potresti perdere l'intero importo investito.
Author
Tomáš Bára
Stablecoin: denaro digitale tra cripto e finanza tradizionale
Bitcoin ed Ethereum hanno dimostrato quanto possa essere volatile il mondo delle criptovalute. Proprio per questo, una delle parti più importanti di questo mercato è diventata quella degli stablecoin – asset il cui obiettivo è non modificare il proprio valore. Scopri cosa mantiene stabile il loro prezzo, in cosa si differenziano USDC, USDT o i token garantiti da criptovalute, e cosa ha rivelato il crollo di TerraUSD.
Layer 1 e Layer 2: perché la blockchain ha bisogno di altri livelli
Bitcoin ed Ethereum hanno dimostrato che la blockchain può funzionare senza un'autorità centrale. Ma con la crescita del numero di utenti sono arrivati i limiti di capacità e le commissioni in aumento. Scopri come Layer 1 costituisce una base sicura e come le soluzioni Layer 2 come la Lightning Network o i rollup la aiutano a gestire più traffico.