Ethereum virtuális gép (EVM)
Utolsó módosítás: @Satglow(opens in a new tab), 2024. június 21.
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 összes Ethereum csomóponton. 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á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.
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.
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:
- Py-EVM(opens in a new tab) - Python
- evmone(opens in a new tab) - C++
- ethereumjs-vm(opens in a new tab) - JavaScript
- revm(opens in a new tab) - Rust
További olvasnivaló
- Ethereum sárga könyv(opens in a new tab)
- Jello könyv, vagyis a KEVM: az EVM szemantikái K-ban(opens in a new tab)
- The Beigepaper(opens in a new tab)
- Ethereum Virtuális Gép Opcode-ok(opens in a new tab)
- Ethereum Virtuális Gép operációskódjainak interaktív referenciája(opens in a new tab)
- Rövid bevezetés a Solidity dokumentációjába(opens in a new tab)
- Az Ethereum elsajátítása - az Ethereum virtuális gép(opens in a new tab)