EVM 操作码和指令

2022-03-23  本文已影响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

上一篇 下一篇

猜你喜欢

热点阅读