[refactor] move valid tx processing to TxDownload

This commit is contained in:
glozow 2024-04-16 15:45:33 +01:00
parent a8cf3b6e84
commit c6b21749ca
4 changed files with 22 additions and 11 deletions

View File

@ -3150,17 +3150,7 @@ void PeerManagerImpl::ProcessValidTx(NodeId nodeid, const CTransactionRef& tx, c
AssertLockHeld(g_msgproc_mutex);
AssertLockHeld(m_tx_download_mutex);
auto& m_orphanage = m_txdownloadman.GetOrphanageRef();
auto& m_txrequest = m_txdownloadman.GetTxRequestRef();
// As this version of the transaction was acceptable, we can forget about any requests for it.
// No-op if the tx is not in txrequest.
m_txrequest.ForgetTxHash(tx->GetHash());
m_txrequest.ForgetTxHash(tx->GetWitnessHash());
m_orphanage.AddChildrenToWorkSet(*tx);
// If it came from the orphanage, remove it. No-op if the tx is not in txorphanage.
m_orphanage.EraseTx(tx->GetWitnessHash());
m_txdownloadman.MempoolAcceptedTx(tx);
LogDebug(BCLog::MEMPOOL, "AcceptToMemoryPool: peer=%d: accepted %s (wtxid=%s) (poolsz %u txn, %u kB)\n",
nodeid,

View File

@ -152,6 +152,9 @@ public:
* skipping any combinations that have already been tried. Return the resulting package along with
* the senders of its respective transactions, or std::nullopt if no package is found. */
std::optional<PackageToValidate> Find1P1CPackage(const CTransactionRef& ptx, NodeId nodeid);
/** Respond to successful transaction submission to mempool */
void MempoolAcceptedTx(const CTransactionRef& tx);
};
} // namespace node
#endif // BITCOIN_NODE_TXDOWNLOADMAN_H

View File

@ -75,6 +75,10 @@ std::optional<PackageToValidate> TxDownloadManager::Find1P1CPackage(const CTrans
{
return m_impl->Find1P1CPackage(ptx, nodeid);
}
void TxDownloadManager::MempoolAcceptedTx(const CTransactionRef& tx)
{
m_impl->MempoolAcceptedTx(tx);
}
// TxDownloadManagerImpl
void TxDownloadManagerImpl::ActiveTipChange()
@ -272,4 +276,16 @@ std::optional<PackageToValidate> TxDownloadManagerImpl::Find1P1CPackage(const CT
}
return std::nullopt;
}
void TxDownloadManagerImpl::MempoolAcceptedTx(const CTransactionRef& tx)
{
// As this version of the transaction was acceptable, we can forget about any requests for it.
// No-op if the tx is not in txrequest.
m_txrequest.ForgetTxHash(tx->GetHash());
m_txrequest.ForgetTxHash(tx->GetWitnessHash());
m_orphanage.AddChildrenToWorkSet(*tx);
// If it came from the orphanage, remove it. No-op if the tx is not in txorphanage.
m_orphanage.EraseTx(tx->GetWitnessHash());
}
} // namespace node

View File

@ -162,6 +162,8 @@ public:
void ReceivedNotFound(NodeId nodeid, const std::vector<uint256>& txhashes);
std::optional<PackageToValidate> Find1P1CPackage(const CTransactionRef& ptx, NodeId nodeid);
void MempoolAcceptedTx(const CTransactionRef& tx);
};
} // namespace node
#endif // BITCOIN_NODE_TXDOWNLOADMAN_IMPL_H