neo-vm-core 0.2.1

Core Neo VM engine, opcodes, storage, and native contracts
Documentation
//! Neo VM OpCodes - Based on Neo N3 specification

/// Neo VM Operation Codes
///
/// Names follow the official Neo N3 specification exactly.
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
#[repr(u8)]
#[allow(non_camel_case_types)]
pub enum OpCode {
    // Constants
    PUSHINT8 = 0x00,
    PUSHINT16 = 0x01,
    PUSHINT32 = 0x02,
    PUSHINT64 = 0x03,
    PUSHINT128 = 0x04,
    PUSHINT256 = 0x05,
    PUSHA = 0x0A,
    PUSHNULL = 0x0B,
    PUSHDATA1 = 0x0C,
    PUSHDATA2 = 0x0D,
    PUSHDATA4 = 0x0E,
    PUSHM1 = 0x0F,
    PUSH0 = 0x10,
    PUSH1 = 0x11,
    PUSH2 = 0x12,
    PUSH3 = 0x13,
    PUSH4 = 0x14,
    PUSH5 = 0x15,
    PUSH6 = 0x16,
    PUSH7 = 0x17,
    PUSH8 = 0x18,
    PUSH9 = 0x19,
    PUSH10 = 0x1A,
    PUSH11 = 0x1B,
    PUSH12 = 0x1C,
    PUSH13 = 0x1D,
    PUSH14 = 0x1E,
    PUSH15 = 0x1F,
    PUSH16 = 0x20,

    // Flow control
    NOP = 0x21,
    JMP = 0x22,
    JMP_L = 0x23,
    JMPIF = 0x24,
    JMPIF_L = 0x25,
    JMPIFNOT = 0x26,
    JMPIFNOT_L = 0x27,
    JMPEQ = 0x28,
    JMPEQ_L = 0x29,
    JMPNE = 0x2A,
    JMPNE_L = 0x2B,
    JMPGT = 0x2C,
    JMPGT_L = 0x2D,
    JMPGE = 0x2E,
    JMPGE_L = 0x2F,
    JMPLT = 0x30,
    JMPLT_L = 0x31,
    JMPLE = 0x32,
    JMPLE_L = 0x33,
    CALL = 0x34,
    CALL_L = 0x35,
    CALLA = 0x36,
    CALLT = 0x37,
    ABORT = 0x38,
    ASSERT = 0x39,
    THROW = 0x3A,
    TRY = 0x3B,
    TRY_L = 0x3C,
    ENDTRY = 0x3D,
    ENDTRY_L = 0x3E,
    ENDFINALLY = 0x3F,
    RET = 0x40,
    SYSCALL = 0x41,

    // Stack operations
    DEPTH = 0x43,
    DROP = 0x45,
    NIP = 0x46,
    XDROP = 0x48,
    CLEAR = 0x49,
    DUP = 0x4A,
    OVER = 0x4B,
    PICK = 0x4D,
    TUCK = 0x4E,
    SWAP = 0x50,
    ROT = 0x51,
    ROLL = 0x52,
    REVERSE3 = 0x53,
    REVERSE4 = 0x54,
    REVERSEN = 0x55,

    // Slot operations
    INITSSLOT = 0x56,
    INITSLOT = 0x57,
    LDSFLD0 = 0x58,
    LDSFLD = 0x5E,
    STSFLD0 = 0x5F,
    STSFLD = 0x65,
    LDLOC0 = 0x66,
    LDLOC = 0x6C,
    STLOC0 = 0x6D,
    STLOC = 0x73,
    LDARG0 = 0x74,
    LDARG = 0x7A,
    STARG0 = 0x7B,
    STARG = 0x81,

    // Splice operations
    NEWBUFFER = 0x88,
    MEMCPY = 0x89,
    CAT = 0x8B,
    SUBSTR = 0x8C,
    LEFT = 0x8D,
    RIGHT = 0x8E,

    // Bitwise operations
    INVERT = 0x90,
    AND = 0x91,
    OR = 0x92,
    XOR = 0x93,
    EQUAL = 0x97,
    NOTEQUAL = 0x98,

    // Arithmetic
    SIGN = 0x99,
    ABS = 0x9A,
    NEGATE = 0x9B,
    INC = 0x9C,
    DEC = 0x9D,
    ADD = 0x9E,
    SUB = 0x9F,
    MUL = 0xA0,
    DIV = 0xA1,
    MOD = 0xA2,
    POW = 0xA3,
    SQRT = 0xA4,
    MODMUL = 0xA5,
    MODPOW = 0xA6,
    SHL = 0xA8,
    SHR = 0xA9,
    NOT = 0xAA,
    BOOLAND = 0xAB,
    BOOLOR = 0xAC,
    NZ = 0xB1,
    NUMEQUAL = 0xB3,
    NUMNOTEQUAL = 0xB4,
    LT = 0xB5,
    LE = 0xB6,
    GT = 0xB7,
    GE = 0xB8,
    MIN = 0xB9,
    MAX = 0xBA,
    WITHIN = 0xBB,

    // Compound types
    PACKMAP = 0xBE,
    PACKSTRUCT = 0xBF,
    PACK = 0xC0,
    UNPACK = 0xC1,
    NEWARRAY0 = 0xC2,
    NEWARRAY = 0xC3,
    NEWARRAY_T = 0xC4,
    NEWSTRUCT0 = 0xC5,
    NEWSTRUCT = 0xC6,
    NEWMAP = 0xC8,
    SIZE = 0xCA,
    HASKEY = 0xCB,
    KEYS = 0xCC,
    VALUES = 0xCD,
    PICKITEM = 0xCE,
    APPEND = 0xCF,
    SETITEM = 0xD0,
    REVERSEITEMS = 0xD1,
    REMOVE = 0xD2,
    CLEARITEMS = 0xD3,
    POPITEM = 0xD4,

    // Types
    ISNULL = 0xD8,
    ISTYPE = 0xD9,
    CONVERT = 0xDB,
    ABORTMSG = 0xE0,
    ASSERTMSG = 0xE1,
}