Lompat ke konten utama
Change page

Opcode untuk EVM

Ikhtisar

Ini adalah versi yang diperbarui dari halaman referensi EVM di wolflo/evm-opcodes (buka di tab baru). Juga diambil dari Kertas Kuning (buka di tab baru), Jello Paper (buka di tab baru), dan implementasi geth (buka di tab baru). Ini dimaksudkan sebagai referensi yang mudah diakses, tetapi tidak terlalu ketat. Jika Anda ingin memastikan kebenaran dan mengetahui setiap kasus ekstrem, disarankan untuk menggunakan Jello Paper atau implementasi klien.

Mencari referensi interaktif? Kunjungi evm.codes (buka di tab baru).

Untuk operasi dengan biaya gas dinamis, lihat gas.md (buka di tab baru).

💡 Tip 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 (buka di tab baru)a, ba ** beksponensiasi uint256 modulo 2**256
0BSIGNEXTEND5b, xSIGNEXTEND(x, b)perluasan tanda (sign extend) (buka di tab baru) 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 == bkesamaan (u)int256
15ISZERO3aa == 0(u)int256 iszero
16AND3a, ba && bAND bitwise
17OR3a, b`ab`
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 aritmatika ke kanan
1E-1Ftidak valid
20KECCAK256A2 (buka di tab baru)ost, lenkeccak256(mem[ost:ost+len-1])keccak256
21-2Ftidak valid
30ADDRESS2.address(this)alamat dari kontrak yang dieksekusi
31BALANCEA5 (buka di tab baru)addraddr.balancesaldo, dalam Wei
32ORIGIN2.tx.originalamat yang memulai transaksi
33CALLER2.msg.senderalamat pengirim pesan (msg sender)
34CALLVALUE2.msg.valuenilai pesan (msg value), dalam Wei
35CALLDATALOAD3idxmsg.data[idx:idx+32]baca kata (word) dari data pesan pada indeks idx
36CALLDATASIZE2.len(msg.data)panjang data pesan, dalam bita
37CALLDATACOPYA3 (buka di tab baru)dstOst, ost, len.mem[dstOst:dstOst+len-1] := msg.data[ost:ost+len-1]salin data pesan
38CODESIZE2.len(this.code)panjang kode kontrak yang dieksekusi, dalam bita
39CODECOPYA3 (buka di tab baru)dstOst, ost, len.mem[dstOst:dstOst+len-1] := this.code[ost:ost+len-1]
3AGASPRICE2.tx.gaspriceharga gas transaksi, dalam Wei per unit gas ** (buka di tab baru)
3BEXTCODESIZEA5 (buka di tab baru)addrlen(addr.code)ukuran kode pada alamat, dalam bita
3CEXTCODECOPYA4 (buka di tab baru)addr, dstOst, ost, len.mem[dstOst:dstOst+len-1] := addr.code[ost:ost+len-1]salin kode dari addr
3DRETURNDATASIZE2.sizeukuran data yang dikembalikan dari panggilan eksternal terakhir, dalam bita
3ERETURNDATACOPYA3 (buka di tab baru)dstOst, ost, len.mem[dstOst:dstOst+len-1] := returndata[ost:ost+len-1]salin data yang dikembalikan dari panggilan eksternal terakhir
3FEXTCODEHASHA5 (buka di tab baru)addrhashhash = addr.exists ? keccak256(addr.code) : 0
40BLOCKHASH20blockNumblockHash(blockNum)
41COINBASE2.block.coinbasealamat pengusul blok saat ini
42TIMESTAMP2.block.timestampstempel waktu blok saat ini
43NUMBER2.block.numbernomor blok saat ini
44PREVRANDAO2.randomness beaconsuar keacakan (randomness beacon)
45GASLIMIT2.block.gaslimitbatas gas blok saat ini
46CHAINID2.chain_iddorong ID rantai (buka di tab baru) saat ini ke stack
47SELFBALANCE5.address(this).balancesaldo kontrak yang dieksekusi, dalam Wei
48BASEFEE2.block.basefeebiaya dasar blok saat ini
49BLOBHASH3idxtx.blob_versioned_hashes[idx]EIP-4844 (buka di tab baru)
4ABLOBBASEFEE2.block.blobbasefeebiaya dasar blob blok saat ini (EIP-7516 (buka di tab baru))
4B-4Ftidak valid
50POP2_anon.hapus item dari atas stack dan buang
51MLOAD3* (buka di tab baru)ostmem[ost:ost+32]baca kata (word) dari memori pada offset ost
52MSTORE3* (buka di tab baru)ost, val.mem[ost:ost+32] := valtulis sebuah kata (word) ke memori
53MSTORE83* (buka di tab baru)ost, val.mem[ost] := val && 0xFFtulis satu bita ke memori
54SLOADA6 (buka di tab baru)keystorage[key]baca kata (word) dari penyimpanan
55SSTOREA7 (buka di tab baru)key, val.storage[key] := valtulis kata (word) ke penyimpanan
56JUMP8dst.$pc := dst tandai 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
5BJUMPDEST1tandai tujuan lompatan yang validtujuan lompatan yang valid misalnya tujuan lompatan yang tidak berada di dalam data push
5CTLOAD100keytstorage[key]baca kata (word) dari penyimpanan sementara (EIP-1153 (buka di tab baru))
5DTSTORE100key, val.tstorage[key] := valtulis kata (word) ke penyimpanan sementara (EIP-1153 (buka di tab baru))
5EMCOPY3+3*words+A0 (buka di tab baru)dstOst, ost, len.mem[dstOst] := mem[ost:ost+len]salin memori dari satu area ke area lain (EIP-5656 (buka di tab baru))
5FPUSH02.uint8dorong nilai konstan 0 ke stack
60PUSH13.uint8dorong nilai 1-bita ke stack
61PUSH23.uint16dorong nilai 2-bita ke stack
62PUSH33.uint24dorong nilai 3-bita ke stack
63PUSH43.uint32dorong nilai 4-bita ke stack
64PUSH53.uint40dorong nilai 5-bita ke stack
65PUSH63.uint48dorong nilai 6-bita ke stack
66PUSH73.uint56dorong nilai 7-bita ke stack
67PUSH83.uint64dorong nilai 8-bita ke stack
68PUSH93.uint72dorong nilai 9-bita ke stack
69PUSH103.uint80dorong nilai 10-bita ke stack
6APUSH113.uint88dorong nilai 11-bita ke stack
6BPUSH123.uint96dorong nilai 12-bita ke stack
6CPUSH133.uint104dorong nilai 13-bita ke stack
6DPUSH143.uint112dorong nilai 14-bita ke stack
6EPUSH153.uint120dorong nilai 15-bita ke stack
6FPUSH163.uint128dorong nilai 16-bita ke stack
70PUSH173.uint136dorong nilai 17-bita ke stack
71PUSH183.uint144dorong nilai 18-bita ke stack
72PUSH193.uint152dorong nilai 19-bita ke stack
73PUSH203.uint160dorong nilai 20-bita ke stack
74PUSH213.uint168dorong nilai 21-bita ke stack
75PUSH223.uint176dorong nilai 22-bita ke stack
76PUSH233.uint184dorong nilai 23-bita ke stack
77PUSH243.uint192dorong nilai 24-bita ke stack
78PUSH253.uint200dorong nilai 25-bita ke stack
79PUSH263.uint208dorong nilai 26-bita ke stack
7APUSH273.uint216dorong nilai 27-bita ke stack
7BPUSH283.uint224dorong nilai 28-bita ke stack
7CPUSH293.uint232dorong nilai 29-bita ke stack
7DPUSH303.uint240dorong nilai 30-bita ke stack
7EPUSH313.uint248dorong nilai 31-bita ke stack
7FPUSH323.uint256dorong nilai 32-bita ke stack
80DUP13aa, akloning nilai ke-1 di stack
81DUP23_, aa, _, akloning nilai ke-2 di stack
82DUP33_, _, aa, _, _, akloning nilai ke-3 di stack
83DUP43_, _, _, aa, _, _, _, akloning nilai ke-4 di stack
84DUP53..., aa, ..., akloning nilai ke-5 di stack
85DUP63..., aa, ..., akloning nilai ke-6 di stack
86DUP73..., aa, ..., akloning nilai ke-7 di stack
87DUP83..., aa, ..., akloning nilai ke-8 di stack
88DUP93..., aa, ..., akloning nilai ke-9 di stack
89DUP103..., aa, ..., akloning nilai ke-10 di stack
8ADUP113..., aa, ..., akloning nilai ke-11 di stack
8BDUP123..., aa, ..., akloning nilai ke-12 di stack
8CDUP133..., aa, ..., akloning nilai ke-13 di stack
8DDUP143..., aa, ..., akloning nilai ke-14 di stack
8EDUP153..., aa, ..., akloning nilai ke-15 di stack
8FDUP163..., aa, ..., akloning 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 (buka di tab baru)ost, len.LOG0(memory[ost:ost+len-1])
A1LOG1A8 (buka di tab baru)ost, len, topic0.LOG1(memory[ost:ost+len-1], topic0)
A2LOG2A8 (buka di tab baru)ost, len, topic0, topic1.LOG2(memory[ost:ost+len-1], topic0, topic1)
A3LOG3A8 (buka di tab baru)ost, len, topic0, topic1, topic2.LOG3(memory[ost:ost+len-1], topic0, topic1, topic2)
A4LOG4A8 (buka di tab baru)ost, len, topic0, topic1, topic2, topic3.LOG4(memory[ost:ost+len-1], topic0, topic1, topic2, topic3)
A5-EFtidak valid
F0CREATEA9 (buka di tab baru)val, ost, lenaddraddr = keccak256(rlp([address(this), this.nonce]))
F1CALLAA (buka di tab baru)gas, addr, val, argOst, argLen, retOst, retLensuccessmem[retOst:retOst+retLen-1] := returndata
F2CALLCODEAA (buka di tab baru)gas, addr, val, argOst, argLen, retOst, retLensuccessmem[retOst:retOst+retLen-1] = returndatasama seperti DELEGATECALL, tetapi tidak menyebarkan msg.sender dan msg.value asli
F3RETURN0* (buka di tab baru)ost, len.return mem[ost:ost+len-1]
F4DELEGATECALLAA (buka di tab baru)gas, addr, argOst, argLen, retOst, retLensuccessmem[retOst:retOst+retLen-1] := returndata
F5CREATE2A9 (buka di tab baru)val, ost, len, saltaddraddr = keccak256(0xff ++ address(this) ++ salt ++ keccak256(mem[ost:ost+len-1]))[12:]
F6-F9tidak valid
FASTATICCALLAA (buka di tab baru)gas, addr, argOst, argLen, retOst, retLensuccessmem[retOst:retOst+retLen-1] := returndata
FB-FCtidak valid
FDREVERT0* (buka di tab baru)ost, len.revert(mem[ost:ost+len-1])
FEINVALIDAF (buka di tab baru)opcode tidak valid yang ditetapkan - EIP-141 (buka di tab baru)
FFSELFDESTRUCTAB (buka di tab baru)addr.mengirimkan semua ETH ke addr; jika dieksekusi dalam transaksi yang sama saat kontrak dibuat, ini akan menghancurkan kontrak tersebut