Vai al contenuto principale
Change page

Introduzione ai contratti intelligenti

Ultimo aggiornamento della pagina: 25 febbraio 2026

Cos'è un contratto intelligente?

Un "contratto intelligente" è semplicemente un programma che viene eseguito sulla blockchain di Ethereum. È una raccolta di codice (le sue funzioni) e dati (il suo stato) che risiede a un indirizzo specifico sulla blockchain di Ethereum.

I contratti intelligenti sono un tipo di account di Ethereum. Ciò significa che hanno un saldo e possono essere l'obiettivo di transazioni. Tuttavia, non sono controllati da un utente, ma vengono distribuiti sulla rete ed eseguiti come programmati. Gli account utente possono quindi interagire con un contratto intelligente inviando transazioni che eseguono una funzione definita sul contratto intelligente. I contratti intelligenti possono definire regole, come un contratto normale, e applicarle automaticamente tramite il codice. I contratti intelligenti non possono essere eliminati per impostazione predefinita e le interazioni con essi sono irreversibili.

Prerequisiti

Se hai appena iniziato o cerchi un'introduzione meno tecnica, ti consigliamo la nostra introduzione ai contratti intelligenti.

Assicurati di aver letto le informazioni su account, transazioni e sulla macchina virtuale di Ethereum prima di tuffarti nel mondo dei contratti intelligenti.

Un distributore automatico digitale

Forse la migliore metafora per un contratto intelligente è un distributore automatico, come descritto da Nick Szabo (opens in a new tab). Con gli input giusti, è garantito un certo output.

Per ottenere uno spuntino da un distributore automatico:

1money + snack selection = snack dispensed

Questa logica è programmata nel distributore automatico.

Un contratto intelligente, come un distributore automatico, ha una logica programmata al suo interno. Ecco un semplice esempio di come apparirebbe questo distributore automatico se fosse un contratto intelligente scritto in Solidity:

1pragma solidity 0.8.7;
2
3contract VendingMachine {
4
5 // Dichiara le variabili di stato del contratto
6 address public owner;
7 mapping (address => uint) public cupcakeBalances;
8
9 // Quando il contratto 'VendingMachine' viene distribuito:
10 // 1. imposta l'indirizzo di distribuzione come proprietario del contratto
11 // 2. imposta il saldo dei cupcake dello smart contract distribuito a 100
12 constructor() {
13 owner = msg.sender;
14 cupcakeBalances[address(this)] = 100;
15 }
16
17 // Consenti al proprietario di aumentare il saldo dei cupcake dello smart contract
18 function refill(uint amount) public {
19 require(msg.sender == owner, "Only the owner can refill.");
20 cupcakeBalances[address(this)] += amount;
21 }
22
23 // Consenti a chiunque di acquistare cupcake
24 function purchase(uint amount) public payable {
25 require(msg.value >= amount * 1 ether, "You must pay at least 1 ETH per cupcake");
26 require(cupcakeBalances[address(this)] >= amount, "Not enough cupcakes in stock to complete this purchase");
27 cupcakeBalances[address(this)] -= amount;
28 cupcakeBalances[msg.sender] += amount;
29 }
30}
Mostra tutto

Così come un distributore automatico elimina la necessità di un dipendente addetto alla vendita, i contratti intelligenti possono sostituire gli intermediari in molti settori.

Senza permessi

Chiunque può scrivere un contratto intelligente e distribuirlo sulla rete. Devi solo imparare a programmare in un linguaggio per contratti intelligenti e avere abbastanza ETH per distribuire il tuo contratto. La distribuzione di un contratto intelligente è tecnicamente una transazione, quindi devi pagare il gas nello stesso modo in cui devi pagare il gas per un semplice trasferimento di ETH. Tuttavia, i costi del gas per la distribuzione del contratto sono molto più alti.

Ethereum ha linguaggi adatti agli sviluppatori per scrivere contratti intelligenti:

  • Solidity
  • Vyper

Maggiori informazioni sui linguaggi

Tuttavia, devono essere compilati prima di poter essere distribuiti, in modo che la macchina virtuale di Ethereum possa interpretare e memorizzare il contratto. Maggiori informazioni sulla compilazione

Componibilità

I contratti intelligenti sono pubblici su Ethereum e possono essere pensati come API aperte. Ciò significa che puoi chiamare altri contratti intelligenti nel tuo contratto intelligente per estendere notevolmente ciò che è possibile fare. I contratti possono persino distribuire altri contratti.

Scopri di più sulla componibilità dei contratti intelligenti.

Limitazioni

I contratti intelligenti da soli non possono ottenere informazioni sugli eventi del "mondo reale" perché non possono recuperare dati da fonti fuori catena. Ciò significa che non possono rispondere agli eventi nel mondo reale. Questo è intenzionale. Affidarsi a informazioni esterne potrebbe compromettere il consenso, che è importante per la sicurezza e la decentralizzazione.

Tuttavia, è importante che le applicazioni blockchain siano in grado di utilizzare dati fuori catena. La soluzione sono gli oracoli, che sono strumenti che acquisiscono dati fuori catena e li rendono disponibili ai contratti intelligenti.

Un'altra limitazione dei contratti intelligenti è la dimensione massima del contratto. Un contratto intelligente può avere una dimensione massima di 24KB, altrimenti esaurirà il gas. Questo problema può essere aggirato utilizzando Il Pattern Diamond (opens in a new tab).

Contratti multifirma

I contratti multifirma (firme multiple) sono account di contratti intelligenti che richiedono più firme valide per eseguire una transazione. Questo è molto utile per evitare singoli punti di vulnerabilità per i contratti che detengono quantità sostanziali di ether o altri token. I multifirma dividono anche la responsabilità per l'esecuzione del contratto e la gestione delle chiavi tra più parti e impediscono che la perdita di una singola chiave privata porti alla perdita irreversibile di fondi. Per questi motivi, i contratti multifirma possono essere utilizzati per la semplice governance delle DAO. I multifirma richiedono N firme su M possibili firme accettabili (dove N ≤ M e M > 1) per essere eseguiti. N = 3, M = 5 e N = 4, M = 7 sono comunemente usati. Un multifirma 4/7 richiede quattro firme valide su sette possibili. Ciò significa che i fondi sono ancora recuperabili anche se si perdono tre firme. In questo caso, significa anche che la maggioranza dei detentori delle chiavi deve essere d'accordo e firmare affinché il contratto venga eseguito.

Risorse sui contratti intelligenti

Contratti OpenZeppelin - Libreria per lo sviluppo sicuro di contratti intelligenti.

Letture consigliate

Tutorial: Firme dei contratti intelligenti (EIP-1271) su Ethereum

Questo articolo è stato utile?