Maszyna wirtualna Ethereum (EVM)
Strona ostatnio zaktualizowana: 16 lutego 2026
Maszyna wirtualna Ethereum (EVM) to zdecentralizowane, wirtualne środowisko, które wykonuje kod spójnie i bezpiecznie we wszystkich węzłach Ethereum. Węzły uruchamiają EVM w celu wykonywania inteligentnych kontraktów, używając "gazu" do pomiaru wysiłku obliczeniowego wymaganego do operacji, zapewniając wydajną alokację zasobów i bezpieczeństwo sieci.
Wymagania wstępne
Do zrozumienia EVM konieczna jest podstawowa znajomość popularnej terminologii informatycznej, takiej jak bajtyopens in a new tab, pamięćopens in a new tab i stosopens in a new tab. Pomocna będzie również znajomość pojęć z zakresu kryptografii/blockchaina, takich jak funkcje haszująceopens in a new tab i drzewo Merkle'aopens in a new tab.
Od rejestru do maszyny stanu
Analogia „rozproszonej księgi głównej” jest często używana w celu opisania blockchainów np. takich jak Bitcoin, które umożliwiają zdecentralizowanym walutom używanie fundamentalnych narzędzi kryptograficznych. Księga główna prowadzi rejestr aktywności, który musi być zgodny z zestawem reguł określających, co ktoś może, a czego nie może zrobić, aby zmodyfikować księgę. Na przykład adres Bitcoina nie może wydać więcej Bitcoinów, niż wcześniej otrzymał. Zasady te są podstawą wszystkich transakcji na Bitcoinie i wielu innych blockchainach.
Mimo że Ethereum ma swoją własną natywną kryptowalutę (ether), która działa według niemal tych samych intuicyjnych zasad, umożliwia również o wiele potężniejszą funkcję: inteligentne kontrakty. Dla tej skomplikowanej funkcji wymagana jest bardziej wyszukana analogia. Zamiast rozproszonego rejestru, Ethereum jest rozproszoną maszyną stanuopens in a new tab. Stan Ethereum to duża struktura danych, która przechowuje nie tylko wszystkie konta i salda, ale także stan maszyny, który może zmieniać się z bloku na blok zgodnie z predefiniowanym zestawem zasad i który może wykonywać dowolny kod maszynowy. Konkretne zasady zmiany stanu od bloku do bloku są zdefiniowane przez EVM.
Diagram zaadaptowany z Ethereum EVM illustratedopens in a new tab
Funkcja przejścia stanu Ethereum
EVM zachowuje się jak funkcja matematyczna: biorąc pod uwagę dane wejściowe, wytwarza deterministyczne dane wyjściowe. Dlatego bardzo pomocne jest bardziej formalne opisanie Ethereum jako posiadającego funkcję przejścia stanu:
1Y(S, T)= S'Biorąc pod uwagę stary ważny stan (S) i nowy zestaw ważnych transakcji (T), funkcja przejścia stanu Ethereum Y(S, T) tworzy nowy, ważny stan wyjściowy S'
Stan
W kontekście Ethereum stan jest ogromną strukturą danych zwaną zmodyfikowanym drzewem Merkle Patricia Trie, która przechowuje wszystkie konta połączone haszami i redukowalne do pojedynczego haszu głównego przechowywanego na blockchainie.
Transakcje
Transakcje to podpisane kryptograficznie instrukcje od kont. Możemy wyróżnić dwa typy transakcji: te, których wynikiem są wywołania komunikatów, oraz te, których wynikiem jest utworzenie kontraktu.
Utworzenie kontraktu skutkuje utworzeniem nowego konta kontraktu zawierającego skompilowany kod bajtowy inteligentnego kontraktu. Ilekroć inne konto wysyła wywołania komunikatów do tego kontraktu, wykonuje on kod bitowy.
Instrukcje EVM
EVM działa jako maszyna stosowaopens in a new tab o głębokości 1024 elementów. Każdy element to 256-bitowe słowo, które zostało wybrane ze względu na łatwość użycia z 256-bitową kryptografią (taką jak hasze Keccak-256 lub podpisy secp256k1).
Podczas wykonywania EVM utrzymuje przejściową pamięć (jako tablicę bajtów adresowaną słowami), która nie jest zachowywana między transakcjami.
Przechowywanie przejściowe
Przechowywanie przejściowe to magazyn typu klucz-wartość per transakcja, do którego dostęp uzyskuje się za pomocą kodów operacyjnych TSTORE i TLOAD. Jest ono zachowywane we wszystkich wywołaniach wewnętrznych w ramach tej samej transakcji, ale jest czyszczone na koniec transakcji. W przeciwieństwie do pamięci, przechowywanie przejściowe jest modelowane jako część stanu EVM, a nie ramki wykonania, jednak nie jest zapisywane w stanie globalnym. Przechowywanie przejściowe umożliwia wydajne pod względem zużycia gazu tymczasowe współdzielenie stanu między wewnętrznymi wywołaniami w trakcie transakcji.
Przechowywanie
Kontrakty zawierają drzewo storage trie Merkle Patricia (jako tablicę słów adresowaną słowami), powiązane z danym kontem i będące częścią stanu globalnego. To trwałe przechowywanie różni się od przechowywania przejściowego, które jest dostępne tylko na czas trwania pojedynczej transakcji i nie stanowi części trwałego drzewa przechowywania konta.
Kody operacyjne
Skompilowany kod bajtowy inteligentnego kontraktu jest wykonywany jako szereg kodów operacyjnych EVM, które wykonują standardowe operacje na stosie, takie jak XOR, AND, ADD, SUB itp. EVM implementuje również szereg operacji na stosie specyficznych dla blockchaina, takich jak ADDRESS, BALANCE, BLOCKHASH itp. Zestaw kodów operacyjnych zawiera również TSTORE i TLOAD, które zapewniają dostęp do przechowywania przejściowego.
Diagramy zaadaptowane z Ethereum EVM illustratedopens in a new tab
Implementacje EVM
Wszystkie implementacje EVM muszą być zgodne ze specyfikacją opisaną w Ethereum Yellowpaper.
W ciągu dziesięcioletniej historii Ethereum EVM przeszła kilka zmian i istnieje kilka implementacji EVM w różnych językach programowania.
Klienci wykonawczy Ethereum zawierają implementację EVM. Ponadto istnieje wiele niezależnych implementacji, w tym:
- 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
Dalsza lektura
- Ethereum Yellowpaperopens in a new tab
- Jellopaper aka KEVM: Semantyka EVM w Kopens in a new tab
- The Beigepaperopens in a new tab
- Kody operacyjne Wirtualnej Maszyny Ethereumopens in a new tab
- Interaktywny informator o kodach operacyjnych Wirtualnej Maszyny Ethereumopens in a new tab
- Krótkie wprowadzenie w dokumentacji Solidityopens in a new tab
- Mastering Ethereum - Wirtualna Maszyna Ethereumopens in a new tab