Use mempool/txgraph to determine if a tx has descendants

Remove a reference to GetCountWithDescendants() in preparation for removing
this function and the associated cached state from the mempool.
This commit is contained in:
Suhas Daftuar
2023-10-03 11:19:15 -04:00
parent 69e1eaa6ed
commit bdcefb8a8b
3 changed files with 11 additions and 4 deletions

View File

@@ -665,10 +665,7 @@ public:
bool hasDescendantsInMempool(const Txid& txid) override
{
if (!m_node.mempool) return false;
LOCK(m_node.mempool->cs);
const auto entry{m_node.mempool->GetEntry(txid)};
if (entry == nullptr) return false;
return entry->GetCountWithDescendants() > 1;
return m_node.mempool->HasDescendants(txid);
}
bool broadcastTransaction(const CTransactionRef& tx,
const CAmount& max_tx_fee,

View File

@@ -229,6 +229,14 @@ util::Result<void> CTxMemPool::CheckPackageLimits(const Package& package,
return {};
}
bool CTxMemPool::HasDescendants(const Txid& txid) const
{
LOCK(cs);
auto entry = GetEntry(txid);
if (!entry) return false;
return m_txgraph->GetDescendants(*entry, TxGraph::Level::MAIN).size() > 1;
}
util::Result<CTxMemPool::setEntries> CTxMemPool::CalculateMemPoolAncestors(
const CTxMemPoolEntry &entry,
const Limits& limits,

View File

@@ -467,6 +467,8 @@ public:
const Limits& limits,
bool fSearchForParents = true) const EXCLUSIVE_LOCKS_REQUIRED(cs);
bool HasDescendants(const Txid& txid) const;
/** Collect the entire cluster of connected transactions for each transaction in txids.
* All txids must correspond to transaction entries in the mempool, otherwise this returns an
* empty vector. This call will also exit early and return an empty vector if it collects 500 or