Kurz erklärt:
EVM-Bytecode ist die maschinennahe Abfolge von Befehlen (Opcodes), in die der Quelltext eines Smart Contracts übersetzt wird und die von der Ethereum Virtual Machine Schritt für Schritt ausgeführt wird.
Herkunft und Grundlagen
Mit dem Start von Ethereum 2015 wurde die EVM als stapelbasierte, quasi-turingvollständige Ausführungsumgebung eingeführt. Hochsprachen wie Solidity oder Vyper werden von einem Compiler nicht direkt ausgeführt, sondern in Bytecode übersetzt. Dieser besteht aus einer Folge von Ein-Byte-Opcodes und zugehörigen Operanden. Jeder Opcode steht für eine elementare Operation, etwa arithmetische Berechnungen, Speicherzugriffe, Sprünge oder Vertragsaufrufe. Der Bytecode ist die Form, in der ein Vertrag tatsächlich auf der Blockchain gespeichert und ausgeführt wird.
Creation- und Runtime-Bytecode
Man unterscheidet zwei Ausprägungen. Der Creation-Bytecode wird bei der Bereitstellung eines Vertrags ausgeführt: Er enthält Konstruktorlogik und liefert als Ergebnis den Runtime-Bytecode zurück. Dieser Runtime-Bytecode wird dauerhaft unter der Vertragsadresse abgelegt und bei jedem späteren Aufruf ausgeführt. Am Ende des Runtime-Bytecodes hängt üblicherweise ein Metadaten-Abschnitt an, der etwa einen Hash der Quelldateien und Compiler-Informationen kodiert. Diese Trennung ist relevant, wenn Verträge verifiziert oder analysiert werden.
Opcodes und Ausführung
Die EVM arbeitet als Stack-Maschine: Operanden werden auf einen Stapel gelegt, Opcodes entnehmen sie und legen Ergebnisse zurück. Jeder Opcode hat definierte Gas-Kosten, die den Ressourcenverbrauch abbilden. Sprungbefehle wie JUMP und JUMPDEST ermöglichen Kontrollfluss, während Opcodes wie SSTORE, CALL oder CREATE Speicher und Interaktion mit anderen Verträgen steuern. Die exakte Semantik und die Kostentabelle sind im Ethereum Yellow Paper festgelegt und wurden durch mehrere Netzwerk-Upgrades erweitert.
Verifikation und Analyse
Da auf der Blockchain nur Bytecode sichtbar ist, spielt seine Untersuchung in Sicherheit und Forensik eine wichtige Rolle. Bei der Quellcode-Verifikation wird der veröffentlichte Quelltext erneut kompiliert und der erzeugte Bytecode mit dem On-Chain-gespeicherten verglichen. Ist kein Quelltext verfügbar, kommen Disassembler und Dekompiler zum Einsatz, die Bytecode in Opcodes oder eine annähernde Hochsprachendarstellung zurückführen. Solche Verfahren unterstützen die Blockchain-Analyse und das Aufspüren schädlicher oder betrügerischer Vertragslogik.
Häufige Fragen
Was ist EVM-Bytecode?
Die maschinennahe Abfolge von Opcodes, in die ein Smart Contract übersetzt wird und die die Ethereum Virtual Machine ausführt. Nur diese Form wird auf der Blockchain gespeichert und ausgeführt, nicht der Quelltext.
Was unterscheidet Creation- von Runtime-Bytecode?
Creation-Bytecode läuft einmalig bei der Bereitstellung und enthält die Konstruktorlogik. Er gibt den Runtime-Bytecode zurück, der dauerhaft unter der Vertragsadresse gespeichert und bei jedem Aufruf ausgeführt wird.
Was sind Opcodes?
Ein-Byte-Befehle, die elementare Operationen der EVM darstellen, etwa Rechnen, Speicherzugriffe, Sprünge oder Vertragsaufrufe. Jeder Opcode besitzt festgelegte Gas-Kosten.
Wie wird ein Vertrag verifiziert?
Der veröffentlichte Quelltext wird mit denselben Einstellungen erneut kompiliert und der resultierende Bytecode mit dem auf der Blockchain gespeicherten verglichen. Stimmen sie überein, gilt der Quelltext als bestätigt.
Kann man Bytecode ohne Quelltext analysieren?
Ja, mithilfe von Disassemblern und Dekompilern, die den Bytecode in Opcode-Folgen oder eine näherungsweise Hochsprachendarstellung zurückführen. Dies wird für Sicherheitsprüfungen und forensische Analysen genutzt.
Zusammenfassung
EVM-Bytecode ist die aus Smart-Contract-Quelltext übersetzte Opcode-Folge, die die Ethereum Virtual Machine ausführt. Man unterscheidet Creation- und Runtime-Bytecode. Da nur Bytecode auf der Blockchain vorliegt, sind seine Verifikation und Analyse zentrale Themen von Sicherheit und Forensik.
Weiterführende Quellen
- Ethereum Yellow Paper (Formale EVM-Spezifikation): ethereum.github.io
- ethereum.org: Ethereum Virtual Machine (EVM): ethereum.org