Smart Contract

Marco Ferraioli
weBeetle
Published in
5 min readMay 11, 2021

In quest’articolo approfondiremo cosa sono gli smart contract e come crearli sfruttando la rete Ethereum.

Blockchain, Criptovalute, Smart Contract, AtlCoin ed NFT sono argomenti di dibattito ormai quotidiano. Questo articolo, primo di una serie, s’inserisce in questo filone, ponendosi l’obiettivo di mostrare come creare, rilasciare degli smart contract sulla rete Ethereum e come costruire un applicazione basata su uno smart contract.

Cos’è la Blockchain?

Blockchain, letteralmente catena di blocchi, è una struttura dati condivisa e immutabile. In parole povere, è un grande registro digitale in cui le voci sono raggruppate in blocchi concatenati in ordine cronologico. Possiamo vederla come un tipo speciale di database -a cui si possono aggiungere man mano nuovi blocchi a cui tutti possono accedere- non modificabile e la cui sicurezza è garantita da crittografia.

Cos’è uno Smart Contract?

Possiamo definire uno smart contract come un programma eseguito su una blockchain. In genere, gli smart contract funzionano come degli accordi digitali controllati da un determinato insieme di regole. Queste regole sono codificate in un particolare linguaggio di programmazione all’interno del contratto, il quale viene replicato ed eseguito da tutti i nodi del network della blockchain.

In sostanza, gli smart contract sulla blockchain rendono possibile la creazione di protocolli trustless; ciò significa che due parti, senza doversi conoscere o fidarsi l’una dell’altra -rimuovendo la necessità di intermediari- possono assumere impegni attraverso la blockchain riducendo significativamente i costi operativi.

In questo articolo ci concentreremo sugli smart contract eseguiti sulla Ethereum Virtual Machine (EVM).

Caratteristice di uno Smart Contract Ethereum

Uno smart contract di Ethereum presenta le seguenti caratteristiche:

  • Distribuito: Gli smart contract vengono replicati e distribuiti in tutti i nodi del network, questa è una delle differenze fondamentali rispetto ad alle soluzioni basate su server centralizzati;
  • Deterministico: Gli smart contract eseguono solo le azioni per cui sono stati progettati e/o quando i requisiti sono soddisfatti;
  • Autonomo: Gli smart contract possono automatizzare ogni sorta di operazione al verificarsi di determinate condizioni;
  • Immutabile: Gli smart contract non possono essere modificati una volta rilasciati sui nodi del network. Possono soltanto essere cancellati se è stata prevista all’interno del contratto questa particolare funzione. Inoltre, gli smart contract ci consentono di avere codice a prova di alterazione;
  • Trustless: Come detto in precedenza, due o più parti possono interagire attraverso smart contract senza conoscersi o fidarsi l’una dell’altra;
  • Trasparente: Dato che gli smart contract sono basati su una blockchain pubblica, il loro codice sorgente non è solo immutabile ma anche visibile a chiunque.

Come creare uno Smart Contract?

Per creare uno smart contract sulla rete Etherum dobbiamo usare un particolare linguaggio appositamente creato per lo scopo. Il linguaggio di programmazione in questione si chiama Solidity.

Ai fini di questo articolo useremo una rete Ethereum di prova, dato che una volta rilasciato lo smart contract sulla rete non è più modificabile e inoltre perché per fare un rilascio di un contratto sulla rete Ethereum dovremmo pagare il gas necessario (Il gas non è altro che la commissione pagata dall’utente al momento di una transazione sulla blockchain di Ethereum).

Procediamo all’installazione dei tool che ci servono:

Installeremo i tool della Truffle Suite, in particolare Ganache e Truffle.

Ganache

Ganache è una one click blockchain, ci consente di avviare rapidamente sul nostro pc una blockchain Ethereum personale. Per installarla basta andare sul sito di Ganache e scaricare l’installer per il proprio sistema operativo.

Truffle

Truffle è il framework di sviluppo più popolare per Ethereum. Per installarlo basta usare il seguente comando (è necessario avere installato già NodeJS ed NPM):

npm install truffle -g

Ora siamo pronti a creare il nostro primo smart contract.

Creiamo uno Smart Contract?

Prima di tutto avviamo Ganache e clicchiamo su Quickstart ETHEREUM.

Poi creiamo una cartella in cui andare ad inserire il nostro codice.

mkdir -p smart_contract_series/01_dummy_contract
cd smart_contract_series/01_dummy_contract

Ora creiamo il progetto base facendoci aiutare da truffle usando il seguente comando:

truffle init

Aprendo la cartella con il nostro editor/IDE preferito, dovremmo trovarci una situazione simile alla seguente.

Ora eliminiamo i file Migrations.sol e 1_initial_migration.js, poi creiamo un file chiamandolo HelloWord.sol nella cartella contracts, questo sarà il nostro smart contract.

Poi nella cartella migrations creiamo un file chiamato 1_deploy_contracts.js il seguente script ci servirà per dire a truffle quale contratto e come rilasciarlo.

Ora lanciando il comando

truffle migrate

dovremmo avere il seguente output che ci comunica il corretto esito del deploy del contratto.

Compiling your contracts...
===========================
> Everything is up to date, there is nothing to compile.
Starting migrations...
======================
> Network name: 'development'
> Network id: 5777
> Block gas limit: 6721975 (0x6691b7)
1_deploy_contracts.js
=====================
Replacing 'HelloWorldContract'
------------------------------
> transaction hash: 0xae43138f2957d6d39e41c405eab58a557ad0edd0047d747635b74b8d8e6445b3
> Blocks: 0 Seconds: 0
> contract address: 0x282c0B9461a4fAF1aA457CF04c44AE97f532672e
> block number: 3
> block timestamp: 1619104003
> account: 0xa207925d21be77D0c1d1e2D0A8c70Cd1618e8A64
> balance: 99.99498372
> gas used: 114805 (0x1c075)
> gas price: 20 gwei
> value sent: 0 ETH
> total cost: 0.0022961 ETH
> Saving migration to chain.
> Saving artifacts
-------------------------------------
> Total cost: 0.0022961 ETH
Summary
=======
> Total deployments: 1
> Final cost: 0.0022961 ETH

Su Ganache ora avremo una situazione del genere; abbiamo appena rilasciato il nostro primo smart contract.

Ora vediamo come richiamare la funzione presente nel nostro smart contract, diamo il seguente comando che ci darà modo di lanciare comandi direttamente sulla nostra personale blockchain.

truffle console

Una volta avviata la console lanciamo i seguenti comandi:

let instance = await HelloWorldContract.deployed()instance.helloWorld()

Se tutto è andato a buon fine dovremmo avere un risultato del genere:

Per il momento è tutto, vi lascio il tempo necessario per esercitarvi. Nel prossimo articolo vedremo come creare e rilasciare il nostro token personalizzato basandoci sullo standard ERC-20.

Repostitory Codice

--

--