7 func opVerify(vm *virtualMachine) error {
12 p, err := vm.pop(true)
19 return ErrVerifyFailed
22 func opFail(vm *virtualMachine) error {
23 err := vm.applyCost(1)
30 func opCheckPredicate(vm *virtualMachine) error {
31 err := vm.applyCost(256)
35 vm.deferCost(-256 + 64) // get most of that cost back at the end
36 limit, err := vm.popInt64(true)
40 predicate, err := vm.pop(true)
44 n, err := vm.popInt64(true)
51 l := int64(len(vm.dataStack))
53 return ErrDataStackUnderflow
58 err = vm.applyCost(limit)
63 childVM := virtualMachine{
68 dataStack: append([][]byte{}, vm.dataStack[l-n:]...),
70 vm.dataStack = vm.dataStack[:l-n]
72 childErr := childVM.run()
74 vm.deferCost(-childVM.runLimit)
75 vm.deferCost(-stackCost(childVM.dataStack))
76 vm.deferCost(-stackCost(childVM.altStack))
78 return vm.pushBool(childErr == nil && !childVM.falseResult(), true)
81 func opJump(vm *virtualMachine) error {
82 err := vm.applyCost(1)
86 address := binary.LittleEndian.Uint32(vm.data)
91 func opJumpIf(vm *virtualMachine) error {
92 err := vm.applyCost(1)
96 p, err := vm.pop(true)
101 address := binary.LittleEndian.Uint32(vm.data)