Přeskočit na hlavní obsah
Change page

Virtuální stroj Etherea (EVM)

Poslední úpravy: @headwitch(opens in a new tab), 21. června 2024

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, aby vykonávaly chytré kontrakty, přičemž používají "jednotky" k měření výpočetního úsilí potřebného pro tyto operace, což zajišťuje efektivní alokaci zdrojů a bezpečnost sítě.

Předpoklady

Pro pochopení EVM je nutné mít základní povědomí o běžné terminologii v informatice, jako jsou bajty(opens in a new tab), paměť(opens in a new tab) a zásobník(opens in a new tab). Také se hodí mít znalosti z oblasti kryptografie a blockchainu, např. o hashovacích funkcích(opens in a new tab) a Merkle tree(opens 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 má svou vlastní nativní kryptoměnu (Ether), která se řídí téměř stejnými intuitivními pravidly, ale také umožňuje mnohem silnější funkci: chytré kontrakty. Pro tuto složitější funkci potřebujeme sofistikovanější přirovnání. Namísto distribuované účetní knihy je Ethereum distribuovaný stavový stroj(opens 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 od bloku k bloku podle předem definovaného souboru 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.

Diagram znázorňující složení EVM Schéma převzato z ilustrace Ethereum EVM(opens in a new tab)

Funkce změny stavu na Ethereu

EVM se chová jako matematická funkce: Na základě vstupu produkuje deterministický výstup. Je tedy užitečné formálněji popsat Ethereum jako systém s funkcí změny stavu:

1Y(S, T)= S'

Na základě starého platného stavu (S) a nové sady platných transakcí (T) funkce změny stavu Etherea Y(S, T) vytvoří nový platný výstupní stav S'.

Stav

V kontextu Etherea je stav obrovská datová struktura nazývaná modifikovaný Merkle Patricia Trie, která udržuje všechny účty propojené pomocí hashů a redukovatelné na jediný kořenový hash 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 kontraktového účtu, který obsahuje zkompilovaný bytecode chytrého kontraktu. Kdykoli jiný účet vyšle zprávu na tento kontrakt, vykoná se jeho bytecode.

Instrukce EVM

EVM funguje jako zásobníkový stroj(opens in a new tab) s hloubkou 1 024 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 vykonávání EVM udržuje přechodnou paměť (jako bajtové pole adresované slovy), která nepřetrvává mezi transakcemi.

Kontrakty však obsahují trie úložiště Merkle Patricia (jako pole adresovatelné slovy), které je spojeno s příslušným účtem a je součástí globálního stavu.

Zkompilovaný bytecode chytrého kontraktu se vykonává jako řada opkódů EVM, které provádějí standardní zásobníkové operace jako XOR, AND, ADD, SUB atd. EVM také implementuje několik blockchainově specifických zásobníkových operací, jako je ADDRESS, BALANCE, BLOCKHASH atd.

Diagram znázorňující, kde jsou potřeba jednotky pro EVM operace Diagram převzat z ilustrovaného Ethereum EVM(opens in a new tab)

Implementace EVM

Všechny implementace EVM musí dodržovat specifikaci popsanou v Ethereum Yellowpaperu.

Během devítileté historie Etherea prošlo EVM několika revizemi a existuje několik implementací EVM v různých programovacích jazycích.

Exekuční klienty Etherea obsahují implementaci EVM. Navíc existuje několik samostatných implementací, včetně:

Další informace

  • Palivo

Byl tento článek užitečný?