An array of boolean values representing the current execution status of the program. This allows the state to track nested conditional branches.
The OP_IF
and OP_NOTIF
operations push a new boolean onto the
controlStack
, OP_ELSE
flips the top boolean, and OP_ENDIF
removes
the top boolean from the controlStack
.
Other instructions are only evaluated if controlStack
contains no
false
items.
A.K.A. vfExec
in the C++ implementation.
Optional
errorIf present, the error returned by the most recent virtual machine operation.
An unsigned integer counter use to count the total number of hash digest iterations that required during this evaluation.
Readonly
instructionsThe full list of instructions to be evaluated by the virtual machine.
Instruction Pointer – the array index of instructions
that will be read
to identify the next instruction. Once ip
exceeds the last index of
instructions
(ip === instructions.length
), evaluation is complete.
The lastCodeSeparator
indicates the index of the most recently executed
OP_CODESEPARATOR
instruction. In each of the signing serialization
algorithms, the instructions
are sliced at lastCodeSeparator
, and the
subarray is re-encoded. The resulting bytecode is called the
coveredBytecode
(A.K.A. scriptCode
), and is part of the data hashed to
create the signing serialization digest.
By default, this is -1
, which indicates that the whole instructions
array is included in the signing serialization.
An unsigned integer counter used by OP_UNTIL
to prevent excessive use of
loops.
An array of the Uint8Array
values used in signature verification over the
course of this program. Each raw signing serialization and data signature
message should be pushed to this array in the order it was computed.
This property is not used within any AuthenticationVirtualMachine, but it is provided in the program state to assist with analysis. Because these messages must always be computed and hashed during evaluation, recording them in the state does not meaningfully affect performance.
The stack is the primary workspace of the virtual machine. Most virtual machine operations create, read, update, or delete bytecode values held on the stack.
Generated using TypeDoc
The "alternate stack" is separate stack on which
OP_TOALTSTACK
andOP_FROMALTSTACK
operate in bitcoin virtual machines.