Solidity by Examples in ITALIANO!
Tags: blockchain, beginners, solidity, smartcontract
Published: 2022-11-22 17:06:09

Bentornati a tutti, 

mi son chiesto da mesi perché non ci sono tutorial di Solidity abbastanza professionali in Italiano, uno come [Solidity By Example](https://solidity-by-example.org/) poi mi son detto, forse nessuno ha avuto ancora il tempo di farlo.

Ed allora qua la soluzione, risultato di mille ricerche accademiche approvate inofficialmente dal CERN di Gubbio, la faccio io e bona lí.

Non sto a farvi il pippone di Remix https://remix.ethereum.org/ , Truffle, come si usa una testChain, in caso abbiate domande per un ulteriore tutorial su come fare chiedete e vi sarà dato. =)

Quindi ... 

## Hello World
pragma specifies the compiler version of Solidity.

```
// SPDX-License-Identifier: MIT
// compiler version must be greater than or equal to 0.8.13 
//and less than 0.9.0

// pragma definisce la versione che deve essere usata per la compilazione 

pragma solidity ^0.8.13;

contract HelloWorld {
    string public greet = "Hello World!";
}
```

Ora possiamo fare una piccola introduzione per chi non é dentro la programmazione sulle String. 

` string public greet = "Hello World!"; `

String sono usate nella maggior parte dei linguaggi come Java, C++, PYthon. Semplicemente String é un gruppo di caratteri, un array di Char, cioé simboli rappresentanti lettere e numeri ma sempre riconosciuti come sequenze di caratteri.

` "Hello World!" ` per esempio é una String contenente le due parole HELLO WORLD con un carattere di 'spazio' in mezzo. 

## Ma come é definita String in Solidity ?

Solidity supporta String letteralmente usando double quote "" e Single quote. Fornisce "frasi" come un tipo di dato per dichiarare una variabile di tipo String.

## ANDIAMO SU REMIX 

Bene, bene, bene una volta detto tutto questo possiamo provare a vedere se le svariate righe di codice ( 4 righe ) in Solidity funzionano.


![Hello World Remix](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/vg256whywx3xv288lp2z.png)

Il primo passo é creare un file chiamato HelloWorld.sol con dentro il codice, é buona pratica usare lo stesso nome della classe, in questo ` contract `

## Compile

![Compile Link](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/3odh4d6ucz2f38l5nvrg.png)

Right click on the HelloWorld.sol file e clicchiamo su compile.

![Compiler Menu](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/u14bfyavfy18k32w7v3s.png)

Nel menu del solidity compiler abbiamo la scelta delle varie versioni del Compiler da utilizzare, quella desiderata viene dichiarata nel contratto ` pragma solidity ^0.8.13; `, ma una versione piú recente puó comunque funzionare.

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/2zximcyjoyqm3o77qthi.png)

Clicchiamo su Compile HelloWorld.sol cosí per divertimento anche perché l'abbiamo già compilato nello step precedente :D

Ma ora possiamo notare che c'é un bollino verde ai piedi dell'icona Solidity Compiler, ci indica giustamente che il nostro contratto é stato compilato senza errori. 

## Deploy

Andiamo sul menu Deploy ora e selezioniamo l'ambiente/environment che desiriamo 

![Deploy Menu Environment](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/9sjt3gfd8dydsv0nkgv2.png)

> In questo esempio sto usando la TestChain Goerli test Network

Se usate local test chain con Truffle o HardHat, dovete configurare Metamask sulla vostra chain ma qua non affrontiamo questo argomento.

Ci connettiamo con MetaMask selezionando nella lista di " Environment " -> " Injected Provider - MetaMask "


![Deploy Menu](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/emz9meez7wjjtjd3lyay.png)

Selezioniamo il nostro account che combacia con quello in uso su MetaMask, il nostro contratto HelloWorld.sol e clicchiamo su " Deploy " 

A questo punto se tutto é stato ben configurato vedremo MetaMask aprirsi e chiedervi la conferma della transazione necessaria al Deploy 

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/nn13faunsdymkqlmgh09.png)

Cliccando su Confirm finalizzeremo la transazione che inserisce il nostro contratto appena creato nella Test Chain. 


![Console Confirm Transaction](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ntr3hqfxz64chv3xzgme.png)

Possiamo vedere nella Console che una nuova transazione é stata creata 
` [block:7999951 txIndex:20]from: 0x1e1...ea4C2to: HelloWorld.(constructor)value: 0 weidata: 0x608...10033logs: 0hash: 0xf3d...738d7 `

Che si chiama ovviamente HelloWorld come il nome del nostro contratto, ora il nostro contratto é nella Goerli Test Network e ci rimarrà finche esisterà la Chain.

Ora possiamo giocare finalmente con il nostro Contratto, nel tab " Deployed Contracts " ,  qui troviamo il nostro contratto presente nella test chain. 


![Deployed Contract](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/x3tzrm9nqlb9dxrb1jgy.png)

 
Cliccando sul bottone " greet " possiamo interagire con la Blockchain, questa é la nostra Stringa che abbiamo reso pubblica e quindi raggiungibile apertamente nella chain. 


```
CALL
[call]from: 0x1e1Acaec81E5E5E4E2A77EAC1b73D475C43ea4C2to: HelloWorld.greet()data: 0xcfa...e3217
from	0x1e1Acaec81E5E5E4E2A77EAC1b73D475C43ea4C2
to	HelloWorld.greet() 0x3cF36BBD8a0BfCf22da2B3Da1bC88dC1250B596E
input	0xcfa...e3217
decoded input	{}
decoded output	{
	"0": "string: Hello World!"
}
logs	[]
```

Questa chiamata va appunto a recuperare la variabile  ` string public greet ` ritornandoci la stringa **Hello World!**