Skip to content

Commit 3fe6d14

Browse files
committed
feat: drop SCRIPT_ENABLE_DIP0020_OPCODES, make opcodes available from genesis block
1 parent b4ae6a7 commit 3fe6d14

File tree

9 files changed

+232
-282
lines changed

9 files changed

+232
-282
lines changed

src/policy/policy.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,6 @@ static constexpr unsigned int STANDARD_SCRIPT_VERIFY_FLAGS = MANDATORY_SCRIPT_VE
6060
SCRIPT_VERIFY_CHECKLOCKTIMEVERIFY |
6161
SCRIPT_VERIFY_CHECKSEQUENCEVERIFY |
6262
SCRIPT_VERIFY_LOW_S |
63-
SCRIPT_ENABLE_DIP0020_OPCODES |
6463
SCRIPT_VERIFY_CONST_SCRIPTCODE;
6564

6665
/** For convenience, standard but not mandatory verify flags. */

src/script/interpreter.cpp

Lines changed: 0 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -409,23 +409,6 @@ bool EvalScript(std::vector<std::vector<unsigned char> >& stack, const CScript&
409409
if (opcode > OP_16 && ++nOpCount > MAX_OPS_PER_SCRIPT)
410410
return set_error(serror, SCRIPT_ERR_OP_COUNT);
411411

412-
bool fDIP0020OpcodesEnabled = (flags & SCRIPT_ENABLE_DIP0020_OPCODES) != 0;
413-
if (!fDIP0020OpcodesEnabled) {
414-
if (opcode == OP_CAT ||
415-
opcode == OP_SPLIT ||
416-
opcode == OP_AND ||
417-
opcode == OP_OR ||
418-
opcode == OP_XOR ||
419-
opcode == OP_DIV ||
420-
opcode == OP_MOD ||
421-
opcode == OP_NUM2BIN ||
422-
opcode == OP_BIN2NUM ||
423-
opcode == OP_CHECKDATASIG ||
424-
opcode == OP_CHECKDATASIGVERIFY) {
425-
return set_error(serror, SCRIPT_ERR_DISABLED_OPCODE); // Disabled opcodes.
426-
}
427-
}
428-
429412
if (opcode == OP_INVERT ||
430413
opcode == OP_2MUL ||
431414
opcode == OP_2DIV ||

src/script/interpreter.h

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -95,9 +95,6 @@ enum : uint32_t {
9595
//
9696
SCRIPT_VERIFY_NULLFAIL = (1U << 14),
9797

98-
// Enable the opcodes listed in DIP0020 (OP_CAT, OP_AND, OP_OR, OP_XOR, OP_DIV, OP_MOD, OP_SPLIT, OP_BIN2NUM, OP_NUM2BIN, OP_CHECKDATASIG, OP_CHECKDATASIGVERIFY).
99-
SCRIPT_ENABLE_DIP0020_OPCODES = (1U << 15),
100-
10198
// Making OP_CODESEPARATOR and FindAndDelete fail
10299
//
103100
SCRIPT_VERIFY_CONST_SCRIPTCODE = (1U << 16),

src/test/checkdatasig_tests.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ static void CheckError(uint32_t flags, const stacktype& original_stack,
4242
BaseSignatureChecker sigchecker;
4343
ScriptError err = ScriptError::SCRIPT_ERR_OK;
4444
stacktype stack{original_stack};
45-
bool r = EvalScript(stack, script, flags | SCRIPT_ENABLE_DIP0020_OPCODES, sigchecker, SigVersion::BASE, &err);
45+
bool r = EvalScript(stack, script, flags, sigchecker, SigVersion::BASE, &err);
4646
BOOST_CHECK(!r);
4747
BOOST_CHECK(err == expected);
4848
}
@@ -53,7 +53,7 @@ static void CheckPass(uint32_t flags, const stacktype& original_stack,
5353
BaseSignatureChecker sigchecker;
5454
ScriptError err = ScriptError::SCRIPT_ERR_OK;
5555
stacktype stack{original_stack};
56-
bool r = EvalScript(stack, script, flags | SCRIPT_ENABLE_DIP0020_OPCODES, sigchecker, SigVersion::BASE, &err);
56+
bool r = EvalScript(stack, script, flags, sigchecker, SigVersion::BASE, &err);
5757
BOOST_CHECK(r);
5858
BOOST_CHECK(err == ScriptError::SCRIPT_ERR_OK);
5959
BOOST_CHECK(stack == expected);

src/test/data/script_tests.json

Lines changed: 223 additions & 235 deletions
Large diffs are not rendered by default.

src/test/dip0020opcodes_tests.cpp

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ static void CheckTestResultForAllFlags(const stacktype& original_stack,
2828
for (uint32_t flags : flagset) {
2929
ScriptError err = ScriptError::SCRIPT_ERR_OK;
3030
stacktype stack{original_stack};
31-
bool r = EvalScript(stack, script, flags | SCRIPT_ENABLE_DIP0020_OPCODES, sigchecker, SigVersion::BASE, &err);
31+
bool r = EvalScript(stack, script, flags, sigchecker, SigVersion::BASE, &err);
3232
BOOST_CHECK(r);
3333
BOOST_CHECK(stack == expected);
3434
}
@@ -40,7 +40,7 @@ static void CheckError(uint32_t flags, const stacktype& original_stack,
4040
BaseSignatureChecker sigchecker;
4141
ScriptError err = ScriptError::SCRIPT_ERR_OK;
4242
stacktype stack{original_stack};
43-
bool r = EvalScript(stack, script, flags | SCRIPT_ENABLE_DIP0020_OPCODES, sigchecker, SigVersion::BASE, &err);
43+
bool r = EvalScript(stack, script, flags, sigchecker, SigVersion::BASE, &err);
4444
BOOST_CHECK(!r);
4545
BOOST_CHECK(err == expected_error);
4646
}
@@ -784,10 +784,4 @@ BOOST_AUTO_TEST_CASE(div_and_mod_opcode_tests)
784784
{0xbb, 0xf0, 0x5d, 0x03});
785785
}
786786

787-
BOOST_AUTO_TEST_CASE(check_dip0020_inclusion_in_standard_flags)
788-
{
789-
BOOST_CHECK(STANDARD_SCRIPT_VERIFY_FLAGS &
790-
SCRIPT_ENABLE_DIP0020_OPCODES);
791-
}
792-
793787
BOOST_AUTO_TEST_SUITE_END()

src/test/script_tests.cpp

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -122,7 +122,6 @@ BOOST_FIXTURE_TEST_SUITE(script_tests, BasicTestingSetup)
122122
void DoTest(const CScript& scriptPubKey, const CScript& scriptSig, uint32_t flags, const std::string& message, int scriptError)
123123
{
124124
bool expect = (scriptError == SCRIPT_ERR_OK);
125-
bool fEnableDIP0020Opcodes = (SCRIPT_ENABLE_DIP0020_OPCODES & flags) != 0;
126125
ScriptError err;
127126
const CTransaction txCredit{BuildCreditingTransaction(scriptPubKey)};
128127
CMutableTransaction tx = BuildSpendingTransaction(scriptSig, txCredit);
@@ -136,8 +135,6 @@ void DoTest(const CScript& scriptPubKey, const CScript& scriptSig, uint32_t flag
136135
uint32_t combined_flags{expect ? (flags & ~extra_flags) : (flags | extra_flags)};
137136
// Weed out some invalid flag combinations.
138137
if (combined_flags & SCRIPT_VERIFY_CLEANSTACK && ~combined_flags & SCRIPT_VERIFY_P2SH) continue;
139-
// Make sure DIP0020 opcodes flag stays unchanged.
140-
combined_flags = fEnableDIP0020Opcodes ? (combined_flags | SCRIPT_ENABLE_DIP0020_OPCODES) : (combined_flags & ~SCRIPT_ENABLE_DIP0020_OPCODES);
141138
BOOST_CHECK_MESSAGE(VerifyScript(scriptSig, scriptPubKey, combined_flags, MutableTransactionSignatureChecker(&tx, 0, txCredit.vout[0].nValue), &err) == expect, message + strprintf(" (with flags %x)", combined_flags));
142139
}
143140

@@ -680,8 +677,7 @@ BOOST_AUTO_TEST_CASE(script_build)
680677

681678
// Test OP_CHECKDATASIG
682679
const uint32_t checkdatasigflags = SCRIPT_VERIFY_STRICTENC |
683-
SCRIPT_VERIFY_NULLFAIL |
684-
SCRIPT_ENABLE_DIP0020_OPCODES;
680+
SCRIPT_VERIFY_NULLFAIL;
685681

686682
tests.push_back(
687683
TestBuilder(CScript() << ToByteVector(keys.pubkey1C) << OP_CHECKDATASIG,
@@ -749,7 +745,7 @@ BOOST_AUTO_TEST_CASE(script_build)
749745
TestBuilder(CScript() << ToByteVector(keys.pubkey0H) << OP_CHECKDATASIG
750746
<< OP_NOT,
751747
"CHECKDATASIG with invalid hybrid pubkey but no STRICTENC",
752-
SCRIPT_ENABLE_DIP0020_OPCODES)
748+
0)
753749
.PushDataSig(keys.key0, {})
754750
.DamagePush(10)
755751
.Num(0));
@@ -839,7 +835,7 @@ BOOST_AUTO_TEST_CASE(script_build)
839835
CScript() << ToByteVector(keys.pubkey0H) << OP_CHECKDATASIGVERIFY
840836
<< OP_TRUE,
841837
"CHECKDATASIGVERIFY with invalid hybrid pubkey but no STRICTENC",
842-
SCRIPT_ENABLE_DIP0020_OPCODES)
838+
0)
843839
.PushDataSig(keys.key0, {})
844840
.DamagePush(10)
845841
.Num(0)

src/test/transaction_tests.cpp

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,6 @@ static std::map<std::string, unsigned int> mapFlagNames = {
4747
{std::string("NULLFAIL"), (unsigned int) SCRIPT_VERIFY_NULLFAIL},
4848
{std::string("CHECKLOCKTIMEVERIFY"), (unsigned int) SCRIPT_VERIFY_CHECKLOCKTIMEVERIFY},
4949
{std::string("CHECKSEQUENCEVERIFY"), (unsigned int) SCRIPT_VERIFY_CHECKSEQUENCEVERIFY},
50-
{std::string("DIP0020_OPCODES"), (unsigned int) SCRIPT_ENABLE_DIP0020_OPCODES},
5150
{std::string("CONST_SCRIPTCODE"), (unsigned int)SCRIPT_VERIFY_CONST_SCRIPTCODE},
5251
};
5352

src/validation.cpp

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1489,9 +1489,8 @@ bool CheckInputScripts(const CTransaction& tx, TxValidationState &state, const C
14891489
check.swap(pvChecks->back());
14901490
} else if (!check()) {
14911491
const bool hasNonMandatoryFlags = (flags & STANDARD_NOT_MANDATORY_VERIFY_FLAGS) != 0;
1492-
const bool hasDIP0020Opcodes = (flags & SCRIPT_ENABLE_DIP0020_OPCODES) != 0;
14931492

1494-
if (hasNonMandatoryFlags || !hasDIP0020Opcodes) {
1493+
if (hasNonMandatoryFlags) {
14951494
// Check whether the failure was caused by a
14961495
// non-mandatory script verification check, such as
14971496
// non-standard DER encodings or non-null dummy
@@ -1501,7 +1500,7 @@ bool CheckInputScripts(const CTransaction& tx, TxValidationState &state, const C
15011500
// non-upgraded nodes by banning CONSENSUS-failing
15021501
// data providers.
15031502
CScriptCheck check2(coin.out, tx, i,
1504-
(flags & ~STANDARD_NOT_MANDATORY_VERIFY_FLAGS) | SCRIPT_ENABLE_DIP0020_OPCODES, cacheSigStore, &txdata);
1503+
(flags & ~STANDARD_NOT_MANDATORY_VERIFY_FLAGS), cacheSigStore, &txdata);
15051504
if (check2())
15061505
return state.Invalid(TxValidationResult::TX_NOT_STANDARD, strprintf("non-mandatory-script-verify-flag (%s)", ScriptErrorString(check.GetScriptError())));
15071506
}
@@ -1815,11 +1814,6 @@ static unsigned int GetBlockScriptFlags(const CBlockIndex* pindex, const Consens
18151814
flags |= SCRIPT_VERIFY_NULLDUMMY;
18161815
}
18171816

1818-
// Enforce DIP0020
1819-
if (DeploymentActiveAt(*pindex, consensusparams, Consensus::DEPLOYMENT_DIP0020)) {
1820-
flags |= SCRIPT_ENABLE_DIP0020_OPCODES;
1821-
}
1822-
18231817
return flags;
18241818
}
18251819

0 commit comments

Comments
 (0)