Lompat ke konten utama
Change page

Opcode untuk EVM

Ikhtisar

Ini adalah versi yang diperbarui dari halaman referensi EVM di wolflo/evm-opcodes (opens in a new tab). Juga diambil dari Kertas Kuning (opens in a new tab), Jello Paper (opens in a new tab), dan implementasi geth (opens in a new tab). Ini dimaksudkan sebagai referensi yang mudah diakses, tetapi tidak terlalu ketat. Jika Anda ingin memastikan kebenarannya 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 (sign extend) (opens in a new tab) x dari (b+1) bita menjadi 32 bita
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)) && 0xFFbita ke-i dari (u)int256 x, dari kiri
1BSHL3shift, valval << shiftgeser ke kiri
1CSHR3shift, valval >> shiftgeser logis ke kanan
1DSAR3shift, valval >> shiftgeser aritmetika ke kanan
1E-1Ftidak valid
20KECCAK256A2 (opens in a new tab)ost, lenkeccak256(mem[ost:ost+len-1])keccak256
21-2Ftidak valid
30ADDRESS2.address(this)alamat dari kontrak yang dieksekusi
31BALANCEA5 (opens in a new tab)addraddr.balancesaldo, dalam Wei
32ORIGIN2.tx.originalamat yang memulai tx
33CALLER2.msg.senderalamat dari pengirim pesan (msg sender)
34CALLVALUE2.msg.valuenilai pesan (msg value), dalam Wei
35CALLDATALOAD3idxmsg.data[idx:idx+32]membaca kata dari data pesan pada indeks idx
36CALLDATASIZE2.len(msg.data)panjang data pesan, dalam bita
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 bita
39CODECOPYA3 (opens in a new tab)dstOst, ost, len.mem[dstOst:dstOst+len-1] := this.code[ost:ost+len-1]
3AGASPRICE2.tx.gaspriceharga gas dari tx, dalam Wei per unit gas ** (opens in a new tab)
3BEXTCODESIZEA5 (opens in a new tab)addrlen(addr.code)ukuran kode pada alamat, dalam bita
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 bita
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 dari pengusul blok saat ini
42TIMESTAMP2.block.timestampstempel waktu dari blok saat ini
43NUMBER2.block.numbernomor dari blok saat ini
44PREVRANDAO2.randomness beaconsuar 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 dari 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 kata dari memori pada offset ost
52MSTORE3* (opens in a new tab)ost, val.mem[ost:ost+32] := valmenulis sebuah kata ke memori
53MSTORE83* (opens in a new tab)ost, val.mem[ost] := val && 0xFFmenulis satu bita ke memori
54SLOADA6 (opens in a new tab)keystorage[key]membaca kata dari penyimpanan
55SSTOREA7 (opens in a new tab)key, val.storage[key] := valmenulis kata ke penyimpanan
56JUMP8dst.$pc := dst menandakan bahwa pc hanya ditetapkan jika dst adalah jumpdest yang valid
57JUMPI10dst, condition.$pc := condition ? dst : $pc + 1
58PC2.$pcpenghitung program (program counter)
59MSIZE2.len(mem)ukuran memori dalam konteks eksekusi saat ini, dalam bita
5AGAS2.gasRemaining
5BJUMPDEST1menandai tujuan lompatan (jump) yang validtujuan lompatan yang valid, misalnya tujuan lompatan yang tidak berada di dalam data push
5CTLOAD100keytstorage[key]membaca kata dari penyimpanan sementara (transient storage) (EIP-1153 (opens in a new tab))
5DTSTORE100key, val.tstorage[key] := valmenulis kata 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-bita ke dalam stack
61PUSH23.uint16mendorong nilai 2-bita ke dalam stack
62PUSH33.uint24mendorong nilai 3-bita ke dalam stack
63PUSH43.uint32mendorong nilai 4-bita ke dalam stack
64PUSH53.uint40mendorong nilai 5-bita ke dalam stack
65PUSH63.uint48mendorong nilai 6-bita ke dalam stack
66PUSH73.uint56mendorong nilai 7-bita ke dalam stack
67PUSH83.uint64mendorong nilai 8-bita ke dalam stack
68PUSH93.uint72mendorong nilai 9-bita ke dalam stack
69PUSH103.uint80mendorong nilai 10-bita ke dalam stack
6APUSH113.uint88mendorong nilai 11-bita ke dalam stack
6BPUSH123.uint96mendorong nilai 12-bita ke dalam stack
6CPUSH133.uint104mendorong nilai 13-bita ke dalam stack
6DPUSH143.uint112mendorong nilai 14-bita ke dalam stack
6EPUSH153.uint120mendorong nilai 15-bita ke dalam stack
6FPUSH163.uint128mendorong nilai 16-bita ke dalam stack
70PUSH173.uint136mendorong nilai 17-bita ke dalam stack
71PUSH183.uint144mendorong nilai 18-bita ke dalam stack
72PUSH193.uint152mendorong nilai 19-bita ke dalam stack
73PUSH203.uint160mendorong nilai 20-bita ke dalam stack
74PUSH213.uint168mendorong nilai 21-bita ke dalam stack
75PUSH223.uint176mendorong nilai 22-bita ke dalam stack
76PUSH233.uint184mendorong nilai 23-bita ke dalam stack
77PUSH243.uint192mendorong nilai 24-bita ke dalam stack
78PUSH253.uint200mendorong nilai 25-bita ke dalam stack
79PUSH263.uint208mendorong nilai 26-bita ke dalam stack
7APUSH273.uint216mendorong nilai 27-bita ke dalam stack
7BPUSH283.uint224mendorong nilai 28-bita ke dalam stack
7CPUSH293.uint232mendorong nilai 29-bita ke dalam stack
7DPUSH303.uint240mendorong nilai 30-bita ke dalam stack
7EPUSH313.uint248mendorong nilai 31-bita ke dalam stack
7FPUSH323.uint256mendorong nilai 32-bita ke dalam stack
80DUP13aa, amenggandakan nilai ke-1 pada stack
81DUP23_, aa, _, amenggandakan nilai ke-2 pada stack
82DUP33_, _, aa, _, _, amenggandakan nilai ke-3 pada stack
83DUP43_, _, _, aa, _, _, _, amenggandakan nilai ke-4 pada stack
84DUP53..., aa, ..., amenggandakan nilai ke-5 pada stack
85DUP63..., aa, ..., amenggandakan nilai ke-6 pada stack
86DUP73..., aa, ..., amenggandakan nilai ke-7 pada stack
87DUP83..., aa, ..., amenggandakan nilai ke-8 pada stack
88DUP93..., aa, ..., amenggandakan nilai ke-9 pada stack
89DUP103..., aa, ..., amenggandakan nilai ke-10 pada stack
8ADUP113..., aa, ..., amenggandakan nilai ke-11 pada stack
8BDUP123..., aa, ..., amenggandakan nilai ke-12 pada stack
8CDUP133..., aa, ..., amenggandakan nilai ke-13 pada stack
8DDUP143..., aa, ..., amenggandakan nilai ke-14 pada stack
8EDUP153..., aa, ..., amenggandakan nilai ke-15 pada stack
8FDUP163..., aa, ..., amenggandakan nilai ke-16 pada 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 meneruskan 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.mengirimkan semua ETH ke addr; jika dieksekusi dalam transaksi yang sama saat kontrak dibuat, ini akan menghancurkan kontrak tersebut