Solidity, il linguaggio per Smart Contract


INTRODUZIONE

Cosa è Solidity? Solidity è un  linguaggio orientato ai contratti. All'interno di esso contiene costrutti simili a C++, Python e JavaScript ed è stato progettato per funzionare all'interno di una EVM (Ethereum Virtual Machine)

Il file contenente il codice sorgente è di solito nominato con "entita.sol" dove all'interno l'entità, per esempio, può:
 - settare i propri dati
 - settare le proprie risorse
 - recuperare è propri dati
 - avere delle proprietà
 - offire metodi (servizi)

La prima riga di un sorgente Solidity deve contenere la versione del linguaggio che si sta utilizzando

pragma solidity 0.4.24;

In questo caso indichiamo al compilatore di utilizzare la versione 0.4.24

Dopo vengono dichiarate le variabili che possono essere:
 - publiche: tutti possono accedere
 - private: solo il contratto può accedere
 - interne: solo il contratto e i suoi derivati
 - esterne: non può avvenire un accesso interno ma solo esternamente

Dato che il costo dell'esecuzione di un contratto è dato dal "peso" dello stesso all'interno della EVM, occorre stare attenti a dichiarare le giuste visibilità di una variabile e usare il codice in maniera parsimoniosa.

Di seguito troverete una serie di concetti base che occorre conoscere per completare il primo Smart Contract

EVENT

All'interno di un contratto è possibile dichiarare e gestire degli eventi. Un esempio di un evento potrebbe essere un semplice log di un'operazione.

STRUCT

Un entità molto importante sono le Struct, che definiscono un nuovo tipo di dato. E' molto comune che un contratto abbia almeno una Struct

struct MyData {
    bytes32 firstname;
    bytes32 lastname;
    uint256 coins;
    uint256 cash;
    bytes32 service;
}

CONSTRUCTOR

Un costruttore, come in altri linguaggi, è la prima funzione invocata una volta creata un' instanza del contratto. Dev'essere dichiarato sempre pubblico e deve inizializzare i dati all'interno di esso.

constructor() public {
    owner = msg.sender;
    coins = 0;
    cash = 0;
    service = "";
}


FUNCTION

Il cuore dell'implementazione di un contratto è formato da funzioni. La struttura di una funzione deve prevedere:
 - un nome
 - il tipo di accesso (public / private / internal / external)
 - eventuale modifier da agganciare
 - un tipo di ritorno

Le funzioni all'interno del linguaggio Solidity possono essere di 3 tipi:

 - view
    - viene dichiarato che il codice non modifica alcuna variabile (per esempio un getter è una funzione di tipo view)
 - pure
- viene dichiarato che il codice non legge e modifica alcuna variabile (quindi utilizza solo quelle locali alla funzione)
 - fallback
- è una funzione speciale che non deve avere argomenti e non deve tornare nulla. N.B: Se all'interno del contratto si vuole ricevere ether occorre dichiarare questa funzione come payable.

MODIFIER

Un modifier è una funzione che racchiude del codice che può essere usato più volte e agganciato ad un'altra funzione.

MAPPING

L'operazione di mapping consiste nel collegare virtualmente (similmente ad una hashmap) tipi di dati con tipi di valori.

Nell'esempio seguente dichiaro un mapping nominato OwnData dove collego gli indirizzi di tutti i miei dati:

mapping (address => MyData) OwnData;

Trucchi per risparmiare GAS


Il GAS è il costo computazionale dell'esecuzione di uno smart contract.

Ci sono diversi trucchi per risparmiare GAS primo fra tutti dichiarare le variabili external permette di risparmiare il 50% di GAS rispetto ad una pubblica)

Un altro esempio è usare il tipo bytes32 invece che string



Commenti

Post popolari in questo blog

Hadoop, how to create a single node cluster using docker

How to install IOTA node with docker

Apache Spark - Try it using docker!