Aiuta ad aggiornare questa pagina

🌏

C'è una nuova versione di questa pagina, ma al momento è solo in inglese. Aiutaci a tradurre l'ultima versione.

Questa pagina è incompleta. Se conosci bene l'argomento, modificala e condividi un po' del tuo sapere.

Introduzione agli Smart Contract

Ultima modifica: , Invalid DateTime
Edit page

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 erogato
2

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;
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' è 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() public {
13 owner = msg.sender;
14 cupcakeBalances[address(this)] = 100;
15 }
16
17 // Consente 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 // Consente a tutti 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}
31
Mostra tutto
📋 Copia

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