Virtuální stroj Etherea (EVM)
Stránka naposledy aktualizována: 14. února 2026
Virtuální stroj Etherea (EVM) je decentralizované virtuální prostředí, které konzistentně a bezpečně vykonává kód na všech uzlech Etherea. Uzly spouštějí EVM k provádění chytrých kontraktů a používají "palivo" k měření výpočetní náročnosti operací, čímž zajišťují efektivní alokaci zdrojů a bezpečnost sítě.
Předpoklady
Pro pochopení EVM je nutné mít základní znalosti běžné terminologie v informatice, jako jsou bajtyopens in a new tab, paměťopens in a new tab a zásobníkopens in a new tab. Také by bylo užitečné se seznámit s kryptografickými/blockchainovými koncepty, jako jsou hašovací funkceopens in a new tab a Merkleho stromopens in a new tab.
Od účetní knihy ke stavovému stroji
Přirovnání k „distribuované účetní knize“ se často používá k popisu blockchainů, jako je Bitcoin, které mají decentralizovanou měnu s využitím základních nástrojů kryptografie. Účetní kniha udržuje záznam aktivit za současného dodržování souboru pravidel, která určují, co může a nemůže uživatel dělat při úpravě této knihy. Např. bitcoinová adresa nemůže utratit více Bitcoinů, než kolik jich předtím obdržela. Tato pravidla jsou základem všech transakcí na Bitcoinu a mnoha dalších blockchainech.
Ethereum sice má svou vlastní nativní kryptoměnu (ether), která se řídí téměř úplně stejnými intuitivními pravidly, ale zároveň umožňuje mnohem výkonnější funkci: chytré kontrakty. Pro tuto složitější funkci potřebujeme sofistikovanější přirovnání. Místo distribuované účetní knihy je Ethereum distribuovaný stavový strojopens in a new tab. Stav Etherea je velká datová struktura, která obsahuje nejen všechny účty a zůstatky, ale také stav stroje, který se může měnit z bloku na blok podle předem definované sady pravidel a který může vykonávat libovolný strojový kód. Specifická pravidla pro změnu stavu od bloku k bloku jsou definována v EVM.

Funkce přechodu stavu Etherea
EVM se chová jako matematická funkce: Na základě vstupu produkuje deterministický výstup. Je proto velmi užitečné formálněji popsat Ethereum tak, že má funkci přechodu stavu:
1Y(S, T)= S'Je-li dán starý platný stav (S) a nová sada platných transakcí (T), funkce přechodu stavu Etherea Y(S, T) vytvoří nový platný výstupní stav S'
Stav
V kontextu Etherea je stav obrovská datová struktura zvaná modifikovaný Merkle Patricia Trie, která uchovává všechny účty propojené haši a redukovatelné na jeden kořenový haš uložený na blockchainu.
Transakce
Transakce jsou kryptograficky podepsané instrukce poslané z účtů. Existují dva typy transakcí: Ty, jejich výsledkem je volání zpráv (message calls), a ty, které vedou k vytvoření kontraktu.
Vytvoření kontraktu vede k vytvoření nového účtu kontraktu, který obsahuje zkompilovaný bytecode chytrého kontraktu. Kdykoli jiný účet vyšle zprávu na tento kontrakt, vykoná se jeho bytecode.
Instrukce EVM
EVM se spouští jako zásobníkový strojopens in a new tab s hloubkou 1024 položek. Každá položka je 256bitové slovo, které bylo zvoleno pro snadné použití s 256bitovou kryptografií (např. hashe Keccak-256 nebo podpisy secp256k1).
Během provádění udržuje EVM přechodnou paměť (jako bajtové pole adresované slovem), která se mezi transakcemi neuchovává.
Přechodné úložiště
Přechodné úložiště je úložiště klíč–hodnota pro jednotlivé transakce, ke kterému se přistupuje pomocí opkódů TSTORE a TLOAD. Zůstává zachováno napříč všemi interními voláními během jedné transakce, ale na konci transakce se vymaže. Na rozdíl od paměti je přechodné úložiště modelováno jako součást stavu EVM, nikoli jako součást exekučního rámce, ale není zapsáno do globálního stavu. Přechodné úložiště umožňuje úsporné dočasné sdílení stavu mezi interními voláními během transakce.
Úložiště
Kontrakty obsahují Merkle Patricia úložiště trie (jako pole slov adresovatelné slovy), které je spojeno s příslušným účtem a je součástí globálního stavu. Toto trvalé úložiště se liší od přechodného úložiště, které je k dispozici pouze po dobu trvání jedné transakce a netvoří součást trvalého úložiště trie účtu.
Opkódy
Zkompilovaný bytecode chytrého kontraktu se provádí jako řada opkódů EVM, které provádějí standardní zásobníkové operace jako XOR, AND, ADD, SUB atd. EVM také implementuje řadu blockchainově specifických operací se zásobníkem, jako jsou ADDRESS, BALANCE, BLOCKHASH atd. Sada opkódů zahrnuje také TSTORE a TLOAD, které poskytují přístup k přechodnému úložišti.

Implementace EVM
Všechny implementace EVM musí dodržovat specifikaci popsanou v Ethereum Yellowpaperu.
Během desetileté historie Etherea prošel EVM několika revizemi a existuje několik implementací EVM v různých programovacích jazycích.
Exekuční klienti Etherea zahrnují implementaci EVM. Navíc existuje několik samostatných implementací, včetně:
- Py-EVMopens in a new tab - Python
- evmoneopens in a new tab - C++
- ethereumjs-vmopens in a new tab - JavaScript
- revmopens in a new tab - Rust
Další čtení
- Ethereum Yellowpaperopens in a new tab
- Jellopaper alias KEVM: Sémantika EVM v Kopens in a new tab
- The Beigepaperopens in a new tab
- Opkódy Ethereum Virtual Machineopens in a new tab
- Interaktivní reference pro opkódy Ethereum Virtual Machineopens in a new tab
- Krátký úvod v dokumentaci Solidityopens in a new tab
- Mastering Ethereum - The Ethereum Virtual Machineopens in a new tab