Nhảy đến nội dung chính
Change page

Mã lệnh cho EVM

Lần cập nhật trang lần cuối: 11 tháng 9, 2025

Tổng quan

Đây là phiên bản cập nhật của trang tham khảo EVM tại wolflo/evm-opcodes (opens in a new tab). Cũng được lấy từ Sách Vàng (opens in a new tab), Sách Jello (opens in a new tab), và bản triển khai geth (opens in a new tab). Điều này được tạo ra với mục đích trở thành một tài liệu tham khảo dễ tiếp cận, nhưng nó không quá chặt chẽ. Nếu bạn muốn đảm bảo tính chính xác và hiểu rõ mọi trường hợp đặc biệt, thì nên tham khảo sách Jello hoặc trực tiếp xem cách Client được triển khai.

Bạn đang tìm một bản tham khảo có tương tác? Xem tại evm.codes (opens in a new tab).

Về các hoạt động với chi phí gas động, xem gas.md (opens in a new tab).

💡 Mẹo nhanh: Để xem toàn bộ các dòng, hãy sử dụng [shift] + scroll để cuộn ngang trên máy tính.

StackHọ tênGasStack ban đầuKết quả StackBộ nhớ/ lưu trữLưu ý
00STOP0dừng thực thi
01ADD3a, ba + bphép cộng (u)int256 modulo 2**256
02MUL5a, ba * bphép nhân (u)int256 modulo 2**256
03SUB3a, ba - bphép trừ (u)int256 modulo 2**256
04DIV5a, ba // bphép chia uint256
05SDIV5a, ba // bphép chia int256
06MOD5a, ba % buint256 modulo
07SMOD5a, ba % bint256 modulo
08ADDMOD8a, b, N(a + b) % Nphép cộng (u)int256 modulo N
09MULMOD8a, b, N(a * b) % Nphép nhân (u)int256 modulo N
0AEXPA1 (opens in a new tab)a, ba ** bphép lũy thừa uint256 modulo 2**256
0BSIGNEXTEND5b, xSIGNEXTEND(x, b)mở rộng dấu (opens in a new tab) x từ (b+1) byte lên 32 byte
0C-0Fkhông hợp lệ
10LT3a, ba < buint256 nhỏ hơn
11GT3a, ba > buint256 lớn hơn
12SLT3a, ba < bint256 nhỏ hơn
13SGT3a, ba > bint256 lớn hơn
14EQ3a, ba == b(u)int256 bằng nhau
15ISZERO3aa == 0(u)int256 bằng không
16AND3a, ba && bphép AND bit
17OR3a, b`a \\b`
18XOR3a, ba ^ bphép XOR bit
19NOT3a~aphép NOT bit
1ABYTE3i, x(x >> (248 - i * 8)) && 0xFFbyte thứ i của (u)int256 x, từ bên trái
1BSHL3shift, valval << shiftdịch trái
1CSHR3shift, valval >> shiftdịch phải logic
1DDUP53shift, valval >> shiftdịch phải số học
1E-1Fkhông hợp lệ
20KECCAK256A2 (opens in a new tab)ost, lenkeccak256(mem[ost:ost+len-1])keccak256
21-2Fkhông hợp lệ
30ADDRESS2.address(this)địa chỉ của hợp đồng đang thực thi
31BALANCEA5 (opens in a new tab)addraddr.balancesố dư, tính bằng wei
32ORIGIN2.tx.originđịa chỉ đã khởi tạo tx
33CALLER2.msg.senderđịa chỉ của người gửi msg
34CALLVALUE2.msg.valuegiá trị msg, tính bằng wei
35CALLDATALOAD3idxmsg.data[idx:idx+32]đọc một từ từ dữ liệu msg tại chỉ mục idx
36CALLDATASIZE2.len(msg.data)độ dài dữ liệu msg, tính bằng byte
37CALLDATACOPYA3 (opens in a new tab)dstOst, ost, len.mem[dstOst:dstOst+len-1] := msg.data[ost:ost+len-1]sao chép dữ liệu msg
38CODESIZE2.len(this.code)độ dài mã của hợp đồng đang thực thi, tính bằng byte
39CODECOPYA3 (opens in a new tab)dstOst, ost, len.mem[dstOst:dstOst+len-1] := this.code[ost:ost+len-1]sao chép chỉ thị biên dịch của hợp đồng đang thực thi
3AGASPRICE2.tx.gaspricegiá gas của tx, tính bằng wei trên mỗi đơn vị gas ** (opens in a new tab)
3BEXTCODESIZEA5 (opens in a new tab)addrlen(addr.code)kích thước mã tại addr, tính bằng byte
3CEXTCODECOPYA4 (opens in a new tab)addr, dstOst, ost, len.mem[dstOst:dstOst+len-1] := addr.code[ost:ost+len-1]sao chép mã từ addr
3DRETURNDATASIZE2.sizekích thước dữ liệu trả về từ lệnh gọi bên ngoài cuối cùng, tính bằng byte
3ERETURNDATACOPYA3 (opens in a new tab)dstOst, ost, len.mem[dstOst:dstOst+len-1] := returndata[ost:ost+len-1]sao chép dữ liệu trả về từ lệnh gọi bên ngoài cuối cùng
3FEXTCODEHASHA5 (opens in a new tab)addrhashhash = addr.exists ? keccak256(addr.code) : 0
40BLOCKHASH20blockNumblockHash(blockNum)
41COINBASE2.block.coinbaseđịa chỉ của người đề xuất khối hiện tại
42TIMESTAMP2.block.timestampdấu thời gian của khối hiện tại
43NUMBER2.block.numbersố của khối hiện tại
44PREVRANDAO2.randomness beaconmốc báo hiệu ngẫu nhiên
45GASLIMIT2.block.gaslimitgiới hạn gas của khối hiện tại
46CHAINID2.chain_idđẩy ID chuỗi (opens in a new tab) hiện tại vào ngăn xếp
47SELFBALANCE5.address(this).balancesố dư của hợp đồng đang thực thi, tính bằng wei
48BASEFEE2.block.basefeephí cơ bản của khối hiện tại
49BLOBHASH3idxtx.blob_versioned_hashes[idx]EIP-4844 (opens in a new tab)
4ABLOBBASEFEE2.block.blobbasefeephí cơ bản của blob của khối hiện tại (EIP-7516 (opens in a new tab))
4B-4Fkhông hợp lệ
50POP2_anon.xóa mục khỏi đầu ngăn xếp và loại bỏ nó
51MLOAD3* (opens in a new tab)ostmem[ost:ost+32]đọc một từ từ bộ nhớ tại độ lệch ost
52MSTORE3* (opens in a new tab)ost, val.mem[ost:ost+32] := valghi một từ vào bộ nhớ
53MSTORE83* (opens in a new tab)ost, val.mem[ost] := val && 0xFFghi một byte vào bộ nhớ
54SLOADA6 (opens in a new tab)keystorage[key]đọc một từ từ bộ nhớ lưu trữ
55SSTOREA7 (opens in a new tab)key, val.storage[key] := valghi một từ vào bộ nhớ lưu trữ
56JUMP8dst.$pc := dst đánh dấu rằng pc chỉ được gán nếu dst là một jumpdest hợp lệ
57JUMPI10dst, condition.$pc := condition ? dst : $pc + 1`
58PC2.$pcbộ đếm chương trình
59MSIZE2.len(mem)kích thước bộ nhớ trong ngữ cảnh thực thi hiện tại, tính bằng byte
5AGAS2.gasRemaining
5BJUMPDEST1đánh dấu đích nhảy hợp lệmột đích nhảy hợp lệ, ví dụ một đích nhảy không nằm trong dữ liệu đẩy
5CTLOAD100keytstorage[key]đọc một từ từ lưu trữ tạm thời (EIP-1153 (opens in a new tab))
5DTSTORE100key, val.tstorage[key] := valghi một từ vào lưu trữ tạm thời (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]sao chép bộ nhớ từ vùng này sang vùng khác (EIP-5656 (opens in a new tab))
5FPUSH02.uint8đẩy giá trị hằng số 0 vào ngăn xếp
60PUSH13.uint8đẩy giá trị 1-byte vào ngăn xếp
61PUSH23.uint16đẩy giá trị 2-byte vào ngăn xếp
62PUSH33.uint24đẩy giá trị 3-byte vào ngăn xếp
63PUSH43.uint32đẩy giá trị 4-byte vào ngăn xếp
64PUSH53.uint40đẩy giá trị 5-byte vào ngăn xếp
65PUSH63.uint48đẩy giá trị 6-byte vào ngăn xếp
66PUSH73.uint56đẩy giá trị 7-byte vào ngăn xếp
67PUSH83.uint64đẩy giá trị 8-byte vào ngăn xếp
68PUSH93.uint72đẩy giá trị 9-byte vào ngăn xếp
69PUSH103.uint80đẩy giá trị 10-byte vào ngăn xếp
6APUSH113.uint88đẩy giá trị 11-byte vào ngăn xếp
6BPUSH123.uint96đẩy giá trị 12-byte vào ngăn xếp
6CPUSH133.uint104đẩy giá trị 13-byte vào ngăn xếp
6DPUSH143.uint112đẩy giá trị 14-byte vào ngăn xếp
6EPUSH153.uint120đẩy giá trị 15-byte vào ngăn xếp
6FPUSH163.uint128đẩy giá trị 16-byte vào ngăn xếp
70PUSH173.uint136đẩy giá trị 17-byte vào ngăn xếp
71PUSH183.uint144đẩy giá trị 18-byte vào ngăn xếp
72PUSH193.uint152đẩy giá trị 19-byte vào ngăn xếp
73PUSH203.uint160đẩy giá trị 20-byte vào ngăn xếp
74PUSH213.uint168đẩy giá trị 21-byte vào ngăn xếp
75PUSH223.uint176đẩy giá trị 22-byte vào ngăn xếp
76PUSH233.uint184đẩy giá trị 23-byte vào ngăn xếp
77PUSH243.uint192đẩy giá trị 24-byte vào ngăn xếp
78PUSH253.uint200đẩy giá trị 25-byte vào ngăn xếp
79PUSH263.uint208đẩy giá trị 26-byte vào ngăn xếp
7APUSH273.uint216đẩy giá trị 27-byte vào ngăn xếp
7BPUSH283.uint224đẩy giá trị 28-byte vào ngăn xếp
7CPUSH293.uint232đẩy giá trị 29-byte vào ngăn xếp
7DPUSH303.uint240đẩy giá trị 30-byte vào ngăn xếp
7EPUSH313.uint248đẩy giá trị 31-byte vào ngăn xếp
7FPUSH323.uint256đẩy giá trị 32-byte vào ngăn xếp
80DUP13aa, asao chép giá trị thứ 1 trên ngăn xếp
81DUP23_, aa, _, asao chép giá trị thứ 2 trên ngăn xếp
82DUP33_, _, aa, _, _, asao chép giá trị thứ 3 trên ngăn xếp
83DUP43_, _, _, aa, _, _, _, asao chép giá trị thứ 4 trên ngăn xếp
84DUP53..., aa, ..., asao chép giá trị thứ 5 trên ngăn xếp
85DUP63..., aa, ..., asao chép giá trị thứ 6 trên ngăn xếp
86DUP73..., aa, ..., asao chép giá trị thứ 7 trên ngăn xếp
87DUP83..., aa, ..., asao chép giá trị thứ 8 trên ngăn xếp
88DUP93..., aa, ..., asao chép giá trị thứ 9 trên ngăn xếp
89DUP103..., aa, ..., asao chép giá trị thứ 10 trên ngăn xếp
8ADUP113..., aa, ..., asao chép giá trị thứ 11 trên ngăn xếp
8BDUP123..., aa, ..., asao chép giá trị thứ 12 trên ngăn xếp
8CDUP133..., aa, ..., asao chép giá trị thứ 13 trên ngăn xếp
8DDUP143..., aa, ..., asao chép giá trị thứ 14 trên ngăn xếp
8EDUP153..., aa, ..., asao chép giá trị thứ 15 trên ngăn xếp
8FDUP163..., aa, ..., asao chép giá trị thứ 16 trên ngăn xếp
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-EFkhông hợp lệ
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] = returndatagiống như DELEGATECALL, nhưng không truyền msg.sendermsg.value gốc
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-F9không hợp lệ
FASTATICCALLAA (opens in a new tab)gas, addr, argOst, argLen, retOst, retLensuccessmem[retOst:retOst+retLen-1] := returndata
FB-FCkhông hợp lệ
FDREVERT0* (opens in a new tab)ost, len.revert(mem[ost:ost+len-1])
FEINVALIDAF (opens in a new tab)opcode không hợp lệ được chỉ định - EIP-141 (opens in a new tab)
FFSELFDESTRUCTAB (opens in a new tab)addr.gửi tất cả ETH đến addr; nếu được thực thi trong cùng một giao dịch mà một hợp đồng được tạo thì nó sẽ phá hủy hợp đồng đó

Bài viết này hữu ích không?