diff --git a/src/validation.h b/src/validation.h --- a/src/validation.h +++ b/src/validation.h @@ -262,10 +262,7 @@ * Validation result for a single transaction mempool acceptance. */ struct MempoolAcceptResult { - /** - * Used to indicate the results of mempool validation, - * including the possibility of unfinished validation. - */ + /** Used to indicate the results of mempool validation. */ enum class ResultType { //! Fully validated, valid. VALID, @@ -279,7 +276,17 @@ // ResultType::VALID /** Raw base fees in satoshis. */ const std::optional m_base_fees; + static MempoolAcceptResult Failure(TxValidationState state) { + return MempoolAcceptResult(state); + } + static MempoolAcceptResult Success(Amount fees) { + return MempoolAcceptResult(fees); + } + + // Private constructors. Use static methods MempoolAcceptResult::Success, + // etc. to construct. +private: /** Constructor for failure case */ explicit MempoolAcceptResult(TxValidationState state) : m_result_type(ResultType::INVALID), m_state(state), diff --git a/src/validation.cpp b/src/validation.cpp --- a/src/validation.cpp +++ b/src/validation.cpp @@ -691,7 +691,7 @@ m_active_chainstate.m_chain.Tip())); if (!PreChecks(args, ws)) { - return MempoolAcceptResult(ws.m_state); + return MempoolAcceptResult::Failure(ws.m_state); } // Only compute the precomputed transaction data if we need to verify @@ -701,22 +701,22 @@ PrecomputedTransactionData txdata(*ptx); if (!ConsensusScriptChecks(args, ws, txdata)) { - return MempoolAcceptResult(ws.m_state); + return MempoolAcceptResult::Failure(ws.m_state); } // Tx was accepted, but not added if (args.m_test_accept) { - return MempoolAcceptResult(ws.m_base_fees); + return MempoolAcceptResult::Success(ws.m_base_fees); } if (!Finalize(args, ws)) { - return MempoolAcceptResult(ws.m_state); + return MempoolAcceptResult::Failure(ws.m_state); } GetMainSignals().TransactionAddedToMempool( ptx, m_pool.GetAndIncrementSequence()); - return MempoolAcceptResult(ws.m_base_fees); + return MempoolAcceptResult::Success(ws.m_base_fees); } } // namespace