mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-02-08 10:31:50 -05:00
Add wtxid to mempool unbroadcast tracking
This commit is contained in:
parent
2b4b90aa8f
commit
c7eb6b4f1f
4 changed files with 24 additions and 18 deletions
|
@ -830,14 +830,14 @@ void PeerLogicValidation::InitializeNode(CNode *pnode) {
|
|||
|
||||
void PeerLogicValidation::ReattemptInitialBroadcast(CScheduler& scheduler) const
|
||||
{
|
||||
std::set<uint256> unbroadcast_txids = m_mempool.GetUnbroadcastTxs();
|
||||
std::map<uint256, uint256> unbroadcast_txids = m_mempool.GetUnbroadcastTxs();
|
||||
|
||||
for (const uint256& txid : unbroadcast_txids) {
|
||||
for (const auto& elem : unbroadcast_txids) {
|
||||
// Sanity check: all unbroadcast txns should exist in the mempool
|
||||
if (m_mempool.exists(txid)) {
|
||||
RelayTransaction(txid, *connman);
|
||||
if (m_mempool.exists(elem.first)) {
|
||||
RelayTransaction(elem.first, *connman);
|
||||
} else {
|
||||
m_mempool.RemoveUnbroadcastTx(txid, true);
|
||||
m_mempool.RemoveUnbroadcastTx(elem.first, true);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -80,7 +80,7 @@ TransactionError BroadcastTransaction(NodeContext& node, const CTransactionRef t
|
|||
if (relay) {
|
||||
// the mempool tracks locally submitted transactions to make a
|
||||
// best-effort of initial broadcast
|
||||
node.mempool->AddUnbroadcastTx(hashTx);
|
||||
node.mempool->AddUnbroadcastTx(hashTx, tx->GetWitnessHash());
|
||||
|
||||
RelayTransaction(hashTx, *node.connman);
|
||||
}
|
||||
|
|
|
@ -573,8 +573,11 @@ private:
|
|||
|
||||
std::vector<indexed_transaction_set::const_iterator> GetSortedDepthAndScore() const EXCLUSIVE_LOCKS_REQUIRED(cs);
|
||||
|
||||
/** track locally submitted transactions to periodically retry initial broadcast */
|
||||
std::set<uint256> m_unbroadcast_txids GUARDED_BY(cs);
|
||||
/**
|
||||
* track locally submitted transactions to periodically retry initial broadcast
|
||||
* map of txid -> wtxid
|
||||
*/
|
||||
std::map<uint256, uint256> m_unbroadcast_txids GUARDED_BY(cs);
|
||||
|
||||
public:
|
||||
indirectmap<COutPoint, const CTransaction*> mapNextTx GUARDED_BY(cs);
|
||||
|
@ -734,11 +737,11 @@ public:
|
|||
size_t DynamicMemoryUsage() const;
|
||||
|
||||
/** Adds a transaction to the unbroadcast set */
|
||||
void AddUnbroadcastTx(const uint256& txid) {
|
||||
void AddUnbroadcastTx(const uint256& txid, const uint256& wtxid) {
|
||||
LOCK(cs);
|
||||
// Sanity Check: the transaction should also be in the mempool
|
||||
if (exists(txid)) {
|
||||
m_unbroadcast_txids.insert(txid);
|
||||
m_unbroadcast_txids[txid] = wtxid;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -746,7 +749,7 @@ public:
|
|||
void RemoveUnbroadcastTx(const uint256& txid, const bool unchecked = false);
|
||||
|
||||
/** Returns transactions in unbroadcast set */
|
||||
std::set<uint256> GetUnbroadcastTxs() const {
|
||||
std::map<uint256, uint256> GetUnbroadcastTxs() const {
|
||||
LOCK(cs);
|
||||
return m_unbroadcast_txids;
|
||||
}
|
||||
|
|
|
@ -5083,19 +5083,22 @@ bool LoadMempool(CTxMemPool& pool)
|
|||
}
|
||||
|
||||
// TODO: remove this try except in v0.22
|
||||
std::map<uint256, uint256> unbroadcast_txids;
|
||||
try {
|
||||
std::set<uint256> unbroadcast_txids;
|
||||
file >> unbroadcast_txids;
|
||||
unbroadcast = unbroadcast_txids.size();
|
||||
|
||||
for (const auto& txid : unbroadcast_txids) {
|
||||
pool.AddUnbroadcastTx(txid);
|
||||
}
|
||||
} catch (const std::exception&) {
|
||||
// mempool.dat files created prior to v0.21 will not have an
|
||||
// unbroadcast set. No need to log a failure if parsing fails here.
|
||||
}
|
||||
|
||||
for (const auto& elem : unbroadcast_txids) {
|
||||
// Don't add unbroadcast transactions that didn't get back into the
|
||||
// mempool.
|
||||
const CTransactionRef& added_tx = pool.get(elem.first);
|
||||
if (added_tx != nullptr) {
|
||||
pool.AddUnbroadcastTx(elem.first, added_tx->GetWitnessHash());
|
||||
}
|
||||
}
|
||||
} catch (const std::exception& e) {
|
||||
LogPrintf("Failed to deserialize mempool data on disk: %s. Continuing anyway.\n", e.what());
|
||||
return false;
|
||||
|
@ -5111,7 +5114,7 @@ bool DumpMempool(const CTxMemPool& pool)
|
|||
|
||||
std::map<uint256, CAmount> mapDeltas;
|
||||
std::vector<TxMempoolInfo> vinfo;
|
||||
std::set<uint256> unbroadcast_txids;
|
||||
std::map<uint256, uint256> unbroadcast_txids;
|
||||
|
||||
static Mutex dump_mutex;
|
||||
LOCK(dump_mutex);
|
||||
|
|
Loading…
Add table
Reference in a new issue