Ethereum virtuális gép (EVM)
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 létezésének kizárólagos célja, hogy ennek a speciális állapot gépnek biztosítsa a folyamatos, megszakítások nélküli és megváltoztathatatlan működését; ez az a környezet, amiben az össze 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, memória, és a stack szükségesek, hogy megértsd az EVM-et. Érdemes tisztában lenni egy pár kriptográfiai/blokklánc fogalommal úgy, mint a hash függvények, Proof-of-Work és a Merkle Fa.
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. Egy kriptovaluta úgy viselkedik, mint egy 'normál' valuta a szabályok miatt, melyek meghatározzák, hogy az adott illető mit vagy mit nem tehet, hogy megváltoztassa a főkönyvet. 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.
Amíg az Ethereumnak megvan a saját natív kriptovalutája (Ether), mely ugyanazokat az intuitív szabályokat követi, emellett lehetőséget ad egy másik hathatós funkciónak: 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. 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 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'2
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, melyet úgy hívnak, hogy módosított Merkle Patricia-fa, mely az összes számlát hashekkel köti össze és redukálja egy gyökér hash-é, melyet 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 verem gépként fut 1024 elemes mélységgel. Minden egyes elem egy 256 bites szó, melyek a maximális kompatibilitásért lettek kiválasztva az SHA-3-256 hash rendszerrel.
A végrehajtás alatt az EVM egy tranziens memóriát tart fenn (mint egy szócímzett bájttömböt), mely nem folytatólagos a tranzakciók között.
A szerződések azonban tartalmaznak egy Merkle Patricia tárhely fát (mint egy szócímezhető szó tömböt), mely hozzá van rendelve a kérdéses számlához és része a globális állapotnak.
A befordított okosszerződés bájtkód EVM opcode-ként fut le, melyek standard stack műveletek, 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
, SHA3
, BLOCKHASH
, stb.
Diagramok átvéve az Ethereum EVM illusztrálva 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 5 éves története alatt az EVM több revízió alatt átesett és számos EVM implementáció létezik különböző programozási nyelveken.
Az összes Ethereum kliens tartalmaz egy EVM implementációt. Továbbá több önálló implementáció létezik, többek között:
- Py-EVM - Python
- evmone - C++
- ethereumjs-vm - JavaScript
- eEVM - C++
- Hyperledger Burrow - Go