Possiamo definire Ethereum come una macchina a stati distribuita che traccia le transizioni di un archivio dati general-purpose (i.e. una memoria in grado di registrare qualsiasi dato esprimibile come coppia di chiave e valore o key-value) all’interno della Ethereum Blockchain.
È arrivato il momento di esplorare uno dei progetti tecnologici più innovativi e interessanti degli ultimi anni.
Questo è l’inizio di un nuovo viaggio che ci porterà a toccare con mano gli aspetti tecnici delle blockchain pubbliche, capendone i paradigmi di funzionamento, limiti e peculiarità.
Accetti questa sfida? Seguimi!
Cos’è Ethereum

Abbiamo provato a dare una definizione sintetica alla parola Ethereum, ma per comprenderne a fondo il significato può essere utile esaminare due ulteriori definizioni.
Da un punto di vista informatico, Ethereum è una macchina a stati deterministica ma praticamente illimitata (unbounded), costituita da un stato singolo globalmente accessibile (globally accessible singleton state) e una macchina virtuale (virtual machine) che applica i cambiamenti allo stato.
Da un punto di vista pratico, Ethereum è un’infrastruttura di calcolo (computing infrastructure) globalmente decentralizzata e open source che esegue programmi chiamati Smart Contracts. Usa una blockchain per sincronizzare e memorizzare i cambiamenti del sistema, e una moneta digitale (cryptocurrency) chiamata ether per misurare e limitare il costo delle risorse di esecuzione.
Chiamarla blockchain è quindi riduttivo oltre che semanticamente errato.
Lascia ora che ti spieghi quali siano i componenti principali di questo sistema. Conoscere la loro esistenza ci permetterà di capire come le varie parti interagiscano fra loro e soprattutto spiegare più agilmente i motivi di alcuni comportamenti altrimenti apparentemente ingiustificati.
I suoi componenti
Ecco da quali componenti è formata Ethereum:
- P2P Network – La Ethereum Main Network, abbreviata in mainnet e identificata dal chainId 1 è la rete accessibile dalla porta TCP 30303, che esegue un protocollo chiamato devp2p. È la rete dell’infrastruttura di calcolo. Una rete Peer to Peer, costituita da migliaia di nodi.
- Consensus rules – Le regole di consenso definiscono le logiche attraverso cui definire l’esattezza o meno di un insieme di valori e sono specificate all’interno del Yellow Paper (leggi sotto per maggiori dettagli). È fondamentale per evitare che attori malevoli possano inserire informazioni invalide all’interno della rete, in altri termini evitare che mi possa attribuire un bilancio di 100k euro. Per esempio.
- Transactions – Le transazioni sono messaggi di rete che includono (insieme ad altri elementi): il mittente (sender), il destinatario (recipient), il valore (value) e un data payload contenente dati arbitrari che possono essere usati per interagire con uno smart contract.
- State Machine – Le transizioni di stato sono processate dalla Ethereum Virtual Machine (EVM), una macchina virtuale di tipo stack-based, che esegue bytecode. I bytecode sono istruzioni in linguaggio macchina. Invece, i programmi eseguiti sono chiamati Smart Contract, e vengono scritti in linguaggio di alto livello (e.g. Solidity), poi compilati in bytecode per l’esecuzione in EVM.
- Data Structure – Lo stato della macchina è salvato localmente in ciascun nodo della rete come un database (tipicamente Google LevelDB) che contiene le transazioni e lo stato del sistema in una struttura dati serializzata e sottoposta ad hashing chiamata Merkle Patricia Tree.
- Consesuns algorithm – Ethereum sfrutta un algoritmo di consenso a voto pesato di tipo Proof of Stake abbreviato in PoS, nome in codice Casper. È fondamentale per determinare la catena più lunga e quindi lo stato corrente del sistema tra tutti i nodi. In questo scenario, ciascun nodo deve dimostrare di possedere almeno 32 ether per essere idoneo a validare le transazioni. Gli ether devono poi essere messi in staking, operazione che blocca la moneta dalla circolazione contribuendo a incrementarne il valore.
- Economic Security – La sicurezza del sistema è garantita dall’algoritmo di consenso
- Clients – Il software che integra i componenti tra loro permettendone l’operatività. Ethereum ha diversi client.
Generalmente questi componenti sono combinati in un unico software client. Dobbiamo allora fare una precisazione.
Contrariamente ad altre blockchain, come quella di Bitcoin in cui esiste una reference implementation, Ethereum presenta una reference specification ovvero una documentazione tecnica che precisa la descrizione matematica del sistema: è il Yellow Paper.
Questo ha determinato la creazione di diversi software client scritti in diversi linguaggi, tra i quali i più comuni sono il Go-Ethereum (geth) e Nethermind
Turing Completo
In questo paragrafo ti spiego perché è presente una moneta virtuale, l’ether erroneamente chiamato Ethereum.
Per capire questo concetto dobbiamo prendere la macchina del tempo. Saliamo a bordo!
Nel 1936, il matematico inglese Alan Turing, ricordato nel film The Imitation Game come l’uomo che creò il primo calcolatore automatico, formalizzò il modello di un computer.
Questo era costituito da una macchina a stati che manipolava simboli leggendo e scrivendo una memoria sequenziale, assimilabile a un nastro infinito.
Questo costrutto era necessario per fornire delle fondamenta matematiche atte a rispondere alle domande sulla computabilità universale (universal computability). In altri termini, definire se un problema sia decidibile (solvable).
Alan Turing dimostrò così l’esistenza di una classe di problemi indecidibili.
Nello specifico provò che il problema dell’arresto (halting problem – ovvero se sia possibile dato un input e un programma arbitrario determinarne la fine dell’esecuzione) non è decidibile.
Questa è la chiave di volta.
È infatti una considerazione a breve cruciale per capire un concetto chiave di Ethereum.
Al momento però lascia che condivida con te un ulteriore aspetto.
Seguimi ancora per qualche istante.
Alan Turing definì poi il concetto di Turing Complete, proprietà di un sistema capace di simulare qualsiasi Turing machine. Un sistema simile è definito Macchina di Turing Universale (Universal Turing Machine, o UTM).
Universal Turing Machine (UTM)
L’innovazione di Ethereum è combinare l’architettura di calcolo general-purpose di uno stored-program computer con una blockchain decentralizzata andando a creare un computer globale a stato singolo (singleton).
In altri termini…
I programmi di Ethereum possono essere eseguiti “ovunque” nonostante producano uno stato comune certificato dalle regole di consenso.
Questo è molto importante.
C’è però un problema.
Creare un sistema Turing Completo è semplice. Considera che la macchina a stati Turing-complete più semplice conosciuta ha solo 4 stati e 6 simboli con una definizione dello stato lunga 22 istruzioni.
Non ha certo le sembianze di un super computer.
Tuttavia da grandi poteri derivano grandi responsabilità.
La turing completeness è molto pericolosa, specie in sistemi ad accesso aperto come le blockchain pubbliche, a causa del problema dell’arresto.
Considera quell’apparecchio di Schrödinger che usi per sputare inchiostro sulla carta: una macchina che non sai mai se funziona o meno finché non la usi. La stampante. Quella di casa che stampa una volta su 10.
Le stampanti odierne sono Turing complete e possiamo inviare un file in stampa che le mandi in blocco.
Il fatto che Ethereum sia Turing-complete significa che qualsiasi programma di qualunque complessità può essere seguito sul sistema. Però abbiamo ammesso che si tratti di un computer globale accessibile da chiunque.
Mentre una stampante bloccata può essere riavviata staccando la presa, una blockchain globale no. (in realtà Solana, una blockchain pubblica, richiede spesso dei riavvi, quindi non è del tutto vera questa informazione, ma è chiaro che non sia buona prassi)
Il risultato? Dobbiamo fare i conti con degli spinosi problemi di sicurezza e gestione delle risorse.
Ecco allora come possiamo risolvere questa annosa questione.
Cos’è il gas e perché è importante per Ethereum
Siamo quasi alla fine della scalata, la vetta è vicina. Inspiriamo profondamente per avere più ossigeno nella nostra testa. Respira…
Ora facciamo un riassunto veloce.
Abbiamo detto che Ethereum è (semplificando) un computer pubblico accessibile da chiunque che permette l’esecuzione di qualsiasi programma di qualsivoglia complessità.
Combinando questa straordinaria definizione con la tendenza all’errore e l’avidità umana otterremo un’enorme esplosione metaforica. In pratica faremmo collassare il sistema.
Perché? Per via del problema dell’arresto, la nostra chiave di volta.
Poco fa abbiamo letto che Alan Turing dimostrò l’impossibilità di prevedere che un programma termini l’esecuzione simulandolo su un computer. Ovvero, non possiamo prevedere il risultato di un programma senza eseguirlo.
Una riflessione semplice ma dalle implicazioni complesse.
Considera infatti che ogni nodo della rete (client) deve validare ogni transazione inviata a uno smart contract, ma Ethereum non è in grado di prevedere se il programma (lo smart contract) possa terminare l’esecuzione o quanto tempo possa richiedere.
Accidentalmente, o intenzionalmente, uno sviluppatore potrebbe allora creare un loop infinito congelando la rete nel momento in cui un nodo tenterebbe l’esecuzione del programma.
Ecco a te un caso di attacco DoS, o Denial of Service. In futuro studieremo questi casi con molta attenzione.
Chiaramente tra un’esecuzione di pochi millisecondi e una infinita ci sono una moltitudine di programmi inefficienti, resouce-hogging (uso eccessivo di risorse), memory-bloating (uso inefficiente della memoria) e CPU-overheating (computazionalmente esosi).
Abbiamo allora bisogno di un meccanismo che possa incentivare un uso oculato delle risorse.
La soluzione si chiama Gas.
Ethereum introduce un meccanismo di misurazione delle risorse chiamato Gas: quando l’EVM esegue uno smart contract, attribuisce con precisione un costo a ogni istruzione calcolata. Ogni transazione che interagisce con uno smart contract ha l’obbligo di indicare un gas limit massimo, un limite superiore in unità di gas, che è disposta a consumare.
L’EVM termina l’esecuzione qualora la quantità di gas consumata sia superiore a quella disponibile nella transazione.
Ecco perché il gas è il meccanismo con cui Ethereum rimane Turing completo limitando al contempo le risorse che qualsiasi programma possa consumare.
Come si acquista il gas?
Ammettendo che ogni transazione debba consumare una certa quantità di gas, è lecito domandarsi dove si possa acquistare.
Trattandosi di un meccanismo interno al sistema, il gas si può acquistare solo come parte della transazione. Una quantità sufficiente di Ether (la moneta della rete) deve essere inviata insieme alla transazione e specificamente stanziata per l’acquisto del gas, corredata di un secondo valore il gas price, ovvero il costo che si è disposti a pagare per comprare il gas.
Infatti il costo del gas non è fisso e dipende dalla congestione della rete. Tante più persone richiedono l’utilizzo del computer globale tanto più alto sarà il costo del gas, un meccanismo di domanda e offerta.
Chiaramente, qualora il gas usato per l’esecuzione dello smart contract fosse inferiore a quello conferito nella transazione la rimanenza verrebbe restituita al mittente.
Per il momento è tutto.
Per aspera, ad astra.
Un caldo abbraccio, Andrea