Ethereum è diventata la piattaforma di smart contract più popolare soprattutto grazie alla Ethereum Virtual Machine (EVM).
Nella tecnologia blockchain, l'EVM è indispensabile, in quanto gestisce tutto, dalla gestione degli smart contract all'esecuzione di app decentralizzate.
Ma ci sono molti ostacoli da superare, come problemi di scala e inefficienze del gas.
Questo articolo si propone di aiutarti a comprendere i vantaggi e gli svantaggi dell'EVM nell'ambiente blockchain dinamico, analizzandone l'architettura, gli strumenti disponibili e i prossimi piani di aggiornamento.
Punti chiave
- La Ethereum Virtual Machine (EVM) è essenziale per eseguire contratti intelligenti e applicazioni decentralizzate (dApp) sulla blockchain di Ethereum.
- L'EVM è ampiamente adottato su diverse blockchain come Binance Smart Chain e Polygon, consentendo la compatibilità tra catene diverse.
- Le soluzioni Layer 2 come Optimistic Rollups e zk-Rollups utilizzano l'EVM per migliorare la scalabilità di Ethereum e ridurre le commissioni del gas.
- L'EVM presenta delle limitazioni, tra cui inefficienze del gas e mancanza di elaborazione parallela, che possono compromettere le prestazioni.
- Gli sviluppatori hanno accesso a una varietà di strumenti, tra cui Remix, Truffle e Hardhat, per aiutarli a creare, testare e correggere gli smart contract sull'EVM.
- Gli emulatori e i simulatori EVM come Ganache consentono agli sviluppatori di testare i contratti intelligenti localmente prima di distribuirli sulla rete principale, riducendo errori e costi.
Cos'è la macchina virtuale Ethereum (EVM)?

Fonte: Medium
La Ethereum Virtual Machine (EVM) è il motore di calcolo principale che alimenta Ethereum, responsabile dell'esecuzione di contratti intelligenti e dell'esecuzione di applicazioni decentralizzate (dApp) sulla blockchain.
Funziona come un computer globale e decentralizzato in cui chiunque può distribuire ed eseguire codice in modo affidabile.
L'EVM elabora le istruzioni scritte in linguaggi di programmazione di alto livello, come Solidity, e le traduce in bytecode di basso livello, che può eseguire.
Questo bytecode è memorizzato sulla blockchain di Ethereum e viene eseguito su ogni nodo della rete, garantendo l'esecuzione uniforme del contratto nell'intero sistema.
Una delle caratteristiche principali dell'EVM è la sua capacità di gestire contratti intelligenti, ovvero accordi autoeseguibili con regole e condizioni predefinite.
Questi contratti vengono eseguiti in un ambiente isolato sull'EVM, il che significa che non influiscono su altre parti del sistema, garantendo sicurezza e affidabilità.
Inoltre, l'EVM è un'architettura basata su stack, che elabora i comandi inserendo e estraendo dati da uno stack.
Questo processo computazionale è controllato da un sistema a gas, che richiede agli utenti di pagare per l'esecuzione delle operazioni, contribuendo a prevenire gli abusi e garantendo un uso efficiente delle risorse.
"La Ethereum Virtual Machine (EVM) è l'elemento più importante dell'ecosistema decentralizzato di Ethereum, consentendo agli sviluppatori di creare applicazioni decentralizzate (dApp) senza dover creare una propria blockchain."
Architettura della macchina virtuale Ethereum
La Ethereum Virtual Machine (EVM) funziona come un'architettura basata su stack, il che significa che esegue le istruzioni utilizzando una struttura dati nota come stack.
In questo modello, l'EVM elabora i comandi inserendo e estraendo valori dallo stack, dove ogni elemento ha una dimensione di 256 bit.
Lo stack è essenziale per la gestione dei calcoli, poiché l'EVM non dispone di registri generici come i computer tradizionali. Lo stack funge invece da memoria temporanea per la manipolazione dei dati durante l'esecuzione degli smart contract.
Ad esempio, quando si esegue un'operazione matematica come l'addizione, l'EVM inserisce i due numeri nello stack, li somma e quindi memorizza nuovamente il risultato nello stack.
Questa progettazione basata su stack consente all'EVM di essere efficiente e prevedibile durante l'esecuzione delle istruzioni degli smart contract.
Semplifica la gestione dei dati temporanei, riducendone la complessità rispetto ai sistemi basati sui registri.
Tuttavia, lo stack dell'EVM presenta delle limitazioni, come una profondità fissa di 1024 elementi, il che significa che operazioni eccessivamente complesse potrebbero causare errori di stack overflow se questo limite viene superato.
Componenti dell'EVM

Fonte: ResearchGate
La Ethereum Virtual Machine (EVM) è composta da diversi componenti chiave che lavorano insieme per eseguire contratti intelligenti e gestire applicazioni decentralizzate.
Esecuzione del codice
Nella Ethereum Virtual Machine (EVM), gli smart contract sono scritti in linguaggi di alto livello come Solidity. Questi contratti vengono poi compilati in bytecode, un codice di basso livello che l'EVM comprende.
Questo bytecode viene memorizzato sulla blockchain e ogni volta che viene chiamato un contratto, l'EVM esegue questo bytecode passo dopo passo.
Quando un contratto viene eseguito, l'EVM esegue ogni istruzione una alla volta, gestendo la logica come calcoli, archiviazione dati e comunicazione con altri contratti.
Ad esempio, se un contratto viene scritto per trasferire token da un utente a un altro, l'EVM elabora il bytecode per aggiornare i saldi nello storage del contratto.
Ciò garantisce che il trasferimento segua le regole del contratto e che tutti i nodi della rete Ethereum raggiungano lo stesso risultato.
Modello di memoria e archiviazione
L'EVM utilizza due tipi distinti di archiviazione dati: memoria e archiviazione.
La memoria è temporanea ed esiste solo durante l'esecuzione di uno smart contract. Viene utilizzata per memorizzare dati intermedi, come calcoli o variabili necessarie temporaneamente.
Ad esempio, quando si sommano due numeri in un contratto, il risultato potrebbe essere memorizzato prima di essere ulteriormente elaborato. Poiché la memoria viene cancellata al termine della transazione, è più efficiente ed economico da utilizzare rispetto all'archiviazione.
Lo storage è permanente e conserva i dati anche dopo il completamento di una transazione. Viene utilizzato per salvare informazioni importanti, come i saldi dei token o lo stato dei contratti, che devono persistere nel tempo.
Ad esempio, in un contratto token, il saldo di ciascun utente viene archiviato qui. Modificare i dati in storage è più costoso in termini di gas (la commissione per l'elaborazione), quindi gli sviluppatori mirano a utilizzare lo storage con parsimonia per ottimizzare i costi.
pila
L'EVM è una macchina basata su stack, il che significa che utilizza una struttura dati chiamata stack per gestire le operazioni.
Lo stack è come una lista in cui i dati possono essere aggiunti o rimossi solo dall'alto, seguendo il principio "Last In, First Out" (LIFO). Ogni elemento inserito nello stack ha una dimensione di 256 bit, che corrisponde alla dimensione delle parole dell'EVM.
Ad esempio, se l'EVM deve sommare due numeri, li inserisce nello stack.
Quindi, esegue l'addizione estraendo gli elementi, elaborandoli e reinserendo il risultato nello stack. Lo stack può contenere fino a 1024 elementi e, se questo limite viene superato, la transazione fallisce.
La semplicità dello stack consente all'EVM di gestire i calcoli in modo efficiente, ma significa anche che operazioni eccessivamente complesse potrebbero causare errori se lo stack si riempie.

Gas e commissioni
Il gas è una componente fondamentale dell'EVM che garantisce l'efficienza e la sicurezza della rete. Ogni operazione eseguita sull'EVM richiede una certa quantità di gas, che gli utenti devono pagare in Ether (la criptovaluta nativa di Ethereum). Il gas funge da commissione per l'utilizzo delle risorse di calcolo dell'EVM, prevenendo abusi e spam.
Ad esempio, operazioni semplici come la somma di due numeri potrebbero costare 3 unità di gas, mentre attività più complesse, come la scrittura di dati su un dispositivo di archiviazione, sono molto più costose.
Se una transazione esaurisce il carburante prima del completamento, la transazione fallisce e tutte le modifiche apportate vengono annullate, ma il carburante speso non viene rimborsato.
Questo sistema a gas incoraggia gli sviluppatori a scrivere codice efficiente e impedisce che operazioni inefficienti o dannose sovraccarichino la rete.
Codici operativi EVM
Gli opcode (codici operativi) sono le istruzioni di base che l'EVM comprende ed esegue. Ogni opcode è un semplice comando che indica all'EVM quale azione eseguire, come aggiungere numeri, memorizzare dati o passare a una parte diversa del codice.
Ci sono oltre 140 codici operativi nell'EVM e a ciascuno di essi è associato uno specifico costo del gas.
Per esempio:
- ADD: Prende due numeri dalla pila, li somma e sposta il risultato indietro. Questo costa 3 unità di gas.
- Negozio: Memorizza i dati nello storage del contratto. Questa è una delle operazioni più costose, con un costo di 20,000 unità di gas.
L'EVM elabora contratti intelligenti e garantisce che ogni istruzione venga eseguita in modo accurato sull'intera rete Ethereum eseguendo questi codici operativi passo dopo passo.
Dati di chiamata
I dati di chiamata si riferiscono ai dati di input inviati insieme a una transazione quando si chiama uno smart contract. Contengono informazioni sulla funzione da eseguire e su tutti i parametri richiesti da tale funzione.
Ad esempio, se si trasferiscono token tramite uno smart contract, i dati della chiamata includerebbero il nome della funzione (ad esempio, transfer ) e i parametri (l'indirizzo del destinatario e l'importo da trasferire).
L'EVM legge i dati di questa chiamata per capire quale funzione eseguire e come gestire la transazione.
Sebbene i dati delle chiamate facciano parte della transazione, la loro lettura non comporta costi in termini di carburante, ma comportano un costo in termini di carburante in base alla loro dimensione quando sono inclusi nella transazione.
Ottieni la carta UPay Crypto
Scopri il meglio dei pagamenti online e delle transazioni crittografiche senza interruzioni.
RegistratiDimensione delle parole nell'EVM
L'EVM opera con una dimensione di parola fissa di 256 bit (32 byte). Ciò significa che tutti i dati che elabora, siano essi numeri, indirizzi o istruzioni, hanno una lunghezza di 256 bit.
Questa scelta progettuale è in linea con l'enfasi di Ethereum sulla sicurezza crittografica, poiché la maggior parte delle operazioni crittografiche (ad esempio l'hashing) richiedono la gestione di grandi numeri.
Ad esempio, quando l'EVM elabora un indirizzo di 32 byte o calcola il risultato di una transazione, utilizza la dimensione della parola di 256 bit.
Questa dimensione costante delle parole rende l'EVM più sicuro ed efficiente nella gestione delle complesse operazioni matematiche necessarie per le attività crittografiche.
Tuttavia, ciò significa anche che anche i valori più piccoli vengono espansi a 256 bit, il che può talvolta portare a inefficienze nella gestione dei dati.
Modello di esecuzione EVM

Fonte: Documenti di base
Il modello di esecuzione EVM definisce le regole e i processi per l'esecuzione delle applicazioni decentralizzate e degli smart contract di Ethereum sulla blockchain.
Modello di account Ethereum
La Ethereum Virtual Machine (EVM) funziona con due tipi di account: account di proprietà esterna (EOA) e account di contratto.
- Conti di proprietà esterna (EOA) sono controllati da chiavi private e rappresentano gli utenti sulla rete. Questi account possono inviare e ricevere Ether e avviare transazioni.
- Conti contrattuali, d'altro canto, contengono codici di smart contract e possono eseguire azioni solo quando attivate da un EOA o da un altro contratto. Non hanno chiavi private, ma rispondono alle chiamate effettuate da altri account.
Ad esempio, quando invii Ether dal tuo portafoglio a uno smart contract, il tuo EOA interagisce con l'account del contratto, attivando il suo codice per eseguire una funzione specifica, come il trasferimento di token o l'archiviazione di dati.
Messaggi, chiamate e transazioni
Nell'EVM, le interazioni tra gli account avvengono tramite chiamate di messaggi e transazioni.
- A delle transazioni È un pacchetto di dati firmato inviato da un EOA. Può trasferire Ether o richiamare una funzione in uno smart contract. Le transazioni vengono trasmesse alla rete Ethereum ed elaborate da miner o validatori.
- A messaggio chiamata Si verifica quando un contratto interagisce con un altro contratto o con un EOA. A differenza delle transazioni, le chiamate ai messaggi sono interne e non devono essere firmate con una chiave privata.
Ad esempio, quando un utente invia una transazione a un contratto di scambio decentralizzato, il contratto può effettuare una chiamata di messaggio a un contratto token per trasferire token per conto dell'utente.
Meccanica del gas in esecuzione
L'EVM utilizza il gas per gestire i costi di esecuzione delle operazioni e per prevenire abusi della rete. Il gas è un'unità di misura della quantità di lavoro computazionale richiesto dall'esecuzione di una transazione o di un contratto.
Ogni operazione nell'EVM, dalla semplice matematica all'archiviazione dei dati, ha un costo fisso in termini di carburante. Prima che una transazione venga eseguita, l'utente deve specificare un limite di carburante, che definisce la quantità massima di carburante che è disposto a pagare per tale esecuzione.
Se la transazione esaurisce il carburante prima del completamento, la transazione fallisce e tutte le modifiche vengono annullate, anche se il carburante speso non viene rimborsato.
Ad esempio, inviare Ether costa 21,000 unità gas, mentre archiviare i dati in un contratto costa notevolmente di più, potenzialmente oltre 20,000 unità gas.
Ciclo di esecuzione EVM
L'EVM esegue le transazioni in un ciclo strutturato di prelievo-decodifica-esecuzione . Questo processo prevede diverse fasi:
- andare a prendere: L'EVM recupera l'istruzione successiva (opcode) dal bytecode del contratto.
- Decodificare: L'EVM decodifica le istruzioni per aiutarti a capire quale operazione eseguire.
- Eseguire: L'EVM esegue l'operazione, ad esempio un calcolo matematico, il recupero dei dati o la chiamata del contratto.
Questo ciclo si ripete finché tutte le istruzioni non vengono elaborate o la transazione non esaurisce il carburante. Il ciclo di esecuzione garantisce che ogni nodo della rete Ethereum elabori le stesse istruzioni, mantenendo il consenso.
Ciclo di vita del contratto nell'EVM
Gli smart contract nell'EVM seguono un ciclo di vita specifico, dall'implementazione all'eventuale risoluzione:
- coerenti: Un contratto viene distribuito inviando una transazione contenente il bytecode del contratto. Una volta distribuito, il contratto ottiene un indirizzo univoco sulla rete Ethereum.
- Interazione: I contratti vengono attivati da transazioni o chiamate di messaggi. Una volta attivato, l'EVM esegue il codice del contratto, che può includere la lettura o la scrittura di dati, la chiamata di altri contratti o il trasferimento di fondi.
- Auto distruzione: I contratti possono essere risolti chiamando il AUTODISTRUZIONE opcode. Questo rimuove il contratto dalla blockchain e trasferisce gli Ether rimanenti a un indirizzo specificato.
Ad esempio, un contratto che gestisce una campagna di crowdfunding potrebbe autodistruggersi al termine della campagna, impedendone così l'ulteriore utilizzo.
Linguaggi di programmazione e EVM
La Ethereum Virtual Machine (EVM) supporta diversi linguaggi di programmazione, consentendo agli sviluppatori di scrivere e distribuire contratti intelligenti senza problemi.
Solidità e EVM

Fonte: Medium
Solidity è il linguaggio di programmazione più utilizzato per la scrittura di smart contract su Ethereum. Si tratta di un linguaggio di alto livello, a tipizzazione statica, progettato specificamente per la Ethereum Virtual Machine (EVM).
Solidity consente agli sviluppatori di scrivere contratti intelligenti che possono essere implementati sulla blockchain di Ethereum e interagire con altri contratti o account di proprietà esterna (EOA).
Il codice scritto in Solidity viene compilato in bytecode EVM , ovvero il codice macchina di basso livello che l'EVM comprende ed esegue.
Ad esempio, un contratto Solidity di base per il trasferimento di token definirebbe funzioni come transfer() per gestire lo spostamento dei token tra gli utenti.
Quando questo contratto viene distribuito, il suo codice Solidity viene compilato in bytecode e l'EVM esegue questo bytecode ogni volta che il contratto viene chiamato.
Solidity supporta una varietà di tipi di dati e strutture di controllo, il che lo rende flessibile per la creazione di applicazioni decentralizzate (dApp) complesse come exchange decentralizzati, protocolli di prestito o standard di token (ad esempio, ERC-20 , ERC-721).
“Oltre l'80% degli sviluppatori blockchain sceglie Solidity come linguaggio principale, che compila direttamente nel bytecode EVM.”
Altri linguaggi compatibili con EVM
Sebbene Solidity sia il linguaggio dominante, esistono altri linguaggi di programmazione compatibili con EVM progettati per offrire funzionalità diverse o per soddisfare casi d'uso specifici. Due esempi degni di nota sono:
- Vyper: Vyper è un'alternativa più semplice e sicura a Solidity. Mira a ridurre la complessità degli smart contract fornendo meno funzionalità, rendendo il codice più facile da verificare e comprendere. Vyper è spesso utilizzato in applicazioni in cui la sicurezza è fondamentale, come finanza decentralizzata (DeFi) protocolli.
- Yul: Yul è un linguaggio intermedio progettato per ottimizzazioni più avanzate. È di livello inferiore rispetto a Solidity, consentendo agli sviluppatori di ottimizzare le prestazioni, rendendolo utile per ottimizzare i costi del carburante. Yul è spesso utilizzato nei casi in cui gli sviluppatori necessitano di un controllo preciso sull'esecuzione dei contratti.
Questi linguaggi vengono anche compilati in bytecode EVM, consentendone la distribuzione e l'esecuzione sulla rete Ethereum, proprio come i contratti basati su Solidity.
Ad esempio, Vyper potrebbe essere scelto per un progetto che richiede una sicurezza rigorosa, mentre Yul potrebbe essere utilizzato in una dApp critica per le prestazioni che mira a ridurre al minimo le commissioni del gas.
Bytecode EVM

Fonte: Trustlook
Il bytecode EVM è il linguaggio macchina di basso livello eseguito dalla Ethereum Virtual Machine (EVM). Una volta scritto in un linguaggio di alto livello come Solidity o Vyper, uno smart contract viene compilato in bytecode.
Questo bytecode viene quindi memorizzato sulla blockchain di Ethereum ed eseguito dall'EVM ogni volta che viene chiamato il contratto.
Il bytecode dell'EVM è costituito da opcode , ovvero singole istruzioni che l'EVM è in grado di comprendere, come operazioni aritmetiche, comandi di memorizzazione dei dati o istruzioni di controllo del flusso.
Ad esempio, un codice operativo ADD indica all'EVM di aggiungere due numeri sullo stack, mentre un codice operativo SSTORE memorizza un valore nella memoria del contratto.
Ogni codice operativo ha un costo di gas specifico e ottimizzare la struttura del bytecode può aiutare a ridurre il gas necessario per eseguire il contratto.
Ad esempio, un contratto progettato per gestire i trasferimenti di token includerebbe istruzioni in bytecode per il controllo dei saldi, l'aggiornamento dello storage e l'emissione di eventi.
L'EVM legge ed esegue queste istruzioni ogni volta che viene invocato il contratto, garantendo lo stesso risultato su tutti i nodi della rete Ethereum.
"Ogni codice operativo EVM ha un costo di gas specifico, con operazioni complesse come le funzioni crittografiche che consumano fino a 20,000 unità di gas, rispetto a operazioni più semplici che utilizzano solo 3 unità di gas."
Costi, commissioni ed efficienza del gas

Fonte: Finematics
I costi del gas e le commissioni svolgono un ruolo fondamentale nel determinare l'efficienza e la scalabilità degli smart contract e delle dApp sulla Ethereum Virtual Machine (EVM).
Calcolo e rendimento del gas
Nella Ethereum Virtual Machine (EVM), il gas rappresenta il costo computazionale necessario per eseguire una transazione o uno smart contract. Ogni operazione eseguita dall'EVM, che si tratti di una semplice addizione o della scrittura di dati nella memoria, ha un costo specifico in gas.
Ad esempio, un'operazione di base come la somma di due numeri costa 3 unità di gas, mentre la memorizzazione dei dati in un contratto tramite l' opcode SSTORE può costare fino a 20,000 unità di gas.
Il gas viene pagato in Ether (ETH) e il costo totale del gas di una transazione viene calcolato moltiplicando il gas utilizzato per il prezzo del gas.
Il prezzo del gas è impostato dall'utente e rappresenta la quantità di Ether che è disposto a pagare per unità di gas. Se la rete è congestionata, gli utenti possono impostare un prezzo del gas più alto per incentivare i miner o i validatori a dare priorità alle loro transazioni.
L'uso efficiente del gas è fondamentale, poiché contratti scarsamente ottimizzati possono comportare commissioni più elevate, rendendo le transazioni più costose per gli utenti.
Ad esempio, trasferire Ether tra account costa 21,000 unità di gas, ma interagire con contratti intelligenti complessi può costare notevolmente di più, soprattutto se il contratto prevede più modifiche di archiviazione o chiamate di funzione.
"Nel 2021, le commissioni del gas EVM hanno rappresentato il 96% dei costi totali delle transazioni su Ethereum, spingendo verso soluzioni Layer 2 per ridurre la congestione."
Tecniche per l'ottimizzazione del gas
L'ottimizzazione del gas è un aspetto fondamentale per gli sviluppatori di smart contract, poiché la riduzione del consumo di gas può ridurre significativamente i costi di transazione. Alcune tecniche comuni per l'ottimizzazione del gas includono:
- Riduzione al minimo delle scritture di archiviazione: Poiché l'archiviazione dei dati sulla blockchain è una delle operazioni più costose, gli sviluppatori possono ottimizzare l'utilizzo del gas riducendo al minimo il numero di volte in cui i dati vengono scritti nell'archivio.
Ad esempio, invece di aggiornare ripetutamente il saldo di un utente durante più transazioni, gli sviluppatori potrebbero eseguire aggiornamenti in batch per ridurre il numero di operazioni di archiviazione.
- Strutture dati efficienti: La scelta delle strutture dati corrette può contribuire a ridurre i costi del gas. Ad esempio, l'utilizzo di array più piccoli o di tipi di dati più compatti può comportare un minore utilizzo dello storage, riducendo così tasse sul gas.
Gli sviluppatori spesso preferiscono uint8 o uint16 a uint256 se i numeri più piccoli sono sufficienti per la logica del contratto.
- Ottimizzazione di cicli e funzioni: Loop e attività ripetitive possono aumentare rapidamente il consumo di carburante. Gli sviluppatori possono ridurre i costi del carburante limitando il numero di iterazioni nei loop o riorganizzando il codice per eliminare calcoli non necessari.
Ad esempio, i contratti dovrebbero evitare cicli complessi che si ripetono su grandi set di dati, poiché possono diventare costosi.
Applicando queste e altre tecniche di ottimizzazione, gli sviluppatori possono creare contratti più efficienti e convenienti per gli utenti.
Limite di gas e scenari di esaurimento del gas
Ogni transazione Ethereum deve includere un limite di gas , che stabilisce la quantità massima di gas che un utente è disposto a spendere per quella transazione.
Questo limite di gas garantisce che gli utenti non esauriscano accidentalmente tutti i loro Ether in una transazione che dura troppo a lungo.
Se la transazione supera il limite di gas prima del completamento, si verifica un errore di esaurimento del gas e la transazione fallisce.
Ad esempio, se un utente imposta un limite di gas di 50,000 unità di gas per una transazione che alla fine richiede 60,000 unità di gas, la transazione si interromperà a metà e non verrà apportata alcuna modifica alla blockchain.
L'utente perde comunque gli Ether spesi in gas fino al momento del fallimento. Pertanto, è importante che utenti e sviluppatori stimino con precisione i limiti di gas per evitare transazioni fallite.
Nei contratti intelligenti complessi, gli sviluppatori spesso includono controlli del carburante per garantire che le transazioni non esauriscano il carburante inaspettatamente.
Allo stesso modo, gli utenti possono adattare il limite del gas in base alla complessità prevista della transazione per garantire che venga completata correttamente.
Ottieni la carta UPay Crypto
Scopri il meglio dei pagamenti online e delle transazioni crittografiche senza interruzioni.
RegistratiSicurezza nell'EVM
La sicurezza nella Ethereum Virtual Machine (EVM) è fondamentale per garantire l'integrità e la sicurezza degli smart contract e delle applicazioni decentralizzate.
Vulnerabilità comuni negli smart contract
Gli smart contract implementati sulla Ethereum Virtual Machine (EVM) sono esposti a diverse vulnerabilità a causa della loro natura immutabile e pubblica.
Una volta implementati, gli smart contract non possono essere modificati, il che rende fondamentale garantirne la sicurezza. Alcune delle vulnerabilità più comuni includono:
- Attacchi di rientro: Un attacco di reentrancy si verifica quando un contratto esterno richiama il contratto originale prima che l'esecuzione iniziale sia completata. Ciò può consentire all'attaccante di sfruttare lo stato del contratto, ad esempio prosciugando ripetutamente i fondi prima che il saldo del contratto venga aggiornato.
Ad esempio, il famigerato attacco informatico DAO del 2016 ha sfruttato una vulnerabilità di rientro, portando al furto di milioni di Ether.
- Overflow/Underflow di interi: Negli smart contract, le operazioni sugli interi devono essere gestite con attenzione. Se un numero diventa maggiore o minore di quanto il tipo di dati possa gestire, si verifica un overflow o un underflow.
Ciò può portare a comportamenti contrattuali errati, come la creazione non autorizzata di token o la manipolazione del valore.
- Denial of Service (DoS): Gli attacchi DoS possono verificarsi quando un contratto viene deliberatamente sovraccaricato da un eccesso di dati o transazioni, rendendolo inutilizzabile. Gli aggressori possono anche sfruttare le limitazioni del gas, rendendo troppo costoso per gli utenti legittimi eseguire le funzioni del contratto.
Queste vulnerabilità possono portare alla perdita di fondi, al malfunzionamento dei contratti o all'instabilità della rete. Pertanto, gli sviluppatori devono seguire le best practice ed effettuare test approfonditi per mitigare i rischi prima di implementare i contratti.
Meccanismi di sicurezza EVM
La Macchina Virtuale Ethereum incorpora diversi meccanismi di sicurezza per proteggere i contratti e garantire l'integrità delle transazioni. Questi meccanismi includono:
- Limitazione del gas: Il sistema del gas funge da strato protettivo contro loop infiniti o calcoli eccessivi. Ogni transazione è limitata dalla quantità di gas fornita dall'utente, il che garantisce che un contratto non possa essere eseguito all'infinito o utilizzare risorse eccessive.
Ciò aiuta a prevenire l'abuso della rete e protegge i contratti dagli attacchi DoS dovuti a loop infiniti.
- Isolamento: L'EVM isola gli smart contract l'uno dall'altro. I contratti vengono eseguiti in un ambiente sandbox, il che significa che possono interagire con altri contratti e dati solo tramite funzioni definite esplicitamente.
Ciò garantisce che, anche se un contratto viene compromesso, non può interferire direttamente con l'esecuzione di altri contratti o con i dati archiviati in account separati.
- Verifica della firma: L'EVM garantisce che le transazioni avviate da account esterni siano correttamente firmate utilizzando chiavi crittografiche. Ciò impedisce l'accesso non autorizzato o la manipolazione delle transazioni, poiché solo il proprietario di una chiave privata può avviare una transazione dal proprio account.
Sebbene questi meccanismi forniscano un livello di sicurezza fondamentale, gli sviluppatori sono comunque responsabili della protezione della logica dei loro contratti e dell'evitamento delle vulnerabilità note.
Verifica degli Smart Contract per la sicurezza EVM
L'audit è un passaggio fondamentale per garantire la sicurezza degli smart contract prima che vengano implementati sulla rete Ethereum.
Un audit di uno smart contract prevede la revisione del codice sorgente del contratto, l'identificazione di potenziali vulnerabilità e la verifica della conformità alle best practice. Il processo di audit si concentra in genere su:
- Revisione del codice: Gli auditor esaminano il codice del contratto riga per riga per rilevare bug, vulnerabilità e logica inefficiente. Questo può aiutare a individuare problemi come overflow di interi, controlli di accesso impropri o chiamate esterne vulnerabili.
- Collaudo: Gli auditor eseguono test sia manuali che automatizzati sul contratto. Questi includono test unitari per singole funzioni e test di simulazione per valutare il comportamento del contratto in diversi scenari, come elevati volumi di transazioni o casi limite.
- Verifica formale: In alcuni casi, vengono utilizzati metodi formali per dimostrare matematicamente la correttezza del comportamento di uno smart contract. Questo può fornire un livello di garanzia più elevato, soprattutto per i contratti ad alto rischio come quelli utilizzati nelle applicazioni di finanza decentralizzata (DeFi).
Società di revisione contabile come CertiK e OpenZeppelin sono specializzate nell'offrire revisioni approfondite degli smart contract per identificare i rischi e suggerire miglioramenti. Un audit completo può contribuire a ridurre al minimo le vulnerabilità, garantendo che il contratto funzioni in modo sicuro sull'EVM.
Casi d'uso EVM
La Ethereum Virtual Machine (EVM) svolge un ruolo importante nel supportare varie applicazioni blockchain, dalla finanza decentralizzata (DeFi) agli NFT e agli smart contract.
Applicazioni decentralizzate (dApp)

Fonte: Blue Manakin
Le applicazioni decentralizzate (dApp) sono programmi software che vengono eseguiti su una rete blockchain e che in genere utilizzano contratti intelligenti per la logica di backend.
La Ethereum Virtual Machine (EVM) svolge un ruolo importante nell'esecuzione di queste dApp, poiché consente loro di interagire con la blockchain in modo sicuro e decentralizzato.
Ad esempio, le dApp più diffuse come Uniswap (un exchange decentralizzato) e Aave (una piattaforma di prestito decentralizzata) utilizzano l'EVM per elaborare transazioni, prestiti e altre interazioni senza affidarsi a un'autorità centrale.
È possibile interagire direttamente con la blockchain e l'EVM garantisce che tutte le transazioni vengano eseguite come scritto nel codice dello smart contract. Questo approccio decentralizzato migliora la sicurezza, la trasparenza e il controllo degli utenti sui propri fondi o dati.
Smart Contract
Gli smart contract sono accordi autoeseguibili i cui termini sono scritti direttamente nel codice. L'EVM è responsabile dell'esecuzione di questi contratti, garantendo che funzionino esattamente come previsto una volta implementati.
Questi contratti automatizzano un'ampia gamma di processi, dai semplici trasferimenti di token ai complessi accordi finanziari, e sono fondamentali per molti servizi basati su Ethereum.
Ad esempio, è possibile creare un servizio di deposito a garanzia utilizzando uno smart contract, in cui i fondi vengono trattenuti finché non vengono soddisfatte determinate condizioni.
Una volta verificate tali condizioni (ad esempio, la consegna della merce), l'EVM rilascia automaticamente i fondi al venditore, eliminando la necessità di intermediari. L'utilizzo di contratti intelligenti riduce i costi, aumenta l'efficienza e garantisce interazioni affidabili tra le parti.
Piattaforme DeFi
Le piattaforme di finanza decentralizzata (DeFi) sfruttano l'EVM (Equity Value Management) per creare prodotti e servizi finanziari che non dipendono dagli intermediari finanziari tradizionali.
Queste piattaforme offrono agli utenti vari strumenti finanziari, come prestiti, prestiti, trading e yield farming, direttamente sulla blockchain.
Ad esempio, Compound e MakerDAO sono due piattaforme DeFi basate sulla rete Ethereum. Consentono agli utenti di prestare o prendere in prestito criptovalute senza dover ricorrere a una banca.
L'EVM garantisce che i protocolli di prestito vengano eseguiti in modo sicuro, calcolando automaticamente i tassi di interesse, i requisiti di garanzia e altri fattori.
È possibile guadagnare interessi o ottenere prestiti interagendo con queste piattaforme tramite contratti intelligenti, con l'EVM che garantisce il rispetto di tutti i termini.
Token non fungibili (NFT)
I token non fungibili (NFT) sono risorse digitali uniche che rappresentano la proprietà di uno specifico oggetto o contenuto, come opere d'arte, musica o oggetti da collezione.
L'EVM consente la creazione e il trasferimento di NFT tramite contratti intelligenti che seguono standard come ERC-721 o ERC-1155.
Ad esempio, piattaforme come OpenSea e Rarible utilizzano l'EVM per coniare, acquistare e vendere NFT. Quando un utente acquista un NFT, l'EVM registra il trasferimento di proprietà sulla blockchain di Ethereum, garantendo all'acquirente una registrazione verificabile e immutabile della proprietà.
Gli NFT hanno rivoluzionato settori come l'arte digitale e il gaming, consentendo ai creatori di tokenizzare le proprie opere e venderle direttamente ai collezionisti, con tutte le transazioni elaborate e protette dall'EVM.
Ottieni la carta UPay Crypto
Scopri il meglio dei pagamenti online e delle transazioni crittografiche senza interruzioni.
RegistratiImplementazioni EVM cross-chain e multi-chain
La Ethereum Virtual Machine (EVM) non è più limitata a Ethereum, poiché ora alimenta applicazioni su più blockchain attraverso implementazioni cross-chain e multi-chain.
EVM su altre blockchain
La Ethereum Virtual Machine (EVM) è stata adottata da diverse blockchain oltre a Ethereum, consentendo agli sviluppatori di creare ed eseguire contratti intelligenti compatibili con Ethereum su altre reti.
Queste blockchain implementano l'EVM per supportare le stesse applicazioni basate su Solidity, semplificando per gli sviluppatori la distribuzione di dApp su più piattaforme. Alcuni esempi:
- Binance Catena Intelligente (BSC): BSC è una blockchain compatibile con EVM che consente agli sviluppatori di trasferire le dApp Ethereum con modifiche minime. Offre transazioni più veloci e commissioni più basse rispetto a Ethereum, rendendola interessante per alcune applicazioni decentralizzate come gli exchange decentralizzati (DEX) e le piattaforme di yield farming.
- Polygon (precedentemente Matic): Polygon è una soluzione di scalabilità Layer 2 per Ethereum che supporta EVM, consentendo alle dApp Ethereum di funzionare con commissioni di transazione ridotte e tempi di elaborazione più rapidi. È ampiamente utilizzata per il gaming, i marketplace NFT e le applicazioni DeFi.
- Valanga e Fantom: Sia Avalanche che Fantom sono blockchain ad alte prestazioni che implementano EVM, offrendo agli sviluppatori di Ethereum l'opportunità di adattare le proprie applicazioni a nuove reti con maggiore velocità e costi inferiori.
Queste catene compatibili con EVM potenziano l'ecosistema di Ethereum offrendo piattaforme alternative con vantaggi distintivi, come scalabilità e convenienza, mantenendo al contempo la compatibilità con le dApp basate su Ethereum.
Soluzioni EVM e Layer 2

Fonte: BTSE
Le soluzioni di Livello 2 sono costruite sopra Ethereum per contribuire a scalare la rete, ridurre le commissioni di transazione e aumentare la velocità di elaborazione senza modificare il livello base (Livello 1).
Molte soluzioni Layer 2 sono progettate per essere compatibili con EVM, garantendo una transizione fluida per le dApp già in esecuzione su Ethereum. Tra i principali esempi:
- Rollup ottimistici: Soluzioni come Optimism e Arbitrum utilizzano rollup ottimistici per raggruppare più transazioni off-chain e inviare un'unica prova alla catena principale di Ethereum. Sono compatibili con EVM, consentendo agli sviluppatori di migrare i propri smart contract con modifiche minime.
- zk-rollup: Gli zk-Rollup, come quelli sviluppati da zkSync, utilizzano prove a conoscenza zero per verificare la validità delle transazioni off-chain. Questi rollup sono anche compatibili con EVM e sono progettati per ridurre il carico computazionale su Ethereum mantenendo la sicurezza.
Le soluzioni Layer 2 riducono significativamente le commissioni del gas e aumentano la produttività della rete Ethereum, continuando a utilizzare l'EVM per l'esecuzione dei contratti, il che le rende importanti per la strategia di scalabilità di Ethereum.
Evoluzione dell'EVM
Nel corso del tempo, l'EVM si è adattato per superare i suoi limiti, con sviluppi come Ethereum 2.0 e soluzioni Layer 2 che promettono una macchina virtuale più efficiente.
Limitazioni dell'EVM
La macchina virtuale Ethereum si è dimostrata uno strumento potente per le applicazioni decentralizzate, ma presenta alcune limitazioni:
- Colli di bottiglia delle prestazioni: L'EVM elabora le transazioni in modo sequenziale, il che può comportare tempi di esecuzione lenti, soprattutto in caso di congestione della rete. Ciò si traduce in commissioni di gas elevate e ritardi nelle conferme delle transazioni.
- Inefficienza del gas: Alcune operazioni EVM sono costose in termini di gas, in particolare per quanto riguarda lo stoccaggio e alcune operazioni aritmetiche. Questo limita la complessità degli smart contract, poiché gli sviluppatori devono ottimizzare costantemente l'efficienza del gas per evitare di rendere le transazioni proibitive.
- Mancanza di parallelizzazione: L'attuale progettazione dell'EVM non supporta l'esecuzione parallela delle transazioni, il che significa che tutte le operazioni devono essere elaborate una alla volta. Ciò limita la scalabilità e la produttività, soprattutto con la crescente domanda per la rete Ethereum.
Queste limitazioni stanno stimolando la ricerca e lo sviluppo continui, volti a migliorare o sostituire parti dell'EVM per aumentarne le prestazioni, la scalabilità e l'efficienza.
Ethereum 2.0 e il futuro dell'EVM
Con il passaggio a Ethereum 2.0 (ETH2), la rete Ethereum sta passando da un meccanismo di consenso proof-of-work (PoW) a un meccanismo proof-of-stake (PoS).
Questo aggiornamento mira a migliorare la scalabilità, la sicurezza e l'efficienza energetica. Tuttavia, l'EVM in sé non viene sostituito, ma piuttosto evoluto per funzionare all'interno di questo nuovo ecosistema.
- Catene di coccio: Ethereum 2.0 introduce lo sharding, che suddivide la rete in catene più piccole (shard) che elaborano le transazioni in parallelo. Questo potrebbe alleviare la congestione e ridurre le commissioni del gas, ma richiederà modifiche al modo in cui l'EVM interagisce con queste catene di shard.
- Ambienti di esecuzione: In Ethereum 2.0, ci sono piani per creare ambienti di esecuzione, che funzionerà insieme all'EVM per supportare applicazioni più complesse e consentire ad altre macchine virtuali di coesistere su Ethereum.
Ciò potrebbe aprire le porte a una maggiore flessibilità nel modo in cui vengono eseguiti gli smart contract e migliorare le prestazioni senza modificare radicalmente l'EVM.
La roadmap di Ethereum 2.0 segnala un ruolo continuativo per l'EVM nel futuro della rete, ma con una maggiore scalabilità e adattabilità.
Innovazioni e aggiornamenti all'EVM
Sono in corso diversi sforzi per aggiornare l'EVM e renderlo più efficiente e versatile. Tra le innovazioni più degne di nota figurano:
- EVM 384: Questa proposta mira ad estendere i tipi di dati nativi dell'EVM, consentendo operazioni crittografiche più efficienti, attualmente ad alto consumo di gas. Espandendo la dimensione delle parole dell'EVM, alcuni calcoli potrebbero essere semplificati, riducendo il costo delle operazioni complesse.
- eWASM (Ethereum WebAssembly): eWASM è un'iniziativa volta a sostituire l'EVM con WebAssembly (WASM), una macchina virtuale più moderna e versatile. WASM è più veloce, supporta l'esecuzione parallela ed è ampiamente utilizzata al di fuori delle applicazioni blockchain.
Se implementato completamente, eWASM consentirebbe a Ethereum di elaborare i contratti in modo più efficiente e di aprire la rete agli sviluppatori che hanno familiarità con i principali linguaggi di programmazione.
- Astrazione del conto: Questo aggiornamento proposto mira a semplificare il modo in cui account e contratti interagiscono con la rete. Astraendo alcune complessità legate alla verifica delle firme e alla gestione delle transazioni, questo aggiornamento consentirebbe la progettazione di contratti intelligenti più flessibili e intuitivi, migliorando la funzionalità dell'EVM.
Queste innovazioni mirano a garantire che l'EVM rimanga competitivo e in grado di supportare la crescita di Ethereum nel lungo termine.
Ottieni la carta UPay Crypto
Scopri il meglio dei pagamenti online e delle transazioni crittografiche senza interruzioni.
RegistratiEcosistema e strumenti EVM
Ethereum Virtual Machine (EVM) dispone di un ecosistema in crescita di strumenti progettati per aiutare gli sviluppatori a creare, testare e ottimizzare in modo efficiente gli smart contract.
Strumenti per sviluppatori per EVM
È stata creata un'ampia gamma di strumenti per sviluppatori per rendere più efficiente e intuitivo il lavoro con la Ethereum Virtual Machine (EVM).
Questi strumenti aiutano gli sviluppatori a scrivere, compilare, distribuire e testare contratti intelligenti, garantendone l'ottimizzazione in termini di prestazioni e sicurezza. Tra gli strumenti più diffusi figurano:
- Remixare l'IDE: Remix è un ambiente di sviluppo integrato (IDE) basato sul web per la scrittura e il test di smart contract. Supporta Solidity, il linguaggio principale per la scrittura di smart contract Ethereum, e fornisce una suite di strumenti di debug e deployment. È ampiamente utilizzato sia da sviluppatori principianti che esperti grazie alla sua facilità d'uso e flessibilità.
- Suite del Tartufo: Truffle è un framework di sviluppo che semplifica il processo di creazione di applicazioni decentralizzate (dApp). Include un set di librerie per la gestione dei contratti, l'esecuzione di test automatizzati e l'interazione con la blockchain di Ethereum. Truffle si integra anche con altri strumenti come Ganache, che simula una blockchain localmente a scopo di test.
- Elmetto protettivo: Hardhat è un altro ambiente di sviluppo popolare che offre ampie funzionalità per la compilazione di smart contract, il debug e l'esecuzione di test. Include il supporto per Solidity e offre plugin flessibili, come la possibilità di eseguire l'EVM localmente per velocizzare le iterazioni durante lo sviluppo.
Questi strumenti semplificano il processo di sviluppo e aiutano a garantire che gli sviluppatori possano creare, testare e distribuire in modo efficiente le loro applicazioni basate su EVM.
Debug e test EVM
Il debug e il test sono fasi cruciali nello sviluppo di contratti intelligenti, data la natura immutabile delle transazioni blockchain.
Una volta implementato uno smart contract, gli errori non possono essere facilmente corretti, quindi è essenziale testarlo in modo rigoroso. Alcuni strumenti chiave per il debug e il test includono:
- ganache: Ganache, parte della suite Truffle, è un emulatore di blockchain locale che consente agli sviluppatori di creare una rete Ethereum personale. Simula la blockchain, consentendo agli sviluppatori di testare contratti intelligenti senza pagare commissioni sul gas o attendere conferme dalla rete Ethereum principale. Questo lo rende ideale per testare la funzionalità dei contratti in diverse condizioni.
- Debugger per elmetto: Hardhat fornisce strumenti di debug integrati che consentono agli sviluppatori di ispezionare passo dopo passo l'esecuzione degli smart contract. Ciò semplifica l'identificazione di problemi nella logica o la scoperta di eventuali inefficienze nel gas. Lo strumento consente test in tempo reale su una rete locale, riducendo il rischio di implementare contratti difettosi o inefficienti.
- Copertura di solidità: Solidity Coverage è uno strumento che misura la quantità di codice di uno smart contract testata. Questo garantisce che le funzioni critiche e i casi limite siano coperti dai test, riducendo il rischio di vulnerabilità non scoperte nel contratto implementato.
Test approfonditi effettuati utilizzando questi strumenti aiutano a prevenire errori costosi e vulnerabilità di sicurezza nei contratti attivi.
Emulatori e simulatori EVM
Gli emulatori e i simulatori EVM consentono agli sviluppatori di imitare l'ambiente di esecuzione della rete Ethereum sui loro computer locali.
Questi strumenti aiutano a testare, ottimizzare le prestazioni e a eseguire il debug degli smart contract prima che vengano distribuiti sulla rete principale. Alcuni simulatori ed emulatori ampiamente utilizzati includono:
- ganache: Come emulatore di blockchain, Ganache consente agli sviluppatori di eseguire una blockchain Ethereum locale per testare transazioni, distribuire contratti e monitorare l'utilizzo del gas in un ambiente controllato. Gli sviluppatori possono simulare interazioni reali, aiutandoli a perfezionare le loro dApp e i loro contratti.
- EVM Playground: EVM Playground è uno strumento basato su browser che consente agli sviluppatori di scrivere, compilare ed eseguire il bytecode EVM direttamente in un ambiente sandbox. Questo è particolarmente utile per gli sviluppatori che desiderano esplorare il comportamento di specifici opcode EVM o risolvere problemi contrattuali di basso livello.
- EthFiddle: EthFiddle è uno strumento online leggero che consente agli utenti di sperimentare frammenti di codice Solidity in tempo reale. Gli sviluppatori possono condividere e testare rapidamente frammenti di codice, rendendolo uno strumento collaborativo per il debug e il test di piccole porzioni di codice.
Questi emulatori e simulatori sono essenziali per garantire che gli smart contract funzionino come previsto prima della distribuzione, risparmiando tempo e risorse nel processo di sviluppo.
Ottieni la carta UPay Crypto
Scopri il meglio dei pagamenti online e delle transazioni crittografiche senza interruzioni.
RegistratiConclusione
La Ethereum Virtual Machine (EVM) è la spina dorsale della blockchain di Ethereum e alimenta applicazioni decentralizzate, contratti intelligenti, piattaforme DeFi e NFT.
La sua compatibilità cross-chain e il suo ruolo nelle soluzioni Layer 2 ne evidenziano l'importanza nell'ecosistema blockchain più ampio.
Tuttavia, presenta anche delle limitazioni, come l'inefficienza del gas e la mancanza di parallelizzazione, che gli aggiornamenti in corso come Ethereum 2.0 e le innovazioni come eWASM mirano a risolvere.
Grazie a un solido ecosistema di strumenti per sviluppatori, sistemi di debug ed emulatori, l'EVM continua a svilupparsi, garantendo che rimanga il motore chiave per il crescente panorama decentralizzato di Ethereum.
Con il progresso della tecnologia blockchain, l'EVM continuerà ad adattarsi e a migliorarsi, guidando il futuro delle applicazioni decentralizzate e degli smart contract su diverse piattaforme.
Domande frequenti sulla macchina virtuale Ethereum (EVM)
Questa sezione FAQ risponde ad alcune domande comuni che possono aiutarti a restringere le tue scelte:
L'EVM funziona anche su altre blockchain?
Sì, l'EVM è compatibile con molte altre blockchain, come Binance Smart Chain, Avalanche e Polygon, consentendo loro di eseguire applicazioni basate su Ethereum.
Quale linguaggio di programmazione viene utilizzato per l'EVM?
Il linguaggio di programmazione principale utilizzato per l'EVM è Solidity, che compila il bytecode EVM per l'esecuzione sulla rete Ethereum.
Come calcola l'EVM le tariffe del gas?
L'EVM calcola le commissioni del gas in base alle risorse di calcolo necessarie per ogni transazione o esecuzione di un contratto intelligente, con operazioni più complesse che richiedono una quantità di gas maggiore.
L'EVM può eseguire qualsiasi tipo di codice?
Sì, l'EVM è Turing-completo, il che significa che può eseguire qualsiasi algoritmo computazionale, se gli vengono forniti tempo e risorse sufficienti.
In che modo le soluzioni Layer 2 migliorano l'EVM?
Le soluzioni Layer 2 migliorano l'EVM scaricando le transazioni dalla rete Ethereum principale, riducendo la congestione e abbassando le commissioni del gas.
L'EVM è utilizzato in tutte le applicazioni basate su Ethereum?
Sì, tutte le applicazioni decentralizzate (dApp) e gli smart contract sulla rete Ethereum vengono eseguiti utilizzando l'EVM.
In che modo l'EVM gestisce la sicurezza degli smart contract?
L'EVM rafforza la sicurezza eseguendo contratti intelligenti in un ambiente isolato, impedendo al codice dannoso di influenzare altri contratti o la rete.
Cosa sono gli opcode EVM?
Gli opcode EVM sono istruzioni di basso livello eseguite dall'EVM per svolgere attività quali operazioni matematiche, archiviazione dati e controllo del flusso negli smart contract.
