NeoVM 指令集
#
内置数据类型NeoVM 内置的数据类型如下表所示
类型 | 描述 |
---|---|
Array | 数组,实现为一个 List<StackItem> ,StackItem 是一个抽象类,NeoVM内置的数据类型均继承自StackItem 。 |
Boolean | 布尔类型,实现为一个bool值和两个字节数组TRUE 和FALSE 。 |
Buffer | 只读字节数组,实现为一个缓存数组byte[] 。 |
ByteString | 只读字节数组,实现为一个ReadOnlyMemory<byte> 。 |
Integer | 整型,实现为一个BigInteger 值。 |
InteropInterface | 互操作接口 |
Map | 实现为一个键值对为StackItem 的字典类型Dictionary<PrimitiveType, StackItem> 。 |
Null | Null类型 |
Pointer | 指针类型,实现为一个上下文脚本Script 和一个指令位置Position |
Struct | 结构体,继承自Array 。结构与Array 相同,只是添加了Clone 方法和重写了Equals 方法。 |
CompoundType
:复合类型,包括Array
、Map
和Struct
。PrimitiveType
:基本类型,包括Boolean
、ByteString
和Integer
。
// boolean 类型private static readonly byte[] TRUE = { 1 };private static readonly byte[] FALSE = { 0 };
private bool value;
#
指令集NeoVM虚拟机一共实现了189个指令,类别如下
常数 | 流程控制 | 栈操作 | 槽操作 | 字符串操作 | 逻辑运算 | 算术运算 | 高级数据结构 | 类型操作 |
---|---|---|---|---|---|---|---|---|
29 | 37 | 15 | 50 | 6 | 6 | 25 | 18 | 3 |
下面将分别介绍各个指令的详细内容。
#
常数常数部分指令主要完成向计算栈中压入常数或者数组的功能。
#
PUSHINT指令 | PUSHINT8, PUSHINT16, PUSHINT32, PUSHINT64, PUSHINT128, PUSHINT256 |
---|---|
字节码 | 0x00, 0x01, 0x02, 0x03, 0x04, 0x05 |
系统费 | 0.00000001 GAS, 0.00000001 GAS, 0.00000001 GAS, 0.00000001 GAS, 0.00000004 GAS, 0.00000004 GAS |
功能 | 向计算栈中压入一个整数,其位长度由本指令后的 8\16\32\64\128\256指定。 |
#
PUSHT/PUSHF指令 | PUSHT, PUSHF |
---|---|
字节码 | 0x08, 0x09 |
系统费 | 0.00000001 GAS |
功能 | 向计算栈压入True/False |
#
PUSHA指令 | PUSHA |
---|---|
字节码 | 0x0A |
系统费 | 0.00000004 GAS |
功能 | 将接下来的四个字节转换为地址,并将该地址压入计算栈。 |
#
PUSHNULL指令 | PUSHNULL |
---|---|
字节码 | 0x0B |
系统费 | 0.00000001 GAS |
功能 | 向计算栈中压入NULL值。 |
#
PUSHDATA指令 | PUSHDATA1, PUSHDATA2, PUSHDATA4 |
---|---|
字节码 | 0x0C, 0x0D, 0x0E |
系统费 | 0.00000008 GAS, 0.00000512 GAS, 0.00004096 GAS |
功能 | 向计算栈中压入一个字节数组,其长度由本指令后的 1|2|4 字节指定。 |
#
PUSHM1指令 | PUSHM1 |
---|---|
字节码 | 0x0F |
系统费 | 0.00000001 GAS |
功能 | 向计算栈中压入一个整数,其数值等于-1。 |
#
PUSHN指令 | PUSH0~PUSH16 |
---|---|
字节码 | 0x10~0x20 |
系统费 | 0.00000001 GAS |
功能 | 向计算栈中压入一个整数,其数值等于0~16。 |
#
流程控制用于控制的虚拟机运行流程,包括跳转、调用等指令。
#
NOP指令 | NOP |
---|---|
字节码 | 0x21 |
系统费 | 0.00000001 GAS |
功能 | 空操作,但是会使指令计步器加1。 |
#
JMP指令 | JMP |
---|---|
字节码 | 0x22 |
系统费 | 0.00000002 GAS |
功能 | 无条件跳转到指定偏移位置,偏移量由本指令后的1字节指定。 |
#
JMP_L指令 | JMP_L |
---|---|
字节码 | 0x23 |
系统费 | 0.00000002 GAS |
功能 | 无条件跳转到指定偏移位置。偏移量由本指令后的4字节指定。 |
#
JMPIF指令 | JMPIF |
---|---|
字节码 | 0x24 |
系统费 | 0.00000002 GAS |
功能 | 当计算栈栈顶元素为true,而不等于0或null时,跳转到指定偏移位置,偏移量由本指令后的1字节指定。 |
#
JMPIF_L指令 | JMPIF_L |
---|---|
字节码 | 0x25 |
系统费 | 0.00000002 GAS |
功能 | 当计算栈栈顶元素为true,而不等于0或null时,跳转到指定偏移位置,偏移量由本指令后的4字节指定。 |
#
JMPIFNOT指令 | JMPIFNOT |
---|---|
字节码 | 0x26 |
系统费 | 0.00000002 GAS |
功能 | 当计算栈栈顶元素为false、0或者null时,跳转到指定偏移位置,偏移量由本指令后的1字节指定。 |
#
JMPIFNOT_L指令 | JMPIFNOT_L |
---|---|
字节码 | 0x27 |
系统费 | 0.00000002 GAS |
功能 | 当计算栈栈顶元素为false、0或者null时,跳转到指定偏移位置,偏移量由本指令后的4字节指定。 |
#
JMPEQ指令 | JMPEQ |
---|---|
字节码 | 0x28 |
系统费 | 0.00000002 GAS |
功能 | 当栈顶两个元素相等时,跳转到指定偏移位置,偏移量由本指令后的1字节指定。 |
#
JMPEQ_L指令 | JMPEQ_L |
---|---|
字节码 | 0x29 |
系统费 | 0.00000002 GAS |
功能 | 当栈顶两个元素相等时,跳转到指定偏移位置,偏移量由本指令后的4字节指定。 |
#
JMPNE指令 | JMPNE |
---|---|
字节码 | 0x2A |
系统费 | 0.00000002 GAS |
功能 | 当栈顶两个元素不相等时,跳转到指定偏移位置,偏移量由本指令后的1字节指定。 |
#
JMPNE_L指令 | JMPNE_L |
---|---|
字节码 | 0x2B |
系统费 | 0.00000002 GAS |
功能 | 当栈顶两个元素不相等时,跳转到指定偏移位置,偏移量由本指令后的4字节指定。 |
#
JMPGT指令 | JMPGT |
---|---|
字节码 | 0x2C |
系统费 | 0.00000002 GAS |
功能 | 当计算栈栈顶第一个元素大于第二个元素时,跳转到指定偏移位置,偏移量由本指令后的1字节指定。 |
#
JMPGT_L指令 | JMPGT_L |
---|---|
字节码 | 0x2D |
系统费 | 0.00000002 GAS |
功能 | 当计算栈栈顶第一个元素大于第二个元素时,跳转到指定偏移位置,偏移量由本指令后的4字节指定。 |
#
JMPGE指令 | JMPGE |
---|---|
字节码 | 0x2E |
系统费 | 0.00000002 GAS |
功能 | 当计算栈栈顶第一个元素大于或者等于第二个元素时,跳转到指定偏移位置,偏移量由本指令后的1字节指定。 |
#
JMPGE_L指令 | JMPGE_L |
---|---|
字节码 | 0x2F |
系统费 | 0.00000002 GAS |
功能 | 当计算栈栈顶第一个元素大于或者等于第二个元素时,跳转到指定偏移位置,偏移量由本指令后的4字节指定。 |
#
JMPLT指令 | JMPLT |
---|---|
字节码 | 0x30 |
系统费 | 0.00000002 GAS |
功能 | 当计算栈栈顶第一个元素小于第二个元素时,跳转到指定偏移位置,偏移量由本指令后的1字节指定。 |
#
JMPLT_L指令 | JMPLT_L |
---|---|
字节码 | 0x31 |
系统费 | 0.00000002 GAS |
功能 | 当计算栈栈顶第一个元素小于第二个元素时,跳转到指定偏移位置,偏移量由本指令后的4字节指定。 |
#
JMPLE指令 | JMPLE |
---|---|
字节码 | 0x32 |
系统费 | 0.00000002 GAS |
功能 | 当计算栈栈顶第一个元素小于或者等于第二个元素时,跳转到指定偏移位置,偏移量由本指令后的1字节指定。 |
#
JMPLE_L指令 | JMPLE_L |
---|---|
字节码 | 0x33 |
系统费 | 0.00000002 GAS |
功能 | 当计算栈栈顶第一个元素小于或者等于第二个元素时,跳转到指定偏移位置,偏移量由本指令后的4字节指定。 |
#
CALL指令 | CALL |
---|---|
字节码 | 0x34 |
系统费 | 0.00000512 GAS |
功能 | 调用指定偏移位置的函数,偏移量由本指令后的1字节指定。 |
#
CALL_L指令 | CALL_L |
---|---|
字节码 | 0x35 |
系统费 | 0.00000512 GAS |
功能 | 调用指定偏移位置的函数,偏移量由本指令后的4字节指定。 |
#
CALLA指令 | CALLA |
---|---|
字节码 | 0x36 |
系统费 | 0.00000512 GAS |
功能 | 从计算栈栈顶取出函数地址,并调用该函数。 |
#
CALLT指令 | CALLT |
---|---|
字节码 | 0x37 |
系统费 | 0.00032768 GAS |
功能 | 从计算栈栈顶取出函数Token,并调用该函数。 |
#
ABORT指令 | ABORT |
---|---|
字节码 | 0x38 |
系统费 | 0 GAS |
功能 | 将虚拟机状态立即置为FAULT,且异常不能被捕获。 |
#
ASSERT指令 | ASSERT |
---|---|
字节码 | 0x39 |
系统费 | 0.00000001 GAS |
功能 | 从计算栈栈顶取出元素,若该值为False,则退出虚拟机执行,并将虚拟机状态置为FAULT。 |
#
THROW指令 | THROW |
---|---|
字节码 | 0x3A |
系统费 | 0.00000512 GAS |
功能 | 抛出栈顶的异常。 |
#
TRY指令 | TRY |
---|---|
字节码 | 0x3B |
系统费 | 0.00000004 GAS |
功能 | 进入Try语句块,Catch和Finally地址偏移量分别由本指令后的1字节指定。 |
#
TRY_L指令 | TRY_L |
---|---|
字节码 | 0x3C |
系统费 | 0.00000004 GAS |
功能 | 进入Try语句块,Catch和Finally地址偏移量分别由本指令后的4字节指定。 |
#
ENDTRY指令 | ENDTRY |
---|---|
字节码 | 0x3D |
系统费 | 0.00000004 GAS |
功能 | 结束Try块,然后无条件地将控制转移到特定的目标指令,目标地址偏移量由本指令后的1字节指定。 |
#
ENDTRY_L指令 | ENDTRY_L |
---|---|
字节码 | 0x3E |
系统费 | 0.00000004 GAS |
功能 | 结束Try块,然后无条件地将控制转移到特定的目标指令,目标地址偏移量由本指令后的4字节指定。 |
#
ENDFINALLY指令 | ENDFINALLY |
---|---|
字节码 | 0x3F |
系统费 | 0.00000004 GAS |
功能 | 结束Finally块,如果没有异常发生或捕获,则跳转到目标指令ENDTRY/ENDTRY_L,否则将向上层重新抛出异常。 |
#
RET指令 | RET |
---|---|
字节码 | 0x40 |
系统费 | 0 GAS |
功能 | 从当前方法中返回。 |
#
SYSCALL指令 | SYSCALL |
---|---|
字节码 | 0x41 |
系统费 | 0 GAS |
功能 | 调用互操作服务。 |
#
栈操作实现对栈的元素做复制、移除、交换等功能。
#
DEPTH指令 | DEPTH |
---|---|
字节码 | 0x43 |
系统费 | 0.00000002 GAS |
功能 | 将栈元素个数压入计算栈。 |
#
DROP指令 | DROP |
---|---|
字节码 | 0x45 |
系统费 | 0.00000002 GAS |
功能 | 移除计算栈栈顶的元素。 |
#
NIP指令 | NIP |
---|---|
字节码 | 0x46 |
系统费 | 0.00000002 GAS |
功能 | 移除计算栈栈顶的第二个元素。 |
#
XDROP指令 | XDROP |
---|---|
字节码 | 0x48 |
系统费 | 0.00000016 GAS |
功能 | 从计算栈栈顶获取到整数n, 移除计算栈剩余元素中索引为n的元素。 |
#
CLEAR指令 | CLEAR |
---|---|
字节码 | 0x49 |
系统费: | 0.00000016 GAS |
功能 | 清空计算栈。 |
#
DUP指令 | DUP |
---|---|
字节码 | 0x4A |
系统费 | 0.00000002 GAS |
功能 | 复制计算栈栈顶的元素到栈顶。 |
#
OVER指令 | OVER |
---|---|
字节码 | 0x4B |
系统费 | 0.00000002 GAS |
功能 | 复制计算栈的第二个元素到栈顶。 |
#
PICK指令 | PICK |
---|---|
字节码 | 0x4D |
系统费 | 0.00000002 GAS |
功能 | 从计算栈栈顶获取到整数n,并将计算栈剩余元素中索引为n的元素复制到栈顶。 |
#
TUCK指令 | TUCK |
---|---|
字节码 | 0x4E |
系统费 | 0.00000002 GAS |
功能 | 复制计算栈栈顶的元素到计算栈索引为2的位置。 |
#
SWAP指令 | SWAP |
---|---|
字节码 | 0x50 |
系统费 | 0.00000002 GAS |
功能 | 交换计算栈栈顶两个元素的位置。 |
#
ROT指令 | ROT |
---|---|
字节码 | 0x51 |
系统费 | 0.00000002 GAS |
功能 | 移动计算栈索引为2的元素到栈顶。 |
#
ROLL指令 | ROLL |
---|---|
字节码 | 0x52 |
系统费 | 0.00000016 GAS |
功能 | 从计算栈栈顶获取到整数n,并将计算栈剩余元素中索引为n的元素移动到栈顶。 |
#
REVERSE3指令 | REVERSE3 |
---|---|
字节码 | 0x53 |
系统费 | 0.00000002 GAS |
功能 | 反转计算栈栈顶前三个元素的顺序。 |
#
REVERSE4指令 | REVERSE4 |
---|---|
字节码 | 0x54 |
系统费 | 0.00000002 GAS |
功能 | 反转计算栈栈顶前四个元素的顺序。 |
#
REVERSEN指令 | REVERSEN |
---|---|
字节码 | 0x55 |
系统费 | 0.00000016 GAS |
功能 | 从计算栈栈顶获取到整数n,并反转计算栈剩余元素中前n个元素的顺序。 |
#
槽操作#
INITSSLOT指令 | INITSSLOT |
---|---|
字节码 | 0x56 |
系统费 | 0.00000016 GAS |
功能 | 初始化当前执行上下文的静态字段列表。 |
#
INITSLOT指令 | INITSLOT |
---|---|
字节码 | 0x57 |
系统费 | 0.00000064 GAS |
功能 | 初始化当前执行上下文的参数槽和局部变量列表。 |
#
LDSFLDN指令 | LDSFLD0~LDSFLD6 |
---|---|
字节码 | 0x58~0x5E |
系统费 | 0.00000002 GAS |
功能 | 将指定索引处的静态字段压入计算栈,索引值为0~6。 |
#
LDSFLD指令 | LDSFLD |
---|---|
字节码 | 0x5F |
系统费 | 0.00000002 GAS |
功能 | 将指定索引处的静态字段压入计算栈。索引表示为1字节的无符号整数。 |
#
STSFLDN指令 | STSFLD0~STSFLD6 |
---|---|
字节码 | 0x60~0x0x66 |
系统费 | 0.00000002 GAS |
功能 | 将计算栈栈顶元素存入静态列表的指定索引处,索引值为0~6。 |
#
STSFLD指令 | STSFLD |
---|---|
字节码 | 0x67 |
系统费 | 0.00000002 GAS |
功能 | 将计算栈栈顶元素存入静态列表的指定索引处。索引表示为1字节的无符号整数。 |
#
LDLOCN指令 | LDLOC0~LDLOC6 |
---|---|
字节码 | 0x68~0x6E |
系统费 | 0.00000002 GAS |
功能 | 将指定索引处的局部变量压入计算栈,索引值为0~6。 |
#
LDLOC指令 | LDLOC |
---|---|
字节码 | 0x6F |
系统费 | 0.00000002 GAS |
功能 | 将指定索引处的局部变量压入计算栈。索引表示为1字节的无符号整数。 |
#
STLOCN指令 | STLOC0~STLOC6 |
---|---|
字节码 | 0x70~0x76 |
系统费 | 0.00000002 GAS |
功能 | 将计算栈栈顶元素存入局部变量表的指定索引处,索引值为0~6。 |
#
STLOC指令 | STLOC |
---|---|
字节码 | 0x77 |
系统费 | 0.00000002 GAS |
功能 | 将计算栈栈顶元素存入局部变量表的指定索引处。索引表示为1字节的无符号整数。 |
#
LDARGN指令 | LDARG0~LDARG6 |
---|---|
字节码 | 0x78~0x7E |
系统费 | 0.00000002 GAS |
功能 | 将指定索引处的参数压入计算栈,索引值为0~6。 |
#
LDARG指令 | LDARG |
---|---|
字节码 | 0x7F |
系统费 | 0.00000002 GAS |
功能 | 将指定索引处的参数压入计算栈。索引表示为1字节的无符号整数。 |
#
STARGN指令 | STARG0~STARG6 |
---|---|
字节码 | 0x80~0x86 |
系统费 | 0.00000002 GAS |
功能 | 将计算栈栈顶元素存入参数槽的指定索引处,索引值为0~6。 |
#
STARG指令 | STARG |
---|---|
字节码 | 0x87 |
系统费 | 0.00000002 GAS |
功能 | 将计算栈栈顶元素存入参数槽的指定索引处。索引表示为1字节的无符号整数。 |
#
字符串操作#
NEWBUFFER指令 | NEWBUFFER |
---|---|
字节码 | 0x88 |
系统费 | 0.00000256 GAS |
功能 | 创建缓冲区 |
#
MEMCPY指令 | MEMCPY |
---|---|
字节码 | 0x89 |
系统费 | 0.00002048 GAS |
功能 | 内存复制 |
#
CAT指令 | CAT |
---|---|
字节码 | 0x8B |
系统费 | 0.00002048 GAS |
功能 | 拼接两个字符串 |
#
SUBSTR指令 | SUBSTR |
---|---|
字节码 | 0x8C |
系统费 | 0.00002048 GAS |
功能 | 获取子字符串。 |
#
LEFT指令 | LEFT |
---|---|
字节码 | 0x8D |
系统费 | 0.00002048 GAS |
功能 | 获取字符串中指定位置左边的字符串。 |
#
RIGHT指令 | RIGHT |
---|---|
字节码 | 0x8E |
系统费 | 0.00002048 GAS |
功能 | 获取字符串中指定位置右边的字符串。 |
#
逻辑运算#
INVERT指令 | INVERT |
---|---|
字节码 | 0x90 |
系统费 | 0.00000004 GAS |
功能 | 对计算栈栈顶的元素按位取反。 |
#
AND指令 | AND |
---|---|
字节码 | 0x91 |
系统费 | 0.00000008 GAS |
功能 | 对计算栈栈顶的两个元素执行按位与运算。 |
#
OR指令 | OR |
---|---|
字节码 | 0x92 |
系统费 | 0.00000008 GAS |
功能 | 对计算栈栈顶的两个元素执行按位或运算。 |
#
XOR指令 | XOR |
---|---|
字节码 | 0x93 |
系统费 | 0.00000008 GAS |
功能 | 对计算栈栈顶的两个元素执行按位异或运算。 |
#
EQUAL指令 | EQUAL |
---|---|
字节码 | 0x97 |
系统费 | 0.00000032 GAS |
功能 | 判断计算栈栈顶的两个元素是否相等。若相等,则返回1,否则返回0。 |
#
NOTEQUAL指令 | NOTEQUAL |
---|---|
字节码 | 0x98 |
系统费 | 0.00000032 GAS |
功能 | 判断计算栈栈顶的两个元素是否不相等。若不相等,则返回1,否则返回0。 |
#
算术运算#
SIGN指令 | SIGN |
---|---|
字节码 | 0x99 |
系统费 | 0.00000004 GAS |
功能 | 获取计算栈栈顶的BigInteger的符号(负、正或零)。 |
#
ABS指令 | ABS |
---|---|
字节码 | 0x9A |
系统费 | 0.00000004 GAS |
功能 | 求计算栈栈顶的BigInteger的绝对值。 |
#
NEGATE指令 | NEGATE |
---|---|
字节码 | 0x9B |
系统费 | 0.00000004 GAS |
功能 | 求计算栈栈顶的BigInteger的相反数。 |
#
INC指令 | INC |
---|---|
字节码 | 0x9C |
系统费 | 0.00000004 GAS |
功能 | 将计算栈栈顶的BigInteger加1。 |
#
DEC指令 | DEC |
---|---|
字节码 | 0x9D |
系统费 | 0.00000004 GAS |
功能 | 将计算栈栈顶的BigInteger减1。 |
#
ADD指令 | ADD |
---|---|
字节码 | 0x9E |
系统费 | 0.00000008 GAS |
功能 | 对计算栈栈顶的两个BigInteger执行加法运算。 |
#
SUB指令 | SUB |
---|---|
字节码 | 0x9F |
系统费 | 0.00000008 GAS |
功能 | 用计算栈第二个BigInteger减去第一个BigInteger。 |
#
MUL指令 | MUL |
---|---|
字节码 | 0xA0 |
系统费 | 0.00000008 GAS |
功能 | 对计算栈栈顶的两个BigInteger执行乘法运算。 |
#
DIV指令 | DIV |
---|---|
字节码 | 0xA1 |
系统费 | 0.00000008 GAS |
功能 | 用计算栈第二个BigInteger除以第一个BigInteger。 |
#
MOD指令 | MOD |
---|---|
字节码 | 0xA2 |
系统费 | 0.00000008 GAS |
功能 | 用计算栈第二个BigInteger除以第一个BigInteger取余。 |
#
POW指令 | POW |
---|---|
字节码 | 0xA3 |
系统费 | 0.00000064 GAS |
功能 | 用计算栈第二个BigInteger为底数,第一个integer为指数,求乘方。 |
#
SQRT指令 | SQRT |
---|---|
字节码 | 0xA4 |
系统费 | 0.00000064 GAS |
功能 | 求计算栈第一个非负BigInteger的开方,并向下取整为BigInteger。 |
#
SHL指令 | SHL |
---|---|
字节码 | 0xA8 |
系统费 | 0.00000008 GAS |
功能 | 从计算栈栈顶获取到整数n,并对剩余计算栈栈顶的BigInteger执行左移n位运算。 |
#
SHR指令 | SHR |
---|---|
字节码 | 0xA9 |
系统费 | 0.00000008 GAS |
功能 | 从计算栈栈顶获取到整数n,并对剩余计算栈栈顶的BigInteger执行右移n位运算。 |
#
NOT指令 | NOT |
---|---|
字节码 | 0xAA |
系统费 | 0.00000004 GAS |
功能 | 对计算栈栈顶的元素执行逻辑非运算。 |
#
BOOLAND指令 | BOOLAND |
---|---|
字节码 | 0xAB |
系统费 | 0.00000008 GAS |
功能 | 对计算栈栈顶的两个元素执行逻辑与运算。 |
#
BOOLOR指令 | BOOLOR |
---|---|
字节码 | 0xAC |
系统费 | 0.00000008 GAS |
功能 | 对计算栈栈顶的两个元素执行逻辑或运算。 |
#
NZ指令 | NZ |
---|---|
字节码 | 0xB1 |
系统费 | 0.00000004 GAS |
功能 | 判断计算栈栈顶的BigInteger是否为非0值。 |
#
NUMEQUAL指令 | NUMEQUAL |
---|---|
字节码 | 0xB3 |
系统费 | 0.00000008 GAS |
功能 | 判断计算栈栈顶的两个BigInteger是否相等。 |
#
NUMNOTEQUAL指令 | NUMNOTEQUAL |
---|---|
字节码 | 0xB4 |
系统费 | 0.00000008 GAS |
功能 | 判断计算栈栈顶的两个BigInteger是否不相等。 |
#
LT指令 | LT |
---|---|
字节码 | 0xB5 |
系统费 | 0.00000008 GAS |
功能 | 判断计算栈第二个BigInteger是否小于第一个BigInteger。 |
#
LE指令 | LE |
---|---|
字节码 | 0xB6 |
系统费 | 0.00000008 GAS |
功能 | 判断计算栈第二个BigInteger是否小于等于第一个BigInteger。 |
#
GT指令 | GT |
---|---|
字节码 | 0xB7 |
系统费 | 0.00000008 GAS |
功能 | 判断计算栈第二个BigInteger是否大于第一个BigInteger。 |
#
GE指令 | GE |
---|---|
字节码 | 0xB8 |
系统费 | 0.00000008 GAS |
功能 | 判断计算栈第二个BigInteger是否大于等于第一个BigInteger。 |
#
MIN指令 | MIN |
---|---|
字节码 | 0xB9 |
系统费 | 0.00000008 GAS |
功能 | 获取计算栈栈顶的两个BigInteger中的最小值。 |
#
MAX指令 | MAX |
---|---|
字节码 | 0xBA |
系统费 | 0.00000008 GAS |
功能 | 获取计算栈栈顶的两个BigInteger中的最大值。 |
#
WITHIN指令 | WITHIN |
---|---|
字节码 | 0xBB |
系统费 | 0.00000008 GAS |
功能 | 判断计算栈中的第三个BigInteger是否大于等于第二个BigInteger且小于第一个BigInteger。 |
#
高级数据结构实现对Array、Map、Struct等的常用操作。
#
PACKMAP指令 | PACKMAP |
---|---|
字节码 | 0xBE |
系统费 | 0.00002048 GAS |
功能 | 将计算栈栈顶的2n个元素打包成Map。第1个为key,第2个为第1个的value。 |
#
PACKSTRUCT指令 | PACKSTRUCT |
---|---|
字节码 | 0xBF |
系统费 | 0.00002048 GAS |
功能 | 将计算栈栈顶的n个元素打包成结构体。 |
#
PACK指令 | PACK |
---|---|
字节码 | 0xC0 |
系统费 | 0.00002048 GAS |
功能 | 将计算栈栈顶的n个元素打包成数组。 |
#
UNPACK指令 | UNPACK |
---|---|
字节码 | 0xC1 |
系统费 | 0.00002048 GAS |
功能 | 将计算栈栈顶的数组拆包成元素序列。 |
#
NEWARRAY0指令 | NEWARRAY0 |
---|---|
字节码 | 0xC2 |
系统费 | 0.00000016 GAS |
功能 | 向计算栈栈顶压入一个空数组。 |
#
NEWARRAY指令 | NEWARRAY |
---|---|
字节码 | 0xC3 |
系统费 | 0.00000512 GAS |
功能 | 向计算栈栈顶压入一个大小为n的数组。 |
#
NEWARRAY_T指令 | NEWARRAY_T |
---|---|
字节码 | 0xC4 |
系统费 | 0.00000512 GAS |
功能 | 向计算栈栈顶压入一个元素类型为T且大小为n的数组。 |
#
NEWSTRUCT0指令 | NEWSTRUCT0 |
---|---|
字节码 | 0xC5 |
系统费 | 0.00000016 GAS |
功能 | 向计算栈栈顶压入一个空的结构体。 |
#
NEWSTRUCT指令 | NEWSTRUCT |
---|---|
字节码 | 0xC6 |
系统费 | 0.00000512 GAS |
功能 | 向计算栈栈顶压入一个元素全为0且大小为n的结构体。 |
#
NEWMAP指令 | NEWMAP |
---|---|
字节码 | 0xC8 |
系统费 | 0.00000008 GAS |
功能 | 向计算栈栈顶压入一个空的Map。 |
#
SIZE指令 | SIZE |
---|---|
字节码 | 0xCA |
系统费 | 0.00000004 GAS |
功能 | 获取计算栈栈顶元素的大小。 |
#
HASKEY指令 | HASKEY |
---|---|
字节码 | 0xCB |
系统费 | 0.00000064 GAS |
功能 | 从计算栈栈顶获取索引n(或键)和数组(Map,Buffer,ByteString)。若n在数组(Map,Buffer,ByteString)的长度范围内,则向栈顶压入True,否则压入False。 |
#
KEYS指令 | KEYS |
---|---|
字节码 | 0xCC |
系统费 | 0.00000016 GAS |
功能 | 获取计算栈栈顶的Map的所有Key,以所有Key构造新的Array并压入栈顶。 |
#
VALUES指令 | VALUES |
---|---|
字节码 | 0xCD |
系统费 | 0.00008192 GAS |
功能 | 获取计算栈栈顶的元素(Array或Map)的所有Value,以所有Value构造新的Array并压入栈顶. |
#
PICKITEM指令 | PICKITEM |
---|---|
字节码 | 0xCE |
系统费 | 0.00000064 GAS |
功能 | 获取计算栈栈顶的数组中的第n个元素。 |
#
APPEND指令 | APPEND |
---|---|
字节码 | 0xCF |
系统费 | 0.00008192 GAS |
功能 | 向计算栈栈顶的Array中添加一个新项。 |
#
SETITEM指令 | SETITEM |
---|---|
字节码 | 0xD0 |
系统费 | 0.00008192 GAS |
功能 | 对计算栈栈顶的元素(Array,Map或Buffer)中的指定索引(或key)元素赋值。 |
#
REVERSEITEMS指令 | REVERSEITEMS |
---|---|
字节码 | 0xD1 |
系统费 | 0.00008192 GAS |
功能 | 反转计算栈栈顶Array或Buffer中的元素。 |
#
REMOVE指令 | REMOVE |
---|---|
字节码 | 0xD2 |
系统费 | 0.00000016 GAS |
功能 | 从Array或Map中移除指定索引(或key)元素。 |
#
CLEARITEMS指令 | CLEARITEMS |
---|---|
字节码 | 0xD3 |
系统费 | 0.00000016 GAS |
功能 | 清空计算栈栈顶CompoundType类型元素中的所有元素。 |
#
POPITEM指令 | POPITEM |
---|---|
字节码 | 0xD4 |
系统费 | 0.00000016 GAS |
功能 | 弹出栈顶Array数组最后的元素,并压入计算栈栈顶。 |
#
类型操作#
ISNULL指令 | ISNULL |
---|---|
字节码 | 0xD8 |
系统费 | 0.00000002 GAS |
功能 | 判断计算栈栈顶元素是否为null |
#
ISTYPE指令 | ISTYPE |
---|---|
字节码 | 0xD9 |
系统费 | 0.00000002 GAS |
功能 | 判断计算栈栈顶元素是否为指定的元素类型。 |
#
CONVERT指令 | CONVERT |
---|---|
字节码 | 0xDB |
系统费 | 0.00002048 GAS |
功能 | 将计算栈栈顶元素转化为指定的元素类型。 |