diff --git a/src/consensus/tx_check.cpp b/src/consensus/tx_check.cpp
--- a/src/consensus/tx_check.cpp
+++ b/src/consensus/tx_check.cpp
@@ -14,37 +14,37 @@
                                    CValidationState &state) {
     // Basic checks that don't depend on any context
     if (tx.vin.empty()) {
-        return state.Invalid(ValidationInvalidReason::CONSENSUS, false,
-                             REJECT_INVALID, "bad-txns-vin-empty");
+        return state.Invalid(ValidationInvalidReason::CONSENSUS, REJECT_INVALID,
+                             "bad-txns-vin-empty");
     }
 
     if (tx.vout.empty()) {
-        return state.Invalid(ValidationInvalidReason::CONSENSUS, false,
-                             REJECT_INVALID, "bad-txns-vout-empty");
+        return state.Invalid(ValidationInvalidReason::CONSENSUS, REJECT_INVALID,
+                             "bad-txns-vout-empty");
     }
 
     // Size limit
     if (::GetSerializeSize(tx, PROTOCOL_VERSION) > MAX_TX_SIZE) {
-        return state.Invalid(ValidationInvalidReason::CONSENSUS, false,
-                             REJECT_INVALID, "bad-txns-oversize");
+        return state.Invalid(ValidationInvalidReason::CONSENSUS, REJECT_INVALID,
+                             "bad-txns-oversize");
     }
 
     // Check for negative or overflow output values
     Amount nValueOut = Amount::zero();
     for (const auto &txout : tx.vout) {
         if (txout.nValue < Amount::zero()) {
-            return state.Invalid(ValidationInvalidReason::CONSENSUS, false,
+            return state.Invalid(ValidationInvalidReason::CONSENSUS,
                                  REJECT_INVALID, "bad-txns-vout-negative");
         }
 
         if (txout.nValue > MAX_MONEY) {
-            return state.Invalid(ValidationInvalidReason::CONSENSUS, false,
+            return state.Invalid(ValidationInvalidReason::CONSENSUS,
                                  REJECT_INVALID, "bad-txns-vout-toolarge");
         }
 
         nValueOut += txout.nValue;
         if (!MoneyRange(nValueOut)) {
-            return state.Invalid(ValidationInvalidReason::CONSENSUS, false,
+            return state.Invalid(ValidationInvalidReason::CONSENSUS,
                                  REJECT_INVALID,
                                  "bad-txns-txouttotal-toolarge");
         }
@@ -55,9 +55,8 @@
 
 bool CheckCoinbase(const CTransaction &tx, CValidationState &state) {
     if (!tx.IsCoinBase()) {
-        return state.Invalid(ValidationInvalidReason::CONSENSUS, false,
-                             REJECT_INVALID, "bad-cb-missing",
-                             "first tx is not coinbase");
+        return state.Invalid(ValidationInvalidReason::CONSENSUS, REJECT_INVALID,
+                             "bad-cb-missing", "first tx is not coinbase");
     }
 
     if (!CheckTransactionCommon(tx, state)) {
@@ -67,8 +66,8 @@
 
     if (tx.vin[0].scriptSig.size() < 2 ||
         tx.vin[0].scriptSig.size() > MAX_COINBASE_SCRIPTSIG_SIZE) {
-        return state.Invalid(ValidationInvalidReason::CONSENSUS, false,
-                             REJECT_INVALID, "bad-cb-length");
+        return state.Invalid(ValidationInvalidReason::CONSENSUS, REJECT_INVALID,
+                             "bad-cb-length");
     }
 
     return true;
@@ -76,8 +75,8 @@
 
 bool CheckRegularTransaction(const CTransaction &tx, CValidationState &state) {
     if (tx.IsCoinBase()) {
-        return state.Invalid(ValidationInvalidReason::CONSENSUS, false,
-                             REJECT_INVALID, "bad-tx-coinbase");
+        return state.Invalid(ValidationInvalidReason::CONSENSUS, REJECT_INVALID,
+                             "bad-tx-coinbase");
     }
 
     if (!CheckTransactionCommon(tx, state)) {
@@ -88,7 +87,7 @@
     std::unordered_set<COutPoint, SaltedOutpointHasher> vInOutPoints;
     for (const auto &txin : tx.vin) {
         if (txin.prevout.IsNull()) {
-            return state.Invalid(ValidationInvalidReason::CONSENSUS, false,
+            return state.Invalid(ValidationInvalidReason::CONSENSUS,
                                  REJECT_INVALID, "bad-txns-prevout-null");
         }
 
@@ -99,7 +98,7 @@
         // will result in either a crash or an inflation bug, depending on the
         // implementation of the underlying coins database.
         if (!vInOutPoints.insert(txin.prevout).second) {
-            return state.Invalid(ValidationInvalidReason::CONSENSUS, false,
+            return state.Invalid(ValidationInvalidReason::CONSENSUS,
                                  REJECT_INVALID, "bad-txns-inputs-duplicate");
         }
     }
diff --git a/src/consensus/tx_verify.cpp b/src/consensus/tx_verify.cpp
--- a/src/consensus/tx_verify.cpp
+++ b/src/consensus/tx_verify.cpp
@@ -44,15 +44,14 @@
     if (!IsFinalTx(tx, nHeight, nLockTimeCutoff)) {
         // While this is only one transaction, we use txns in the error to
         // ensure continuity with other clients.
-        return state.Invalid(ValidationInvalidReason::CONSENSUS, false,
-                             REJECT_INVALID, "bad-txns-nonfinal",
-                             "non-final transaction");
+        return state.Invalid(ValidationInvalidReason::CONSENSUS, REJECT_INVALID,
+                             "bad-txns-nonfinal", "non-final transaction");
     }
 
     if (IsMagneticAnomalyEnabled(params, nHeight)) {
         // Size limit
         if (::GetSerializeSize(tx, PROTOCOL_VERSION) < MIN_TX_SIZE) {
-            return state.Invalid(ValidationInvalidReason::CONSENSUS, false,
+            return state.Invalid(ValidationInvalidReason::CONSENSUS,
                                  REJECT_INVALID, "bad-txns-undersize");
         }
     }
@@ -160,7 +159,7 @@
                    Amount &txfee) {
     // are the actual inputs available?
     if (!inputs.HaveInputs(tx)) {
-        return state.Invalid(ValidationInvalidReason::TX_MISSING_INPUTS, false,
+        return state.Invalid(ValidationInvalidReason::TX_MISSING_INPUTS,
                              REJECT_INVALID, "bad-txns-inputs-missingorspent",
                              strprintf("%s: inputs missing/spent", __func__));
     }
@@ -175,8 +174,8 @@
         if (coin.IsCoinBase() &&
             nSpendHeight - coin.GetHeight() < COINBASE_MATURITY) {
             return state.Invalid(
-                ValidationInvalidReason::TX_PREMATURE_SPEND, false,
-                REJECT_INVALID, "bad-txns-premature-spend-of-coinbase",
+                ValidationInvalidReason::TX_PREMATURE_SPEND, REJECT_INVALID,
+                "bad-txns-premature-spend-of-coinbase",
                 strprintf("tried to spend coinbase at depth %d",
                           nSpendHeight - coin.GetHeight()));
         }
@@ -184,7 +183,7 @@
         // Check for negative or overflow input values
         nValueIn += coin.GetTxOut().nValue;
         if (!MoneyRange(coin.GetTxOut().nValue) || !MoneyRange(nValueIn)) {
-            return state.Invalid(ValidationInvalidReason::CONSENSUS, false,
+            return state.Invalid(ValidationInvalidReason::CONSENSUS,
                                  REJECT_INVALID,
                                  "bad-txns-inputvalues-outofrange");
         }
@@ -192,8 +191,8 @@
 
     const Amount value_out = tx.GetValueOut();
     if (nValueIn < value_out) {
-        return state.Invalid(ValidationInvalidReason::CONSENSUS, false,
-                             REJECT_INVALID, "bad-txns-in-belowout",
+        return state.Invalid(ValidationInvalidReason::CONSENSUS, REJECT_INVALID,
+                             "bad-txns-in-belowout",
                              strprintf("value in (%s) < value out (%s)",
                                        FormatMoney(nValueIn),
                                        FormatMoney(value_out)));
@@ -202,8 +201,8 @@
     // Tally transaction fees
     const Amount txfee_aux = nValueIn - value_out;
     if (!MoneyRange(txfee_aux)) {
-        return state.Invalid(ValidationInvalidReason::CONSENSUS, false,
-                             REJECT_INVALID, "bad-txns-fee-outofrange");
+        return state.Invalid(ValidationInvalidReason::CONSENSUS, REJECT_INVALID,
+                             "bad-txns-fee-outofrange");
     }
 
     txfee = txfee_aux;
diff --git a/src/consensus/validation.h b/src/consensus/validation.h
--- a/src/consensus/validation.h
+++ b/src/consensus/validation.h
@@ -114,7 +114,7 @@
     CValidationState()
         : mode(MODE_VALID), m_reason(ValidationInvalidReason::NONE),
           chRejectCode(0) {}
-    bool Invalid(ValidationInvalidReason reasonIn, bool ret = false,
+    bool Invalid(ValidationInvalidReason reasonIn,
                  unsigned int chRejectCodeIn = 0,
                  const std::string &strRejectReasonIn = "",
                  const std::string &strDebugMessageIn = "") {
@@ -123,10 +123,10 @@
         strRejectReason = strRejectReasonIn;
         strDebugMessage = strDebugMessageIn;
         if (mode == MODE_ERROR) {
-            return ret;
+            return false;
         }
         mode = MODE_INVALID;
-        return ret;
+        return false;
     }
     bool Error(const std::string &strRejectReasonIn) {
         if (mode == MODE_VALID) {
diff --git a/src/validation.cpp b/src/validation.cpp
--- a/src/validation.cpp
+++ b/src/validation.cpp
@@ -370,7 +370,7 @@
     // Rather not work on nonstandard transactions (unless -testnet)
     std::string reason;
     if (fRequireStandard && !IsStandardTx(tx, reason)) {
-        return state.Invalid(ValidationInvalidReason::TX_NOT_STANDARD, false,
+        return state.Invalid(ValidationInvalidReason::TX_NOT_STANDARD,
                              REJECT_NONSTANDARD, reason);
     }
 
@@ -382,14 +382,14 @@
             consensusParams, tx, ctxState, STANDARD_LOCKTIME_VERIFY_FLAGS)) {
         // We copy the state from a dummy to ensure we don't increase the
         // ban score of peer for transaction that could be valid in the future.
-        return state.Invalid(ValidationInvalidReason::TX_PREMATURE_SPEND, false,
+        return state.Invalid(ValidationInvalidReason::TX_PREMATURE_SPEND,
                              REJECT_NONSTANDARD, ctxState.GetRejectReason(),
                              ctxState.GetDebugMessage());
     }
 
     // Is it already in the memory pool?
     if (pool.exists(txid)) {
-        return state.Invalid(ValidationInvalidReason::TX_CONFLICT, false,
+        return state.Invalid(ValidationInvalidReason::TX_CONFLICT,
                              REJECT_DUPLICATE, "txn-already-in-mempool");
     }
 
@@ -399,8 +399,7 @@
         if (itConflicting != pool.mapNextTx.end()) {
             // Disable replacement feature for good
             return state.Invalid(ValidationInvalidReason::TX_MEMPOOL_POLICY,
-                                 false, REJECT_DUPLICATE,
-                                 "txn-mempool-conflict");
+                                 REJECT_DUPLICATE, "txn-mempool-conflict");
         }
     }
 
@@ -429,7 +428,7 @@
                     // outputs.
                     if (pcoinsTip->HaveCoinInCache(COutPoint(txid, out))) {
                         return state.Invalid(
-                            ValidationInvalidReason::TX_CONFLICT, false,
+                            ValidationInvalidReason::TX_CONFLICT,
                             REJECT_DUPLICATE, "txn-already-known");
                     }
                 }
@@ -449,8 +448,7 @@
         // Are the actual inputs available?
         if (!view.HaveInputs(tx)) {
             return state.Invalid(ValidationInvalidReason::TX_MEMPOOL_POLICY,
-                                 false, REJECT_DUPLICATE,
-                                 "bad-txns-inputs-spent");
+                                 REJECT_DUPLICATE, "bad-txns-inputs-spent");
         }
 
         // Bring the best block into scope.
@@ -468,7 +466,7 @@
         if (!CheckSequenceLocks(pool, tx, STANDARD_LOCKTIME_VERIFY_FLAGS,
                                 &lp)) {
             return state.Invalid(ValidationInvalidReason::TX_PREMATURE_SPEND,
-                                 false, REJECT_NONSTANDARD, "non-BIP68-final");
+                                 REJECT_NONSTANDARD, "non-BIP68-final");
         }
 
         Amount nFees = Amount::zero();
@@ -485,7 +483,7 @@
         if (fRequireStandard &&
             !AreInputsStandard(tx, view, nextBlockScriptVerifyFlags)) {
             return state.Invalid(ValidationInvalidReason::TX_NOT_STANDARD,
-                                 false, REJECT_NONSTANDARD,
+                                 REJECT_NONSTANDARD,
                                  "bad-txns-nonstandard-inputs");
         }
 
@@ -512,13 +510,13 @@
         // policy upgrade.
         if (!bypass_limits && nModifiedFees < minRelayTxFee.GetFee(nSize)) {
             return state.Invalid(ValidationInvalidReason::TX_MEMPOOL_POLICY,
-                                 false, REJECT_INSUFFICIENTFEE,
+                                 REJECT_INSUFFICIENTFEE,
                                  "min relay fee not met");
         }
 
         if (nAbsurdFee != Amount::zero() && nFees > nAbsurdFee) {
             return state.Invalid(ValidationInvalidReason::TX_NOT_STANDARD,
-                                 false, REJECT_HIGHFEE, "absurdly-high-fee",
+                                 REJECT_HIGHFEE, "absurdly-high-fee",
                                  strprintf("%d > %d", nFees, nAbsurdFee));
         }
 
@@ -547,7 +545,7 @@
         if (!bypass_limits && mempoolRejectFee > Amount::zero() &&
             nModifiedFees < mempoolRejectFee) {
             return state.Invalid(
-                ValidationInvalidReason::TX_MEMPOOL_POLICY, false,
+                ValidationInvalidReason::TX_MEMPOOL_POLICY,
                 REJECT_INSUFFICIENTFEE, "mempool min fee not met",
                 strprintf("%d < %d", nModifiedFees, mempoolRejectFee));
         }
@@ -570,8 +568,8 @@
                 entry, setAncestors, nLimitAncestors, nLimitAncestorSize,
                 nLimitDescendants, nLimitDescendantSize, errString)) {
             return state.Invalid(ValidationInvalidReason::TX_MEMPOOL_POLICY,
-                                 false, REJECT_NONSTANDARD,
-                                 "too-long-mempool-chain", errString);
+                                 REJECT_NONSTANDARD, "too-long-mempool-chain",
+                                 errString);
         }
 
         // Check again against the next block's script verification flags
@@ -623,8 +621,7 @@
                     gArgs.GetArg("-mempoolexpiry", DEFAULT_MEMPOOL_EXPIRY)});
             if (!pool.exists(txid)) {
                 return state.Invalid(ValidationInvalidReason::TX_MEMPOOL_POLICY,
-                                     false, REJECT_INSUFFICIENTFEE,
-                                     "mempool full");
+                                     REJECT_INSUFFICIENTFEE, "mempool full");
             }
         }
     }
@@ -1068,7 +1065,7 @@
         if (!txLimitSigChecks.consume_and_check(nSigChecksOut) ||
             (pBlockLimitSigChecks &&
              !pBlockLimitSigChecks->consume_and_check(nSigChecksOut))) {
-            return state.Invalid(ValidationInvalidReason::CONSENSUS, false,
+            return state.Invalid(ValidationInvalidReason::CONSENSUS,
                                  REJECT_INVALID, "too-many-sigchecks");
         }
         return true;
@@ -1112,7 +1109,7 @@
                                     sigCacheStore, txdata);
                 if (check2()) {
                     return state.Invalid(
-                        ValidationInvalidReason::TX_NOT_STANDARD, false,
+                        ValidationInvalidReason::TX_NOT_STANDARD,
                         REJECT_NONSTANDARD,
                         strprintf("non-mandatory-script-verify-flag (%s)",
                                   ScriptErrorString(scriptError)));
@@ -1129,7 +1126,7 @@
             // support, to avoid splitting the network (but this depends on the
             // details of how net_processing handles such errors).
             return state.Invalid(
-                ValidationInvalidReason::CONSENSUS, false, REJECT_INVALID,
+                ValidationInvalidReason::CONSENSUS, REJECT_INVALID,
                 strprintf("mandatory-script-verify-flag-failed (%s)",
                           ScriptErrorString(scriptError)));
         }
@@ -1646,8 +1643,7 @@
                     LogPrintf("ERROR: ConnectBlock(): tried to overwrite "
                               "transaction\n");
                     return state.Invalid(ValidationInvalidReason::CONSENSUS,
-                                         false, REJECT_INVALID,
-                                         "bad-txns-BIP30");
+                                         REJECT_INVALID, "bad-txns-BIP30");
                 }
             }
         }
@@ -1704,8 +1700,8 @@
         // - its checks are not applied to pre-CTOR chains, which we might visit
         // with checkpointing off.
         LogPrintf("ERROR: ConnectBlock(): tried to overwrite transaction\n");
-        return state.Invalid(ValidationInvalidReason::CONSENSUS, false,
-                             REJECT_INVALID, "tx-duplicate");
+        return state.Invalid(ValidationInvalidReason::CONSENSUS, REJECT_INVALID,
+                             "tx-duplicate");
     }
 
     size_t txIndex = 0;
@@ -1721,7 +1717,7 @@
                 // CheckTxInputs may return MISSING_INPUTS or PREMATURE_SPEND
                 // but we can't return that, as it's not defined for a block, so
                 // we reset the reason flag to CONSENSUS here.
-                state.Invalid(ValidationInvalidReason::CONSENSUS, false,
+                state.Invalid(ValidationInvalidReason::CONSENSUS,
                               state.GetRejectCode(), state.GetRejectReason(),
                               state.GetDebugMessage());
             }
@@ -1733,7 +1729,7 @@
         if (!MoneyRange(nFees)) {
             LogPrintf("ERROR: %s: accumulated fee in the block out of range.\n",
                       __func__);
-            return state.Invalid(ValidationInvalidReason::CONSENSUS, false,
+            return state.Invalid(ValidationInvalidReason::CONSENSUS,
                                  REJECT_INVALID,
                                  "bad-txns-accumulated-fee-outofrange");
         }
@@ -1754,7 +1750,7 @@
         if (!SequenceLocks(tx, nLockTimeFlags, &prevheights, *pindex)) {
             LogPrintf("ERROR: %s: contains a non-BIP68-final transaction\n",
                       __func__);
-            return state.Invalid(ValidationInvalidReason::CONSENSUS, false,
+            return state.Invalid(ValidationInvalidReason::CONSENSUS,
                                  REJECT_INVALID, "bad-txns-nonfinal");
         }
 
@@ -1785,7 +1781,7 @@
                 // event of a future soft-fork, we may need to consider whether
                 // rewriting to CONSENSUS or RECENT_CONSENSUS_CHANGE would be
                 // more appropriate.
-                state.Invalid(ValidationInvalidReason::CONSENSUS, false,
+                state.Invalid(ValidationInvalidReason::CONSENSUS,
                               state.GetRejectCode(), state.GetRejectReason(),
                               state.GetDebugMessage());
             }
@@ -1820,8 +1816,8 @@
         LogPrintf("ERROR: ConnectBlock(): coinbase pays too much (actual=%d vs "
                   "limit=%d)\n",
                   block.vtx[0]->GetValueOut(), blockReward);
-        return state.Invalid(ValidationInvalidReason::CONSENSUS, false,
-                             REJECT_INVALID, "bad-cb-amount");
+        return state.Invalid(ValidationInvalidReason::CONSENSUS, REJECT_INVALID,
+                             "bad-cb-amount");
     }
 
     const std::vector<CTxDestination> whitelist =
@@ -1848,16 +1844,15 @@
         }
 
         // We did not find an output that match the miner fund requirements.
-        return state.Invalid(ValidationInvalidReason::CONSENSUS, false,
-                             REJECT_INVALID, "bad-cb-minerfund");
+        return state.Invalid(ValidationInvalidReason::CONSENSUS, REJECT_INVALID,
+                             "bad-cb-minerfund");
     }
 
 MinerFundSuccess:
 
     if (!control.Wait()) {
-        return state.Invalid(ValidationInvalidReason::CONSENSUS, false,
-                             REJECT_INVALID, "blk-bad-inputs",
-                             "parallel script check failed");
+        return state.Invalid(ValidationInvalidReason::CONSENSUS, REJECT_INVALID,
+                             "blk-bad-inputs", "parallel script check failed");
     }
 
     int64_t nTime4 = GetTimeMicros();
@@ -2255,7 +2250,7 @@
         // We try to finalize an invalid block.
         LogPrintf("ERROR: %s: Trying to finalize invalid block %s\n", __func__,
                   pindex->GetBlockHash().ToString());
-        return state.Invalid(ValidationInvalidReason::CACHED_INVALID, false,
+        return state.Invalid(ValidationInvalidReason::CACHED_INVALID,
                              REJECT_INVALID, "finalize-invalid-block");
     }
 
@@ -2264,7 +2259,7 @@
         LogPrintf("ERROR: %s: Trying to finalize block %s which conflicts with "
                   "already finalized block\n",
                   __func__, pindex->GetBlockHash().ToString());
-        return state.Invalid(ValidationInvalidReason::BLOCK_FINALIZATION, false,
+        return state.Invalid(ValidationInvalidReason::BLOCK_FINALIZATION,
                              REJECT_AGAINST_FINALIZED,
                              "bad-fork-prior-finalized");
     }
@@ -3434,7 +3429,7 @@
     if (validationOptions.shouldValidatePoW() &&
         !CheckProofOfWork(block.GetHash(), block.nBits, params)) {
         return state.Invalid(ValidationInvalidReason::BLOCK_INVALID_HEADER,
-                             false, REJECT_INVALID, "high-hash",
+                             REJECT_INVALID, "high-hash",
                              "proof of work failed");
     }
 
@@ -3460,7 +3455,7 @@
         bool mutated;
         uint256 hashMerkleRoot2 = BlockMerkleRoot(block, &mutated);
         if (block.hashMerkleRoot != hashMerkleRoot2) {
-            return state.Invalid(ValidationInvalidReason::BLOCK_MUTATED, false,
+            return state.Invalid(ValidationInvalidReason::BLOCK_MUTATED,
                                  REJECT_INVALID, "bad-txnmrklroot",
                                  "hashMerkleRoot mismatch");
         }
@@ -3469,7 +3464,7 @@
         // sequences of transactions in a block without affecting the merkle
         // root of a block, while still invalidating it.
         if (mutated) {
-            return state.Invalid(ValidationInvalidReason::BLOCK_MUTATED, false,
+            return state.Invalid(ValidationInvalidReason::BLOCK_MUTATED,
                                  REJECT_INVALID, "bad-txns-duplicate",
                                  "duplicate transaction");
         }
@@ -3481,9 +3476,8 @@
 
     // First transaction must be coinbase.
     if (block.vtx.empty()) {
-        return state.Invalid(ValidationInvalidReason::CONSENSUS, false,
-                             REJECT_INVALID, "bad-cb-missing",
-                             "first tx is not coinbase");
+        return state.Invalid(ValidationInvalidReason::CONSENSUS, REJECT_INVALID,
+                             "bad-cb-missing", "first tx is not coinbase");
     }
 
     // Size limits.
@@ -3491,21 +3485,19 @@
 
     // Bail early if there is no way this block is of reasonable size.
     if ((block.vtx.size() * MIN_TRANSACTION_SIZE) > nMaxBlockSize) {
-        return state.Invalid(ValidationInvalidReason::CONSENSUS, false,
-                             REJECT_INVALID, "bad-blk-length",
-                             "size limits failed");
+        return state.Invalid(ValidationInvalidReason::CONSENSUS, REJECT_INVALID,
+                             "bad-blk-length", "size limits failed");
     }
 
     auto currentBlockSize = ::GetSerializeSize(block, PROTOCOL_VERSION);
     if (currentBlockSize > nMaxBlockSize) {
-        return state.Invalid(ValidationInvalidReason::CONSENSUS, false,
-                             REJECT_INVALID, "bad-blk-length",
-                             "size limits failed");
+        return state.Invalid(ValidationInvalidReason::CONSENSUS, REJECT_INVALID,
+                             "bad-blk-length", "size limits failed");
     }
 
     // And a valid coinbase.
     if (!CheckCoinbase(*block.vtx[0], state)) {
-        return state.Invalid(ValidationInvalidReason::CONSENSUS, false,
+        return state.Invalid(ValidationInvalidReason::CONSENSUS,
                              state.GetRejectCode(), state.GetRejectReason(),
                              strprintf("Coinbase check failed (txid %s) %s",
                                        block.vtx[0]->GetId().ToString(),
@@ -3518,8 +3510,8 @@
         auto *tx = block.vtx[i].get();
         if (!CheckRegularTransaction(*tx, state)) {
             return state.Invalid(
-                ValidationInvalidReason::CONSENSUS, false,
-                state.GetRejectCode(), state.GetRejectReason(),
+                ValidationInvalidReason::CONSENSUS, state.GetRejectCode(),
+                state.GetRejectReason(),
                 strprintf("Transaction check failed (txid %s) %s",
                           tx->GetId().ToString(), state.GetDebugMessage()));
         }
@@ -3557,7 +3549,7 @@
         GetNextWorkRequired(pindexPrev, &block, consensusParams)) {
         LogPrintf("bad bits after height: %d\n", pindexPrev->nHeight);
         return state.Invalid(ValidationInvalidReason::BLOCK_INVALID_HEADER,
-                             false, REJECT_INVALID, "bad-diffbits",
+                             REJECT_INVALID, "bad-diffbits",
                              "incorrect proof of work");
     }
 
@@ -3571,8 +3563,7 @@
             LogPrintf("ERROR: %s: rejected by checkpoint lock-in at %d\n",
                       __func__, nHeight);
             return state.Invalid(ValidationInvalidReason::BLOCK_CHECKPOINT,
-                                 false, REJECT_CHECKPOINT,
-                                 "checkpoint mismatch");
+                                 REJECT_CHECKPOINT, "checkpoint mismatch");
         }
 
         // Don't accept any forks from the main chain prior to last checkpoint.
@@ -3584,7 +3575,7 @@
                       "(height %d)\n",
                       __func__, nHeight);
             return state.Invalid(ValidationInvalidReason::BLOCK_CHECKPOINT,
-                                 false, REJECT_CHECKPOINT,
+                                 REJECT_CHECKPOINT,
                                  "bad-fork-prior-to-checkpoint");
         }
     }
@@ -3592,13 +3583,13 @@
     // Check timestamp against prev
     if (block.GetBlockTime() <= pindexPrev->GetMedianTimePast()) {
         return state.Invalid(ValidationInvalidReason::BLOCK_INVALID_HEADER,
-                             false, REJECT_INVALID, "time-too-old",
+                             REJECT_INVALID, "time-too-old",
                              "block's timestamp is too early");
     }
 
     // Check timestamp
     if (block.GetBlockTime() > nAdjustedTime + MAX_FUTURE_BLOCK_TIME) {
-        return state.Invalid(ValidationInvalidReason::BLOCK_TIME_FUTURE, false,
+        return state.Invalid(ValidationInvalidReason::BLOCK_TIME_FUTURE,
                              REJECT_INVALID, "time-too-new",
                              "block timestamp too far in the future");
     }
@@ -3610,8 +3601,8 @@
         (block.nVersion < 3 && nHeight >= consensusParams.BIP66Height) ||
         (block.nVersion < 4 && nHeight >= consensusParams.BIP65Height)) {
         return state.Invalid(
-            ValidationInvalidReason::BLOCK_INVALID_HEADER, false,
-            REJECT_OBSOLETE, strprintf("bad-version(0x%08x)", block.nVersion),
+            ValidationInvalidReason::BLOCK_INVALID_HEADER, REJECT_OBSOLETE,
+            strprintf("bad-version(0x%08x)", block.nVersion),
             strprintf("rejected nVersion=0x%08x block", block.nVersion));
     }
 
@@ -3699,13 +3690,13 @@
             if (prevTx && (tx.GetId() <= prevTx->GetId())) {
                 if (tx.GetId() == prevTx->GetId()) {
                     return state.Invalid(ValidationInvalidReason::CONSENSUS,
-                                         false, REJECT_INVALID, "tx-duplicate",
+                                         REJECT_INVALID, "tx-duplicate",
                                          strprintf("Duplicated transaction %s",
                                                    tx.GetId().ToString()));
                 }
 
                 return state.Invalid(
-                    ValidationInvalidReason::CONSENSUS, false, REJECT_INVALID,
+                    ValidationInvalidReason::CONSENSUS, REJECT_INVALID,
                     "tx-ordering",
                     strprintf("Transaction order is invalid (%s < %s)",
                               tx.GetId().ToString(),
@@ -3730,7 +3721,7 @@
         if (block.vtx[0]->vin[0].scriptSig.size() < expect.size() ||
             !std::equal(expect.begin(), expect.end(),
                         block.vtx[0]->vin[0].scriptSig.begin())) {
-            return state.Invalid(ValidationInvalidReason::CONSENSUS, false,
+            return state.Invalid(ValidationInvalidReason::CONSENSUS,
                                  REJECT_INVALID, "bad-cb-height",
                                  "block height mismatch in coinbase");
         }
@@ -3766,8 +3757,8 @@
             if (pindex->nStatus.isInvalid()) {
                 LogPrintf("ERROR: %s: block %s is marked invalid\n", __func__,
                           hash.ToString());
-                return state.Invalid(ValidationInvalidReason::CACHED_INVALID,
-                                     false, 0, "duplicate");
+                return state.Invalid(ValidationInvalidReason::CACHED_INVALID, 0,
+                                     "duplicate");
             }
 
             return true;
@@ -3783,8 +3774,8 @@
         BlockMap::iterator mi = mapBlockIndex.find(block.hashPrevBlock);
         if (mi == mapBlockIndex.end()) {
             LogPrintf("ERROR: %s: prev block not found\n", __func__);
-            return state.Invalid(ValidationInvalidReason::BLOCK_MISSING_PREV,
-                                 false, 0, "prev-blk-not-found");
+            return state.Invalid(ValidationInvalidReason::BLOCK_MISSING_PREV, 0,
+                                 "prev-blk-not-found");
         }
 
         CBlockIndex *pindexPrev = (*mi).second;
@@ -3792,7 +3783,7 @@
         if (pindexPrev->nStatus.isInvalid()) {
             LogPrintf("ERROR: %s: prev block invalid\n", __func__);
             return state.Invalid(ValidationInvalidReason::BLOCK_INVALID_PREV,
-                                 false, REJECT_INVALID, "bad-prevblk");
+                                 REJECT_INVALID, "bad-prevblk");
         }
 
         if (!ContextualCheckBlockHeader(chainparams, block, state, pindexPrev,
@@ -3838,7 +3829,7 @@
                     }
                     LogPrintf("ERROR: %s: prev block invalid\n", __func__);
                     return state.Invalid(
-                        ValidationInvalidReason::BLOCK_INVALID_PREV, false,
+                        ValidationInvalidReason::BLOCK_INVALID_PREV,
                         REJECT_INVALID, "bad-prevblk");
                 }
             }