xvm

package
v0.0.0-...-d2b8996 Latest Latest
Warning

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

Go to latest
Published: Sep 8, 2019 License: BSD-3-Clause Imports: 11 Imported by: 2

Documentation

Index

Constants

View Source
const (
	ER_SCRIPT_INSTRUCTION_UNKNOWN     int = 1101
	ER_SCRIPT_INSTRUCTION_READ_ERROR  int = 1102
	ER_SCRIPT_OPCODE_READ_ERROR       int = 1103
	ER_SCRIPT_OPCODE_SIZE_MALFORMED   int = 1104
	ER_SCRIPT_STACK_INDEX_INVALID     int = 1110
	ER_SCRIPT_STACK_OPERATION_INVALID int = 1111
	ER_SCRIPTNUM_TOO_BIG              int = 1201
	ER_SCRIPTNUM_MINIMAL_DATA         int = 1202
	ER_VM_EXEC_OPCODE_FAILED          int = 1300
)

Error type.

View Source
const (
	OpCondFalse = 0
	OpCondTrue  = 1
	OpCondSkip  = 2
)

Conditional execution constants.

View Source
const (
	OP_0                   = 0x00 // 0
	OP_FALSE               = 0x00 // 0 - AKA OP_0
	OP_DATA_1              = 0x01 // 1
	OP_DATA_2              = 0x02 // 2
	OP_DATA_3              = 0x03 // 3
	OP_DATA_4              = 0x04 // 4
	OP_DATA_5              = 0x05 // 5
	OP_DATA_6              = 0x06 // 6
	OP_DATA_7              = 0x07 // 7
	OP_DATA_8              = 0x08 // 8
	OP_DATA_9              = 0x09 // 9
	OP_DATA_10             = 0x0a // 10
	OP_DATA_11             = 0x0b // 11
	OP_DATA_12             = 0x0c // 12
	OP_DATA_13             = 0x0d // 13
	OP_DATA_14             = 0x0e // 14
	OP_DATA_15             = 0x0f // 15
	OP_DATA_16             = 0x10 // 16
	OP_DATA_17             = 0x11 // 17
	OP_DATA_18             = 0x12 // 18
	OP_DATA_19             = 0x13 // 19
	OP_DATA_20             = 0x14 // 20
	OP_DATA_21             = 0x15 // 21
	OP_DATA_22             = 0x16 // 22
	OP_DATA_23             = 0x17 // 23
	OP_DATA_24             = 0x18 // 24
	OP_DATA_25             = 0x19 // 25
	OP_DATA_26             = 0x1a // 26
	OP_DATA_27             = 0x1b // 27
	OP_DATA_28             = 0x1c // 28
	OP_DATA_29             = 0x1d // 29
	OP_DATA_30             = 0x1e // 30
	OP_DATA_31             = 0x1f // 31
	OP_DATA_32             = 0x20 // 32
	OP_DATA_33             = 0x21 // 33
	OP_DATA_34             = 0x22 // 34
	OP_DATA_35             = 0x23 // 35
	OP_DATA_36             = 0x24 // 36
	OP_DATA_37             = 0x25 // 37
	OP_DATA_38             = 0x26 // 38
	OP_DATA_39             = 0x27 // 39
	OP_DATA_40             = 0x28 // 40
	OP_DATA_41             = 0x29 // 41
	OP_DATA_42             = 0x2a // 42
	OP_DATA_43             = 0x2b // 43
	OP_DATA_44             = 0x2c // 44
	OP_DATA_45             = 0x2d // 45
	OP_DATA_46             = 0x2e // 46
	OP_DATA_47             = 0x2f // 47
	OP_DATA_48             = 0x30 // 48
	OP_DATA_49             = 0x31 // 49
	OP_DATA_50             = 0x32 // 50
	OP_DATA_51             = 0x33 // 51
	OP_DATA_52             = 0x34 // 52
	OP_DATA_53             = 0x35 // 53
	OP_DATA_54             = 0x36 // 54
	OP_DATA_55             = 0x37 // 55
	OP_DATA_56             = 0x38 // 56
	OP_DATA_57             = 0x39 // 57
	OP_DATA_58             = 0x3a // 58
	OP_DATA_59             = 0x3b // 59
	OP_DATA_60             = 0x3c // 60
	OP_DATA_61             = 0x3d // 61
	OP_DATA_62             = 0x3e // 62
	OP_DATA_63             = 0x3f // 63
	OP_DATA_64             = 0x40 // 64
	OP_DATA_65             = 0x41 // 65
	OP_DATA_66             = 0x42 // 66
	OP_DATA_67             = 0x43 // 67
	OP_DATA_68             = 0x44 // 68
	OP_DATA_69             = 0x45 // 69
	OP_DATA_70             = 0x46 // 70
	OP_DATA_71             = 0x47 // 71
	OP_DATA_72             = 0x48 // 72
	OP_DATA_73             = 0x49 // 73
	OP_DATA_74             = 0x4a // 74
	OP_DATA_75             = 0x4b // 75
	OP_PUSHDATA1           = 0x4c // 76
	OP_PUSHDATA2           = 0x4d // 77
	OP_PUSHDATA4           = 0x4e // 78
	OP_1NEGATE             = 0x4f // 79
	OP_RESERVED            = 0x50 // 80
	OP_1                   = 0x51 // 81 - AKA OP_TRUE
	OP_TRUE                = 0x51 // 81
	OP_2                   = 0x52 // 82
	OP_3                   = 0x53 // 83
	OP_4                   = 0x54 // 84
	OP_5                   = 0x55 // 85
	OP_6                   = 0x56 // 86
	OP_7                   = 0x57 // 87
	OP_8                   = 0x58 // 88
	OP_9                   = 0x59 // 89
	OP_10                  = 0x5a // 90
	OP_11                  = 0x5b // 91
	OP_12                  = 0x5c // 92
	OP_13                  = 0x5d // 93
	OP_14                  = 0x5e // 94
	OP_15                  = 0x5f // 95
	OP_16                  = 0x60 // 96
	OP_NOP                 = 0x61 // 97
	OP_VER                 = 0x62 // 98
	OP_IF                  = 0x63 // 99
	OP_NOTIF               = 0x64 // 100
	OP_VERIF               = 0x65 // 101
	OP_VERNOTIF            = 0x66 // 102
	OP_ELSE                = 0x67 // 103
	OP_ENDIF               = 0x68 // 104
	OP_VERIFY              = 0x69 // 105
	OP_RETURN              = 0x6a // 106
	OP_TOALTSTACK          = 0x6b // 107
	OP_FROMALTSTACK        = 0x6c // 108
	OP_2DROP               = 0x6d // 109
	OP_2DUP                = 0x6e // 110
	OP_3DUP                = 0x6f // 111
	OP_2OVER               = 0x70 // 112
	OP_2ROT                = 0x71 // 113
	OP_2SWAP               = 0x72 // 114
	OP_IFDUP               = 0x73 // 115
	OP_DEPTH               = 0x74 // 116
	OP_DROP                = 0x75 // 117
	OP_DUP                 = 0x76 // 118
	OP_NIP                 = 0x77 // 119
	OP_OVER                = 0x78 // 120
	OP_PICK                = 0x79 // 121
	OP_ROLL                = 0x7a // 122
	OP_ROT                 = 0x7b // 123
	OP_SWAP                = 0x7c // 124
	OP_TUCK                = 0x7d // 125
	OP_CAT                 = 0x7e // 126
	OP_SUBSTR              = 0x7f // 127
	OP_LEFT                = 0x80 // 128
	OP_RIGHT               = 0x81 // 129
	OP_SIZE                = 0x82 // 130
	OP_INVERT              = 0x83 // 131
	OP_AND                 = 0x84 // 132
	OP_OR                  = 0x85 // 133
	OP_XOR                 = 0x86 // 134
	OP_EQUAL               = 0x87 // 135
	OP_EQUALVERIFY         = 0x88 // 136
	OP_RESERVED1           = 0x89 // 137
	OP_RESERVED2           = 0x8a // 138
	OP_1ADD                = 0x8b // 139
	OP_1SUB                = 0x8c // 140
	OP_2MUL                = 0x8d // 141
	OP_2DIV                = 0x8e // 142
	OP_NEGATE              = 0x8f // 143
	OP_ABS                 = 0x90 // 144
	OP_NOT                 = 0x91 // 145
	OP_0NOTEQUAL           = 0x92 // 146
	OP_ADD                 = 0x93 // 147
	OP_SUB                 = 0x94 // 148
	OP_MUL                 = 0x95 // 149
	OP_DIV                 = 0x96 // 150
	OP_MOD                 = 0x97 // 151
	OP_LSHIFT              = 0x98 // 152
	OP_RSHIFT              = 0x99 // 153
	OP_BOOLAND             = 0x9a // 154
	OP_BOOLOR              = 0x9b // 155
	OP_NUMEQUAL            = 0x9c // 156
	OP_NUMEQUALVERIFY      = 0x9d // 157
	OP_NUMNOTEQUAL         = 0x9e // 158
	OP_LESSTHAN            = 0x9f // 159
	OP_GREATERTHAN         = 0xa0 // 160
	OP_LESSTHANOREQUAL     = 0xa1 // 161
	OP_GREATERTHANOREQUAL  = 0xa2 // 162
	OP_MIN                 = 0xa3 // 163
	OP_MAX                 = 0xa4 // 164
	OP_WITHIN              = 0xa5 // 165
	OP_RIPEMD160           = 0xa6 // 166
	OP_SHA1                = 0xa7 // 167
	OP_SHA256              = 0xa8 // 168
	OP_HASH160             = 0xa9 // 169
	OP_HASH256             = 0xaa // 170
	OP_CODESEPARATOR       = 0xab // 171
	OP_CHECKSIG            = 0xac // 172
	OP_CHECKSIGVERIFY      = 0xad // 173
	OP_CHECKMULTISIG       = 0xae // 174
	OP_CHECKMULTISIGVERIFY = 0xaf // 175
	OP_NOP1                = 0xb0 // 176
	OP_NOP2                = 0xb1 // 177
	OP_CHECKLOCKTIMEVERIFY = 0xb1 // 177 - AKA OP_NOP2
	OP_NOP3                = 0xb2 // 178
	OP_CHECKSEQUENCEVERIFY = 0xb2 // 178 - AKA OP_NOP3
	OP_NOP4                = 0xb3 // 179
	OP_NOP5                = 0xb4 // 180
	OP_NOP6                = 0xb5 // 181
	OP_NOP7                = 0xb6 // 182
	OP_NOP8                = 0xb7 // 183
	OP_NOP9                = 0xb8 // 184
	OP_NOP10               = 0xb9 // 185
	OP_UNKNOWN186          = 0xba // 186
	OP_UNKNOWN187          = 0xbb // 187
	OP_UNKNOWN188          = 0xbc // 188
	OP_UNKNOWN189          = 0xbd // 189
	OP_UNKNOWN190          = 0xbe // 190
	OP_UNKNOWN191          = 0xbf // 191
	OP_UNKNOWN192          = 0xc0 // 192
	OP_UNKNOWN193          = 0xc1 // 193
	OP_UNKNOWN194          = 0xc2 // 194
	OP_UNKNOWN195          = 0xc3 // 195
	OP_UNKNOWN196          = 0xc4 // 196
	OP_UNKNOWN197          = 0xc5 // 197
	OP_UNKNOWN198          = 0xc6 // 198
	OP_UNKNOWN199          = 0xc7 // 199
	OP_UNKNOWN200          = 0xc8 // 200
	OP_UNKNOWN201          = 0xc9 // 201
	OP_UNKNOWN202          = 0xca // 202
	OP_UNKNOWN203          = 0xcb // 203
	OP_UNKNOWN204          = 0xcc // 204
	OP_UNKNOWN205          = 0xcd // 205
	OP_UNKNOWN206          = 0xce // 206
	OP_UNKNOWN207          = 0xcf // 207
	OP_UNKNOWN208          = 0xd0 // 208
	OP_UNKNOWN209          = 0xd1 // 209
	OP_UNKNOWN210          = 0xd2 // 210
	OP_UNKNOWN211          = 0xd3 // 211
	OP_UNKNOWN212          = 0xd4 // 212
	OP_UNKNOWN213          = 0xd5 // 213
	OP_UNKNOWN214          = 0xd6 // 214
	OP_UNKNOWN215          = 0xd7 // 215
	OP_UNKNOWN216          = 0xd8 // 216
	OP_UNKNOWN217          = 0xd9 // 217
	OP_UNKNOWN218          = 0xda // 218
	OP_UNKNOWN219          = 0xdb // 219
	OP_UNKNOWN220          = 0xdc // 220
	OP_UNKNOWN221          = 0xdd // 221
	OP_UNKNOWN222          = 0xde // 222
	OP_UNKNOWN223          = 0xdf // 223
	OP_UNKNOWN224          = 0xe0 // 224
	OP_UNKNOWN225          = 0xe1 // 225
	OP_UNKNOWN226          = 0xe2 // 226
	OP_UNKNOWN227          = 0xe3 // 227
	OP_UNKNOWN228          = 0xe4 // 228
	OP_UNKNOWN229          = 0xe5 // 229
	OP_UNKNOWN230          = 0xe6 // 230
	OP_UNKNOWN231          = 0xe7 // 231
	OP_UNKNOWN232          = 0xe8 // 232
	OP_UNKNOWN233          = 0xe9 // 233
	OP_UNKNOWN234          = 0xea // 234
	OP_UNKNOWN235          = 0xeb // 235
	OP_UNKNOWN236          = 0xec // 236
	OP_UNKNOWN237          = 0xed // 237
	OP_UNKNOWN238          = 0xee // 238
	OP_UNKNOWN239          = 0xef // 239
	OP_UNKNOWN240          = 0xf0 // 240
	OP_UNKNOWN241          = 0xf1 // 241
	OP_UNKNOWN242          = 0xf2 // 242
	OP_UNKNOWN243          = 0xf3 // 243
	OP_UNKNOWN244          = 0xf4 // 244
	OP_UNKNOWN245          = 0xf5 // 245
	OP_UNKNOWN246          = 0xf6 // 246
	OP_UNKNOWN247          = 0xf7 // 247
	OP_UNKNOWN248          = 0xf8 // 248
	OP_UNKNOWN249          = 0xf9 // 249
	OP_SMALLINTEGER        = 0xfa // 250 - bitcoin core internal
	OP_PUBKEYS             = 0xfb // 251 - bitcoin core internal
	OP_UNKNOWN252          = 0xfc // 252
	OP_PUBKEYHASH          = 0xfd // 253 - bitcoin core internal
	OP_PUBKEY              = 0xfe // 254 - bitcoin core internal
	OP_INVALIDOPCODE       = 0xff // 255 - bitcoin core internal
)

These constants are the values of the official opcodes used on the btc wiki, in bitcoin core and in most if not all other references and software related to handling Unit scripts.

Variables

View Source
var Errors = map[int]*xerror.Error{
	ER_SCRIPT_INSTRUCTION_UNKNOWN:     {Num: ER_SCRIPT_INSTRUCTION_UNKNOWN, State: "TS000", Message: "script.instruction.unknow[%v]"},
	ER_SCRIPT_INSTRUCTION_READ_ERROR:  {Num: ER_SCRIPT_INSTRUCTION_READ_ERROR, State: "TS000", Message: "script.read.instruction.error.remainning[%v]"},
	ER_SCRIPT_OPCODE_READ_ERROR:       {Num: ER_SCRIPT_OPCODE_READ_ERROR, State: "TS000", Message: "script.read.opcode[%v].requires[%v].bytes.but.remainning[%v]"},
	ER_SCRIPT_OPCODE_SIZE_MALFORMED:   {Num: ER_SCRIPT_OPCODE_SIZE_MALFORMED, State: "TS000", Message: "script.opcode[%v].size[%v].invalid"},
	ER_SCRIPT_STACK_INDEX_INVALID:     {Num: ER_SCRIPT_STACK_INDEX_INVALID, State: "TS000", Message: "script.stack.index[%v].invalid.for.stack.size[%v]"},
	ER_SCRIPT_STACK_OPERATION_INVALID: {Num: ER_SCRIPT_STACK_OPERATION_INVALID, State: "TS000", Message: "script.stack.operation[%v][%v].invalid"},
	ER_SCRIPTNUM_TOO_BIG:              {Num: ER_SCRIPTNUM_TOO_BIG, State: "TS000", Message: "script.num.value.encoded.as[%x].is.[%d]bytes.which.exceeds.the.max.allowed.of.[%d]"},
	ER_SCRIPTNUM_MINIMAL_DATA:         {Num: ER_SCRIPTNUM_MINIMAL_DATA, State: "TS000", Message: "script.num.value.encoded.as[%x].is.not.minimally.encoded"},
	ER_VM_EXEC_OPCODE_FAILED:          {Num: ER_VM_EXEC_OPCODE_FAILED, State: "TVM00", Message: "vm.execute.opcode[%v].failed"},
}

Errors -- the jump table of error.

Functions

func BoolBytes

func BoolBytes(v bool) []byte

BoolBytes -- converts a boolean into the appropriate byte array.

func DisasmString

func DisasmString(script []byte) string

DisasmString -- disasming the opcodes to the string instruction.

func RemoveOpcode

func RemoveOpcode(buf []byte, opcode byte) []byte

RemoveOpcode -- remove the opcode.

Types

type Engine

type Engine struct {
	// contains filtered or unexported fields
}

Engine -- the virtual matchine to execute the bitcoin scripts.

func NewEngine

func NewEngine() *Engine

NewEngine -- creates new Engine.

func (*Engine) DisableDebug

func (vm *Engine) DisableDebug()

DisableDebug -- disable the debug.

func (*Engine) EnableDebug

func (vm *Engine) EnableDebug()

EnableDebug -- enable the debug.

func (*Engine) Execute

func (vm *Engine) Execute(program []byte) error

Execute -- execute the scripts.

func (*Engine) PrintTrace

func (vm *Engine) PrintTrace()

PrintTrace -- pretty print the vm trace.

func (*Engine) SetSigHashFn

func (vm *Engine) SetSigHashFn(fn SigHashFn)

SetSigHashFn -- set hasher function.

func (*Engine) SetSigVerifyFn

func (vm *Engine) SetSigVerifyFn(fn SigVerifyFn)

SetSigVerifyFn -- set verify function.

func (*Engine) Step

func (vm *Engine) Step() (bool, error)

Step -- will execute the next instruction and move the program counter to the next opcode in the script, or the next script if the current has ended.

func (*Engine) Traces

func (vm *Engine) Traces() []Trace

Traces -- returns the trace records.

func (*Engine) Verify

func (vm *Engine) Verify(unlocking []byte, locking []byte) error

Verify -- verify the unlocking and locking.

type Instruction

type Instruction struct {
	// contains filtered or unexported fields
}

Instruction -- opcode that has been parsed and includes any potential data associated with it.

func (*Instruction) Data

func (instr *Instruction) Data() []byte

Data -- returns the instruce data.

func (*Instruction) OpCode

func (instr *Instruction) OpCode() byte

OpCode -- returns the opcode value.

type ScriptBuilder

type ScriptBuilder struct {
	// contains filtered or unexported fields
}

ScriptBuilder -- for building custom scripts

For example, the following would build a 2-of-3 multisig script for usage in a pay-to-script-hash (although in this situation MultiSigScript() would be a better choice to generate the script):

builder := NewScriptBuilder()
builder.AddOp(OP_2).AddData(pubKey1).AddData(pubKey2)
builder.AddData(pubKey3).AddOp(OP_3)
builder.AddOp(OP_CHECKMULTISIG)
script, err := builder.Script()

func NewScriptBuilder

func NewScriptBuilder() *ScriptBuilder

NewScriptBuilder -- creates ScriptBuilder

func (*ScriptBuilder) AddData

func (b *ScriptBuilder) AddData(data []byte) *ScriptBuilder

AddData -- push the passed data to the end of the script

func (*ScriptBuilder) AddInt64

func (b *ScriptBuilder) AddInt64(val int64) *ScriptBuilder

AddInt64 -- push the passed int64 to the end of script

func (*ScriptBuilder) AddOp

func (b *ScriptBuilder) AddOp(op byte) *ScriptBuilder

AddOp -- push the passed opcode to the end of script

func (*ScriptBuilder) Hash160

func (b *ScriptBuilder) Hash160() ([]byte, error)

Hash160 -- returns the hash160 of the script bytes.

func (*ScriptBuilder) Load

func (b *ScriptBuilder) Load(script string) *ScriptBuilder

Load -- load the string script and parse to instructions.

func (*ScriptBuilder) Reset

func (b *ScriptBuilder) Reset() *ScriptBuilder

Reset -- resets the script so it has no content

func (*ScriptBuilder) Script

func (b *ScriptBuilder) Script() ([]byte, error)

Script -- returns the currently built script When any errors occurred while building the script, the script will be returned up the point of the first error along with the error.

type ScriptNum

type ScriptNum int64

ScriptNum --

func MakeScriptNum

func MakeScriptNum(v []byte, scriptNumLen int) (ScriptNum, error)

MakeScriptNum -- convert the byte to script num.

func (ScriptNum) Bytes

func (n ScriptNum) Bytes() []byte

Bytes -- returns the number serialized as a little endian with a sign bit Example encodings:

   127 -> [0x7f]
  -127 -> [0xff]
   128 -> [0x80 0x00]
  -128 -> [0x80 0x80]
   129 -> [0x81 0x00]
  -129 -> [0x81 0x80]
   256 -> [0x00 0x01]
  -256 -> [0x00 0x81]
 32767 -> [0xff 0x7f]
-32767 -> [0xff 0xff]
 32768 -> [0x00 0x80 0x00]
-32768 -> [0x00 0x80 0x80]

func (ScriptNum) Int32

func (n ScriptNum) Int32() int32

Int32 -- returns the script number clamped to a valid int32.

type ScriptReader

type ScriptReader struct {
	// contains filtered or unexported fields
}

ScriptReader -- parsing custom script to parsed opcodes.

func NewScriptReader

func NewScriptReader(script []byte) *ScriptReader

NewScriptReader -- creates new ScriptReader.

func (*ScriptReader) AllInstructions

func (r *ScriptReader) AllInstructions() ([]Instruction, error)

AllInstructions -- returns all instructions.

func (*ScriptReader) DisasmRemaining

func (r *ScriptReader) DisasmRemaining() string

DisasmRemaining -- disasming the remaining opcodes in the reader.

func (*ScriptReader) NextInstruction

func (r *ScriptReader) NextInstruction() (*Instruction, error)

NextInstruction -- returns the current instruction.

type SigHashFn

type SigHashFn func(hashType byte) ([]byte, error)

SigHashFn -- hash function for checksig.

type SigVerifyFn

type SigVerifyFn func(pubkey []byte, hash []byte, signature []byte) error

SigVerifyFn -- verify function for checksig.

type Stack

type Stack struct {
	// contains filtered or unexported fields
}

Stack -- a stack of immutable objects to be used with bitcoin scripts.

func NewStack

func NewStack() *Stack

NewStack -- create new Stack.

func (*Stack) Clean

func (s *Stack) Clean()

Clean -- clean the stack.

func (*Stack) Copy

func (s *Stack) Copy() *Stack

Copy -- clone the stack to new.

func (*Stack) Depth

func (s *Stack) Depth() int

Depth -- returns the number of items on the stack.

func (*Stack) DropN

func (s *Stack) DropN(n int32) error

DropN -- removes the top N items from the stack. Stack: DropN(1): [... x1 x2] -> [... x1] DropN(2): [... x1 x2] -> [...]

func (*Stack) DupN

func (s *Stack) DupN(n int) error

DupN -- duplicates the top N items on the stack.

Stack: DupN(1): [... x1 x2] -> [... x1 x2 x2] DupN(2): [... x1 x2] -> [... x1 x2 x1 x2]

func (*Stack) PeekByteArray

func (s *Stack) PeekByteArray(idx int) ([]byte, error)

PeekByteArray -- returns the Nth item on the stack without removing it.

func (*Stack) PopBool

func (s *Stack) PopBool() (bool, error)

PopBool -- pops the value off the top of the stack, converts it into a bool, and returns it. Stack: [... x1 x2 x3] -> [... x1 x2]

func (*Stack) PopByteArray

func (s *Stack) PopByteArray() ([]byte, error)

PopByteArray -- pops the value off the top of the stack and returns it. Stack: [... x1 x2 x3] -> [... x1 x2]

func (*Stack) PopInt

func (s *Stack) PopInt() (ScriptNum, error)

PopInt -- pops the value off the top of the stack, converts it into a script num, and returns it. The act of converting to a script num enforces the consensus rules imposed on data interpreted as numbers. Stack: [... x1 x2 x3] -> [... x1 x2]

func (*Stack) PushBool

func (s *Stack) PushBool(val bool)

PushBool -- converts the provided boolean to a suitable byte array then pushes it onto the top of the stack. Stack: [... x1 x2] -> [... x1 x2 bool]

func (*Stack) PushByteArray

func (s *Stack) PushByteArray(val []byte)

PushByteArray -- adds the given back array to the top of the stack. Stack: [... x1 x2] -> [... x1 x2 data]

func (*Stack) PushInt

func (s *Stack) PushInt(val ScriptNum)

PushInt -- converts the ScriptNum to a suiteable byte array then pushes it onto the top of the stack. Stack: [... x1 x2] -> [... x1 x2 int]

func (*Stack) String

func (s *Stack) String() string

String -- returns the stack in a readable format.

func (*Stack) SwapN

func (s *Stack) SwapN(n int32) error

SwapN -- swaps the top N items on the stack with those below them. Stack: SwapN(1): [... x1 x2] -> [... x2 x1] SwapN(2): [... x1 x2 x3 x4] -> [... x3 x4 x1 x2]

type Trace

type Trace struct {
	Step      uint64
	Executed  string
	Stack     string
	Remaining string
}

Trace -- trace for vm.

Jump to

Keyboard shortcuts

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