Blog.

Cos’è Ethereum


Autore
Andrea Provino
Data
Tempo di lettura
8 minuti
Categoria
Blockchain

ethereum

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

ethereum merge panda

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

Taggedethereumtheory


Ultimi post

Patricia Merkle Trie

Il Practical Algorithm To Retrieve Information Coded In Alphanumeric Merkle Trie, o Patricia Merkle Trie è una struttura dati chiave-valore usatada Ethereum e particolarmente efficiente per il salvataggio e la verifica dell’integrità dell’informazione. In questo post ne studieremo le caratteristiche. Prima di procedere, ci conviene ripassare l’introduzione al Merkle Tree nella quale abbiamo chiarito il […]

Andrea Provino
ethereum-patricia-merkle-tree
Tree Data Structure: cos’è un Merkle Tree

Un Merkle Tree è una struttura dati efficiente per verificare che un dato appartenga a un insieme esteso di elementi. È comunemente impiegato nelle Peer to Peer network in cui la generazione efficiente di prove (proof) contribuisce alla scalabilità della rete. Capire i vantaggi di questa struttura ci tornerà utile nel nostro percorso di esplorazione […]

Andrea Provino
merkle-tree-cover
UTXO: come funziona il modello Unspent Transaction Outputs

Per tenere traccia dei bilanci utente, la blockchain di Bitcoin sfrutta un modello di contabilità definito UTXO o Unspent Transaction Outputs. In questo articolo ne esaminiamo le caratteristiche. Ogni blockchain è dotata di un sistema di contabilità, un meccanismo attraverso cui tenere traccia dei bilanci di ciascun utente. I due grandi modelli di riferimento nel […]

Andrea Provino
bitcoin-utxo