Přejít na hlavní obsah
Change page

Virtuální stroj Etherea (EVM)

Virtuální stroj Etherea (Ethereum Virtual Machine – EVM) je decentralizované virtuální prostředí, které konzistentně a bezpečně spouští kód na všech uzlech sítě Ethereum. Uzly spouštějí EVM za účelem provádění chytrých kontraktů, přičemž k měření výpočetního úsilí potřebného pro operace používají „gas“, což zajišťuje efektivní alokaci zdrojů a bezpečnost sítě.

Předpoklady

K pochopení EVM je nezbytná základní znalost běžné terminologie z oblasti informatiky, jako jsou bajty (opens in a new tab), paměť (opens in a new tab) a zásobník (opens in a new tab). Užitečná je také orientace v konceptech kryptografie a blockchainu, jako jsou hashovací funkce (opens in a new tab) a Merkleův strom (opens in a new tab).

Od účetní knihy ke stavovému automatu

K popisu blockchainů, jako je Bitcoin, které umožňují fungování decentralizované měny pomocí základních nástrojů kryptografie, se často používá analogie „distribuované účetní knihy“. Tato účetní kniha udržuje záznamy o aktivitách, které musí dodržovat soubor pravidel určujících, co lze a nelze udělat pro její úpravu. Například bitcoinová adresa nemůže utratit více bitcoinů, než kolik dříve přijala. Tato pravidla jsou základem všech transakcí na Bitcoinu a mnoha dalších blockchainech.

Zatímco Ethereum má svou vlastní nativní kryptoměnu (ether), která se řídí téměř přesně stejnými intuitivními pravidly, umožňuje také mnohem mocnější funkci: chytré kontrakty. Pro tuto složitější funkci je zapotřebí sofistikovanější analogie. Místo distribuované účetní knihy je Ethereum distribuovaný stavový automat (opens in a new tab). Stav Etherea je rozsáhlá datová struktura, která neuchovává pouze všechny účty a zůstatky, ale také stav stroje, který se může měnit blok od bloku podle předem definovaného souboru pravidel a který dokáže spouštět libovolný strojový kód. Konkrétní pravidla pro změnu stavu mezi bloky definuje EVM.

A diagram showing the make up of the EVM Diagram upraven podle Ethereum EVM illustrated (opens in a new tab)

Funkce přechodu stavu Etherea

EVM se chová jako matematická funkce: na základě vstupu vyprodukuje deterministický výstup. Proto je docela užitečné formálněji popsat Ethereum tak, že má funkci přechodu stavu:

Y(S, T)= S'

Vezmeme-li starý platný stav (S) a novou sadu platných transakcí (T), funkce přechodu stavu Etherea Y(S, T) vyprodukuje nový platný výstupní stav S'

Stav

V kontextu Etherea je stav obrovská datová struktura zvaná 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 z účtů. Existují dva typy transakcí: ty, které vedou k volání zprávy, a ty, které vedou k vytvoření kontraktu.

Vytvoření kontraktu vede k vytvoření nového kontraktového účtu obsahujícího zkompilovaný bajtkód chytrého kontraktu. Kdykoli jiný účet provede volání zprávy na tento kontrakt, spustí se jeho bajtkód.

Instrukce EVM

EVM se spouští jako zásobníkový stroj (opens in a new tab) s hloubkou 1024 položek. Každá položka je 256bitové slovo, což bylo zvoleno pro snadné použití s 256bitovou kryptografií (jako jsou hashe Keccak-256 nebo podpisy secp256k1).

Během provádění udržuje EVM dočasnou paměť (jako pole bajtů adresované po slovech), která mezi transakcemi nepřetrvává.

Dočasné úložiště

Dočasné úložiště (transient storage) je úložiště klíč-hodnota pro každou transakci, ke kterému se přistupuje prostřednictvím operačních kódů TSTORE a TLOAD. Přetrvává napříč všemi interními voláními během stejné transakce, ale na konci transakce se vymaže. Na rozdíl od paměti je dočasné úložiště modelováno jako součást stavu EVM, nikoli jako exekuční rámec, přesto se nezapisuje do globálního stavu. Dočasné úložiště umožňuje dočasné sdílení stavu napříč interními voláními během transakce, které je efektivní z hlediska spotřeby gasu.

Úložiště

Kontrakty obsahují Merkle-Patricia strom úložiště (jako pole slov adresovatelné po slovech), který je spojen s daným účtem a je součástí globálního stavu. Toto trvalé úložiště se liší od dočasného úložiště, které je k dispozici pouze po dobu trvání jedné transakce a netvoří součást trvalého stromu úložiště účtu.

Operační kódy

Zkompilovaný bajtkód chytrého kontraktu se provádí jako řada operačních kódů EVM, které provádějí standardní operace se zásobníkem, jako jsou XOR, AND, ADD, SUB atd. EVM také implementuje řadu operací se zásobníkem specifických pro blockchain, jako jsou ADDRESS, BALANCE, BLOCKHASH atd. Sada operačních kódů zahrnuje také TSTORE a TLOAD, které poskytují přístup k dočasnému úložišti.

A diagram showing where gas is needed for EVM operations Diagramy upraveny podle Ethereum EVM illustrated (opens in a new tab)

Implementace EVM

Všechny implementace EVM musí dodržovat specifikaci popsanou v dokumentu Ethereum Yellow Paper.

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

Exekuční klienti Etherea obsahují implementaci EVM. Kromě toho existuje několik samostatných implementací, včetně:

Další čtení

Návody: Ethereum Virtual Machine (EVM) / Operační kódy na Ethereu