Ethereum Virtual Machine (EVM)
Letzte Änderung: @Coram_Deo(opens in a new tab), 21. Juni 2024
Die Ethereum Virtual Machine (EVM) ist eine dezentrale virtuelle Umgebung, die Code konsistent und sicher auf allen Ethereum-Knoten ausführt. Knoten führen die EVM aus, um Smart Contracts auszuführen, wobei sie "Gas" verwenden, um den für Operationen erforderlichen Rechenaufwand zu messen, wodurch eine effiziente Ressourcenzuweisung und Netzwerksicherheit gewährleistet werden.
Voraussetzungen
Um den EVM zu verstehen, sind ein paar grundlegende Kenntnisse der gängigen Informatikterminologie wie Bytes(opens in a new tab), Speicher(opens in a new tab) und Stack(opens in a new tab) notwendig. Es wäre auch hilfreich, wenn Sie sich mit Kryptografie-/Blockchain-Konzepten wie Hash-Funktionen(opens in a new tab) und dem Merkle-Baum(opens in a new tab) auskennen.
Vom Ledger zur Zustandsmaschine
Die Analogie eines 'verteilten Schalters' wird oft verwendet, um Blockchains wie Bitcoin zu beschreiben, die eine dezentrale Währung mit grundlegenden Tools der Kryptographie ermöglichen. Der Ledger führt eine Aufzeichnung von Aktivitäten, die sich an eine Reihe von Regeln halten müssen, die wiederum bestimmen, welche Aktionen erfolgen bzw. nicht erfolgen können, um den Ledger zu verändern. Zum Beispiel kann eine Bitcoin-Adresse nicht mehr Bitcoin ausgeben, als sie zuvor erhalten hat. Diese Regeln untermauern alle Transaktionen auf Bitcoin und vielen anderen Blockchains.
Während Ethereum seine eigene native Kryptowährung (Ether) hat, die fast genau den gleichen intuitiven Regeln folgt, ermöglicht es auch eine wesentlich leistungsfähigere Funktion: Smart Contracts. Für diese komplexere Funktion ist eine ausgeklügeltere Analogie erforderlich. Anstelle eines verteilten Ledgers ist Ethereum eine verteilte Zustandsmaschine(opens in a new tab). Ethereums Zustand ist eine große Datenstruktur, die nicht nur alle Konten und Kontostände enthält, sondern einen Maschinenzustand, der nach einer vordefinierten Reihe von Regeln von Block zu Block wechselt und beliebigen Maschinencode ausführen kann. Die spezifischen Regeln für das Ändern des Zustands von Block zu Block werden vom EVM definiert.
Diagramm angepasst von Ethereum EVM illustriert(opens in a new tab)
Ethereum-Zustandsübergangsfunktion
Die EVM verhält sich wie eine mathematische Funktion: Mit einer Eingabe, erzeugt sie eine deterministische Ausgabe. Folglich ist es sehr hilfreich, Ethereum formaler als eine Zustandsübergangsfunktion enthaltend zu beschreiben:
1Y(S, T)= S'
Bei einem alten gültigen Zustand (S)
und einem neuen Satz gültiger Transaktionen (T)
erzeugt die Ethereum-Statusübergangsfunktion Y(S, T)
einen neuen gültigen Ausgabezustand S'
.
Zustand
Im Rahmen von Ethereum ist der Zustand eine enorme Datenstruktur, die modifizierte Merkle-Patricia-Trie genannt wird, die alle Konten durch Hashes verbunden hält und mit einem einzigen Stamm-Hash in der Blockchain abrufbar ist.
Transaktionen
Transaktionen sind kryptographisch signierte Anweisungen von Konten. Es gibt zwei Arten von Transaktionen: solche, die zu Nachrichtenanrufen führen, und solche, die zur Erstellung von Verträgen führen.
Die Erstellung von Verträgen führt zur Erstellung eines neuen Vertragskontos mit zusammengestelltem Smart-Contract-Bytecode. Immer wenn ein anderes Konto einen Nachrichtenaufruf an diesen Vertrag stellt, führt es seinen Bytecode aus.
EVM-Anweisungen
Die EVM wird als Stackmaschine(opens in a new tab) mit einer Tiefe von 1024 Artikeln ausgeführt. Jedes Element ist ein 256-Bit-Wort, das für die einfache Verwendung mit 256-Bit-Kryptographie (wie Keccak-256-Hashes oder secp256k1-Signaturen) gewählt wurde.
Während der Ausführung behält die EVM einen transienten -Speicher (als wortadressiertes Byte-Array), der zwischen Transaktionen nicht vorhanden ist.
Verträge enthalten jedoch eine Merkle-Patricia-Speicher-Trie (als wortadressierbares Wort-Array), mit der das betreffende Konto und ein Teil des globalen Zustands verbunden sind.
Kompilierter Smart-Contract-Bytecode wird als eine Anzahl von EVM-Opcodes ausgeführt, die standardmäßige Stackoperationen wie XOR
, UND
, ADD
, SUB
etc. ausführen. Die EVM implementiert auch eine Reihe von Blockchain-spezifischen Stack-Operationen, wie ADDRESS
, BALANCE
, BLOCKHASH
usw.
Diagramm angepasst von Ethereum EVM illustriert(opens in a new tab)
EVM-Implementierungen
Alle Implementierungen der EVM müssen sich nach der im Yellowpaper von Ethereum beschriebenen Spezifikation richten.
Während der siebenjährigen Geschichte von Ethereum hat die EVM mehrere Revisionen durchlaufen. Zudem gibt es mehrere Implementierungen der EVM in verschiedenen Programmiersprachen.
Ethereum-Ausführungs-Clients enthalten eine EVM-Implementierung. Zusätzlich gibt es mehrere eigenständige Implementierungen, einschließlich:
- 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
Weiterführende Informationen
- Ethereum Yellowpaper(opens in a new tab)
- Jellopaper aka KEVM: Semantics of EVM in K(opens in a new tab)
- The Beigepaper(opens in a new tab)
- Opcodes der virtuellen Maschine von Ethereum(opens in a new tab)
- Betriebscodes für die Referenzdokumente für die virtuelle Ethereum-Maschine(opens in a new tab)
- Eine kurze Einführung in die Dokumentation von Solidity(opens in a new tab)
- Ethereum meistern – Die Ethereum Virtual Machine(opens in a new tab)