diff options
author | Anthony Towns <aj@erisian.com.au> | 2023-05-08 15:37:11 +1000 |
---|---|---|
committer | fanquake <fanquake@gmail.com> | 2023-05-11 17:12:11 +0100 |
commit | d0a2c87214d2a8ad350c86fd4a3202695569ca99 (patch) | |
tree | 570445532238cdac1128780d18889a18d1902bed | |
parent | ce8f812b0ac0905c26edd826c57886a08079b4a7 (diff) |
txmempool: have CompareDepthAndScore sort missing txs first
We use CompareDepthAndScore to choose an order of txs to inv. Rather
than sorting txs that have been evicted from the mempool at the end
of the list, sort them at the beginning so they are removed from
the queue immediately.
Github-Pull: #27610
Rebased-From: 228e9201efb5574b1b96bb924de1d2e8dd1317f3
-rw-r--r-- | src/txmempool.cpp | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/src/txmempool.cpp b/src/txmempool.cpp index fb5652d0a0..e78969c69d 100644 --- a/src/txmempool.cpp +++ b/src/txmempool.cpp @@ -831,11 +831,16 @@ void CTxMemPool::check(const CCoinsViewCache& active_coins_tip, int64_t spendhei bool CTxMemPool::CompareDepthAndScore(const uint256& hasha, const uint256& hashb, bool wtxid) { + /* Return `true` if hasha should be considered sooner than hashb. Namely when: + * a is not in the mempool, but b is + * both are in the mempool and a has fewer ancestors than b + * both are in the mempool and a has a higher score than b + */ LOCK(cs); - indexed_transaction_set::const_iterator i = wtxid ? get_iter_from_wtxid(hasha) : mapTx.find(hasha); - if (i == mapTx.end()) return false; indexed_transaction_set::const_iterator j = wtxid ? get_iter_from_wtxid(hashb) : mapTx.find(hashb); - if (j == mapTx.end()) return true; + if (j == mapTx.end()) return false; + indexed_transaction_set::const_iterator i = wtxid ? get_iter_from_wtxid(hasha) : mapTx.find(hasha); + if (i == mapTx.end()) return true; uint64_t counta = i->GetCountWithAncestors(); uint64_t countb = j->GetCountWithAncestors(); if (counta == countb) { |