Introduzione agli Smart Contract
Cos'è uno Smart Contract?
Uno Smart Contract è semplicemente un programma eseguito sulla blockchain di Ethereum. È una raccolta di codice (le funzioni) e dati (lo stato) che risiede a un indirizzo specifico sulla blockchain di Ethereum.
Gli Smart Contract sono un tipo di account Ethereum. Significa che hanno un saldo e possono inviare transazioni in rete. Però non sono controllati da un utente, ma distribuiti in rete ed eseguiti come programmato. Gli account degli utenti possono quindi interagire con uno Smart Contract inviando transazioni che eseguono una funzione definita sul contratto. Gli Smart Contract possono definire regole, come un normale contratto, e imporle automaticamente tramite codice.
Prerequisiti
È importante aver letto gli argomenti su account, transazioni e macchina virtuale di Ethereum prima di entrare nel mondo degli Smart Contract.
Un distributore automatico digitale
Forse la migliore metafora per descrivere uno Smart Contract è paragonarlo a un distributore automatico, come ha fatto Nick Szabo. Con i giusti input, un determinato output è garantito.
Per ottenere uno snack da un distributore:
1denaro + scelta dello snack = snack erogato2
Questa logica è programmata nel distributore.
Uno Smart Contract, come un distributore automatico, ha all'interno logica programmata. Ecco un semplice esempio di come un distributore automatico potrebbe apparire come Smart Contract:
1pragma solidity 0.6.11;23contract VendingMachine {45 // Dichiara le variabili di stato del contratto6 address public owner;7 mapping (address => uint) public cupcakeBalances;89 // Quando il contratto 'VendingMachine' è distribuito:10 // 1. imposta l'indirizzo di distribuzione come proprietario del contratto11 // 2. imposta il saldo dei cupcake dello Smart Contract distribuito a 10012 constructor() public {13 owner = msg.sender;14 cupcakeBalances[address(this)] = 100;15 }1617 // Consente al proprietario di aumentare il saldo dei cupcake dello Smart Contract18 function refill(uint amount) public {19 require(msg.sender == owner, "Only the owner can refill.");20 cupcakeBalances[address(this)] += amount;21 }2223 // Consente a tutti di acquistare cupcake24 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}31Mostra tuttoCopia
Come un distributore automatico elimina la necessità di avere un addetto alla vendita, anche gli Smart Contract possono sostituire gli intermediari in molti settori.
Senza autorizzazioni
Tutti possono scrivere Smart Contract e distribuirli in rete. È sufficiente sapere programmare in un linguaggio per Smart Contract e avere abbastanza ETH per distribuire un contratto. Distribuire uno Smart Contract è tecnicamente una transazione, quindi devi pagare carburante così come avviene per un semplice trasferimento di ETH. I costi del carburante per la distribuzione di un contratto sono però molto più elevati.
Ethereum prevede linguaggi comodi per gli sviluppatori per scrivere Smart Contract:
- Solidity
- Vyper
Ulteriori informazioni sui linguaggi
I contratti devono però essere compilati prima di poter essere distribuiti affinché la macchina virtuale Ethereum possa interpretarli e memorizzarli. Ulteriori informazioni sulla compilazione
Componibilità
Gli Smart Contract sono pubblici su Ethereum e possono essere paragonati ad API aperte. Significa che puoi chiamare altri Smart Contract dal tuo contratto per la massima estensione possibile. I contratti possono anche 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 inviare richieste HTTP. Questo comportamento è voluto, perché basarsi su informazioni esterne potrebbe compromettere il consenso, che invece è importante per la sicurezza e la decentralizzazione.
Esistono modi per aggirare questa condizione, grazie agli oracoli.
Risorse degli Smart Contract
OpenZeppelin Contracts - Libreria per lo sviluppo sicuro di Smart Contract.
DappSys - Blocchi di programmazione sicuri, semplici e flessibili per Smart Contract.
Letture consigliate
- Smart Contracts: The Blockchain Technology That Will Replace Lawyers – Blockgeeks
- Best Practices for Smart Contract Development – 10 novembre 2019 - Yos Riady