From 406243e7c981a05d103ad6c5e09a05bbd4ccd2a2 Mon Sep 17 00:00:00 2001 From: Luke Dashjr Date: Mon, 13 Feb 2017 10:11:24 +0000 Subject: [PATCH] Support overriding txn-spk-reused rejections via sendrawtransaction --- src/validation.cpp | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/validation.cpp b/src/validation.cpp index 972d2fedff..fe9ed03863 100644 --- a/src/validation.cpp +++ b/src/validation.cpp @@ -842,6 +842,9 @@ bool MemPoolAccept::PreChecks(ATMPArgs& args, Workspace& ws) } auto spk_reuse_mode = SpkReuseMode; + if (ignore_rejects.count("txn-spk-reused")) { + spk_reuse_mode = SRM_ALLOW; + } SPKStates_t mapSPK; // Check for conflicts with in-memory transactions @@ -897,7 +900,7 @@ bool MemPoolAccept::PreChecks(ATMPArgs& args, Workspace& ws) } } if (mapSPK.find(hashSPK) != mapSPK.end()) { - return state.Invalid(TxValidationResult::TX_MEMPOOL_POLICY, "txn-spk-reused-twinoutputs"); + MaybeReject(TxValidationResult::TX_MEMPOOL_POLICY, "txn-spk-reused-twinoutputs"); } mapSPK[hashSPK] = MemPool_SPK_State(mapSPK[hashSPK] | MSS_CREATED); } @@ -963,7 +966,7 @@ bool MemPoolAccept::PreChecks(ATMPArgs& args, Workspace& ws) SPKStates_t::iterator mssit = mapSPK.find(hashSPK); if (mssit != mapSPK.end()) { if (mssit->second & MSS_CREATED) { - return state.Invalid(TxValidationResult::TX_MEMPOOL_POLICY, "txn-spk-reused-change"); + MaybeReject(TxValidationResult::TX_MEMPOOL_POLICY, "txn-spk-reused-change"); } } const auto& SPKit = m_pool.mapUsedSPK.find(hashSPK); @@ -1161,7 +1164,7 @@ bool MemPoolAccept::PreChecks(ATMPArgs& args, Workspace& ws) return state.Invalid(TxValidationResult::TX_CONSENSUS, "bad-txns-spends-conflicting-tx", *err_string); } if (has_policy_conflict) { - return state.Invalid(TxValidationResult::TX_MEMPOOL_POLICY, "txn-spk-reused-chained"); + MaybeReject(TxValidationResult::TX_MEMPOOL_POLICY, "txn-spk-reused-chained"); } // We want to detect conflicts in any tx in a package to trigger package RBF logic