Naar hoofdinhoud gaan
Change page

Ethereum Virtual Machine (EVM)

Laatst bewerkt: @Otto-AA(opens in a new tab), 21 juni 2024

De Ethereum Virtual Machine (EVM) is een gedecentraliseerde virtuele omgeving die code consistent en veilig uitvoert op alle Ethereum-nodes. Nodes voeren de EVM uit om smart contracts te kunnen uitvoeren, waarbij "gas" wordt gebruikt om de rekenkracht te meten die nodig is voor handelingen, wat zorgt voor efficiënte toewijzing van bronnen en netwerkbeveiliging.

Randvoorwaarden

Wat basiskennis van de veelgebruikte terminologie in informatica, zoals bytes(opens in a new tab), geheugen(opens in a new tab), en een stack(opens in a new tab) is nodig om de EVM te begrijpen. Het kan ook handig zijn om vertrouwd te raken met cryptografie-/blockchainconcepten zoals hashfuncties(opens in a new tab) en de Merkle Tree(opens in a new tab).

Van ledger tot statusmachine

De analogie van een “gedistribueerde ledger” wordt vaak gebruikt om blockchains zoals Bitcoin te beschrijven, die zorgen voor een gedecentraliseerde valuta door gebruik te maken van fundamentele hulpmiddelen uit de cryptografie. De ledger houdt een verslag bij van activiteiten die moeten voldoen aan een aantal regels die bepalen wat iemand wel en niet kan doen om de ledger te wijzigen. Een Bitcoin-adres kan bijvoorbeeld niet meer Bitcoin uitgeven dan het eerder heeft ontvangen. Deze regels liggen ten grondslag aan alle transacties op Bitcoin en veel andere blockchains.

Hoewel Ethereum haar eigen cryptovaluta (Ether) heeft die bijna exact dezelfde intuïtieve regels volgt, biedt het ook een veel krachtigere functie: smart contracts. Voor deze complexere functie is een meer geavanceerde analogie nodig. In plaats van een gedistribueerde ledger is Ethereum een gedistribueerde statusmachine(opens in a new tab). De status van Ethereum is een grote datastructuur die niet alleen alle rekeningen en saldi bevat, maar ook een apparaatstatus, die van block tot block kan veranderen volgens een vooraf gedefinieerde set regels, en die willekeurige machinecode kan uitvoeren. De specifieke regels voor het veranderen van status van block naar block worden gedefinieerd door de EVM.

Een diagram dat de samenstelling van de EVM laat zien Aangepast diagram van Ethereum EVM geïllustreerd(opens in a new tab)

De overgangsfunctie van de Ethereum-status

De EVM gedraagt zich als een wiskundige functie: op basis van een invoer produceert het een deterministische uitvoer. Het is daarom heel handig om Ethereum formeel te beschrijven als het hebben van een statusovergangsfunctie:

1Y(S, T)= S'

Op basis van een oude geldige status (S) en een nieuwe set geldige transacties (T), produceert de Ethereum-statustransitie Y(S, T) een nieuwe geldige uitvoerstatus S'

Status

In de context van Ethereum is de status een enorme gegevensstructuur die aangepaste Merkle Patricia Trie wordt genoemd. Deze houdt alle accounts met elkaar verbonden door hashes en herleidbaar zijn tot een enkele root-hash die is opgeslagen op de blockchain.

Transacties

Transacties zijn cryptografisch getekende instructies van accounts. Er zijn twee soorten transacties: transacties die resulteren in het oproepen van berichten en transacties die resulteren in het aanmaken van contracten.

Contractaanmaak leidt tot de aanmaak van een nieuw contract dat gecompileerde bytecode voor een smart contract bevat. Telkens wanneer een ander account een bericht oproept naar dat contract, voert het zijn bytecode uit.

EVM-instructies

De EVM wordt uitgevoerd als een stackmachine(opens in a new tab) met een diepte van 1024 items. Elk item is een 256-bits woord, dat is gekozen vanwege het gebruiksgemak met 256-bits cryptografie (zoals Keccak-256-hashes of secp256k1-handtekeningen).

Tijdens de uitvoering maakt de EVM een tijdelijk geheugen (als een byte-array met woordadres) aan, dat niet tussen transacties blijft bestaan.

Contracten bevatten echter wel een Merkle Patricia-opslagtrie (als een woordadresseerbare woordarray), geassocieerd met het account in kwestie en een deel van de globale status.

Gecompileerde smart contract bytecode wordt uitgevoerd als een aantal EVM-opcodes, die standaard stackhandelingen uitvoeren zoals XOR, EN, ADD, SUB, etc. De EVM implementeert ook een aantal blockchainspecifieke stackhandelingen, zoals ADRESS, BALANCE, BLOCKHASH, enz.

Een diagram dat toont waar gas nodig is voor EVM-handelingen Aangepaste diagrammen van Ethereum EVM geïllustreerd(opens in a new tab)

EVM-implementaties

Alle implementaties van de EVM moeten zich houden aan de specificatie beschreven in de Ethereum Yellowpaper.

In de negen jaar dat Ethereum bestaat, heeft de EVM verschillende wijzigingen ondergaan en zijn er verschillende implementaties van de EVM in verschillende programmeertalen.

Ethereum-uitvoeringsclients bevatten een EVM-implementatie. Bovendien zijn er nog verschillende aparte implementaties, waaronder:

Verder lezen

  • Gas

Was dit artikel nuttig?