Zum Hauptinhalt springen
Change page

Opcodes für die EVM

Letzte Aktualisierung der Seite: 11. September 2025

Übersicht

Dies ist eine aktualisierte Version der EVM-Referenzseite unter wolflo/evm-opcodes (opens in a new tab). Sie stützt sich zudem auf das Yellow Paper (opens in a new tab), das Jello Paper (opens in a new tab) und die geth (opens in a new tab)-Implementierung. Dies soll eine leicht zugängliche Referenz sein, ist jedoch nicht besonders rigoros. Wenn Sie sich der Richtigkeit sicher sein und jeden Randfall kennen möchten, ist die Verwendung des Jello Papers oder einer Client-Implementierung ratsam.

Suchen Sie nach einer interaktiven Referenz? Schauen Sie sich evm.codes (opens in a new tab) an.

Für Operationen mit dynamischen Gaskosten, siehe gas.md (opens in a new tab).

💡 Kurzer Tipp: Um ganze Zeilen anzuzeigen, verwenden Sie [Shift] + Scrollen, um auf dem Desktop horizontal zu scrollen.

StackNameGasAnfänglicher StackResultierender StackSpeicher / StorageNotizen
00STOP0Ausführung anhalten
01ADD3a, ba + b(u)int256-Addition modulo 2**256
02MUL5a, ba * b(u)int256-Multiplikation modulo 2**256
03SUB3a, ba - b(u)int256-Subtraktion modulo 2**256
04DIV5a, ba // buint256-Division
05SDIV5a, ba // bint256-Division
06MOD5a, ba % buint256-Modulo
07SMOD5a, ba % bint256-Modulo
08ADDMOD8a, b, N(a + b) % N(u)int256-Addition modulo N
09MULMOD8a, b, N(a * b) % N(u)int256-Multiplikation modulo N
0AEXPA1 (opens in a new tab)a, ba ** buint256-Potenzierung modulo 2**256
0BSIGNEXTEND5b, xSIGNEXTEND(x, b)Vorzeichenerweiterung (opens in a new tab) von x von (b+1) Bytes auf 32 Bytes
0C-0Fungültig
10LT3a, ba < buint256 kleiner-als
11GT3a, ba > buint256 größer-als
12SLT3a, ba < bint256 kleiner-als
13SGT3a, ba > bint256 größer-als
14EQ3a, ba == b(u)int256-Gleichheit
15ISZERO3aa == 0(u)int256 ist-null
16AND3a, ba && bbitweises UND
17OR3a, ba || bbitweises ODER
18XOR3a, ba ^ bbitweises exklusives ODER (XOR)
19NOT3a~abitweises NICHT
1ABYTE3i, x(x >> (248 - i * 8)) && 0xFFi-tes Byte von (u)int256 x, von links
1BSHL3shift, valval << shiftLinksverschiebung
1CSHR3shift, valval >> shiftlogische Rechtsverschiebung
1DSAR3shift, valval >> shiftarithmetische Rechtsverschiebung
1E-1Fungültig
20KECCAK256A2 (opens in a new tab)ost, lenkeccak256(mem[ost:ost+len-1])keccak256
21-2Fungültig
30ADDRESS2.address(this)Adresse des ausführenden Vertrags
31BALANCEA5 (opens in a new tab)addraddr.balanceGuthaben, in Wei
32ORIGIN2.tx.originAdresse, von der die Transaktion ausging
33CALLER2.msg.senderAdresse des msg-Absenders
34CALLVALUE2.msg.valuemsg-Wert, in Wei
35CALLDATALOAD3idxmsg.data[idx:idx+32]Wort aus msg-Daten an Index idx lesen
36CALLDATASIZE2.len(msg.data)Länge der msg-Daten, in Bytes
37CALLDATACOPYA3 (opens in a new tab)dstOst, ost, len.mem[dstOst:dstOst+len-1] := msg.data[ost:ost+len-1]msg-Daten kopieren
38CODESIZE2.len(this.code)Länge des Codes des ausführenden Vertrags, in Bytes
39CODECOPYA3 (opens in a new tab)dstOst, ost, len.mem[dstOst:dstOst+len-1] := this.code[ost:ost+len-1]Bytecode des ausführenden Vertrags kopieren
3AGASPRICE2.tx.gaspriceGaspreis der Transaktion, in Wei pro Einheit Gas ** (opens in a new tab)
3BEXTCODESIZEA5 (opens in a new tab)addrlen(addr.code)Größe des Codes an der Adresse, in Bytes
3CEXTCODECOPYA4 (opens in a new tab)addr, dstOst, ost, len.mem[dstOst:dstOst+len-1] := addr.code[ost:ost+len-1]Code von addr kopieren
3DRETURNDATASIZE2.sizeGröße der zurückgegebenen Daten vom letzten externen Aufruf, in Bytes
3ERETURNDATACOPYA3 (opens in a new tab)dstOst, ost, len.mem[dstOst:dstOst+len-1] := returndata[ost:ost+len-1]zurückgegebene Daten vom letzten externen Aufruf kopieren
3FEXTCODEHASHA5 (opens in a new tab)addrhashhash = addr.exists ? keccak256(addr.code) : 0
40BLOCKHASH20blockNumblockHash(blockNum)
41COINBASE2.block.coinbaseAdresse des Block-Vorschlagenden des aktuellen Blocks
42TIMESTAMP2.block.timestampZeitstempel des aktuellen Blocks
43NUMBER2.block.numberNummer des aktuellen Blocks
44PREVRANDAO2.randomness beaconZufalls-Beacon
45GASLIMIT2.block.gaslimitGaslimit des aktuellen Blocks
46CHAINID2.chain_idaktuelle Chain-ID (opens in a new tab) auf den Stack legen
47SELFBALANCE5.address(this).balanceGuthaben des ausführenden Vertrags, in Wei
48BASEFEE2.block.basefeeGrundgebühr des aktuellen Blocks
49BLOBHASH3idxtx.blob_versioned_hashes[idx]EIP-4844 (opens in a new tab)
4ABLOBBASEFEE2.block.blobbasefeeBlob-Grundgebühr des aktuellen Blocks (EIP-7516 (opens in a new tab))
4B-4Fungültig
50POP2_anon.Element von der Spitze des Stacks entfernen und verwerfen
51MLOAD3* (opens in a new tab)ostmem[ost:ost+32]Wort aus dem Speicher an Offset ost lesen
52MSTORE3* (opens in a new tab)ost, val.mem[ost:ost+32] := valein Wort in den Speicher schreiben
53MSTORE83* (opens in a new tab)ost, val.mem[ost] := val && 0xFFein einzelnes Byte in den Speicher schreiben
54SLOADA6 (opens in a new tab)keystorage[key]Wort aus dem Storage lesen
55SSTOREA7 (opens in a new tab)key, val.storage[key] := valWort in den Storage schreiben
56JUMP8dst.$pc := dst markiert, dass pc nur zugewiesen wird, wenn dst ein gültiges jumpdest ist
57JUMPI10dst, condition.$pc := condition ? dst : $pc + 1
58PC2.$pcProgrammierzähler (Program Counter)
59MSIZE2.len(mem)Größe des Speichers im aktuellen Ausführungskontext, in Bytes
5AGAS2.gasRemaining
5BJUMPDEST1gültiges Sprungziel markierenein gültiges Sprungziel, zum Beispiel ein Sprungziel, das nicht innerhalb der Push-Daten liegt
5CTLOAD100keytstorage[key]Wort aus dem transienten Storage lesen (EIP-1153 (opens in a new tab))
5DTSTORE100key, val.tstorage[key] := valWort in den transienten Storage schreiben (EIP-1153 (opens in a new tab))
5EMCOPY3+3*words+A0 (opens in a new tab)dstOst, ost, len.mem[dstOst] := mem[ost:ost+len]Speicher von einem Bereich in einen anderen kopieren (EIP-5656 (opens in a new tab))
5FPUSH02.uint8den konstanten Wert 0 auf den Stack legen
60PUSH13.uint81-Byte-Wert auf den Stack legen
61PUSH23.uint162-Byte-Wert auf den Stack legen
62PUSH33.uint243-Byte-Wert auf den Stack legen
63PUSH43.uint324-Byte-Wert auf den Stack legen
64PUSH53.uint405-Byte-Wert auf den Stack legen
65PUSH63.uint486-Byte-Wert auf den Stack legen
66PUSH73.uint567-Byte-Wert auf den Stack legen
67PUSH83.uint648-Byte-Wert auf den Stack legen
68PUSH93.uint729-Byte-Wert auf den Stack legen
69PUSH103.uint8010-Byte-Wert auf den Stack legen
6APUSH113.uint8811-Byte-Wert auf den Stack legen
6BPUSH123.uint9612-Byte-Wert auf den Stack legen
6CPUSH133.uint10413-Byte-Wert auf den Stack legen
6DPUSH143.uint11214-Byte-Wert auf den Stack legen
6EPUSH153.uint12015-Byte-Wert auf den Stack legen
6FPUSH163.uint12816-Byte-Wert auf den Stack legen
70PUSH173.uint13617-Byte-Wert auf den Stack legen
71PUSH183.uint14418-Byte-Wert auf den Stack legen
72PUSH193.uint15219-Byte-Wert auf den Stack legen
73PUSH203.uint16020-Byte-Wert auf den Stack legen
74PUSH213.uint16821-Byte-Wert auf den Stack legen
75PUSH223.uint17622-Byte-Wert auf den Stack legen
76PUSH233.uint18423-Byte-Wert auf den Stack legen
77PUSH243.uint19224-Byte-Wert auf den Stack legen
78PUSH253.uint20025-Byte-Wert auf den Stack legen
79PUSH263.uint20826-Byte-Wert auf den Stack legen
7APUSH273.uint21627-Byte-Wert auf den Stack legen
7BPUSH283.uint22428-Byte-Wert auf den Stack legen
7CPUSH293.uint23229-Byte-Wert auf den Stack legen
7DPUSH303.uint24030-Byte-Wert auf den Stack legen
7EPUSH313.uint24831-Byte-Wert auf den Stack legen
7FPUSH323.uint25632-Byte-Wert auf den Stack legen
80DUP13aa, a1. Wert auf dem Stack klonen
81DUP23_, aa, _, a2. Wert auf dem Stack klonen
82DUP33_, _, aa, _, _, a3. Wert auf dem Stack klonen
83DUP43_, _, _, aa, _, _, _, a4. Wert auf dem Stack klonen
84DUP53..., aa, ..., a5. Wert auf dem Stack klonen
85DUP63..., aa, ..., a6. Wert auf dem Stack klonen
86DUP73..., aa, ..., a7. Wert auf dem Stack klonen
87DUP83..., aa, ..., a8. Wert auf dem Stack klonen
88DUP93..., aa, ..., a9. Wert auf dem Stack klonen
89DUP103..., aa, ..., a10. Wert auf dem Stack klonen
8ADUP113..., aa, ..., a11. Wert auf dem Stack klonen
8BDUP123..., aa, ..., a12. Wert auf dem Stack klonen
8CDUP133..., aa, ..., a13. Wert auf dem Stack klonen
8DDUP143..., aa, ..., a14. Wert auf dem Stack klonen
8EDUP153..., aa, ..., a15. Wert auf dem Stack klonen
8FDUP163..., aa, ..., a16. Wert auf dem Stack klonen
90SWAP13a, bb, a
91SWAP23a, _, bb, _, a
92SWAP33a, _, _, bb, _, _, a
93SWAP43a, _, _, _, bb, _, _, _, a
94SWAP53a, ..., bb, ..., a
95SWAP63a, ..., bb, ..., a
96SWAP73a, ..., bb, ..., a
97SWAP83a, ..., bb, ..., a
98SWAP93a, ..., bb, ..., a
99SWAP103a, ..., bb, ..., a
9ASWAP113a, ..., bb, ..., a
9BSWAP123a, ..., bb, ..., a
9CSWAP133a, ..., bb, ..., a
9DSWAP143a, ..., bb, ..., a
9ESWAP153a, ..., bb, ..., a
9FSWAP163a, ..., bb, ..., a
A0LOG0A8 (opens in a new tab)ost, len.LOG0(memory[ost:ost+len-1])
A1LOG1A8 (opens in a new tab)ost, len, topic0.LOG1(memory[ost:ost+len-1], topic0)
A2LOG2A8 (opens in a new tab)ost, len, topic0, topic1.LOG2(memory[ost:ost+len-1], topic0, topic1)
A3LOG3A8 (opens in a new tab)ost, len, topic0, topic1, topic2.LOG3(memory[ost:ost+len-1], topic0, topic1, topic2)
A4LOG4A8 (opens in a new tab)ost, len, topic0, topic1, topic2, topic3.LOG4(memory[ost:ost+len-1], topic0, topic1, topic2, topic3)
A5-EFungültig
F0CREATEA9 (opens in a new tab)val, ost, lenaddraddr = keccak256(rlp([address(this), this.nonce]))
F1CALLAA (opens in a new tab)gas, addr, val, argOst, argLen, retOst, retLensuccessmem[retOst:retOst+retLen-1] := returndata
F2CALLCODEAA (opens in a new tab)gas, addr, val, argOst, argLen, retOst, retLensuccessmem[retOst:retOst+retLen-1] = returndatawie DELEGATECALL, überträgt aber nicht den ursprünglichen msg.sender und msg.value
F3RETURN0* (opens in a new tab)ost, len.return mem[ost:ost+len-1]
F4DELEGATECALLAA (opens in a new tab)gas, addr, argOst, argLen, retOst, retLensuccessmem[retOst:retOst+retLen-1] := returndata
F5CREATE2A9 (opens in a new tab)val, ost, len, saltaddraddr = keccak256(0xff ++ address(this) ++ salt ++ keccak256(mem[ost:ost+len-1]))[12:]
F6-F9ungültig
FASTATICCALLAA (opens in a new tab)gas, addr, argOst, argLen, retOst, retLensuccessmem[retOst:retOst+retLen-1] := returndata
FB-FCungültig
FDREVERT0* (opens in a new tab)ost, len.revert(mem[ost:ost+len-1])
FEINVALIDAF (opens in a new tab)als ungültig designierter Opcode - EIP-141 (opens in a new tab)
FFSELFDESTRUCTAB (opens in a new tab)addr.sendet alle ETH an addr; wenn in derselben Transaktion ausgeführt, in der ein Vertrag erstellt wurde, wird der Vertrag zerstört

War dieser Artikel hilfreich?