Ethereum virtuális gép (EVM)
Page last update: 2025. december 16.
Az Ethereum Virtual Machine (EVM) egy decentralizált virtuális környezet, amely következetesen és biztonságosan hajtja végre a kódot az Ethereum összes csomópontján. A csomópontok az EVM-et futtatják az intelligens szerződések végrehajtására, a „gáz” használatával mérik a műveletekhez szükséges számítási erőfeszítést, biztosítva az erőforrások hatékony elosztását és a hálózat biztonságát.
Előfeltételek
Alapvető számítástudományi fogalmak ismerete, mint például a bájtokopens in a new tab, memóriaopens in a new tab, és a stackopens 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ényekopens in a new tab és a Merkle-faopens 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épopens 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.
Diagram átvéve az Ethereum EVM illusztrálvaopens 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éntopens 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.
Diagramok átvéve az Illusztrált Ethereum EVMopens 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:
- Py-EVMopens in a new tab - Python
- evmoneopens in a new tab - C++
- ethereumjs-vmopens in a new tab - JavaScript
- revmopens in a new tab - Rust
További olvasnivaló
- Ethereum sárga könyvopens in a new tab
- Jello könyv, vagyis a KEVM: az EVM szemantikái K-banopens in a new tab
- The Beigepaperopens in a new tab
- Ethereum Virtuális Gép Opcode-okopens in a new tab
- Ethereum Virtuális Gép operációskódjainak interaktív referenciájaopens in a new tab
- Rövid bevezetés a Solidity dokumentációjábaopens in a new tab
- Az Ethereum elsajátítása - az Ethereum virtuális gépopens in a new tab