vm

package
v0.0.0-...-866bf41 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Sep 26, 2018 License: LGPL-3.0 Imports: 1 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

View Source
var Syscalls = map[string]string{

	"GetScriptContainer":        "System.ExecutionEngine.GetScriptContainer",
	"GetExecutingScriptHash":    "System.ExecutionEngine.GetExecutingScriptHash",
	"GetCallingScriptHash":      "System.ExecutionEngine.GetCallingScriptHash",
	"GetEntryScriptHash":        "System.ExecutionEngine.GetEntryScriptHash",
	"GetBlockTransactionCount":  "System.Block.GetTransactionCount",
	"GetBlockTransactions":      "System.Block.GetTransactions",
	"GetBlockTransaction":       "System.Block.GetTransaction",
	"GetBlockchainHeight":       "System.Blockchain.GetHeight",
	"GetBlockchainHeader":       "System.Blockchain.GetHeader",
	"GetBlockchainBlock":        "System.Blockchain.GetBlock",
	"GetBlockchainTransaction":  "System.Blockchain.GetTransaction",
	"GetContract":               "System.Blockchain.GetContract",
	"GetTransactionHeight":      "System.Blockchain.GetTransactionHeight",
	"GetHeaderIndex":            "System.Header.GetIndex",
	"GetHeaderHash":             "System.Header.GetHash",
	"GetHeaderPrevHash":         "System.Header.GetPrevHash",
	"GetHeaderTimestamp":        "System.Header.GetTimestamp",
	"GetTransHash":              "System.Transaction.GetHash",
	"GetContractStorageContext": "System.Contract.GetStorageContext",
	"GetStorage":                "System.Storage.Get",
	"PutStorage":                "System.Storage.Put",
	"DeleteSorage":              "System.Storage.Delete",
	"GetStorageContext":         "System.Storage.GetContext",
	"GetReadOnlyStorageContext": "System.Storage.GetReadOnlyContext",
	"StorageCtxAsReadOnly":      "System.StorageContext.AsReadOnly",
	"RuntimeGetTime":            "System.Runtime.GetTime",
	"RuntimeCheckWitness":       "System.Runtime.CheckWitness",
	"RuntimeNotify":             "System.Runtime.Notify",
	"RuntimeLog":                "System.Runtime.Log",
	"RuntimeGetTrigger":         "System.Runtime.GetTrigger",
	"RuntimeSerialize":          "System.Runtime.Serialize",
	"RuntimeDeserialize":        "System.Runtime.Deserialize",
	"DestroyContract":           "System.Contract.Destroy",

	"Base58ToAddress": "System.Runtime.Base58ToAddress",
	"AddressToBase58": "System.Runtime.AddressToBase58",
	"VerifyBase58":    "System.Runtime.VerifyBase58",

	"GetContext": "Neo.Storage.GetContext",
	"Put":        "Neo.Storage.Put",
	"Get":        "Neo.Storage.Get",
	"Delete":     "Neo.Storage.Delete",

	"GetTrigger":      "Neo.Runtime.GetTrigger",
	"CheckWitness":    "Neo.Runtime.CheckWitness",
	"GetCurrentBlock": "Neo.Runtime.GetCurrentBlock",
	"GetTime":         "Neo.Runtime.GetTime",
	"Notify":          "Neo.Runtime.Notify",
	"Log":             "Neo.Runtime.Log",

	"Invoke":                   "Ontology.Native.Invoke",
	"GetAttrUsage":             "Ontology.Attribute.GetUsage",
	"GetAttrData":              "Ontology.Attribute.GetData",
	"GetHeaderVersion":         "Ontology.Header.GetVersion",
	"GetHeaderNextConsensus":   "Ontology.Header.GetNextConsensus",
	"GetHeaderConsensusData":   "Ontology.Header.GetConsensusData",
	"GetHeaderMerkleRoot":      "Ontology.Header.GetMerkleRoot",
	"GetTransactionType":       "Ontology.Transaction.GetType",
	"GetTransactionAttributes": "Ontology.Transaction.GetAttributes",
	"CreateContract":           "Ontology.Contract.Create",
	"MigrateContract":          "Ontology.Contract.Migrate",
	"GetContractScript":        "Ontology.Contract.GetScript",
}

Syscalls are a mapping between the syscall function name and the registerd VM interop API.

Functions

This section is empty.

Types

type Opcode

type Opcode byte

Opcode is an single operational instruction for the GO NEO virtual machine.

const (
	// Constants
	Opush0       Opcode = 0x00 // An empty array of bytes is pushed onto the stack.
	Opushf       Opcode = Opush0
	Opushbytes1  Opcode = 0x01 // 0x01-0x4B The next opcode bytes is data to be pushed onto the stack
	Opushbytes75 Opcode = 0x4B
	Opushdata1   Opcode = 0x4C // The next byte contains the number of bytes to be pushed onto the stack.
	Opushdata2   Opcode = 0x4D // The next two bytes contain the number of bytes to be pushed onto the stack.
	Opushdata4   Opcode = 0x4E // The next four bytes contain the number of bytes to be pushed onto the stack.
	Opushm1      Opcode = 0x4F // The number -1 is pushed onto the stack.
	Opush1       Opcode = 0x51
	Opusht       Opcode = Opush1
	Opush2       Opcode = 0x52 // The number 2 is pushed onto the stack.
	Opush3       Opcode = 0x53 // The number 3 is pushed onto the stack.
	Opush4       Opcode = 0x54 // The number 4 is pushed onto the stack.
	Opush5       Opcode = 0x55 // The number 5 is pushed onto the stack.
	Opush6       Opcode = 0x56 // The number 6 is pushed onto the stack.
	Opush7       Opcode = 0x57 // The number 7 is pushed onto the stack.
	Opush8       Opcode = 0x58 // The number 8 is pushed onto the stack.
	Opush9       Opcode = 0x59 // The number 9 is pushed onto the stack.
	Opush10      Opcode = 0x5A // The number 10 is pushed onto the stack.
	Opush11      Opcode = 0x5B // The number 11 is pushed onto the stack.
	Opush12      Opcode = 0x5C // The number 12 is pushed onto the stack.
	Opush13      Opcode = 0x5D // The number 13 is pushed onto the stack.
	Opush14      Opcode = 0x5E // The number 14 is pushed onto the stack.
	Opush15      Opcode = 0x5F // The number 15 is pushed onto the stack.
	Opush16      Opcode = 0x60 // The number 16 is pushed onto the stack.

	// Flow control
	Onop      Opcode = 0x61 // No operation.
	Ojmp      Opcode = 0x62
	Ojmpif    Opcode = 0x63
	Ojmpifnot Opcode = 0x64
	Ocall     Opcode = 0x65
	Oret      Opcode = 0x66
	Oappcall  Opcode = 0x67
	Osyscall  Opcode = 0x68
	Otailcall Opcode = 0x69

	// The stack
	Odupfromaltstack Opcode = 0x6A
	Otoaltstack      Opcode = 0x6B // Puts the input onto the top of the alt stack. Removes it from the main stack.
	Ofromaltstack    Opcode = 0x6C // Puts the input onto the top of the main stack. Removes it from the alt stack.
	Oxdrop           Opcode = 0x6D
	Oxswap           Opcode = 0x72
	Oxtuck           Opcode = 0x73
	Odepth           Opcode = 0x74 // Puts the number of stack items onto the stack.
	Odrop            Opcode = 0x75 // Removes the top stack item.
	Odup             Opcode = 0x76 // Duplicates the top stack item.
	Onip             Opcode = 0x77 // Removes the second-to-top stack item.
	Oover            Opcode = 0x78 // Copies the second-to-top stack item to the top.
	Opick            Opcode = 0x79 // The item n back in the stack is copied to the top.
	Oroll            Opcode = 0x7A // The item n back in the stack is moved to the top.
	Orot             Opcode = 0x7B // The top three items on the stack are rotated to the left.
	Oswap            Opcode = 0x7C // The top two items on the stack are swapped.
	Otuck            Opcode = 0x7D // The item at the top of the stack is copied and inserted before the second-to-top item.

	// Splice
	Ocat    Opcode = 0x7E // Concatenates two strings.
	Osubstr Opcode = 0x7F // Returns a section of a string.
	Oleft   Opcode = 0x80 // Keeps only characters left of the specified point in a string.
	Oright  Opcode = 0x81 // Keeps only characters right of the specified point in a string.
	Osize   Opcode = 0x82 // Returns the length of the input string.

	// Bitwise logic
	Oinvert Opcode = 0x83 // Flips all of the bits in the input.
	Oand    Opcode = 0x84 // Boolean and between each bit in the inputs.
	Oor     Opcode = 0x85 // Boolean or between each bit in the inputs.
	Oxor    Opcode = 0x86 // Boolean exclusive or between each bit in the inputs.
	Oequal  Opcode = 0x87 // Returns 1 if the inputs are exactly equal, 0 otherwise.

	// Arithmetic
	// Note: Arithmetic inputs are limited to signed 32-bit integers, but may overflow their output.
	Oinc         Opcode = 0x8B // 1 is added to the input.
	Odec         Opcode = 0x8C // 1 is subtracted from the input.
	Osign        Opcode = 0x8D
	Onegate      Opcode = 0x8F // The sign of the input is flipped.
	Oabs         Opcode = 0x90 // The input is made positive.
	Onot         Opcode = 0x91 // If the input is 0 or 1, it is flipped. Otherwise the output will be 0.
	Onz          Opcode = 0x92 // Returns 0 if the input is 0. 1 otherwise.
	Oadd         Opcode = 0x93 // a is added to b.
	Osub         Opcode = 0x94 // b is subtracted from a.
	Omul         Opcode = 0x95 // a is multiplied by b.
	Odiv         Opcode = 0x96 // a is divided by b.
	Omod         Opcode = 0x97 // Returns the remainder after dividing a by b.
	Oshl         Opcode = 0x98 // Shifts a left b bits, preserving sign.
	Oshr         Opcode = 0x99 // Shifts a right b bits, preserving sign.
	Obooland     Opcode = 0x9A // If both a and b are not 0, the output is 1. Otherwise 0.
	Oboolor      Opcode = 0x9B // If a or b is not 0, the output is 1. Otherwise 0.
	Onumequal    Opcode = 0x9C // Returns 1 if the numbers are equal, 0 otherwise.
	Onumnotequal Opcode = 0x9E // Returns 1 if the numbers are not equal, 0 otherwise.
	Olt          Opcode = 0x9F // Returns 1 if a is less than b, 0 otherwise.
	Ogt          Opcode = 0xA0 // Returns 1 if a is greater than b, 0 otherwise.
	Olte         Opcode = 0xA1 // Returns 1 if a is less than or equal to b, 0 otherwise.
	Ogte         Opcode = 0xA2 // Returns 1 if a is greater than or equal to b, 0 otherwise.
	Omin         Opcode = 0xA3 // Returns the smaller of a and b.
	Omax         Opcode = 0xA4 // Returns the larger of a and b.
	Owithin      Opcode = 0xA5 // Returns 1 if x is within the specified range (left-inclusive), 0 otherwise.

	// Crypto
	Osha1          Opcode = 0xA7 // The input is hashed using SHA-1.
	Osha256        Opcode = 0xA8 // The input is hashed using SHA-256.
	Ohash160       Opcode = 0xA9
	Ohash256       Opcode = 0xAA
	Ochecksig      Opcode = 0xAC
	Ocheckmultisig Opcode = 0xAE

	// array
	Oarraysize Opcode = 0xC0
	Opack      Opcode = 0xC1
	Ounpack    Opcode = 0xC2
	Opickitem  Opcode = 0xC3
	Osetitem   Opcode = 0xC4
	Onewarray  Opcode = 0xC5 // Pops size from stack and creates a new array with that size, and pushes the array into the stack
	Onewstruct Opcode = 0xC6
	Onewmap    Opcode = 0xC7 //new opcode for map
	Oappend    Opcode = 0xC8
	Oreverse   Opcode = 0xC9
	Oremove    Opcode = 0xCA
	OHaskey    Opcode = 0xCB
	OKeys      Opcode = 0xCC
	OValues    Opcode = 0xCD

	// exceptions
	Othrow      Opcode = 0xF0
	Othrowifnot Opcode = 0xF1
)

List of supported opcodes.

func (Opcode) String

func (i Opcode) String() string

Directories

Path Synopsis
api

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL