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))
56 return ErrDataStackUnderflow
61 err = vm.applyCost(limit)
66 childVM := virtualMachine{
71 dataStack: append([][]byte{}, vm.dataStack[l-n:]...),
73 vm.dataStack = vm.dataStack[:l-n]
75 childErr := childVM.run()
77 vm.deferCost(-childVM.runLimit)
78 vm.deferCost(-stackCost(childVM.dataStack))
79 vm.deferCost(-stackCost(childVM.altStack))
81 return vm.pushBool(childErr == nil && !childVM.falseResult(), true)
84 func opJump(vm *virtualMachine) error {
85 err := vm.applyCost(1)
89 address := binary.LittleEndian.Uint32(vm.data)
94 func opJumpIf(vm *virtualMachine) error {
95 err := vm.applyCost(1)
99 p, err := vm.pop(true)
104 address := binary.LittleEndian.Uint32(vm.data)