Introduzione agli smart contract
Cos'è uno smart contract?
Uno "smart contract" è semplicemente un programma che viene eseguito sulla blockchain di Ethereum. È un insieme di codice (le sue funzioni) e dati (il suo stato) che risiede a un indirizzo specifico sulla blockchain di Ethereum.
Gli smart contract sono un tipo di account Ethereum. Questo significa che hanno un saldo e possono essere la destinazione 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 uno smart contract inviando transazioni che eseguono una funzione definita nello smart contract stesso. Gli smart contract possono definire regole, come un contratto normale, e applicarle automaticamente tramite il codice. Di default, gli smart contract non possono essere eliminati e le interazioni con essi sono irreversibili.
Prerequisiti
Se hai appena iniziato o cerchi un'introduzione meno tecnica, ti consigliamo la nostra introduzione agli smart contract.
Assicurati di aver letto le informazioni su account, transazioni e sulla Ethereum Virtual Machine prima di tuffarti nel mondo degli smart contract.
Un distributore automatico digitale
Forse la migliore metafora per uno smart contract è un distributore automatico, come descritto da Nick Szabo (opens in a new tab). Con gli input giusti, è garantito un certo output.
Per ottenere uno snack da un distributore automatico:
denaro + selezione dello snack = snack erogato
Questa logica è programmata nel distributore automatico.
Uno smart contract, come un distributore automatico, ha una logica programmata al suo interno. Ecco un semplice esempio di come apparirebbe questo distributore automatico se fosse uno smart contract scritto in Solidity:
pragma solidity 0.8.7;
contract VendingMachine {
// Dichiara le variabili di stato del contratto
address public owner;
mapping (address => uint) public cupcakeBalances;
// Quando il contratto 'VendingMachine' viene distribuito:
// 1. imposta l'indirizzo di distribuzione come proprietario del contratto
// 2. imposta il saldo di cupcake dello smart contract distribuito a 100
constructor() {
owner = msg.sender;
cupcakeBalances[address(this)] = 100;
}
// Consenti al proprietario di aumentare il saldo di cupcake dello smart contract
function refill(uint amount) public {
require(msg.sender == owner, "Only the owner can refill.");
cupcakeBalances[address(this)] += amount;
}
// Consenti a chiunque di acquistare cupcake
function purchase(uint amount) public payable {
require(msg.value >= amount * 1 ether, "You must pay at least 1 ETH per cupcake");
require(cupcakeBalances[address(this)] >= amount, "Not enough cupcakes in stock to complete this purchase");
cupcakeBalances[address(this)] -= amount;
cupcakeBalances[msg.sender] += amount;
}
}
Proprio come un distributore automatico elimina la necessità di un dipendente addetto alla vendita, gli smart contract possono sostituire gli intermediari in molti settori.
Permissionless
Chiunque può scrivere uno smart contract e distribuirlo sulla rete. Devi solo imparare a programmare in un linguaggio per smart contract e avere abbastanza ETH per distribuire il tuo contratto. Distribuire uno smart contract è 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 dispone di linguaggi adatti agli sviluppatori per scrivere smart contract:
- 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à
Gli smart contract sono pubblici su Ethereum e possono essere pensati come API aperte. Questo significa che puoi chiamare altri smart contract nel tuo smart contract per estendere notevolmente ciò che è possibile fare. I contratti possono persino distribuire altri contratti.
Scopri di più sulla componibilità degli smart contract.
Limitazioni
Gli smart contract da soli non possono ottenere informazioni sugli eventi del "mondo reale" perché non possono recuperare dati da fonti offchain. Questo 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 offchain. La soluzione sono gli oracoli, che sono strumenti che acquisiscono dati offchain e li rendono disponibili agli smart contract.
Un'altra limitazione degli smart contract è la dimensione massima del contratto. Uno smart contract può avere una dimensione massima di 24KB, altrimenti esaurirà il gas. Questo limite può essere aggirato utilizzando Il Diamond Pattern (opens in a new tab).
Contratti multisig
I contratti multisig (a firma multipla) sono account smart contract 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 multisig 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 multisig possono essere utilizzati per la semplice governance delle DAO. I multisig 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 multisig 4/7 richiede quattro firme valide su sette possibili. Questo significa che i fondi sono ancora recuperabili anche se si perdono tre firme. In questo caso, significa anche che la maggioranza dei detentori di chiavi deve essere d'accordo e firmare affinché il contratto venga eseguito.
Risorse sugli smart contract
Contratti OpenZeppelin - Libreria per lo sviluppo sicuro di smart contract.
- openzeppelin.com/contracts/ (opens in a new tab)
- GitHub (opens in a new tab)
- Forum della community (opens in a new tab)
Letture consigliate
- Coinbase: Cos'è uno smart contract? (opens in a new tab)
- Chainlink: Cos'è uno smart contract? (opens in a new tab)
- Video: Spiegazione semplice - Smart Contract (opens in a new tab)
- Cyfrin Updraft: Piattaforma di apprendimento e auditing Web3 (opens in a new tab)
Tutorial: Firme degli smart contract (EIP-1271) su Ethereum
- EIP-1271: Firma e verifica delle firme degli smart contract – Come l'EIP-1271 consente agli smart contract di verificare le firme, con una guida dettagliata dell'implementazione di Safe.
Ultimo aggiornamento della pagina: 25 febbraio 2026