separated opcodes into their own interfaces