diff --git a/src/script/interpreter.cpp b/src/script/interpreter.cpp --- a/src/script/interpreter.cpp +++ b/src/script/interpreter.cpp @@ -913,11 +913,6 @@ case OP_CHECKDATASIG: case OP_CHECKDATASIGVERIFY: { - // Make sure this remains an error before activation. - if ((flags & SCRIPT_ENABLE_CHECKDATASIG) == 0) { - return set_error(serror, SCRIPT_ERR_BAD_OPCODE); - } - // (sig message pubkey -- bool) if (stack.size() < 3) { return set_error( diff --git a/src/script/script_flags.h b/src/script/script_flags.h --- a/src/script/script_flags.h +++ b/src/script/script_flags.h @@ -95,8 +95,9 @@ // SCRIPT_ENABLE_REPLAY_PROTECTION = (1U << 17), - // Is OP_CHECKDATASIG and variant are enabled, and must be counted towards - // Sigops limits. + // Count sigops for OP_CHECKDATASIG and variant. The interpreter treats + // OP_CHECKDATASIG(VERIFY) as always valid, this flag only affects sigops + // counting. // SCRIPT_ENABLE_CHECKDATASIG = (1U << 18), diff --git a/src/test/checkdatasig_tests.cpp b/src/test/checkdatasig_tests.cpp --- a/src/test/checkdatasig_tests.cpp +++ b/src/test/checkdatasig_tests.cpp @@ -66,12 +66,10 @@ const CScript &script, const stacktype &expected) { for (uint32_t flags : flagset) { - // Make sure that we get a bad opcode when the activation flag is not - // passed. - CheckError(flags & ~SCRIPT_ENABLE_CHECKDATASIG, original_stack, script, - SCRIPT_ERR_BAD_OPCODE); - - // The script execute as expected if the opcodes are activated. + // The script executes as expected regardless of whether or not + // SCRIPT_ENABLE_CHECKDATASIG flag is passed. + CheckPass(flags & ~SCRIPT_ENABLE_CHECKDATASIG, original_stack, script, + expected); CheckPass(flags | SCRIPT_ENABLE_CHECKDATASIG, original_stack, script, expected); } @@ -80,12 +78,10 @@ static void CheckErrorForAllFlags(const stacktype &original_stack, const CScript &script, ScriptError expected) { for (uint32_t flags : flagset) { - // Make sure that we get a bad opcode when the activation flag is not - // passed. + // The script generates the proper error regardless of whether or not + // SCRIPT_ENABLE_CHECKDATASIG flag is passed. CheckError(flags & ~SCRIPT_ENABLE_CHECKDATASIG, original_stack, script, - SCRIPT_ERR_BAD_OPCODE); - - // The script generates the proper error if the opcodes are activated. + expected); CheckError(flags | SCRIPT_ENABLE_CHECKDATASIG, original_stack, script, expected); } diff --git a/src/test/data/script_tests.json b/src/test/data/script_tests.json --- a/src/test/data/script_tests.json +++ b/src/test/data/script_tests.json @@ -1233,8 +1233,6 @@ "P2SH,DISCOURAGE_UPGRADABLE_NOPS", "DISCOURAGE_UPGRADABLE_NOPS", "Discouraged NOP10 in redeemScript"], ["0x50","1", "P2SH,STRICTENC", "BAD_OPCODE", "opcode 0x50 is reserved"], -["1", "IF CHECKDATASIG ELSE 1 ENDIF", "P2SH,STRICTENC", "BAD_OPCODE"], -["1", "IF CHECKDATASIGVERIFY ELSE 1 ENDIF", "P2SH,STRICTENC", "BAD_OPCODE"], ["1", "IF 0xbc ELSE 1 ENDIF", "P2SH,STRICTENC", "BAD_OPCODE", "opcodes >= FIRST_UNDEFINED_OP_VALUE invalid if executed"], ["1", "IF 0xbd ELSE 1 ENDIF", "P2SH,STRICTENC", "BAD_OPCODE"], ["1", "IF 0xbe ELSE 1 ENDIF", "P2SH,STRICTENC", "BAD_OPCODE"],