Ethereum Virtual Machine (EVM)
Die Ethereum Virtual Machine (EVM) ist eine dezentrale virtuelle Umgebung, die Code konsistent und sicher über alle Ethereum-Knoten hinweg ausführt. Knoten führen die EVM aus, um Smart Contracts auszuführen, und verwenden dabei "Gas", um den für Operationen erforderlichen Rechenaufwand zu messen, was eine effiziente Ressourcenzuweisung und Netzwerksicherheit gewährleistet.
Voraussetzungen
Ein grundlegendes Verständnis gängiger Begriffe der Informatik wie Bytes (opens in a new tab), Speicher (opens in a new tab) und einem Stack (opens in a new tab) ist notwendig, um die EVM zu verstehen. Es wäre auch hilfreich, mit Konzepten der Kryptographie/Blockchain wie Hash-Funktionen (opens in a new tab) und dem Merkle-Baum (opens in a new tab) vertraut zu sein.
Vom Ledger zur Zustandsmaschine
Die Analogie eines „verteilten Ledgers“ (Distributed Ledger) wird oft verwendet, um Blockchains wie Bitcoin zu beschreiben, die eine dezentrale Währung mithilfe grundlegender Werkzeuge der Kryptographie ermöglichen. Der Ledger führt eine Aufzeichnung der Aktivitäten, die sich an eine Reihe von Regeln halten muss, welche bestimmen, was jemand tun darf und was nicht, um den Ledger zu ändern. Zum Beispiel kann eine Bitcoin-Adresse nicht mehr Bitcoin ausgeben, als sie zuvor empfangen 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 denselben intuitiven Regeln folgt, ermöglicht es auch eine viel mächtigere Funktion: Smart Contracts. Für diese komplexere Funktion ist eine anspruchsvollere Analogie erforderlich. Anstelle eines verteilten Ledgers ist Ethereum eine verteilte Zustandsmaschine (opens in a new tab). Der Zustand von Ethereum ist eine große Datenstruktur, die nicht nur alle Konten und Salden enthält, sondern auch einen Maschinenzustand, der sich von Block zu Block gemäß einem vordefinierten Regelwerk ändern und beliebigen Maschinencode ausführen kann. Die spezifischen Regeln für die Änderung des Zustands von Block zu Block werden durch die EVM definiert.
Diagramm adaptiert von Ethereum EVM illustrated (opens in a new tab)
Die Ethereum-Zustandsübergangsfunktion
Die EVM verhält sich wie eine mathematische Funktion: Bei einer gegebenen Eingabe erzeugt sie eine deterministische Ausgabe. Es ist daher sehr hilfreich, Ethereum formaler so zu beschreiben, dass es eine Zustandsübergangsfunktion besitzt:
Y(S, T)= S'
Gegeben ein alter gültiger Zustand (S) und ein neuer Satz gültiger Transaktionen (T), erzeugt die Ethereum-Zustandsübergangsfunktion Y(S, T) einen neuen gültigen Ausgabezustand S'
Zustand
Im Kontext von Ethereum ist der Zustand eine riesige Datenstruktur, die als modifizierter Merkle-Patricia-Trie bezeichnet wird. Dieser hält alle Konten durch Hashes verknüpft und ist auf einen einzigen Root-Hash reduzierbar, der auf der Blockchain gespeichert ist.
Transaktionen
Transaktionen sind kryptographisch signierte Anweisungen von Konten. Es gibt zwei Arten von Transaktionen: solche, die zu Nachrichtenaufrufen führen, und solche, die zur Erstellung eines Vertrags führen.
Die Erstellung eines Vertrags führt zur Erstellung eines neuen Contract-Kontos, das den kompilierten Smart Contract-Bytecode enthält. Wann immer ein anderes Konto einen Nachrichtenaufruf an diesen Vertrag tätigt, führt dieser seinen Bytecode aus.
EVM-Anweisungen
Die EVM wird als Stack-Maschine (opens in a new tab) mit einer Tiefe von 1024 Elementen ausgeführt. Jedes Element ist ein 256-Bit-Wort, was wegen der einfachen Verwendung mit 256-Bit-Kryptographie (wie Keccak-256-Hashes oder secp256k1-Signaturen) gewählt wurde.
Während der Ausführung unterhält die EVM einen flüchtigen Speicher (als wortadressiertes Byte-Array), der zwischen Transaktionen nicht bestehen bleibt.
Transienter Speicher
Transienter Speicher ist ein schlüsselbasierter Speicher (Key-Value-Store) pro Transaktion, auf den über die Opcodes TSTORE und TLOAD zugegriffen wird. Er bleibt über alle internen Aufrufe während derselben Transaktion hinweg bestehen, wird aber am Ende der Transaktion gelöscht. Im Gegensatz zum Arbeitsspeicher (Memory) wird der transiente Speicher als Teil des EVM-Zustands und nicht als Teil des Ausführungsrahmens modelliert, wird jedoch nicht in den globalen Zustand übernommen. Transienter Speicher ermöglicht eine gas-effiziente, temporäre gemeinsame Nutzung von Zuständen über interne Aufrufe hinweg während einer Transaktion.
Speicher (Storage)
Verträge enthalten einen Merkle-Patricia-Speicher-Trie (als wortadressierbares Wort-Array), der mit dem betreffenden Konto verknüpft und Teil des globalen Zustands ist. Dieser persistente Speicher unterscheidet sich vom transienten Speicher, der nur für die Dauer einer einzelnen Transaktion verfügbar ist und keinen Teil des persistenten Speicher-Tries des Kontos bildet.
Opcodes
Kompilierter Smart Contract-Bytecode wird als eine Reihe von EVM-Opcodes ausgeführt, die Standard-Stack-Operationen wie XOR, AND, ADD, SUB usw. durchführen. Die EVM implementiert auch eine Reihe von Blockchain-spezifischen Stack-Operationen, wie ADDRESS, BALANCE, BLOCKHASH usw. Das Opcode-Set enthält auch TSTORE und TLOAD, die Zugriff auf den transienten Speicher bieten.
Diagramme adaptiert von Ethereum EVM illustrated (opens in a new tab)
EVM-Implementierungen
Alle Implementierungen der EVM müssen sich an die im Ethereum Yellow Paper beschriebene Spezifikation halten.
Im Laufe der zehnjährigen Geschichte von Ethereum wurde die EVM mehrfach überarbeitet, und es gibt mehrere Implementierungen der EVM in verschiedenen Programmiersprachen.
Ethereum-Ausführungsclients enthalten eine EVM-Implementierung. Darüber hinaus gibt es mehrere eigenständige Implementierungen, darunter:
- 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 Literatur
- Ethereum Yellow Paper (opens in a new tab)
- Jellopaper alias KEVM: Semantik der EVM in K (opens in a new tab)
- Das Beigepaper (opens in a new tab)
- Ethereum Virtual Machine Opcodes (opens in a new tab)
- Interaktive Referenz der Ethereum Virtual Machine Opcodes (opens in a new tab)
- Eine kurze Einführung in der Solidity-Dokumentation (opens in a new tab)
- Mastering Ethereum - The Ethereum Virtual Machine (opens in a new tab)
Verwandte Themen
Tutorials: Ethereum Virtual Machine (EVM) / Opcodes auf Ethereum
- Die EVM-Spezifikationen des Yellow Papers verstehen – Ein geführter Durchgang durch die formale EVM-Spezifikation aus dem Ethereum Yellow Paper.
- Reverse Engineering eines Vertrags – Wie man einen kompilierten Smart Contract mithilfe von EVM-Opcodes zurückentwickelt (Reverse Engineering).