EVM 操作码和指令
作者:
雪落无留痕 | 来源:发表于
2022-03-23 15:43 被阅读0次
Opcode |
Name |
Description |
Extra Info |
Gas |
0x00 |
STOP |
中断执行 |
- |
0 |
0x01 |
ADD |
加法操作 |
- |
3 |
0x02 |
MUL |
乘法操作 |
- |
5 |
0x03 |
SUB |
减法操作 |
- |
3 |
0x04 |
DIV |
整数除法操作 |
- |
5 |
0x05 |
SDIV |
带符号除法操作 |
- |
5 |
0x06 |
MOD |
模余操作 |
- |
5 |
0x07 |
SMOD |
带符号模余操作 |
- |
5 |
0x08 |
ADDMOD |
模加法操作 |
- |
8 |
0x09 |
MULMOD |
模乘法操作 |
- |
8 |
0x0a |
EXP |
幂操作 |
- |
10* |
0x0b |
SIGNEXTEND |
|
- |
5 |
0x0c - 0x0f
|
Unused |
Unused |
- |
|
0x10 |
LT |
小于比较 |
- |
3 |
0x11 |
GT |
大于比较 |
- |
3 |
0x12 |
SLT |
带符号的小于比较 |
- |
3 |
0x13 |
SGT |
带符号的大小比较 |
- |
3 |
0x14 |
EQ |
相等比较 |
- |
3 |
0x15 |
ISZERO |
NOT 操作 |
- |
3 |
0x16 |
AND |
按位且操作 |
- |
3 |
0x17 |
OR |
按位或操作 |
- |
3 |
0x18 |
XOR |
按位异或操作 |
- |
3 |
0x19 |
NOT |
按位非操作 |
- |
3 |
0x1a |
BYTE |
从字中获取单个字节 |
- |
3 |
0x1b |
SHL |
左移 |
EIP145 |
3 |
0x1c |
SHR |
逻辑右移 |
EIP145 |
3 |
0x1d |
SAR |
数值右移 |
EIP145 |
3 |
0x20 |
KECCAK256 |
计算Keccak-256 hash |
- |
30* |
0x21-0x2f |
Unused |
Unused |
|
|
0x30 |
ADDRESS |
获取目前执行账户的地址 |
- |
2 |
0x31 |
BALANCE |
获取账户余额 |
- |
|
0x32 |
ORIGIN |
获取执行源地址 |
- |
2 |
0x33 |
CALLER |
获取调用者地址 |
- |
2 |
0x34 |
CALLVALUE |
获取存款金额 |
- |
2 |
0x35 |
CALLDATALOAD |
获取目前环境的输入数据 |
- |
3 |
0x36 |
CALLDATASIZE |
获取目前环境输入数据大小 |
- |
2* |
0x37 |
CALLDATACOPY |
复制输入数据到内存中 |
- |
3* |
0x38 |
CODESIZE |
获取代码大小 |
- |
2 |
0x39 |
CODECOPY |
复制代码到内存中 |
- |
3* |
0x3a |
GASPRICE |
获取gas的价格 |
- |
2 |
0x3b |
EXTCODESIZE |
获取账户代码 |
- |
700 |
0x3c |
EXTCODECOPY |
复制账户代码到内存中 |
- |
700* |
0x3d |
RETURNDATASIZE |
将返回数据大小推到栈上 |
EIP 211 |
2 |
0x3e |
RETURNDATACOPY |
复到返回数据到内存中 |
EIP 211 |
3 |
0x3f |
EXTCODEHASH |
返回合约代码keccak256 hash |
EIP 1052 |
700 |
0x40 |
BLOCKHASH |
获取最近256个块的其中一个hash |
- |
20 |
0x41 |
COINBASE |
获取块的收益地址 |
- |
2 |
0x42 |
TIMESTAMP |
获取块的时间戳 |
- |
2 |
0x43 |
NUMBER |
获取块号 |
- |
2 |
0x44 |
DIFFICULTY |
获取块的难度值 |
- |
2 |
0x45 |
GASLIMIT |
获取块的gaslimit |
- |
2 |
0x46 |
CHAINID |
返加链的惟一识别符 |
EIP 1344 |
2 |
0x47-0x4f |
Unused |
- |
|
|
0x48 |
BASEFEE |
返回当前块的基本fee |
EIP 3198 |
2 |
0x50 |
POP |
从栈中移除 |
- |
2 |
0x51 |
MLOAD |
从内存中载入一个字 |
- |
3* |
0x52 |
MSTORE |
保存字到内存中 |
- |
3* |
0x53 |
MSTORE8 |
保存字节到内存中 |
- |
3 |
0x54 |
SLOAD |
从存储中载入字 |
- |
800 |
0x55 |
SSTORE |
将字存入存储中 |
- |
20000* |
0x56 |
JUMP |
更改程序计数器 |
- |
8 |
0x57 |
JUMPI |
有条件地更改程序计数器 |
- |
10 |
0x58 |
GETPC |
获取程序计算器的值 |
- |
2 |
0x59 |
MSIZE |
获取活跃内存中字节的大小 |
- |
2 |
0x5a |
GAS |
获得可获取的gas |
- |
2 |
0x5b |
JUMPDEST |
标记一个有效的JUMP 目标 |
- |
1 |
0x5c-0x5f |
Unused |
- |
|
|
0x60 |
PUSH1 |
在栈上摆1个字节 |
- |
3 |
0x61 |
PUSH2 |
在栈上摆2个字节 |
- |
3 |
0x62 |
PUSH3 |
在栈上摆3个字节 |
- |
3 |
0x63 |
PUSH4 |
在栈上摆4个字节 |
- |
3 |
0x64 |
PUSH5 |
在栈上摆5个字节 |
- |
3 |
0x65 |
PUSH6 |
在栈上摆6个字节 |
- |
3 |
0x66 |
PUSH7 |
在栈上摆7个字节 |
- |
3 |
0x67 |
PUSH8 |
在栈上摆8个字节 |
- |
3 |
0x68 |
PUSH9 |
在栈上摆9个字节 |
- |
3 |
0x69 |
PUSH10 |
在栈上摆10个字节 |
- |
3 |
0x6a |
PUSH11 |
在栈上摆11个字节 |
- |
3 |
0x6b |
PUSH12 |
在栈上摆12个字节 |
- |
3 |
0x6c |
PUSH13 |
在栈上摆13个字节 |
- |
3 |
0x6d |
PUSH14 |
在栈上摆14个字节 |
- |
3 |
0x6e |
PUSH15 |
在栈上摆15个字节 |
- |
3 |
0x6f |
PUSH16 |
在栈上摆16个字节 |
- |
3 |
0x70 |
PUSH17 |
在栈上摆17个字节 |
- |
3 |
0x71 |
PUSH18 |
在栈上摆18个字节 |
- |
3 |
0x72 |
PUSH19 |
在栈上摆19个字节 |
- |
3 |
0x73 |
PUSH20 |
在栈上摆20个字节 |
- |
3 |
0x74 |
PUSH21 |
在栈上摆21个字节 |
- |
3 |
0x75 |
PUSH22 |
在栈上摆22个字节 |
- |
3 |
0x76 |
PUSH23 |
在栈上摆23个字节 |
- |
3 |
0x77 |
PUSH24 |
在栈上摆24个字节 |
- |
3 |
0x78 |
PUSH25 |
在栈上摆25个字节 |
- |
3 |
0x79 |
PUSH26 |
在栈上摆26个字节 |
- |
3 |
0x7a |
PUSH27 |
在栈上摆27个字节 |
- |
3 |
0x7b |
PUSH28 |
在栈上摆28个字节 |
- |
3 |
0x7c |
PUSH29 |
在栈上摆29个字节 |
- |
3 |
0x7d |
PUSH30 |
在栈上摆30个字节 |
- |
3 |
0x7e |
PUSH31 |
在栈上摆31个字节 |
- |
3 |
0x7f |
PUSH32 |
在栈上摆32个字节 |
- |
3 |
0x80 |
DUP1 |
复制栈上第1个字节 |
- |
3 |
0x81 |
DUP2 |
复制栈上第2个字节 |
- |
3 |
0x82 |
DUP3 |
复制栈上第3个字节 |
- |
3 |
0x83 |
DUP4 |
复制栈上第4个字节 |
- |
3 |
0x84 |
DUP5 |
复制栈上第5个字节 |
- |
3 |
0x85 |
DUP6 |
复制栈上第6个字节 |
- |
3 |
0x86 |
DUP7 |
复制栈上第7个字节 |
- |
3 |
0x87 |
DUP8 |
复制栈上第8个字节 |
- |
3 |
0x88 |
DUP9 |
复制栈上第9个字节 |
- |
3 |
0x89 |
DUP10 |
复制栈上第10个字节 |
- |
3 |
0x8a |
DUP11 |
复制栈上第11个字节 |
- |
3 |
0x8b |
DUP12 |
复制栈上第12个字节 |
- |
3 |
0x8c |
DUP13 |
复制栈上第13个字节 |
- |
3 |
0x8d |
DUP14 |
复制栈上第14个字节 |
- |
3 |
0x8e |
DUP15 |
复制栈上第15个字节 |
- |
3 |
0x8f |
DUP16 |
复制栈上第16个字节 |
- |
3 |
0x90 |
SWAP1 |
互换第 1 个和第 2 个 元素 |
- |
3 |
0x91 |
SWAP2 |
互换第 1 个和第 3 个 元素 |
- |
3 |
0x92 |
SWAP3 |
互换第 1 个和第 4 个 元素 |
- |
3 |
0x93 |
SWAP4 |
互换第 1 个和第 5 个 元素 |
- |
3 |
0x94 |
SWAP5 |
互换第 1 个和第 6 个 元素 |
- |
3 |
0x95 |
SWAP6 |
互换第 1 个和第 7 个 元素 |
- |
3 |
0x96 |
SWAP7 |
互换第 1 个和第 8 个 元素 |
- |
3 |
0x97 |
SWAP8 |
互换第 1 个和第 9 个 元素 |
- |
3 |
0x98 |
SWAP9 |
互换第 1 个和第 10 个 元素 |
- |
3 |
0x99 |
SWAP10 |
互换第 1 个和第 11 个 元素 |
- |
3 |
0x9a |
SWAP11 |
互换第 1 个和第 12 个 元素 |
- |
3 |
0x9b |
SWAP12 |
互换第 1 个和第 13 个 元素 |
- |
3 |
0x9c |
SWAP13 |
互换第 1 个和第 14 个 元素 |
- |
3 |
0x9d |
SWAP14 |
互换第 1 个和第 15 个 元素 |
- |
3 |
0x9e |
SWAP15 |
互换第 1 个和第 16 个 元素 |
- |
3 |
0x9f |
SWAP16 |
互换第 1 个和第 17 个 元素 |
- |
3 |
0xa0 |
LOG0 |
添加log记录,无topics |
- |
375 |
0xa1 |
LOG1 |
添加log记录,1个topics |
- |
750 |
0xa2 |
LOG2 |
添加log记录,2个topics |
- |
1125 |
0xa3 |
LOG3 |
添加log记录,3个topics |
- |
1500 |
0xa4 |
LOG4 |
添加log记录,4个topics |
- |
1875 |
0xa5-0xaf |
Unused |
- |
|
|
0xb0 |
JUMPTO |
Tentative |
EIP 615 |
|
0xb1 |
JUMPIF |
Tentative |
EIP 615 |
|
0xb2 |
JUMPSUB |
Tentative |
EIP 615 |
|
0xb4 |
JUMPSUBV |
Tentative |
EIP 615 |
|
0xb5 |
BEGINSUB |
Tentative |
EIP 615 |
|
0xb6 |
BEGINDATA |
Tentative |
EIP 615 |
|
0xb8 |
RETURNSUB |
Tentative |
EIP 615 |
|
0xb9 |
PUTLOCAL |
Tentative |
EIP 615 |
|
0xba |
GETLOCAL |
Tentative |
EIP 615 |
|
0xbb-0xe0 |
Unused |
- |
|
|
0xe1 |
SLOADBYTES |
Only referenced in pyethereum |
- |
- |
0xe2 |
SSTOREBYTES |
Only referenced in pyethereum |
- |
- |
0xe3 |
SSIZE |
Only referenced in pyethereum |
- |
- |
0xe4-0xef |
Unused |
- |
|
|
0xf0 |
CREATE |
创建一个新的账户和相关的代码 |
- |
32000 |
0xf1 |
CALL |
对账户消息调用 |
- |
Complicated |
0xf2 |
CALLCODE |
对账户代码的消息调用 |
- |
Complicated |
0xf3 |
RETURN |
中断执行,返回输出数据 |
- |
0 |
0xf4 |
DELEGATECALL |
代理调用账户的代码 |
|
Complicated |
0xf5 |
CREATE2 |
sha3(sender + sha3(init code)) % 2**160 |
- |
|
0xf6-0xf9 |
Ununsed |
- |
- |
|
0xfa |
STATICCALL |
类似CALL,但不修改状态 |
- |
40 |
0xfb |
Unused |
- |
- |
|
0xfc |
TXEXECGAS |
|
- |
- |
0xfd |
REVERT |
停止执行,撤销状态的改变 |
- |
0 |
0xfe |
INVALID |
指令的无效的指令 |
- |
0 |
0xff |
SELFDESTRUCT |
中断执行 |
- |
5000* |
参考
https://github.com/crytic/evm-opcodes
本文标题:EVM 操作码和指令
本文链接:https://www.haomeiwen.com/subject/pdtljrtx.html
网友评论