Ethereum虚拟机具有大量的操作代码和基本的指令集。有完整的清单吗?
发布于 2016-01-20 20:54:31
所有的操作码及其完整的描述都可以在白花黄纸中获得。不过,为了方便起见,我列出了一个方便的参考列表:
0:停止和算术运算
0x00 STOP Halts execution
0x01 ADD Addition operation
0x02 MUL Multiplication operation
0x03 SUB Subtraction operation
0x04 DIV Integer division operation
0x05 SDIV Signed integer
0x06 MOD Modulo
0x07 SMOD Signed modulo
0x08 ADDMOD Modulo
0x09 MULMOD Modulo
0x0a EXP Exponential operation
0x0b SIGNEXTEND Extend length of two's complement signed integer10s:比较与位逻辑运算
0x10 LT Lesser-than comparison
0x11 GT Greater-than comparison
0x12 SLT Signed less-than comparison
0x13 SGT Signed greater-than comparison
0x14 EQ Equality comparison
0x15 ISZERO Simple not operator
0x16 AND Bitwise AND operation
0x17 OR Bitwise OR operation
0x18 XOR Bitwise XOR operation
0x19 NOT Bitwise NOT operation
0x1a BYTE Retrieve single byte from word20s: SHA3
0x20 SHA3 Compute Keccak-256 hash30年代:环境信息
0x30 ADDRESS Get address of currently executing account
0x31 BALANCE Get balance of the given account
0x32 ORIGIN Get execution origination address
0x33 CALLER Get caller address. This is the address of the account that is directly responsible for this execution
0x34 CALLVALUE Get deposited value by the instruction/transaction responsible for this execution
0x35 CALLDATALOAD Get input data of current environment
0x36 CALLDATASIZE Get size of input data in current environment
0x37 CALLDATACOPY Copy input data in current environment to memory This pertains to the input data passed with the message call instruction or transaction
0x38 CODESIZE Get size of code running in current environment
0x39 CODECOPY Copy code running in current environment to memory
0x3a GASPRICE Get price of gas in current environment
0x3b EXTCODESIZE Get size of an account's code
0x3c EXTCODECOPY Copy an account's code to memory40年代:块状信息
0x40 BLOCKHASH Get the hash of one of the 256 most recent complete blocks
0x41 COINBASE Get the block's beneficiary address
0x42 TIMESTAMP Get the block's timestamp
0x43 NUMBER Get the block's number
0x44 DIFFICULTY Get the block's difficulty
0x45 GASLIMIT Get the block's gas limit50栈、内存、存储和流操作
0x50 POP Remove item from stack
0x51 MLOAD Load word from memory
0x52 MSTORE Save word to memory
0x53 MSTORE8 Save byte to memory
0x54 SLOAD Load word from storage
0x55 SSTORE Save word to storage
0x56 JUMP Alter the program counter
0x57 JUMPI Conditionally alter the program counter
0x58 PC Get the value of the program counter prior to the increment
0x59 MSIZE Get the size of active memory in bytes
0x5a GAS Get the amount of available gas, including the corresponding reduction
0x5b JUMPDEST Mark a valid destination for jumps60&70年代:推送操作
0x60 PUSH1 Place 1 byte item on stack
0x61 PUSH2 Place 2-byte item on stack
…
0x7f PUSH32 Place 32-byte (full word) item on stack80年代:复制业务
0x80 DUP1 Duplicate 1st stack item
0x81 DUP2 Duplicate 2nd stack item
…
0x8f DUP16 Duplicate 16th stack item90年代:交换业务
0x90 SWAP1 Exchange 1st and 2nd stack items
0x91 SWAP2 Exchange 1st and 3rd stack items
… …
0x9f SWAP16 Exchange 1st and 17th stack itemsa0s:日志操作
0xa0 LOG0 Append log record with no topics
0xa1 LOG1 Append log record with one topic
… …
0xa4 LOG4 Append log record with four topicsf0s:系统操作
0xf0 CREATE Create a new account with associated code
0xf1 CALL Message-call into an account
0xf2 CALLCODE Message-call into this account with alternative account's code
0xf3 RETURN Halt execution returning output data
0xf4 DELEGATECALL Message-call into this account with an alternative account's code, but persisting the current values for `sender` and `value`
0xf5 CREATE2 Create a child contract with a deterministic address停止执行,标记以删除
0xff SELFDESTRUCT Halt execution and register account for later deletion发布于 2018-11-11 16:52:04
1) Ethan的答复参考了黄皮书中的正式操作码列表。它可能有点干燥,很难导航到新来的人。我最喜欢的列表是:https://github.com/djrtwo/evm-opcode-gas-costs。它很容易导航,它也包含操作代码的气体信息。
( 2)一些操作码可能在正式的YP列表中丢失。想到的一个例子是REVERT (0xFD)。我相信这个操作码是在大都会第一阶段(Byzantium)引入的,在YP中还没有提到。因此,您最好的参考将是实际的客户端实现,或稳健的实现。示例:https://github.com/ethereum/solidity/blob/develop/libevmasm/Instruction.h (以及.c )。但是,要小心客户端的实现,它们可能包含仍然是实验性的操作码。
发布于 2021-10-15 02:31:38
以下是一个最新的回购链接。列表通常在网络上的新升级/分叉之后更新:
https://ethereum.stackexchange.com/questions/119
复制相似问题