diff --git a/txscript/data/script_valid.json b/txscript/data/script_valid.json index 064dde84..0dd9d217 100644 --- a/txscript/data/script_valid.json +++ b/txscript/data/script_valid.json @@ -80,6 +80,7 @@ ["0 IFDUP", "DEPTH 1 EQUALVERIFY 0 EQUAL", "P2SH,STRICTENC"], ["1 IFDUP", "DEPTH 2 EQUALVERIFY 1 EQUALVERIFY 1 EQUAL", "P2SH,STRICTENC"], +["0x05 0x0100000000 IFDUP", "DEPTH 2 EQUALVERIFY 0x05 0x0100000000 EQUAL", "P2SH,STRICTENC", "IFDUP dups non ints"], ["0 DROP", "DEPTH 0 EQUAL", "P2SH,STRICTENC"], ["0", "DUP 1 ADD 1 EQUALVERIFY 0 EQUAL", "P2SH,STRICTENC"], ["0 1", "NIP", "P2SH,STRICTENC"], diff --git a/txscript/opcode.go b/txscript/opcode.go index 8245151b..7781465d 100644 --- a/txscript/opcode.go +++ b/txscript/opcode.go @@ -1084,14 +1084,14 @@ func opcode2Swap(op *parsedOpcode, vm *Engine) error { // Stack transformation (x1==0): [... x1] -> [...] // Stack transformation (x1!=0): [... x1] -> [... x1] func opcodeIfDup(op *parsedOpcode, vm *Engine) error { - val, err := vm.dstack.PeekInt(0) + so, err := vm.dstack.PeekByteArray(0) if err != nil { return err } // Push copy of data iff it isn't zero - if val != 0 { - vm.dstack.PushInt(val) + if asBool(so) { + vm.dstack.PushByteArray(so) } return nil