Aiuta ad aggiornare questa pagina

🌏

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

Nessun bug qui!🐛

Questa pagina non è stata tradotta. Per il momento, è stata intenzionalmente lasciata in inglese.

Questa pagina è incompleta e ci piacerebbe avere il tuo aiuto. Modifica questa pagina e aggiungi tutto ciò che pensi possa essere utile agli altri.

Introduzione agli Smart Contract

Ultima modifica: , Invalid DateTime
Modifica pagina

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. Gli smart contract non sono eliminabili di default e le interazioni con essi sono irreversibili.

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 capire cos’è uno smart contract è quella di un distributore automatico, come descritto da Nick Szabo. Con i giusti input, è garantito un determinato output.

Per ricevere uno snack da un distributore la logica necessaria è la seguente:

1denaro + scelta dello snack = snack erogato
2

Questa logica è programmata nel distributore.

Uno Smart Contract, proprio come un distributore automatico, ha al suo interno una logica programmata. Ecco un semplice esempio di come un distributore automatico potrebbe essere scritto come smart contract:

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' è distribuito:
10 // 1. imposta l'indirizzo di distribuzione come proprietario del contratto
11 // 2. imposta il saldo di cupcake del contratto intelligente distribuito a 100
12 constructor() {
13 owner = msg.sender;
14 cupcakeBalances[address(this)] = 100;
15 }
16
17 // Consenti al proprietario di aumentare il saldo di cupcake del contratto intelligente
18 function refill(uint amount) public {
19 require(msg.sender == owner, "Solo il proprietario può rifornire.");
20 cupcakeBalances[address(this)] += amount;
21 }
22
23 // Consenti a chiunque di comprare cupcake
24 function purchase(uint amount) public payable {
25 require(msg.value >= amount * 1 ether, "Devi pagare almeno 1 ETH per cupcake");
26 require(cupcakeBalances[address(this)] >= amount, "Non ci sono abbastanza cupcake in magazzino per completare questo acquisto");
27 cupcakeBalances[address(this)] -= amount;
28 cupcakeBalances[msg.sender] += amount;
29 }
30}
31
Mostra tutto
📋 Copia

Proprio come un distributore automatico, che elimina la necessità di avere un addetto alla vendita, anche gli smart contract possono sostituire gli intermediari in molti settori.

Senza autorizzazioni

Chiunque può scrivere uno smart contract e distribuirlo nella rete. Per distribuire un contratto, è sufficiente sapere programmare in un linguaggio per Smart Contract e avere abbastanza ETH. Distribuire uno Smart Contract è tecnicamente una transazione, quindi occorre pagare delcarburante così come avviene per un semplice trasferimento di ETH. I costi del carburante per la distribuzione di un contratto sono però molto più elevati.

Per scrivere Smart Contract, Ethereum prevede linguaggi comodi per gli sviluppatori:

  • 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. Maggiori informazioni sulla compilazione

Componibilità

Gli Smart Contract sono pubblici su Ethereum e possono essere considerati come API aperte. Significa che è possibile chiamare altri Smart Contract nel proprio contratto in modo da ampliare enormemente quello che è possibile fare con uno Smart Contract. 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. Sono stati progettati così. Basarsi su informazioni esterne potrebbe pregiudicare il consenso, importante per la sicurezza e la decentralizzazione.

Esistono modi per aggirare questa condizione, grazie agli oracoli.

Un altro limite degli smart contract è la dimensione massima del contratto. Uno smart contract può avere una dimensione massima di 24KB, altrimenti esaurirà il carburante. Questo problema può essere aggirato usando il Diamond Pattern (Schema a Diamante).

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

Questa pagina ha aiutato a rispondere alla tua domanda?