Vai al contenuto principale
Change page

Macchina Virtuale di Ethereum (EVM)

Ultimo aggiornamento della pagina: 25 febbraio 2026

La Macchina Virtuale di Ethereum (EVM) è un ambiente virtuale decentralizzato che esegue codice in modo coerente e sicuro su tutti i nodi Ethereum. I nodi eseguono l'EVM per eseguire i contratti intelligenti, utilizzando il "gas" per misurare lo sforzo computazionale richiesto per le operazioni, garantendo un'allocazione efficiente delle risorse e la sicurezza della rete.

Prerequisiti

Per comprendere l'EVM è necessaria una certa familiarità di base con la terminologia comune dell'informatica, come byte (opens in a new tab), memoria (opens in a new tab) e stack (opens in a new tab). Sarebbe inoltre utile avere dimestichezza con i concetti di crittografia/blockchain come le funzioni di hash (opens in a new tab) e l'albero di Merkle (opens in a new tab).

Dal registro alla macchina a stati

L'analogia di un "registro distribuito" è spesso usata per descrivere blockchain come Bitcoin, che abilitano una valuta decentralizzata utilizzando strumenti fondamentali di crittografia. Il registro mantiene uno storico delle attività che deve aderire a un insieme di regole che governano ciò che qualcuno può e non può fare per modificare il registro. 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 su molte altre blockchain.

Sebbene Ethereum abbia la propria criptovaluta nativa (ether) che segue quasi esattamente le stesse regole intuitive, abilita anche una funzione molto più potente: i contratti intelligenti. Per questa funzionalità più complessa, è necessaria un'analogia più sofisticata. Invece di un registro distribuito, Ethereum è una macchina a stati (opens in a new tab) distribuita. Lo stato di Ethereum è una grande struttura dati che contiene non solo tutti gli account e i saldi, ma uno stato della macchina, che può cambiare da blocco a blocco secondo un insieme predefinito di regole e che può eseguire codice macchina arbitrario. Le regole specifiche per il cambiamento di stato da blocco a blocco sono definite dall'EVM.

Un diagramma 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 farebbe una funzione matematica: dato un input, produce un output deterministico. È quindi piuttosto utile descrivere più formalmente Ethereum come avente una funzione di transizione di stato:

1Y(S, T)= S'

Dato un vecchio stato valido (S) e un nuovo insieme 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 dati chiamata Trie di Merkle Patricia modificato, che mantiene tutti gli account collegati da hash e riducibili a un singolo hash radice memorizzato sulla blockchain.

Transazioni

Le transazioni sono istruzioni firmate crittograficamente dagli account. Esistono due tipi di transazioni: quelle che risultano in chiamate di messaggi e quelle che risultano nella creazione di contratti.

La creazione di un contratto risulta nella creazione di un nuovo account del contratto contenente il bytecode compilato del contratto intelligente. Ogni volta che un altro account effettua una chiamata di messaggio a quel contratto, ne esegue il 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 a 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 (come un array di byte indirizzato a parole), che non persiste tra le transazioni.

Archiviazione transitoria

L'archiviazione transitoria è un archivio chiave-valore per transazione a cui si accede tramite gli opcode TSTORE e TLOAD. Persiste attraverso tutte le chiamate interne durante la stessa transazione, ma viene cancellata alla fine della transazione. A differenza della memoria, l'archiviazione transitoria è modellata come parte dello stato dell'EVM piuttosto che del frame di esecuzione, eppure non viene confermata nello stato globale. L'archiviazione transitoria consente la condivisione temporanea dello stato in modo efficiente in termini di gas tra le chiamate interne durante una transazione.

Archiviazione

I contratti contengono un trie di archiviazione di Merkle Patricia (come un array di parole indirizzabile a parole), associato all'account in questione e parte dello stato globale. Questa archiviazione persistente differisce dall'archiviazione transitoria, che è disponibile solo per la durata di una singola transazione e non fa parte del trie di archiviazione persistente dell'account.

Opcode

Il bytecode compilato del contratto intelligente viene eseguito come una serie di opcode dell'EVM, che eseguono operazioni standard di stack come XOR, AND, ADD, SUB, ecc. L'EVM implementa anche una serie di operazioni di stack specifiche per la blockchain, come ADDRESS, BALANCE, BLOCKHASH, ecc. Il set di opcode include anche TSTORE e TLOAD, che forniscono l'accesso all'archiviazione transitoria.

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

Implementazioni dell'EVM

Tutte le implementazioni dell'EVM devono aderire alle specifiche descritte nell'Ethereum Yellowpaper.

Nel corso dei dieci anni di storia di Ethereum, l'EVM ha subito diverse revisioni e ci sono diverse implementazioni dell'EVM in vari linguaggi di programmazione.

I client di esecuzione di Ethereum includono un'implementazione dell'EVM. Inoltre, ci sono molteplici implementazioni indipendenti, tra cui:

Letture di approfondimento

Tutorial: Macchina Virtuale di Ethereum (EVM) / Opcode su Ethereum

Questo articolo è stato utile?