Document OpCode enums

This commit is contained in:
nicksavers 2014-09-14 17:00:47 +02:00
parent 1096431d54
commit 3542c6c35e
1 changed files with 171 additions and 31 deletions

View File

@ -1,173 +1,313 @@
package org.ethereum.vm;
import java.util.*;
import java.util.HashMap;
import java.util.Map;
/**
* Instruction set for the Ethereum Virtual Machine
* See Yellow Paper: http://www.gavwood.com/Paper.pdf
* - Appendix G. Virtual Machine Specification
*/
public enum OpCode {
/**
* Stop and Arithmetic Operations
*/
/** Halts execution (0x00) */
STOP(0x00),
/* Arithmetic Operations */
/** (0x01) Addition operation */
ADD(0x01),
/** (0x02) Multiplication operation */
MUL(0x02),
/** (0x03) Subtraction operations */
SUB(0x03),
/** (0x04) Integer division operation */
DIV(0x04),
/** (0x05) Signed integer division operation*/
SDIV(0x05),
/** (0x06) Modulo remainder operation */
MOD(0x06),
/** (0x07) Signed modulo remainder operation*/
SMOD(0x07),
/** (0x08) Exponential operation */
EXP(0x08),
/** (0x09) Negation operation */
NEG(0x09),
/** (0x0a) Less-than comparison */
LT(0X0a),
/** (0x0b) Greater-than comparison */
GT(0X0b),
/** (0x0c) Signed less-than comparison */
SLT(0X0c),
/** (0x0d) Signed greater-than comparison */
SGT(0X0d),
/** (0x0e) Equality comparison */
EQ(0X0e),
/** (0x0f) Simple not operator */
NOT(0X0f),
/**
* Bitwise Logic Operations
*/
/* Bitwise Logic Operations */
/** (0x10) Bitwise AND operation */
AND(0x10),
/** (0x11) Bitwise OR operation */
OR(0x11),
/** (0x12) Bitwise XOR operation */
XOR(0x12),
/** (0x13) Retrieve single byte from word */
BYTE(0x13),
/** (0x14) Addition combined with modulo
* remainder operation */
ADDMOD(0x14),
/** (0x15) Multiplication combined with modulo
* remainder operation */
MULMOD(0x15),
/**
* SHA3
*/
/* Cryptographic Operations */
/** (0x20) Compute SHA3-256 hash */
SHA3(0x20),
/**
* Environmental Information
*/
/* Environmental Information */
/** (0x30) Get address of currently
* executing account */
ADDRESS(0x30),
/** (0x31) Get balance of the given account */
BALANCE(0x31),
/** (0x32) Get execution origination address*/
ORIGIN(0x32),
/** (0x33) Get caller address */
CALLER(0x33),
/** (0x34) Get deposited value by the
* instruction/transaction responsible
* for this execution */
CALLVALUE(0x34),
/** (0x35) Get input data of current
* environment */
CALLDATALOAD(0x35),
/** (0x36) Get size of input data in current
* environment */
CALLDATASIZE(0x36),
/** (0x37) Copy input data in current
* environment to memory */
CALLDATACOPY(0x37),
/** (0x38) Get size of code running in
* current environment */
CODESIZE(0x38),
/** (0x39) Copy code running in current
* environment to memory */
CODECOPY(0x39), // [len code_start mem_start CODECOPY]
/** (0x3a) Get price of gas in current
* environment */
GASPRICE(0x3a),
/** (0x3b) Copy code running in current
* environment to memory with given offset */
EXTCODECOPY(0x3b),
/** (0x3c) Get size of code running in
* current environment with given offset */
EXTCODESIZE(0x3c),
/**
* Block Information
*/
/* Block Information */
/** (0x40) Get hash of most recent
* complete block */
PREVHASH(0x40),
/** (0x41) Get the blocks coinbase address */
COINBASE(0x41),
/** (x042) Get the blocks timestamp */
TIMESTAMP(0x42),
/** (0x43) Get the blocks number */
NUMBER(0x43),
/** (0x44) Get the blocks difficulty */
DIFFICULTY(0x44),
/** (0x45) Get the blocks gas limit */
GASLIMIT(0x45),
/**
* Memory, Storage and Flow Operations
*/
/* Memory, Storage and Flow Operations */
/** (0x50) Remove item from stack */
POP(0x50),
/** (0x53) Load word from memory */
MLOAD(0x53),
/** (0x54) Save word to memory */
MSTORE(0x54),
/** (0x55) Save byte to memory */
MSTORE8(0x55),
/** (0x56) Load word from storage */
SLOAD(0x56),
/** (0x57) Save word to storage */
SSTORE(0x57),
/** (0x58) Alter the program counter */
JUMP(0x58),
/** (0x59) Conditionally alter the program
* counter */
JUMPI(0x59),
/** (0x5a) Get the program counter */
PC(0x5a),
/** (0x5b) Get the size of active memory */
MSIZE(0x5b),
/** (0x5c) Get the amount of available gas */
GAS(0x5c),
/**
* Push Operations
*/
/* Push Operations */
/** (0x60) Place 1-byte item on stack */
PUSH1(0x60),
/** (0x61) Place 2-byte item on stack */
PUSH2(0x61),
/** (0x62) Place 3-byte item on stack */
PUSH3(0x62),
/** (0x63) Place 4-byte item on stack */
PUSH4(0x63),
/** (0x64) Place 5-byte item on stack */
PUSH5(0x64),
/** (0x65) Place 6-byte item on stack */
PUSH6(0x65),
/** (0x66) Place 7-byte item on stack */
PUSH7(0x66),
/** (0x67) Place 8-byte item on stack */
PUSH8(0x67),
/** (0x68) Place 9-byte item on stack */
PUSH9(0x68),
/** (0x69) Place 10-byte item on stack */
PUSH10(0x69),
/** (0x6a) Place 11-byte item on stack */
PUSH11(0x6a),
/** (0x6b) Place 12-byte item on stack */
PUSH12(0x6b),
/** (0x6c) Place 13-byte item on stack */
PUSH13(0x6c),
/** (0x6d) Place 14-byte item on stack */
PUSH14(0x6d),
/** (0x6e) Place 15-byte item on stack */
PUSH15(0x6e),
/** (0x6f) Place 16-byte item on stack */
PUSH16(0x6f),
/** (0x70) Place 17-byte item on stack */
PUSH17(0x70),
/** (0x71) Place 18-byte item on stack */
PUSH18(0x71),
/** (0x72) Place 19-byte item on stack */
PUSH19(0x72),
/** (0x73) Place 20-byte item on stack */
PUSH20(0x73),
/** (0x74) Place 21-byte item on stack */
PUSH21(0x74),
/** (0x75) Place 22-byte item on stack */
PUSH22(0x75),
/** (0x76) Place 23-byte item on stack */
PUSH23(0x76),
/** (0x77) Place 24-byte item on stack */
PUSH24(0x77),
/** (0x78) Place 25-byte item on stack */
PUSH25(0x78),
/** (0x79) Place 26-byte item on stack */
PUSH26(0x79),
/** (0x7a) Place 27-byte item on stack */
PUSH27(0x7a),
/** (0x7b) Place 28-byte item on stack */
PUSH28(0x7b),
/** (0x7c) Place 29-byte item on stack */
PUSH29(0x7c),
/** (0x7d) Place 30-byte item on stack */
PUSH30(0x7d),
/** (0x7e) Place 31-byte item on stack */
PUSH31(0x7e),
/** (0x7f) Place 32-byte (full word)
* item on stack */
PUSH32(0x7f),
/**
* Duplicate Nth item from the stack
*/
/* Duplicate Nth item from the stack */
/** (0x80) Duplicate 1st item on stack */
DUP1(0x80),
/** (0x81) Duplicate 2nd item on stack */
DUP2(0x81),
/** (0x82) Duplicate 3rd item on stack */
DUP3(0x82),
/** (0x83) Duplicate 4th item on stack */
DUP4(0x83),
/** (0x84) Duplicate 5th item on stack */
DUP5(0x84),
/** (0x85) Duplicate 6th item on stack */
DUP6(0x85),
/** (0x86) Duplicate 7th item on stack */
DUP7(0x86),
/** (0x87) Duplicate 8th item on stack */
DUP8(0x87),
/** (0x88) Duplicate 9th item on stack */
DUP9(0x88),
/** (0x89) Duplicate 10th item on stack */
DUP10(0x89),
/** (0x8a) Duplicate 11th item on stack */
DUP11(0x8a),
/** (0x8b) Duplicate 12th item on stack */
DUP12(0x8b),
/** (0x8c) Duplicate 13th item on stack */
DUP13(0x8c),
/** (0x8d) Duplicate 14th item on stack */
DUP14(0x8d),
/** (0x8e) Duplicate 15th item on stack */
DUP15(0x8e),
/** (0x8f) Duplicate 16th item on stack */
DUP16(0x8f),
/**
* Swap the Nth item from the stack with the top
*/
/* Swap the Nth item from the stack with the top */
/** (0x90) Exchange 2nd item from stack with the top */
SWAP1(0x90),
/** (0x91) Exchange 3rd item from stack with the top */
SWAP2(0x91),
/** (0x92) Exchange 4th item from stack with the top */
SWAP3(0x92),
/** (0x93) Exchange 5th item from stack with the top */
SWAP4(0x93),
/** (0x94) Exchange 6th item from stack with the top */
SWAP5(0x94),
/** (0x95) Exchange 7th item from stack with the top */
SWAP6(0x95),
/** (0x96) Exchange 8th item from stack with the top */
SWAP7(0x96),
/** (0x97) Exchange 9th item from stack with the top */
SWAP8(0x97),
/** (0x98) Exchange 10th item from stack with the top */
SWAP9(0x98),
/** (0x99) Exchange 11th item from stack with the top */
SWAP10(0x99),
/** (0x9a) Exchange 12th item from stack with the top */
SWAP11(0x9a),
/** (0x9b) Exchange 13th item from stack with the top */
SWAP12(0x9b),
/** (0x9c) Exchange 14th item from stack with the top */
SWAP13(0x9c),
/** (0x9d) Exchange 15th item from stack with the top */
SWAP14(0x9d),
/** (0x9e) Exchange 16th item from stack with the top */
SWAP15(0x9e),
/** (0x9f) Exchange 17th item from stack with the top */
SWAP16(0x9f),
/**
* System operations
*/
/* System operations */
/** (0xf0) Create a new account with associated code */
CREATE(0xf0), // [in_size] [in_offs] [gas_val] CREATE
/** (cxf1) Message-call into an account */
CALL(0xf1), // [out_data_size] [out_data_start] [in_data_size] [in_data_start] [value] [to_addr] [gas] CALL
/** (0xf2) Halt execution returning output data */
RETURN(0xf2),
/** (0xf3) Same as call, except 5 arguments in
* and 0 arguments out, and instead of immediately
* calling it adds the call to a postqueue, to be
* executed after everything else
* (including prior-created posts) within the scope
* of that transaction execution is executed */
POST(0xf3),
/** (0xf4) Calls self, but grabbing the code from the
* TO argument instead of from one's own address */
CALLSTATELESS(0xf4),
/** (0xff) Halt execution and register account for
* later deletion */
SUICIDE(0xff);
private byte opcode;