Object

sigmastate.serialization

OpCodes

Related Doc: package serialization

Permalink

object OpCodes extends ValueCodes

The set of all possible IR graph nodes can be split in two subsets: 1) operations which may appear in ErgoTree (these are defined by OpCodes below) 2) operations which are not valid to be in ErgoTree, but serve special purposes. (these are defined by OpCodesExtra) We can assume they are both Byte-sized codes, and store as a single byte, but as long as we can differentiate them from context (and where we cannot, we should use special encoding).

The general extended encoding is like the following: 0-255 - range of OpCodes 256-511 - range of OpCodesExtra Thus, any code in an extended code range of 0-511 can be saved using putUShort. We use Byte to represent OpCodes and OpCodesExtra. We use Short to represent any op code from extended code range. And we use VLQ to serialize Short values of extended codes.

Examples: 1) For validation rule CheckValidOpCode we use OpCodes range, so we use single byte encoding. 2) For CheckCostFuncOperation we use 1-511 range and extended encoding (see docs)

Linear Supertypes
ValueCodes, TypeCodes, AnyRef, Any
Ordering
  1. Alphabetic
  2. By Inheritance
Inherited
  1. OpCodes
  2. ValueCodes
  3. TypeCodes
  4. AnyRef
  5. Any
  1. Hide All
  2. Show All
Visibility
  1. Public
  2. All

Type Members

  1. type OpCode = Byte with Tag[Byte, OpCodes.OpCode.Tag]

    Permalink
  2. type OpCodeExtra = Short with Tag[Short, OpCodes.OpCodeExtra.Tag]

    Permalink

Value Members

  1. final def !=(arg0: Any): Boolean

    Permalink
    Definition Classes
    AnyRef → Any
  2. final def ##(): Int

    Permalink
    Definition Classes
    AnyRef → Any
  3. final def ==(arg0: Any): Boolean

    Permalink
    Definition Classes
    AnyRef → Any
  4. val AndCode: OpCode

    Permalink
  5. val AppendCode: OpCode

    Permalink
  6. val AtLeastCode: OpCode

    Permalink
  7. val AvlTreeCode: OpCode

    Permalink
  8. val AvlTreeGetCode: OpCode

    Permalink
  9. val BinAndCode: OpCode

    Permalink
  10. val BinOrCode: OpCode

    Permalink
  11. val BinXorCode: OpCode

    Permalink
  12. val BitAndCode: OpCode

    Permalink
  13. val BitInversionCode: OpCode

    Permalink
  14. val BitOrCode: OpCode

    Permalink
  15. val BitShiftLeftCode: OpCode

    Permalink
  16. val BitShiftRightCode: OpCode

    Permalink
  17. val BitShiftRightZeroedCode: OpCode

    Permalink
  18. val BitXorCode: OpCode

    Permalink
  19. val BlockValueCode: OpCode

    Permalink
  20. val BoolToSigmaPropCode: OpCode

    Permalink
  21. val ByIndexCode: OpCode

    Permalink
  22. val ByteArrayToBigIntCode: OpCode

    Permalink
  23. val ByteArrayToLongCode: OpCode

    Permalink
  24. val CBMFromItemsCode: OpCodeExtra

    Permalink
  25. val CBMReplicateCode: OpCodeExtra

    Permalink
  26. val CReplCollCtorCode: OpCodeExtra

    Permalink
  27. val CSizeAnyValueCtorCode: OpCodeExtra

    Permalink
  28. val CSizeBoxCtorCode: OpCodeExtra

    Permalink
  29. val CSizeCollCtorCode: OpCodeExtra

    Permalink
  30. val CSizeContextCtorCode: OpCodeExtra

    Permalink
  31. val CSizeFuncCtorCode: OpCodeExtra

    Permalink
  32. val CSizeOptionCtorCode: OpCodeExtra

    Permalink
  33. val CSizePairCtorCode: OpCodeExtra

    Permalink
  34. val CalcBlake2b256Code: OpCode

    Permalink
  35. val CalcSha256Code: OpCode

    Permalink
  36. val CastCode: OpCodeExtra

    Permalink
  37. val CollMSumCode: OpCodeExtra

    Permalink
  38. val CollRotateLeftCode: OpCode

    Permalink
  39. val CollRotateRightCode: OpCode

    Permalink
  40. val CollShiftLeftCode: OpCode

    Permalink
  41. val CollShiftRightCode: OpCode

    Permalink
  42. val CollShiftRightZeroedCode: OpCode

    Permalink
  43. val ConcreteCollectionBooleanConstantCode: OpCode

    Permalink
  44. val ConcreteCollectionCode: OpCode

    Permalink
  45. val ConstantCode: OpCode

    Permalink

    We use optimized encoding of constant values to save space in serialization.

    We use optimized encoding of constant values to save space in serialization. Since Box registers are stored as Constant nodes we save 1 byte for each register. This is due to convention that Value.opCode falling in [1..LastDataType] region is a constant. Thus, we can just decode an instance of SType and then decode data using DataSerializer.

    Decoding of constants depends on the first byte and in general is a recursive procedure consuming some number of bytes from Reader.

    Definition Classes
    ValueCodes
  46. val ConstantPlaceholderCode: OpCode

    Permalink
  47. val ContextCode: OpCode

    Permalink
  48. val CostOfCode: OpCodeExtra

    Permalink
  49. val DecodePointCode: OpCode

    Permalink
  50. val DeserializeContextCode: OpCode

    Permalink
  51. val DeserializeRegisterCode: OpCode

    Permalink
  52. val DivisionCode: OpCode

    Permalink
  53. val DowncastCode: OpCode

    Permalink
  54. val EqCode: OpCode

    Permalink
  55. val ExistsCode: OpCode

    Permalink
  56. val ExponentiateCode: OpCode

    Permalink
  57. val ExtractAmountCode: OpCode

    Permalink
  58. val ExtractBytesCode: OpCode

    Permalink
  59. val ExtractBytesWithNoRefCode: OpCode

    Permalink
  60. val ExtractCreationInfoCode: OpCode

    Permalink
  61. val ExtractIdCode: OpCode

    Permalink
  62. val ExtractRegisterAs: OpCode

    Permalink
  63. val ExtractScriptBytesCode: OpCode

    Permalink
  64. val FalseCode: OpCode

    Permalink
  65. val FilterCode: OpCode

    Permalink
  66. val FirstDataType: OpCode

    Permalink

    Decoding of types depends on the first byte and in general is a recursive procedure consuming some number of bytes from Reader.

    Decoding of types depends on the first byte and in general is a recursive procedure consuming some number of bytes from Reader. All data types are recognized by the first byte falling in the region [FirstDataType .. LastDataType]

    Definition Classes
    TypeCodes
  67. val FirstFuncType: OpCode

    Permalink

    SFunc types occupy remaining space of byte values [FirstFuncType ..

    SFunc types occupy remaining space of byte values [FirstFuncType .. 255]

    Definition Classes
    TypeCodes
  68. val FlatMapCollectionCode: OpCode

    Permalink
  69. val FoldCode: OpCode

    Permalink
  70. val ForAllCode: OpCode

    Permalink
  71. val FunDefCode: OpCode

    Permalink
  72. val FuncApplyCode: OpCode

    Permalink
  73. val FuncValueCode: OpCode

    Permalink
  74. val GeCode: OpCode

    Permalink
  75. val GetVarCode: OpCode

    Permalink
  76. val GlobalCode: OpCode

    Permalink
  77. val GroupGeneratorCode: OpCode

    Permalink
  78. val GtCode: OpCode

    Permalink
  79. val HeightCode: OpCode

    Permalink
  80. val IfCode: OpCode

    Permalink
  81. val InputsCode: OpCode

    Permalink
  82. val IntPlusMonoidCode: OpCodeExtra

    Permalink
  83. val LastBlockUtxoRootHashCode: OpCode

    Permalink
  84. val LastConstantCode: OpCode

    Permalink

    The last constant code is equal to FirstFuncType which represent generic function type.

    The last constant code is equal to FirstFuncType which represent generic function type. We use this single code to represent all functional constants, since we don't have enough space in single byte. Subsequent bytes have to be read from Reader in order to decode the type of the function and the corresponding data.

    Definition Classes
    ValueCodes
  85. val LastDataType: OpCode

    Permalink
    Definition Classes
    TypeCodes
  86. val LastFuncType: OpCode

    Permalink
    Definition Classes
    TypeCodes
  87. val LeCode: OpCode

    Permalink
  88. val LogicalNotCode: OpCode

    Permalink
  89. val LongToByteArrayCode: OpCode

    Permalink
  90. val LtCode: OpCode

    Permalink
  91. val MapCollectionCode: OpCode

    Permalink
  92. val MaxCode: OpCode

    Permalink
  93. val MethodCallCode: OpCode

    Permalink
  94. val MinCode: OpCode

    Permalink
  95. val MinerPubkeyCode: OpCode

    Permalink
  96. val MinusCode: OpCode

    Permalink
  97. val MinusModQCode: OpCode

    Permalink
  98. val ModQCode: OpCode

    Permalink
  99. val ModuloCode: OpCode

    Permalink
  100. val MultiplyCode: OpCode

    Permalink
  101. val MultiplyGroupCode: OpCode

    Permalink
  102. val NegationCode: OpCode

    Permalink
  103. val NeqCode: OpCode

    Permalink
  104. val NoneValueCode: OpCode

    Permalink
  105. object OpCode extends TaggedType[Byte]

    Permalink
  106. object OpCodeExtra extends TaggedType[Short]

    Permalink
  107. val OpCostCode: OpCodeExtra

    Permalink
  108. val OptionGetCode: OpCode

    Permalink
  109. val OptionGetOrElseCode: OpCode

    Permalink
  110. val OptionIsDefinedCode: OpCode

    Permalink
  111. val OrCode: OpCode

    Permalink
  112. val OutputsCode: OpCode

    Permalink
  113. val PairOfColsCtorCode: OpCodeExtra

    Permalink
  114. val PerKbCostOfCode: OpCodeExtra

    Permalink
  115. val PlusCode: OpCode

    Permalink
  116. val PlusModQCode: OpCode

    Permalink
  117. val PropertyCallCode: OpCode

    Permalink
  118. val ProveDHTupleCode: OpCode

    Permalink
  119. val ProveDlogCode: OpCode

    Permalink
  120. val SAVMTValCode: OpCodeExtra

    Permalink
  121. val SAVMValueSizeCode: OpCodeExtra

    Permalink
  122. val SBMBytesCode: OpCodeExtra

    Permalink
  123. val SBMBytesWithoutRefCode: OpCodeExtra

    Permalink
  124. val SBMGetRegCode: OpCodeExtra

    Permalink
  125. val SBMPropositionBytesCode: OpCodeExtra

    Permalink
  126. val SBMRegistersCode: OpCodeExtra

    Permalink
  127. val SBMTokensCode: OpCodeExtra

    Permalink
  128. val SCMDataInputsCode: OpCodeExtra

    Permalink
  129. val SCMGetVarCode: OpCodeExtra

    Permalink
  130. val SCMHeadersCode: OpCodeExtra

    Permalink
  131. val SCMInputsCode: OpCodeExtra

    Permalink
  132. val SCMLastBlockUtxoRootHashCode: OpCodeExtra

    Permalink
  133. val SCMOutputsCode: OpCodeExtra

    Permalink
  134. val SCMPreHeaderCode: OpCodeExtra

    Permalink
  135. val SCMSelfBoxCode: OpCodeExtra

    Permalink
  136. val SCollMSizesCode: OpCodeExtra

    Permalink
  137. val SFuncMSizeEnvCode: OpCodeExtra

    Permalink
  138. val SOptMSizeOptCode: OpCodeExtra

    Permalink
  139. val SPCMSomeCode: OpCodeExtra

    Permalink
  140. val SPairLCode: OpCodeExtra

    Permalink
  141. val SPairRCode: OpCodeExtra

    Permalink
  142. val SSPMPropBytesCode: OpCodeExtra

    Permalink
  143. val Select1Code: OpCode

    Permalink
  144. val Select2Code: OpCode

    Permalink
  145. val Select3Code: OpCode

    Permalink
  146. val Select4Code: OpCode

    Permalink
  147. val Select5Code: OpCode

    Permalink
  148. val SelectFieldCode: OpCode

    Permalink
  149. val SelfCode: OpCode

    Permalink
  150. val SigmaAndCode: OpCode

    Permalink
  151. val SigmaOrCode: OpCode

    Permalink
  152. val SigmaPropBytesCode: OpCode

    Permalink
  153. val SigmaPropIsProvenCode: OpCode

    Permalink
  154. val SizeMDataSizeCode: OpCodeExtra

    Permalink
  155. val SizeOfCode: OpCode

    Permalink
  156. val SliceCode: OpCode

    Permalink
  157. val SomeValueCode: OpCode

    Permalink
  158. val SubstConstantsCode: OpCode

    Permalink
  159. val TaggedVariableCode: OpCode

    Permalink
  160. val ThunkDefCode: OpCodeExtra

    Permalink
  161. val ThunkForceCode: OpCodeExtra

    Permalink
  162. val TrivialPropFalseCode: OpCode

    Permalink
  163. val TrivialPropTrueCode: OpCode

    Permalink
  164. val TrueCode: OpCode

    Permalink
  165. val TupleCode: OpCode

    Permalink
  166. val UOSizeOfCode: OpCodeExtra

    Permalink
  167. val Undefined: OpCode

    Permalink
  168. val UnitConstantCode: OpCode

    Permalink
  169. val UpcastCode: OpCode

    Permalink
  170. val ValDefCode: OpCode

    Permalink
  171. val ValUseCode: OpCode

    Permalink
  172. val XorCode: OpCode

    Permalink
  173. val XorOfCode: OpCode

    Permalink
  174. final def asInstanceOf[T0]: T0

    Permalink
    Definition Classes
    Any
  175. def clone(): AnyRef

    Permalink
    Attributes
    protected[java.lang]
    Definition Classes
    AnyRef
    Annotations
    @throws( ... )
  176. final def eq(arg0: AnyRef): Boolean

    Permalink
    Definition Classes
    AnyRef
  177. def equals(arg0: Any): Boolean

    Permalink
    Definition Classes
    AnyRef → Any
  178. def finalize(): Unit

    Permalink
    Attributes
    protected[java.lang]
    Definition Classes
    AnyRef
    Annotations
    @throws( classOf[java.lang.Throwable] )
  179. final def getClass(): Class[_]

    Permalink
    Definition Classes
    AnyRef → Any
  180. def hashCode(): Int

    Permalink
    Definition Classes
    AnyRef → Any
  181. final def isInstanceOf[T0]: Boolean

    Permalink
    Definition Classes
    Any
  182. final def ne(arg0: AnyRef): Boolean

    Permalink
    Definition Classes
    AnyRef
  183. final def notify(): Unit

    Permalink
    Definition Classes
    AnyRef
  184. final def notifyAll(): Unit

    Permalink
    Definition Classes
    AnyRef
  185. final def synchronized[T0](arg0: ⇒ T0): T0

    Permalink
    Definition Classes
    AnyRef
  186. def toExtra(oc: OpCode): OpCodeExtra

    Permalink
  187. def toString(): String

    Permalink
    Definition Classes
    AnyRef → Any
  188. final def wait(): Unit

    Permalink
    Definition Classes
    AnyRef
    Annotations
    @throws( ... )
  189. final def wait(arg0: Long, arg1: Int): Unit

    Permalink
    Definition Classes
    AnyRef
    Annotations
    @throws( ... )
  190. final def wait(arg0: Long): Unit

    Permalink
    Definition Classes
    AnyRef
    Annotations
    @throws( ... )

Inherited from ValueCodes

Inherited from TypeCodes

Inherited from AnyRef

Inherited from Any

Ungrouped