1 module capstone.evm;
2 
3 extern (C):
4 
5 /* Capstone Disassembly Engine */
6 /* By Nguyen Anh Quynh <aquynh@gmail.com>, 2013-2018 */
7 
8 /// Instruction structure
9 struct cs_evm
10 {
11     ubyte pop; ///< number of items popped from the stack
12     ubyte push; ///< number of items pushed into the stack
13     uint fee; ///< gas fee for the instruction
14 }
15 
16 /// EVM instruction
17 enum evm_insn
18 {
19     EVM_INS_STOP = 0,
20     EVM_INS_ADD = 1,
21     EVM_INS_MUL = 2,
22     EVM_INS_SUB = 3,
23     EVM_INS_DIV = 4,
24     EVM_INS_SDIV = 5,
25     EVM_INS_MOD = 6,
26     EVM_INS_SMOD = 7,
27     EVM_INS_ADDMOD = 8,
28     EVM_INS_MULMOD = 9,
29     EVM_INS_EXP = 10,
30     EVM_INS_SIGNEXTEND = 11,
31     EVM_INS_LT = 16,
32     EVM_INS_GT = 17,
33     EVM_INS_SLT = 18,
34     EVM_INS_SGT = 19,
35     EVM_INS_EQ = 20,
36     EVM_INS_ISZERO = 21,
37     EVM_INS_AND = 22,
38     EVM_INS_OR = 23,
39     EVM_INS_XOR = 24,
40     EVM_INS_NOT = 25,
41     EVM_INS_BYTE = 26,
42     EVM_INS_SHA3 = 32,
43     EVM_INS_ADDRESS = 48,
44     EVM_INS_BALANCE = 49,
45     EVM_INS_ORIGIN = 50,
46     EVM_INS_CALLER = 51,
47     EVM_INS_CALLVALUE = 52,
48     EVM_INS_CALLDATALOAD = 53,
49     EVM_INS_CALLDATASIZE = 54,
50     EVM_INS_CALLDATACOPY = 55,
51     EVM_INS_CODESIZE = 56,
52     EVM_INS_CODECOPY = 57,
53     EVM_INS_GASPRICE = 58,
54     EVM_INS_EXTCODESIZE = 59,
55     EVM_INS_EXTCODECOPY = 60,
56     EVM_INS_RETURNDATASIZE = 61,
57     EVM_INS_RETURNDATACOPY = 62,
58     EVM_INS_BLOCKHASH = 64,
59     EVM_INS_COINBASE = 65,
60     EVM_INS_TIMESTAMP = 66,
61     EVM_INS_NUMBER = 67,
62     EVM_INS_DIFFICULTY = 68,
63     EVM_INS_GASLIMIT = 69,
64     EVM_INS_POP = 80,
65     EVM_INS_MLOAD = 81,
66     EVM_INS_MSTORE = 82,
67     EVM_INS_MSTORE8 = 83,
68     EVM_INS_SLOAD = 84,
69     EVM_INS_SSTORE = 85,
70     EVM_INS_JUMP = 86,
71     EVM_INS_JUMPI = 87,
72     EVM_INS_PC = 88,
73     EVM_INS_MSIZE = 89,
74     EVM_INS_GAS = 90,
75     EVM_INS_JUMPDEST = 91,
76     EVM_INS_PUSH1 = 96,
77     EVM_INS_PUSH2 = 97,
78     EVM_INS_PUSH3 = 98,
79     EVM_INS_PUSH4 = 99,
80     EVM_INS_PUSH5 = 100,
81     EVM_INS_PUSH6 = 101,
82     EVM_INS_PUSH7 = 102,
83     EVM_INS_PUSH8 = 103,
84     EVM_INS_PUSH9 = 104,
85     EVM_INS_PUSH10 = 105,
86     EVM_INS_PUSH11 = 106,
87     EVM_INS_PUSH12 = 107,
88     EVM_INS_PUSH13 = 108,
89     EVM_INS_PUSH14 = 109,
90     EVM_INS_PUSH15 = 110,
91     EVM_INS_PUSH16 = 111,
92     EVM_INS_PUSH17 = 112,
93     EVM_INS_PUSH18 = 113,
94     EVM_INS_PUSH19 = 114,
95     EVM_INS_PUSH20 = 115,
96     EVM_INS_PUSH21 = 116,
97     EVM_INS_PUSH22 = 117,
98     EVM_INS_PUSH23 = 118,
99     EVM_INS_PUSH24 = 119,
100     EVM_INS_PUSH25 = 120,
101     EVM_INS_PUSH26 = 121,
102     EVM_INS_PUSH27 = 122,
103     EVM_INS_PUSH28 = 123,
104     EVM_INS_PUSH29 = 124,
105     EVM_INS_PUSH30 = 125,
106     EVM_INS_PUSH31 = 126,
107     EVM_INS_PUSH32 = 127,
108     EVM_INS_DUP1 = 128,
109     EVM_INS_DUP2 = 129,
110     EVM_INS_DUP3 = 130,
111     EVM_INS_DUP4 = 131,
112     EVM_INS_DUP5 = 132,
113     EVM_INS_DUP6 = 133,
114     EVM_INS_DUP7 = 134,
115     EVM_INS_DUP8 = 135,
116     EVM_INS_DUP9 = 136,
117     EVM_INS_DUP10 = 137,
118     EVM_INS_DUP11 = 138,
119     EVM_INS_DUP12 = 139,
120     EVM_INS_DUP13 = 140,
121     EVM_INS_DUP14 = 141,
122     EVM_INS_DUP15 = 142,
123     EVM_INS_DUP16 = 143,
124     EVM_INS_SWAP1 = 144,
125     EVM_INS_SWAP2 = 145,
126     EVM_INS_SWAP3 = 146,
127     EVM_INS_SWAP4 = 147,
128     EVM_INS_SWAP5 = 148,
129     EVM_INS_SWAP6 = 149,
130     EVM_INS_SWAP7 = 150,
131     EVM_INS_SWAP8 = 151,
132     EVM_INS_SWAP9 = 152,
133     EVM_INS_SWAP10 = 153,
134     EVM_INS_SWAP11 = 154,
135     EVM_INS_SWAP12 = 155,
136     EVM_INS_SWAP13 = 156,
137     EVM_INS_SWAP14 = 157,
138     EVM_INS_SWAP15 = 158,
139     EVM_INS_SWAP16 = 159,
140     EVM_INS_LOG0 = 160,
141     EVM_INS_LOG1 = 161,
142     EVM_INS_LOG2 = 162,
143     EVM_INS_LOG3 = 163,
144     EVM_INS_LOG4 = 164,
145     EVM_INS_CREATE = 240,
146     EVM_INS_CALL = 241,
147     EVM_INS_CALLCODE = 242,
148     EVM_INS_RETURN = 243,
149     EVM_INS_DELEGATECALL = 244,
150     EVM_INS_CALLBLACKBOX = 245,
151     EVM_INS_STATICCALL = 250,
152     EVM_INS_REVERT = 253,
153     EVM_INS_SUICIDE = 255,
154 
155     EVM_INS_INVALID = 512,
156     EVM_INS_ENDING = 513 // <-- mark the end of the list of instructions
157 }
158 
159 /// Group of EVM instructions
160 enum evm_insn_group
161 {
162     EVM_GRP_INVALID = 0, ///< = CS_GRP_INVALID
163 
164     EVM_GRP_JUMP = 1, ///< all jump instructions
165 
166     EVM_GRP_MATH = 8, ///< math instructions
167     EVM_GRP_STACK_WRITE = 9, ///< instructions write to stack
168     EVM_GRP_STACK_READ = 10, ///< instructions read from stack
169     EVM_GRP_MEM_WRITE = 11, ///< instructions write to memory
170     EVM_GRP_MEM_READ = 12, ///< instructions read from memory
171     EVM_GRP_STORE_WRITE = 13, ///< instructions write to storage
172     EVM_GRP_STORE_READ = 14, ///< instructions read from storage
173     EVM_GRP_HALT = 15, ///< instructions halt execution
174 
175     EVM_GRP_ENDING = 16 ///< <-- mark the end of the list of groups
176 }