Przejdź do głównej zawartości
Change page

Maszyna Wirtualna Ethereum (EVM)

Ostatnia edycja: @minimalsm(opens in a new tab), 3 listopada 2023

Maszyna Wirtualna Ethereum (EVM) jest fizyczną instancją, która nie może być opisana w taki sam sposób, jak moglibyśmy wskazać na chmurę lub fale oceanu, ale istnieje jako pojedynczy byt utrzymywany przez miliony połączonych komputerów, na których działa klient Ethereum.

Protokół Ethereum istnieje wyłącznie w celu utrzymania niezakłóconej ciągłości i niezmienności operacji tej specjalnej maszyny stanów; jest to środowisko, w którym działają wszystkie konta oraz inteligentne kontrakty Ethereum. Każdy blok łańcucha Ethereum posiada jeden i tylko jeden stan „kanoniczny”, a EVM jest tym co definiuje zasady obliczeń nowego poprawnego stanu dla kolejnych bloków.

Wymagania wstępne

Do zrozumienia EVM konieczna jest znajomość podstawowej terminologii informatycznej, takiej jak bajty(opens in a new tab), pamięć(opens in a new tab) i stos(opens in a new tab). Równie pomocne może się okazać zaznajomienie się z takimi pojęciami, jak kryptografia, blockchain funkcja haszująca(opens in a new tab), Proof-of-Work(opens in a new tab), drzewo Merkle(opens in a new tab).

Od księgi głównej do maszyny stanowej

Analogia „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. Kryptowaluta zachowuje się, jak „normalna“ waluta poprzez zasady jakimi jest zarządzana, co ktoś może, a czego nie może robić, aby zmodyfikować księgę główną. Dla przykładu, 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.

Choć Ethereum ma swoją własną kryptowalutę (Ether), która działa niemal dokładnie według tych samych intuicyjnych zasad, pozwala również stosować znacznie bardziej rozbudowaną funkcję: inteligentne kontrakty. Dla tej skomplikowanej funkcji wymagana jest bardziej wyszukana analogia. W odróżnieniu od rozproszonej księgi główne, Ethereum jest rozproszoną maszyną stanową(opens in a new tab). Stany Ethereum są wielkimi strukturami danych, które przechowują nie tylko wszystkie konta i ich salda, ale też stan maszyny, który może zmieniać się od bloku do bloku zgodnie z predefiniowanymi zasadami, i który może wykonywać dowolny kod maszynowy. Konkretne zasady zmiany stanu od bloku do bloku są zdefiniowane przez EVM.

Schemat przedstawiający strukturę EVM Schemat zaadaptowany z Ethereum EVM illustrated(opens in a new tab)

Funkcja przejścia stanów Ethereum

EVM zachowuje się jak funkcja matematyczna: biorąc pod uwagę dane wejściowe, wytwarza deterministyczne dane wyjściowe. Dlatego bardziej pomocne jest bardziej formalne opisanie Ethereum jako posiadającego funkcję zmiany stanu:

1Y(S, T)= S'

Uwzględniając stary ważny stan (S) oraz nowy zestaw ważnych transakcji (T), funkcja zmiany stanu Ethereum Y(S, T) tworzy nowy prawidłowy stan wyjściowy S'

Stan

W odniesieniu do Ethereum, stan jest olbrzymią strukturą danych nazywaną zmodyfikowanym drzewem Merkle Patricia(opens in a new tab), która zachowuje wszystkie konta połączone haszami i zredukowane do pojedynczego haszu źródłowego przechowywanego na blockchainie.

Transakcje

Transakcje są to pojedyncze kryptograficznie podpisane instrukcję pochodzące z kont użytkowników. Możemy wyróżnić dwa typy transakcji: te, których wynikiem są wywołania komunikatów, oraz te, których wynikiem jest utworzenie kontraktu.

Rezultatem stworzenia nowego kontraktu jest stworzenie nowego konta kontaktu zawierającego skompilowany kod bitowy 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 stosu(opens in a new tab), która posiada 1024 elementy. Każdy element jest 256-bitowym słowem, które zostało wybrane dla zmaksymalizowania kompatybilności z algorytmem SHA-3-256.

A diagram showing the make up of the stack Diagram adapted from Ethereum EVM illustrated(opens in a new tab)

Removed as we should probably show memory and account storage too if showing stack-->

Podczas wykonywania EVM przechowuje pamięć przejściową (w postaci tablicy bajtów z adresami słów), która jednak nie jest trwała między transakcjami.

Kontrakty jednak zawierają drzewo pamięciowe Merkle Patricia (jako adresowalną tablicę słów), powiązane w wiadomości z odpowiednim kontem i częścią stanu globalnego.

Skompilowany kod bitowy inteligentnego kontraktu wykonywany jest jako szereg kodów operacyjnych(opens in a new tab) EVM, które przeprowadzają standardowe operacje na stosie, takie jak XOR, AND, ADD, SUB itp. EVM implementuje również szereg operacji stosu specyficznych dla blockchaina, takich jak ADDRESS, BALANDCE, SHA3, BLOCKHASH itp.

Schemat pokazujący, gdzie potrzebny jest gaz dla operacji EVM Schemat zaadaptowany z Ethereum EVM illustrated(opens in a new tab)

Implementacja EVM

Wszystkie implementacje EVM muszą być zgodne ze specyfikacją opisaną w Yellowpaper Ethereum.

W ponad pięcioletniej historii Ethereum, EVM przeszło kilka gruntownych weryfikacji, w ciągu tego czasu znajdziemy również kilka implementacji EVM w różnych językach programowania.

Wszyscy klienci Ethereum posiadają implementacje EVM. Dodatkowo jest tu kilka samodzielnych implementacji, włącznie z:

Dalsza lektura

Czy ten artykuł był pomocny?