Przejdź do głównej zawartości
Change page

Kody operacyjne dla EVM

Strona ostatnio zaktualizowana: 11 września 2025

Przegląd

To jest zaktualizowana wersja strony referencyjnej EVM pod adresem wolflo/evm-opcodesopens in a new tab. Zaczerpnięto również z Yellow Paperopens in a new tab, Jello Paperopens in a new tab i implementacji gethopens in a new tab. Ma to być przystępne odniesienie, ale nie jest szczególnie rygorystyczne. Jeśli chcesz mieć pewność poprawności i świadomość każdego skrajnego przypadku, zaleca się użycie Jello Paper lub implementacji klienta.

Szukasz interaktywnego odniesienia? Sprawdź evm.codesopens in a new tab.

W przypadku operacji z dynamicznymi kosztami gazu zobacz gas.mdopens in a new tab.

💡 Szybka wskazówka: aby wyświetlić całe linie, użyj kombinacji [shift] + scroll, aby przewijać w poziomie na pulpicie.

StosNazwaGazPoczątkowy stosPowstały stosPamięć / PrzechowywanieUwagi
00STOP0wstrzymaj wykonanie
01ADD3a, ba + bdodawanie (u)int256 modulo 2**256
02MUL5a, ba * bmnożenie (u)int256 modulo 2**256
03SUB3a, ba - bodejmowanie (u)int256 modulo 2**256
04DIV5a, ba // bdzielenie uint256
05SDIV5a, ba // bdzielenie int256
06MOD5a, ba % bmodulo uint256
07SMOD5a, ba % bmodulo int256
08ADDMOD8a, b, N(a + b) % Ndodawanie (u)int256 modulo N
09MULMOD8a, b, N(a * b) % Nmnożenie (u)int256 modulo N
0AEXPA1opens in a new taba, ba ** bpotęgowanie uint256 modulo 2**256
0BSIGNEXTEND5b, xSIGNEXTEND(x, b)rozszerzenie znakuopens in a new tab x z (b+1) bajtów do 32 bajtów
0C-0Fnieprawidłowy
10LT3a, ba < buint256 mniejsze niż
11GT3a, ba > buint256 większe niż
12SLT3a, ba < bint256 mniejsze niż
13SGT3a, ba > bint256 większe niż
14EQ3a, ba == brówność (u)int256
15ISZERO3aa == 0(u)int256 jest zerem
16AND3a, ba && bbitowe AND
17OR3a, b`a \\b`
18XOR3a, ba ^ bbitowe XOR
19NOT3a~abitowe NOT
1ABYTE3i, x(x >> (248 - i * 8)) && 0xFFi-ty bajt (u)int256 x, od lewej
1BSHL3shift, valval << shiftprzesunięcie w lewo
1CSHR3shift, valval >> shiftlogiczne przesunięcie w prawo
1DSAR3shift, valval >> shiftarytmetyczne przesunięcie w prawo
1E-1Fnieprawidłowy
20KECCAK256A2opens in a new tabost, lenkeccak256(mem[ost:ost+len-1])keccak256
21-2Fnieprawidłowy
30ADDRESS2.address(this)adres wykonywanego kontraktu
31BALANCEA5opens in a new tabaddraddr.balancesaldo, w wei
32ORIGIN2.tx.originadres, z którego pochodzi transakcja
33CALLER2.msg.senderadres nadawcy wiadomości
34CALLVALUE2.msg.valuewartość wiadomości, w wei
35CALLDATALOAD3idxmsg.data[idx:idx+32]odczytaj słowo z danych wiadomości pod indeksem idx
36CALLDATASIZE2.len(msg.data)długość danych wiadomości, w bajtach
37CALLDATACOPYA3opens in a new tabdstOst, ost, len.mem[dstOst:dstOst+len-1] := msg.data[ost:ost+len-1]kopiuj dane wiadomości
38CODESIZE2.len(this.code)długość kodu wykonywanego kontraktu, w bajtach
39CODECOPYA3opens in a new tabdstOst, ost, len.mem[dstOst:dstOst+len-1] := this.code[ost:ost+len-1]kopiuj kod bajtowy wykonywanego kontraktu
3AGASPRICE2.tx.gaspricecena gazu transakcji, w wei za jednostkę gazu **opens in a new tab
3BEXTCODESIZEA5opens in a new tabaddrlen(addr.code)rozmiar kodu pod adresem, w bajtach
3CEXTCODECOPYA4opens in a new tabaddr, dstOst, ost, len.mem[dstOst:dstOst+len-1] := addr.code[ost:ost+len-1]kopiuj kod z addr
3DRETURNDATASIZE2.sizerozmiar zwróconych danych z ostatniego wywołania zewnętrznego, w bajtach
3ERETURNDATACOPYA3opens in a new tabdstOst, ost, len.mem[dstOst:dstOst+len-1] := returndata[ost:ost+len-1]kopiuj zwrócone dane z ostatniego wywołania zewnętrznego
3FEXTCODEHASHA5opens in a new tabaddrhashhasz = addr.exists ? keccak256(addr.code) : 0
40BLOCKHASH20blockNumblockHash(blockNum)
41COINBASE2.block.coinbaseaddress of proposer of current block
42TIMESTAMP2.block.timestampznacznik czasu bieżącego bloku
43NUMBER2.block.numbernumer bieżącego bloku
44PREVRANDAO2.randomness beaconsygnalizator losowości
45GASLIMIT2.block.gaslimitlimit gazu bieżącego bloku
46CHAINID2.chain_idumieść bieżący identyfikator łańcuchaopens in a new tab na stosie
47SELFBALANCE5.address(this).balancesaldo wykonywanego kontraktu, w wei
48BASEFEE2.block.basefeepodstawowa opłata bieżącego bloku
49BLOBHASH3idxtx.blob_versioned_hashes[idx]EIP-4844opens in a new tab
4ABLOBBASEFEE2.block.blobbasefeepodstawowa opłata za blob bieżącego bloku (EIP-7516opens in a new tab)
4B-4Fnieprawidłowy
50POP2_anon.usuń element ze szczytu stosu i odrzuć go
51MLOAD3*opens in a new tabostmem[ost:ost+32]odczytaj słowo z pamięci z przesunięciem ost
52MSTORE3*opens in a new tabost, val.mem[ost:ost+32] := valzapisz słowo w pamięci
53MSTORE83*opens in a new tabost, val.mem[ost] := val && 0xFFzapisz pojedynczy bajt w pamięci
54SLOADA6opens in a new tabkeystorage[key]odczytaj słowo z przechowywania
55SSTOREA7opens in a new tabkey, val.storage[key] := valzapisz słowo w przechowywaniu
56JUMP8dst.$pc := dst oznacza, że pc jest przypisywane tylko wtedy, gdy dst jest prawidłowym celem skoku
57JUMPI10dst, condition.$pc := condition ? dst : $pc + 1`
58PC2.$pclicznik programu
59MSIZE2.len(mem)rozmiar pamięci w bieżącym kontekście wykonania, w bajtach
5AGAS2.gasRemaining
5BJUMPDEST1oznacz prawidłowy cel skokuprawidłowy cel skoku, na przykład cel skoku, który nie znajduje się wewnątrz danych push
5CTLOAD100keytstorage[key]odczytaj słowo z przejściowego przechowywania (EIP-1153opens in a new tab)
5DTSTORE100key, val.tstorage[key] := valzapisz słowo w przejściowym przechowywaniu (EIP-1153opens in a new tab)
5EMCOPY3+3*words+A0opens in a new tabdstOst, ost, len.mem[dstOst] := mem[ost:ost+len]kopiuj pamięć z jednego obszaru do drugiego (EIP-5656opens in a new tab)
5FPUSH02.uint8umieszcza stałą wartość 0 na stosie
60PUSH13.uint8umieść 1-bajtową wartość na stosie
61PUSH23.uint16umieść 2-bajtową wartość na stosie
62PUSH33.uint24umieść 3-bajtową wartość na stosie
63PUSH43.uint32umieść 4-bajtową wartość na stosie
64PUSH53.uint40umieść 5-bajtową wartość na stosie
65PUSH63.uint48umieść 6-bajtową wartość na stosie
66PUSH73.uint56umieść 7-bajtową wartość na stosie
67PUSH83.uint64umieść 8-bajtową wartość na stosie
68PUSH93.uint72umieść 9-bajtową wartość na stosie
69PUSH103.uint80umieść 10-bajtową wartość na stosie
6APUSH113.uint88umieść 11-bajtową wartość na stosie
6BPUSH123.uint96umieść 12-bajtową wartość na stosie
6CPUSH133.uint104umieść 13-bajtową wartość na stosie
6DPUSH143.uint112umieść 14-bajtową wartość na stosie
6EPUSH153.uint120umieść 15-bajtową wartość na stosie
6FPUSH163.uint128umieść 16-bajtową wartość na stosie
70PUSH173.uint136umieść 17-bajtową wartość na stosie
71PUSH183.uint144umieść 18-bajtową wartość na stosie
72PUSH193.uint152umieść 19-bajtową wartość na stosie
73PUSH203.uint160umieść 20-bajtową wartość na stosie
74PUSH213.uint168umieść 21-bajtową wartość na stosie
75PUSH223.uint176umieść 22-bajtową wartość na stosie
76PUSH233.uint184umieść 23-bajtową wartość na stosie
77PUSH243.uint192umieść 24-bajtową wartość na stosie
78PUSH253.uint200umieść 25-bajtową wartość na stosie
79PUSH263.uint208umieść 26-bajtową wartość na stosie
7APUSH273.uint216umieść 27-bajtową wartość na stosie
7BPUSH283.uint224umieść 28-bajtową wartość na stosie
7CPUSH293.uint232umieść 29-bajtową wartość na stosie
7DPUSH303.uint240umieść 30-bajtową wartość na stosie
7EPUSH313.uint248umieść 31-bajtową wartość na stosie
7FPUSH323.uint256umieść 32-bajtową wartość na stosie
80DUP13aa, asklonuj 1. wartość na stosie
81DUP23_, aa, _, asklonuj 2. wartość na stosie
82DUP33_, _, aa, _, _, asklonuj 3. wartość na stosie
83DUP43_, _, _, aa, _, _, _, asklonuj 4. wartość na stosie
84DUP53..., aa, ..., asklonuj 5. wartość na stosie
85DUP63..., aa, ..., asklonuj 6. wartość na stosie
86DUP73..., aa, ..., asklonuj 7. wartość na stosie
87DUP83..., aa, ..., asklonuj 8. wartość na stosie
88DUP93..., aa, ..., asklonuj 9. wartość na stosie
89DUP103..., aa, ..., asklonuj 10. wartość na stosie
8ADUP113..., aa, ..., asklonuj 11. wartość na stosie
8BDUP123..., aa, ..., asklonuj 12. wartość na stosie
8CDUP133..., aa, ..., asklonuj 13. wartość na stosie
8DDUP143..., aa, ..., asklonuj 14. wartość na stosie
8EDUP153..., aa, ..., asklonuj 15. wartość na stosie
8FDUP163..., aa, ..., asklonuj 16. wartość na stosie
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
A0LOG0A8opens in a new tabost, len.LOG0(memory[ost:ost+len-1])
A1LOG1A8opens in a new tabost, len, topic0.LOG1(memory[ost:ost+len-1], topic0)
A2LOG2A8opens in a new tabost, len, topic0, topic1.LOG2(memory[ost:ost+len-1], topic0, topic1)
A3LOG3A8opens in a new tabost, len, topic0, topic1, topic2.LOG3(memory[ost:ost+len-1], topic0, topic1, topic2)
A4LOG4A8opens in a new tabost, len, topic0, topic1, topic2, topic3.LOG4(memory[ost:ost+len-1], topic0, topic1, topic2, topic3)
A5-EFnieprawidłowy
F0CREATEA9opens in a new tabval, ost, lenaddraddr = keccak256(rlp([address(this), this.nonce]))
F1CALLAAopens in a new tabgas, addr, val, argOst, argLen, retOst, retLensuccessmem[retOst:retOst+retLen-1] := returndata
F2CALLCODEAAopens in a new tabgas, addr, val, argOst, argLen, retOst, retLensuccessmem[retOst:retOst+retLen-1] = returndatato samo co DELEGATECALL, ale nie propaguje oryginalnych msg.sender i msg.value
F3RETURN0*opens in a new tabost, len.return mem[ost:ost+len-1]
F4DELEGATECALLAAopens in a new tabgas, addr, argOst, argLen, retOst, retLensuccessmem[retOst:retOst+retLen-1] := returndata
F5CREATE2A9opens in a new tabval, ost, len, saltaddraddr = keccak256(0xff ++ address(this) ++ salt ++ keccak256(mem[ost:ost+len-1]))[12:]
F6-F9nieprawidłowy
FASTATICCALLAAopens in a new tabgas, addr, argOst, argLen, retOst, retLensuccessmem[retOst:retOst+retLen-1] := returndata
FB-FCnieprawidłowy
FDREVERT0*opens in a new tabost, len.revert(mem[ost:ost+len-1])
FEINVALIDAFopens in a new tabwyznaczony nieprawidłowy kod operacji – EIP-141opens in a new tab
FFSELFDESTRUCTABopens in a new tabaddr.wysyła wszystkie ETH na addr; jeśli zostanie wykonane w tej samej transakcji, w której utworzono kontrakt, niszczy kontrakt

Czy ten artykuł był pomocny?