diff --git a/src/main.cpp b/src/main.cpp index ebedca94..ff129ae3 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -62,6 +62,7 @@ bool fPruneMode = false; bool fIsBareMultisigStd = true; bool fCheckBlockIndex = false; bool fCheckpointsEnabled = true; +bool fCoinbaseEnforcedProtectionEnabled = true; size_t nCoinCacheUsage = 5000 * 300; uint64_t nPruneTarget = 0; bool fAlerts = DEFAULT_ALERTS; @@ -1631,7 +1632,9 @@ bool NonContextualCheckInputs(const CTransaction& tx, CValidationState &state, c if (coins->IsCoinBase()) { // Ensure that coinbases cannot be spent to transparent outputs // Disabled on regtest - if (consensusParams.fCoinbaseMustBeProtected && !tx.vout.empty()) { + if (fCoinbaseEnforcedProtectionEnabled && + consensusParams.fCoinbaseMustBeProtected && + !tx.vout.empty()) { return state.Invalid( error("CheckInputs(): tried to spend coinbase with transparent outputs"), REJECT_INVALID, "bad-txns-coinbase-spend-has-transparent-outputs"); diff --git a/src/main.h b/src/main.h index df5085a9..088c58be 100644 --- a/src/main.h +++ b/src/main.h @@ -116,6 +116,9 @@ extern bool fTxIndex; extern bool fIsBareMultisigStd; extern bool fCheckBlockIndex; extern bool fCheckpointsEnabled; +// TODO: remove this flag by structuring our code such that +// it is unneeded for testing +extern bool fCoinbaseEnforcedProtectionEnabled; extern size_t nCoinCacheUsage; extern CFeeRate minRelayTxFee; extern bool fAlerts; diff --git a/src/test/miner_tests.cpp b/src/test/miner_tests.cpp index a657fe72..a10abacd 100644 --- a/src/test/miner_tests.cpp +++ b/src/test/miner_tests.cpp @@ -147,6 +147,7 @@ BOOST_AUTO_TEST_CASE(CreateNewBlock_validity) LOCK(cs_main); fCheckpointsEnabled = false; + fCoinbaseEnforcedProtectionEnabled = false; // We can't make transactions until we have inputs // Therefore, load 100 blocks :) @@ -417,6 +418,7 @@ BOOST_AUTO_TEST_CASE(CreateNewBlock_validity) delete tx; fCheckpointsEnabled = true; + fCoinbaseEnforcedProtectionEnabled = true; } BOOST_AUTO_TEST_SUITE_END()