Tempo di lettura: 5 minuti

Ogni giorno sentiamo parlare di Bitcoin, ma anche Ethereum, Blockchain e Smart Contracts. Informandoti un po’ online ti sei incuriosito al mondo delle DApps Ethereum, Token e vuoi provare a scrivere il tuo primo Smart Contract? Scopri come, nella guida di Coiners!

Cos’è uno Smart Contract?

Cominciamo dalla teoria, per fornire gli strumenti necessari a capire davvero questa tecnologia. Programmare Smart Contracts senza conoscere l’architettura su cui si andrà a lavorare non è assolutamente una buona idea!

Uno Smart Contract è un programma, del codice che viene eseguito nelle Ethereum Virtual Machines installate sui nodi della rete Ethereum! Cos’è l’Ethereum Virtual Machine (EVM)? Molto probabilmente conosci la Java Virtual Machine (JVM) che serve per eseguire il bytecode di codice Java, immagina la EVM come il corrispettivo per il codice decentralizzato.

Perchè gli Smart Contracts sono importanti?

cosa sono gli smart contracts
Gli Smart Contracts eliminano intermediari centralizzati

Perchè tutti parlano di Smart Contracts? Cosa li rende così famosi e importanti la storia dell’informatica? Essenzialmente i motivi sono questi:

  • codice decentralizzato: sviluppando un’applicazione classica client-server dovrai scegliere i linguaggi e una soluzione per distribuire la tua applicazione. I servizi di hosting hanno sempre avuto la meglio, fino all’arrivo del Cloud con i servizi di Amazon e Google. Pur essendo distribuiti geograficamente non possiamo parlare di una vera decentralizzazione: se Amazon dovesse censurare la nostra applicazione o il nostro account, verremmo letteralmente “buttati fuori” dal Web. Uno Smart Contract non può essere fermato!
  • Payable functions: come andremo a studiare, le funzioni payable sono funzioni che possono inviare e ricevere Ethereum. Creare dei software che possano agire come persone, gestire crittovalute, sono sicuramente i pilastri di questa tecnologia.
  • Immutabilità: una volta che uno Smart Contract è nella blockchain nessuno potrà cambiare il suo codice, il suo comportamento. Se questo porta dei vantaggi, porta anche una maggior accortezza durante la realizzazione di un prodotto basato su queste tecnologie. Un bug su uno Smart Contract potrebbe infatti bloccare degli ETH al proprio interno, senza che nessuno possa riuscire a sbloccarli. Non potrai neanche correggere uno Smart Contract già caricato, bisognare stare davvero attenti!

Che linguaggio dovrei utilizzare per scrivere uno Smart Contract Ethereum?

Abbiamo detto che la EVM esegue bytecode. Il bytecode viene generato dal codice scritto dagli sviluppatori, tipicamente in Solidity. Altri linguaggi sono Serpent, LLL e Vyper. Solidity è al momento il linguaggio per Smart Contracts Ethereum più supportato, documentato e utilizzato!  Possiamo rendercene conto guardando il numero di commit: 10.000 commits per Solidity contro i 1.000 di Vyper.

come scrivere smart contracts evm
Il codice che scriviamo viene portato in Bytecodes, eseguito dalla EVM

Solidity viene definito un linguaggio contract-oriented, static-typed e segue la sintassi ECMAScript al fine di rendere lo studio più agevole per gli sviluppatori, pur aggiungendo i tipi.

Dove dovrei scrivere i miei Smart Contracts?

Esistono diversi workflow per la scrittura di Smart Contracts.

Il team di Ethereum fornisce un IDE online molto comodo per scrivere, compilare e testare i nostri Smart Contrats. Il suo nome è Remix IDE, e puoi trovarlo qui. Tuttavia lavorare online non è sempre la soluzione più comoda, possiamo quindi andare ad installare Remix IDE offline, seguendo la nostra guida completa a Remix!

Se trovi Remix scomodo, o vuoi provare un’alternativa ti consiglio di scaricare e provare Truffle! Truffle è un framework per sviluppatori di DApps e Smart Contracts. Offre molti tools come Blockchain in-RAM, compilatore per Solidity, migrations e testing!

truffle smart contracts
Truffle: una suite completa per gli sviluppatori.

Il prossimo passo della nostra guida sarà scrivere uno Smart Contract e portarlo su una blockchain locale attraverso Truffle! Truffle è un pacchetto npm, dobbiamo quindi scaricare NodeJS e NPM dal sito ufficiale. Una volta installati non dovremmo fare altro che aprire un terminale/prompt dei comandi e digitare:

sudo npm install -g truffle

Creiamo la nostra blockchain locale

Prima di tutto dobbiamo creare un nuovo progetto Truffle. Posizionati nella cartella desiderata e lancia il comando:

truffle init

Un nuovo progetto Truffle è stato generato. Puoi trovare il file truffle.js contente le configurazioni, la cartella per i test, per le migrations e per i nostri smart contracts.

Per avviare una blockchain locale interna al nostro PC, in ascolto sulla porta 9545, ci basterà utilizzare il seguente comando.

truffle develop

Come puoi vedere verranno generati anche 10 accounts Ethereum con 100 Ethereum ciascuno!

truffle guida italiano
Come creare una blockchain locale con Truffle?

Scriviamo il nostro primo Smart Contract

Per questo tutorial scriveremo un semplice Smart Contract con un solo compito: spartire tra due indirizzi Ethereum qualsiasi cifra venga inviata allo Smart Contract. Un esempio semplice, che però ci porterà subito dentro la logica degli Smart Contracts, di Solidity e dei tools di Truffle.

Crea un nuovo file all’interno della cartella contracts e chiamalo Share.sol

Scrittura dello Smart Contract

Il nostro Smart Contract si chiamerà Share, e avrà una funzione di fallback: una funzione che verrà chiamata nel caso venga fatta una transazione allo Smart Contract senza specificare però una funzione precisa. Questa funziona non farà altro che dividere la quantità ricevuti in due parti, inviandole poi a due indirizzi prestabiliti attraverso la funzione send(). Share avrà due variabili (A e B) di tipo address a cui assegniamo i due indirizzi che riceveranno gli ETH inviati allo Smart Contract.

Compiliamo il nostro Smart Contract

Una volta scritto il nostro Smart Contract dobbiamo compilarlo, attraverso il comando:

truffle compile

Truffle compilerà il nostro Smart Contract e genererà la cartella builds contente le ABI (Abstract Binary Interface).

compilare smart contract ethereum
Ecco come compilare uno smart contract con truffle!

Migrations: portiamo il nostro codice su Blockchain!

Precedentemente abbiamo avviato la nostra Blockchain locale, su cui caricheremo ora il nostro Smart Contract attraverso il comando

truffle migrate

creare smart contract ethereum
Finalmente abbiamo portato il nostro Smart Contract nella Blockchain!

Possiamo vedere nell’output di questo comando l’indirizzo Ethereum su cui potremmo raggiungere il nostro Smart Contract. Complimenti! Hai appena caricato il tuo primo SC su una Blockchain!

Testiamo il nostro Smart Contract

Non ci resta ora che provare il nostro Smart Contract caricato nella nostra blockchain locale: come? In questo tutorial continueremo ad utilizzare Truffle. Andiamo quindi a creare una istanza del nostro Smart Contract:

var share = Share.at(Share.address)

smart contracts ethereum guida
Andiamo a creare Share, istanza del nostro Smart Contract

Dopo aver creato la variabile share e assegnatole una istanza del nostro Share contract abbiamo stampato a video l’indirizzo su cui esso risiede. Puoi notare che è lo stesso fornito da Truffle durante la migration!

Non ci resta ora che utilizzare il nostro Smart Contract: inviamo un po’ di Ethereum (in questo esempio ne invieremo 10) al nostro Share contract, di cui verrà eseguita la funzione di fallback.

Utilizzando la console di Truffle non faremo altro che utilizzare le funzioni di Web3, di cui puoi trovare la guida completa QUI! Usiamo quindi il metodo sendTransaction. Dopo la transazione andremo a stampare diversi dati: l’hash della transazione, il numero del blocco, la quantità di gas usato, l’hash del blocco e altro ancora.

share.sendTransaction({
    from: web3.eth.accounts[0],
    gas: 380000,
    value: 10000000000000000000
}).then(function(result) {
    console.log(res)
})
Inviamo 30 Ethereum al nostro Share contract
inviare ethereum a smart contract

Il nostro Smart Contract si è comportato a dovere?!

Se hai seguito con attenzione tutti i punti del tutorial avrai un output come quello nella foto precedente. Ma come facciamo ad essere sicuri del risultato? Andando a controllare i balance degli indirizzi Ethereum forniti da Truffle, attraverso questo piccolo script Web3.

tutorial smart contracts italiano
Il primo indirizzo Ethereum ha inviato 10 ETH ai due indirizzi specificati!

Come puoi vedere l’indirizzo N*1 e l’indirizzo N*4 hanno 105 ETH ciascuno, mentre il N*0 89!

Conclusioni

Riassumiamo la nostra guida su come creare uno Smart Contract: abbiamo creato un nuovo progetto con Truffle, che ci ha fornito una blockchain locale. Abbiamo successivamente scritto uno Smart Contract in Solidity, ne abbiamo fatto il deploy nel nostro ambiente di test con Truffle e infine testato attraverso le funzioni di Web3!

Questo articolo ti è tornato utile? Ricorda di mettere mi piace alla nostra pagina Facebook e di entrare nel gruppo Telegram!

Autore

Sono uno studente Web&Cloud. Amo programmare, negli anni ho sviluppato competenze full-stack, in particolare nel mondo Javascript. Linux e la crittografia mi hanno sempre appassionato, fino a portarmi nel mondo delle cryptovalute.

2 Comments

  1. Salve, con un token erc20 semplice si può metterlo su un Exchange per venderlo? Ci sono adempimenti di tipo legale?

    • Riccardo Masutti

      Ciao Gino,
      qualsiasi token (potenzialmente) può essere inserito in un exchange. Ciò richiede però solitamente un lungo audit e diverse ore di dialogo con l’exchange stesso.

      Riguardo gli exchange decentralizzati invece il discorso è completamente diverso, decisamente più semplice…

Scrivi un commento

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.