diff options
author | MarcoFalke <falke.marco@gmail.com> | 2020-07-26 09:59:11 +0200 |
---|---|---|
committer | MarcoFalke <falke.marco@gmail.com> | 2020-07-26 16:44:07 +0200 |
commit | fa5979d12f8c65754e36cdddb9d032ab81fecc3a (patch) | |
tree | a54fffd712e30582f707323f269da5204cc304ff /src/validation.cpp | |
parent | fa1f7f28cbc48675514a01c4ca773f1ba8ea836b (diff) |
rpc: Avoid useless mempool query in gettxoutproof
Diffstat (limited to 'src/validation.cpp')
-rw-r--r-- | src/validation.cpp | 38 |
1 files changed, 13 insertions, 25 deletions
diff --git a/src/validation.cpp b/src/validation.cpp index 5aa3d315d5..7efff8d4b4 100644 --- a/src/validation.cpp +++ b/src/validation.cpp @@ -1089,45 +1089,33 @@ bool AcceptToMemoryPool(CTxMemPool& pool, TxValidationState &state, const CTrans return AcceptToMemoryPoolWithTime(chainparams, pool, state, tx, GetTime(), plTxnReplaced, bypass_limits, nAbsurdFee, test_accept); } -/** - * Return transaction in txOut, and if it was found inside a block, its hash is placed in hashBlock. - * If blockIndex is provided, the transaction is fetched from the corresponding block. - */ -bool GetTransaction(const uint256& hash, CTransactionRef& txOut, const Consensus::Params& consensusParams, uint256& hashBlock, const CBlockIndex* const block_index) +CTransactionRef GetTransaction(const CBlockIndex* const block_index, const CTxMemPool* const mempool, const uint256& hash, const Consensus::Params& consensusParams, uint256& hashBlock) { LOCK(cs_main); - if (!block_index) { - CTransactionRef ptx = mempool.get(hash); - if (ptx) { - txOut = ptx; - return true; - } - - if (g_txindex) { - return g_txindex->FindTx(hash, hashBlock, txOut); - } - } else { + if (block_index) { CBlock block; if (ReadBlockFromDisk(block, block_index, consensusParams)) { for (const auto& tx : block.vtx) { if (tx->GetHash() == hash) { - txOut = tx; hashBlock = block_index->GetBlockHash(); - return true; + return tx; } } } + return nullptr; } - - return false; + if (mempool) { + CTransactionRef ptx = mempool->get(hash); + if (ptx) return ptx; + } + if (g_txindex) { + CTransactionRef tx; + if (g_txindex->FindTx(hash, hashBlock, tx)) return tx; + } + return nullptr; } - - - - - ////////////////////////////////////////////////////////////////////////////// // // CBlock and CBlockIndex |