Lompat ke konten utama
Change page

Opcode untuk EVM

Pembaruan terakhir halaman: 11 September 2025

Ringkasan

Ini adalah versi yang diperbarui dari halaman referensi EVM di wolflo/evm-opcodes (opens in a new tab). Juga diambil dari Yellow Paper (opens in a new tab), Jello Paper (opens in a new tab), dan implementasi geth (opens in a new tab). Ini dimaksudkan untuk menjadi referensi yang mudah diakses, tetapi tidak terlalu ketat. Jika Anda ingin memastikan kebenaran dan menyadari setiap kasus ekstrem, disarankan untuk menggunakan Jello Paper atau implementasi klien.

Mencari referensi interaktif? Kunjungi evm.codes (opens in a new tab).

Untuk operasi dengan biaya gas dinamis, lihat gas.md (opens in a new tab).

💡 Kiat cepat: Untuk melihat seluruh baris, gunakan [shift] + scroll untuk menggulir secara horizontal di desktop.

StackNamaGasStack AwalStack HasilMem / PenyimpananCatatan
00STOP0menghentikan eksekusi
01ADD3a, ba + bpenambahan (u)int256 modulo 2**256
02MUL5a, ba * bperkalian (u)int256 modulo 2**256
03SUB3a, ba - bpengurangan (u)int256 modulo 2**256
04DIV5a, ba // bpembagian uint256
05SDIV5a, ba // bpembagian int256
06MOD5a, ba % bmodulus uint256
07SMOD5a, ba % bmodulus int256
08ADDMOD8a, b, N(a + b) % Npenambahan (u)int256 modulo N
09MULMOD8a, b, N(a * b) % Nperkalian (u)int256 modulo N
0AEXPA1 (opens in a new tab)a, ba ** beksponensiasi uint256 modulo 2**256
0BSIGNEXTEND5b, xSIGNEXTEND(x, b)perluasan tanda (opens in a new tab) x dari (b+1) byte menjadi 32 byte
0C-0Ftidak valid
10LT3a, ba < buint256 kurang dari
11GT3a, ba > buint256 lebih dari
12SLT3a, ba < bint256 kurang dari
13SGT3a, ba > bint256 lebih dari
14EQ3a, ba == bkesetaraan (u)int256
15ISZERO3aa == 0(u)int256 iszero
16AND3a, ba && bAND bitwise
17OR3a, ba || bOR bitwise
18XOR3a, ba ^ bXOR bitwise
19NOT3a~aNOT bitwise
1ABYTE3i, x(x >> (248 - i * 8)) && 0xFFbyte ke-i dari (u)int256 x, dari kiri
1BSHL3shift, valval << shiftgeser ke kiri
1CSHR3shift, valval >> shiftgeser kanan logis
1DSAR3shift, valval >> shiftgeser kanan aritmatika
1E-1Ftidak valid
20KECCAK256A2 (opens in a new tab)ost, lenkeccak256(mem[ost:ost+len-1])keccak256
21-2Ftidak valid
30ADDRESS2.address(this)alamat kontrak yang dieksekusi
31BALANCEA5 (opens in a new tab)addraddr.balancesaldo, dalam wei
32ORIGIN2.tx.originalamat yang memulai transaksi
33CALLER2.msg.senderalamat pengirim pesan
34CALLVALUE2.msg.valuenilai pesan, dalam wei
35CALLDATALOAD3idxmsg.data[idx:idx+32]membaca word dari data pesan pada indeks idx
36CALLDATASIZE2.len(msg.data)panjang data pesan, dalam byte
37CALLDATACOPYA3 (opens in a new tab)dstOst, ost, len.mem[dstOst:dstOst+len-1] := msg.data[ost:ost+len-1]menyalin data pesan
38CODESIZE2.len(this.code)panjang kode kontrak yang dieksekusi, dalam byte
39CODECOPYA3 (opens in a new tab)dstOst, ost, len.mem[dstOst:dstOst+len-1] := this.code[ost:ost+len-1]
3AGASPRICE2.tx.gaspriceharga gas transaksi, dalam wei per unit gas ** (opens in a new tab)
3BEXTCODESIZEA5 (opens in a new tab)addrlen(addr.code)ukuran kode pada addr, dalam byte
3CEXTCODECOPYA4 (opens in a new tab)addr, dstOst, ost, len.mem[dstOst:dstOst+len-1] := addr.code[ost:ost+len-1]menyalin kode dari addr
3DRETURNDATASIZE2.sizeukuran data yang dikembalikan dari panggilan eksternal terakhir, dalam byte
3ERETURNDATACOPYA3 (opens in a new tab)dstOst, ost, len.mem[dstOst:dstOst+len-1] := returndata[ost:ost+len-1]menyalin data yang dikembalikan dari panggilan eksternal terakhir
3FEXTCODEHASHA5 (opens in a new tab)addrhashhash = addr.exists ? keccak256(addr.code) : 0
40BLOCKHASH20blockNumblockHash(blockNum)
41COINBASE2.block.coinbasealamat pengusul blok saat ini
42TIMESTAMP2.block.timestampstempel waktu dari blok saat ini
43NUMBER2.block.numbernomor blok saat ini
44PREVRANDAO2.randomness beaconbeacon keacakan
45GASLIMIT2.block.gaslimitbatas gas dari blok saat ini
46CHAINID2.chain_idmendorong id rantai (opens in a new tab) saat ini ke dalam stack
47SELFBALANCE5.address(this).balancesaldo kontrak yang dieksekusi, dalam wei
48BASEFEE2.block.basefeebiaya dasar dari blok saat ini
49BLOBHASH3idxtx.blob_versioned_hashes[idx]EIP-4844 (opens in a new tab)
4ABLOBBASEFEE2.block.blobbasefeebiaya dasar blob dari blok saat ini (EIP-7516 (opens in a new tab))
4B-4Ftidak valid
50POP2_anon.menghapus item dari atas stack dan membuangnya
51MLOAD3* (opens in a new tab)ostmem[ost:ost+32]membaca word dari memori pada offset ost
52MSTORE3* (opens in a new tab)ost, val.mem[ost:ost+32] := valmenulis word ke memori
53MSTORE83* (opens in a new tab)ost, val.mem[ost] := val && 0xFFmenulis satu byte ke memori
54SLOADA6 (opens in a new tab)keystorage[key]membaca word dari penyimpanan
55SSTOREA7 (opens in a new tab)key, val.storage[key] := valmenulis word ke penyimpanan
56JUMP8dst.$pc := dst menandai bahwa pc hanya ditetapkan jika dst adalah jumpdest yang valid
57JUMPI10dst, condition.$pc := condition ? dst : $pc + 1
58PC2.$pcpenghitung program
59MSIZE2.len(mem)ukuran memori dalam konteks eksekusi saat ini, dalam byte
5AGAS2.gasRemaining
5BJUMPDEST1menandai tujuan lompatan yang validtujuan lompatan yang valid misalnya tujuan lompatan yang tidak berada di dalam data push
5CTLOAD100keytstorage[key]membaca word dari penyimpanan sementara (EIP-1153 (opens in a new tab))
5DTSTORE100key, val.tstorage[key] := valmenulis word ke penyimpanan sementara (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]menyalin memori dari satu area ke area lain (EIP-5656 (opens in a new tab))
5FPUSH02.uint8mendorong nilai konstan 0 ke dalam stack
60PUSH13.uint8mendorong nilai 1-byte ke dalam stack
61PUSH23.uint16mendorong nilai 2-byte ke dalam stack
62PUSH33.uint24mendorong nilai 3-byte ke dalam stack
63PUSH43.uint32mendorong nilai 4-byte ke dalam stack
64PUSH53.uint40mendorong nilai 5-byte ke dalam stack
65PUSH63.uint48mendorong nilai 6-byte ke dalam stack
66PUSH73.uint56mendorong nilai 7-byte ke dalam stack
67PUSH83.uint64mendorong nilai 8-byte ke dalam stack
68PUSH93.uint72mendorong nilai 9-byte ke dalam stack
69PUSH103.uint80mendorong nilai 10-byte ke dalam stack
6APUSH113.uint88mendorong nilai 11-byte ke dalam stack
6BPUSH123.uint96mendorong nilai 12-byte ke dalam stack
6CPUSH133.uint104mendorong nilai 13-byte ke dalam stack
6DPUSH143.uint112mendorong nilai 14-byte ke dalam stack
6EPUSH153.uint120mendorong nilai 15-byte ke dalam stack
6FPUSH163.uint128mendorong nilai 16-byte ke dalam stack
70PUSH173.uint136mendorong nilai 17-byte ke dalam stack
71PUSH183.uint144mendorong nilai 18-byte ke dalam stack
72PUSH193.uint152mendorong nilai 19-byte ke dalam stack
73PUSH203.uint160mendorong nilai 20-byte ke dalam stack
74PUSH213.uint168mendorong nilai 21-byte ke dalam stack
75PUSH223.uint176mendorong nilai 22-byte ke dalam stack
76PUSH233.uint184mendorong nilai 23-byte ke dalam stack
77PUSH243.uint192mendorong nilai 24-byte ke dalam stack
78PUSH253.uint200mendorong nilai 25-byte ke dalam stack
79PUSH263.uint208mendorong nilai 26-byte ke dalam stack
7APUSH273.uint216mendorong nilai 27-byte ke dalam stack
7BPUSH283.uint224mendorong nilai 28-byte ke dalam stack
7CPUSH293.uint232mendorong nilai 29-byte ke dalam stack
7DPUSH303.uint240mendorong nilai 30-byte ke dalam stack
7EPUSH313.uint248mendorong nilai 31-byte ke dalam stack
7FPUSH323.uint256mendorong nilai 32-byte ke dalam stack
80DUP13aa, amengkloning nilai ke-1 di stack
81DUP23_, aa, _, amengkloning nilai ke-2 di stack
82DUP33_, _, aa, _, _, amengkloning nilai ke-3 di stack
83DUP43_, _, _, aa, _, _, _, amengkloning nilai ke-4 di stack
84DUP53..., aa, ..., amengkloning nilai ke-5 di stack
85DUP63..., aa, ..., amengkloning nilai ke-6 di stack
86DUP73..., aa, ..., amengkloning nilai ke-7 di stack
87DUP83..., aa, ..., amengkloning nilai ke-8 di stack
88DUP93..., aa, ..., amengkloning nilai ke-9 di stack
89DUP103..., aa, ..., amengkloning nilai ke-10 di stack
8ADUP113..., aa, ..., amengkloning nilai ke-11 di stack
8BDUP123..., aa, ..., amengkloning nilai ke-12 di stack
8CDUP133..., aa, ..., amengkloning nilai ke-13 di stack
8DDUP143..., aa, ..., amengkloning nilai ke-14 di stack
8EDUP153..., aa, ..., amengkloning nilai ke-15 di stack
8FDUP163..., aa, ..., amengkloning nilai ke-16 di stack
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-EFtidak valid
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] = returndatasama seperti DELEGATECALL, tetapi tidak menyebarkan msg.sender dan msg.value asli
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-F9tidak valid
FASTATICCALLAA (opens in a new tab)gas, addr, argOst, argLen, retOst, retLensuccessmem[retOst:retOst+retLen-1] := returndata
FB-FCtidak valid
FDREVERT0* (opens in a new tab)ost, len.revert(mem[ost:ost+len-1])
FEINVALIDAF (opens in a new tab)opcode tidak valid yang ditetapkan - EIP-141 (opens in a new tab)
FFSELFDESTRUCTAB (opens in a new tab)addr.mengirim semua ETH ke addr; jika dieksekusi dalam transaksi yang sama saat kontrak dibuat, ini akan menghancurkan kontrak

Apakah artikel ini membantu?