Ugrás a fő tartalomra
Change page

Ethereum virtuális gép (EVM)

Utolsó módosítás: , 2024. január 18.

Az EVM fizikai megtestesülését nem lehet úgy leírni, mint ahogy azt egy felhő vagy egy óceáni hullám esetében tennénk, de attól még létezik egy egyedüli entitásként több ezer összekapcsolt számítógép által, melyek egy Ethereum klienst futtatnak.

Az Ethereum protokoll maga egyedül azért létezik, hogy fenntartsa a folyamatos, zavartalan és változatlan működését ennek a speciális státuszú gépnek. Ez egy olyan környezet, amelyben az összes Ethereum számla és okosszerződés él. A lánc bármely adott blokkján az Ethereumnak egy és csak egy „kanonikus” állapota van, és az EVM határozza meg a szabályokat egy új érvényes állapot létrehozására blokkról blokkra.

Előfeltételek

Alapvető számítástudományi fogalmak ismerete, mint például a bájtok(opens in a new tab), memória(opens in a new tab), és a stack(opens in a new tab) szükségesek ahhoz, hogy megértse az EVM-et. Érdemes tisztában lenni egy pár kriptográfiai/blokklánc fogalommal úgy, mint a hash függvények(opens in a new tab) és a Merkle-fa(opens in a new tab).

Főkönyvtől az állapot gépig

Az 'elosztott főkönyv' analógiáját gyakran használjuk olyan blokkláncok jellemzésére, mint a Bitcoin, mely lehetővé egy decentralizált valuta létrehozását alapvető kriptográfiai eszközök használatával. A főkönyv tartalmazza a történések rekordjait, amelynek meg kell felelnie bizonyos szabályoknak, ami azt irányítja, hogy mit tehet meg és mit nem tehet meg valaki a főkönyv módosításához. Például egy Bitcoin cím nem költhet el több bitcoint, mint amennyit előzőleg megkapott. Ezek a szabályok támasztják alá az összes Bitcoin tranzakciót és sok más blokkláncot is.

Míg az Ethereumnak megvan a saját natív kriptovalutája (Ether), amely ugyanazokat az intuitív szabályokat követi, emellett lehetőséget ad egy másik hathatós funkciónak is: az okosszerződéseknek. Ehhez a bonyolultabb funkcióhoz egy szofisztikáltabb analógia szükségeltetik. Egy elosztott főkönyv helyett az Ethereum egy elosztott állapot gép(opens in a new tab). Az Ethereum állapota egy nagy adatstruktúra, mely nem csak a számlákat és az egyenlegeket tárolja, de egy állapot gépet is, mely blokkról blokkra változhat egy előre meghatározott szabályrendszer szerint és tetszőleges gépi kódot tud végrehajtani. Az állatot blokkról blokkra történő megváltozásának specifikus szabályait az EVM rögzíti.

Egy diagram mely az EVM felépítését mutatja be Diagram átvéve az Ethereum EVM illusztrálva(opens in a new tab) anyagból

Az Ethereum állapot átmeneti függvény

Az EVM úgy viselkedik, mint egy matematikai függvény: Adott egy bemenet, mely egy determinisztikus kimenetet generál. Ezért nagyon hasznos, ha az Ethereumot formálisabban úgy írjuk le, mint egy állapot átmeneti függvényt:

1Y(S, T)= S'

Adott egy régebbi érvényes állapot (S) és egy új érvényes tranzakciókból álló halmaz (T), az Ethereum állapot átmeneti függvény Y(S, T) létrehoz egy új érvényes kimeneti állapotot S'

Állapot

Az Ethereum kontextusában az állapot egy hatalmas adatstruktúra, amelyet úgy hívnak, hogy módosított Merkle Patricia-fa, amely az összes számlát hashekkel köti össze és redukálja egy gyökér hash-é, amelyet a blokklánc tárol.

Tranzakciók

A tranzakciók számlákból származó kriptográfiailag aláírt instrukciók. A tranzakcióknak két típusa van: azok, amelyek üzenet hívásokat eredményeznek és azok melyek szerződés létrehozásokat.

A szerződés létrehozás egy új szerződéses számla létrehozásával jár, mely a fordított okosszerződés bájtkódot tartalmazza. Amikor egy másik számla egy üzenet hívást intéz ehhez a szerződéshez, végrehajtja a bájtkódját.

EVM Utasítások

Az EVM egy veremgépként(opens in a new tab) fut 1024 elemes mélységgel. Mindegyik tétel egy 256 bites szó, amelyet a 256 bitet kriptográfia használata miatt választottak (mint amilyen a Keccak-256 hash-e vagy secp256k1 aláírások).

A végrehajtás alatt az EVM egy tranziens memóriát tart fenn (mint egy szócímzett bájttömböt), amely nem folytatólagos a tranzakciók között.

A szerződések azonban tartalmaznak egy Merkle Patricia tároló fát (mint egy szócímezhető szótömböt), amely hozzá van rendelve a kérdéses számlához és része a globális státusznak.

A befordított okosszerződés bájtkódja EVM-opcode-ként fut le, amely standard stack művelet, mint a XOR, AND, ADD, SUB stb. Az EVM egy pár blokklánc-specifikus stack-műveletet is implementál, mint az ADDRESS, BALANCE, BLOCKHASH stb.

Egy diagram, amely azt mutatja, hogy hol van szükség gázra az EVM-műveleteknél Diagramok átvéve az Illusztrált Ethereum EVM(opens in a new tab) anyagból

EVM Implementációk

Az összes EVM-implementációnak meg kell felelnie az Ethereum sárgakönyvben megfogalmazott specifikációnak.

Az Ethereum kilenc éves története alatt az EVM több revízión átesett és számos EVM-implementáció létezik különböző programozási nyelveken.

Az Ethereum végrehajtási kliensek tartalmaznak egy EVM-implementációt. Továbbá több önálló implementáció létezik, ilyen például:

További olvasnivaló

Hasznosnak találta a cikket?