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

Maszyna wirtualna Ethereum (EVM)

Ostatnia edycja: @msliwinski123(opens in a new tab), 21 czerwca 2024

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 wykonania inteligentnych kontraktów, wykorzystując „gaz” do pomiaru wysiłku obliczeniowego wymaganego do operacji i zapewniając efektywną alokację zasobów i bezpieczeństwo sieci.

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). Przydatna będzie również znajomość pojęć związanych z kryptografią/blockchainem, takich jak funkcja haszująca(opens in a new tab) i drzewo Merkle(opens in a new tab).

Od księgi głównej do maszyny stanowej

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.

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łównej, 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 trie Merkle Patricia, która zachowuje wszystkie konta połączone haszami i redukowalne do pojedynczego haszu korzenia 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) o pojemnoś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 realizacji 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 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, BALANCE, BLOCKHASH itp.

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

Implementacja EVM

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

W ponad dziewięcioletniej historii Ethereum EVM przeszła kilka zmian; w ciągu tego czasu miało miejsce również kilka implementacji EVM w różnych językach programowania.

Klienty wykonawcze Ethereum zawierają implementację EVM. Ponadto istnieje wiele niezależnych implementacji, w tym:

Dalsza lektura

  • Gaz

Czy ten artykuł był pomocny?