Vai al contenuto principale
Change page

Macchina virtuale Ethereum (EVM)

Ultima modifica: , 12 febbraio 2024

La creazione di istanze fisiche dell’EVM non può essere paragonata allo scrivere codice per puntare a un cloud o a un’onda dell'oceano, ma esiste come entità singola gestita da migliaia di computer collegati, che eseguono un client Ethereum.

Il protocollo di Ethereum stesso esiste unicamente allo scopo di mantenere la continua, ininterrotta e immutabile operazione di questa speciale macchina di stato. È l'ambiente in cui risiedono tutti i conti e contratti intelligenti di Ethereum. A ogni dato blocco nella catena, Ethereum ha un solo stato 'canonico' e l'EVM è ciò che definisce le regole di calcolo di un nuovo stato valido da blocco a blocco.

Prerequisiti

Per comprendere l'EVM, è richiesta una conoscenza di base dei termini comuni dell'informatica, come ad esempio byte(opens in a new tab), memoria(opens in a new tab) e stack(opens in a new tab). Sarebbe inoltre utile esser a conoscenza dei concetti crittografici e della blockchain come le funzioni di hash(opens in a new tab) e l'albero di Merkle(opens in a new tab).

Dal libro mastro alla macchina a stati

Per descrivere blockchain come Bitcoin, viene spesso utilizzata l'analogia con un "libro mastro distribuito", che permette l'esistenza di una valuta decentralizzata utilizzando strumenti base della crittografia. Il libro mastro mantiene un registro delle attività che deve aderire a una serie di regole che governano ciò che qualcuno può e non può fare per modificarlo. Ad esempio, un indirizzo Bitcoin non può spendere più Bitcoin di quanti ne abbia ricevuti in precedenza. Queste regole sono alla base di tutte le transazioni su Bitcoin e di molte altre blockchain.

Mentre Ethereum ha la propria criptovaluta nativa (Ether) che segue quasi esattamente le stesse regole intuitive, consente anche una funzione molto più potente: i contratti intelligenti. Per questa caratteristica più complessa, è necessaria un'analogia più complessa. Invece di essere un libro mastro distribuito, Ethereum è una macchina di stato distribuita(opens in a new tab). Lo stato di Ethereum è una grande struttura di dati che contiene non solo tutti i conti e i saldi, ma uno stato della macchina, che può cambiare da blocco a blocco secondo una serie predefinita di regole e che può eseguire il codice arbitrario della macchina. Le regole specifiche di cambio stato da blocco a blocco sono definite dall'EVM.

Ddiagramma che mostra la composizione dell'EVM Diagramma adattato da Ethereum EVM illustrated(opens in a new tab)

La funzione di transizione di stato di Ethereum

L'EVM si comporta come una funzione matematica: dato un input, produce un output deterministico. Quindi è più utile descrivere formalmente Ethereum come avente una funzione di transizione di stato:

1Y(S, T)= S'

Dato un vecchio stato valido (S) e un nuovo set di transazioni valide (T), la funzione di transizione di stato di Ethereum Y(S, T) produce un nuovo stato di output valido S'

Stato

Nel contesto di Ethereum, lo stato è un'enorme struttura di dati detta un albero di Patricia Merkle modificato, che contiene tutti i conti collegati da hash e riducibili a un singolo hash di radice, archiviato sulla blockchain.

Transazioni

Le transazioni sono istruzioni firmate crittograficamente, provenienti dai conti. Esistono due tipi di transazioni: quelle che danno luogo a chiamate di messaggio e quelle che invece danno luogo alla creazione di contratti.

La creazione del contratto risulta nella creazione di un nuovo conto del contratto, contenente bytecode compilato del contratto intelligente. Ogni volta che un altro conto effettua una chiamata di messaggio a quel contratto, esegue il suo bytecode.

Istruzioni dell'EVM

L'EVM viene eseguita come una macchina a stack(opens in a new tab) con una profondità di 1024 elementi. Ogni elemento è una parola di 256 bit, scelta per la facilità d'uso con la crittografia a 256 bit (come gli hash Keccak-256 o le firme secp256k1).

Durante l'esecuzione, l'EVM mantiene una memoria transitoria (sotto forma di array di byte con indirizzamento a parola), che non rimane persistente tra le transazioni.

I contratti, comunque, contengono un albero d'archiviazione di Merkle Patricia (come un insieme indirizzabile alle parole contenute), associato al conto in questione e parte dello stato globale.

Il bytecode compilato del contratto intelligente è eseguito come un numero degli opcode dell'EVM, che eseguono operazioni standard dello stack come XOR, AND, ADD, SUB, etc. L'EVM implementa anche una serie di operazioni di stack specifiche della blockchain, come INDIRIZZO, SALDO, BLOCKHASH, etc.

Un diagramma che mostra dove è necessario il gas per le operazioni dell'EVM Diagramma adattato da Ethereum EVM illustrated(opens in a new tab)

Implementazioni dell'EVM

Tutte le implementazioni dell'EVM devono rispettare le specifiche descritte nello Yellowpaper di Ethereum.

Nei nove anni di storia di Ethereum, l'EVM ha subito diverse revisioni, ed esistono diverse implementazioni dell'EVM in vari linguaggi di programmazione.

Tutti i client Ethereum includono un'implementazione dell'EVM. Inoltre, esistono diverse implementazioni standalone, tra cui:

Letture consigliate

Questo articolo è stato utile?