diff --git a/src/interfaces/chain.cpp b/src/interfaces/chain.cpp --- a/src/interfaces/chain.cpp +++ b/src/interfaces/chain.cpp @@ -9,6 +9,7 @@ #include #include #include +#include #include #include #include @@ -292,9 +293,7 @@ return it && (*it)->GetCountWithDescendants() > 1; } void relayTransaction(const TxId &txid) override { - CInv inv(MSG_TX, txid); - g_connman->ForEachNode( - [&inv](CNode *node) { node->PushInventory(inv); }); + RelayTransaction(txid, *g_connman); } void getTransactionAncestry(const TxId &txid, size_t &ancestors, size_t &descendants) override { diff --git a/src/net_processing.h b/src/net_processing.h --- a/src/net_processing.h +++ b/src/net_processing.h @@ -128,4 +128,7 @@ /** Increase a node's misbehavior score. */ void Misbehaving(NodeId nodeid, int howmuch, const std::string &reason = ""); +/** Relay transaction to every node */ +void RelayTransaction(const TxId &txid, const CConnman &connman); + #endif // BITCOIN_NET_PROCESSING_H diff --git a/src/net_processing.cpp b/src/net_processing.cpp --- a/src/net_processing.cpp +++ b/src/net_processing.cpp @@ -1460,9 +1460,9 @@ return true; } -static void RelayTransaction(const CTransaction &tx, CConnman *connman) { - CInv inv(MSG_TX, tx.GetId()); - connman->ForEachNode([&inv](CNode *pnode) { pnode->PushInventory(inv); }); +void RelayTransaction(const TxId &txid, const CConnman &connman) { + CInv inv(MSG_TX, txid); + connman.ForEachNode([&inv](CNode *pnode) { pnode->PushInventory(inv); }); } static void RelayAddress(const CAddress &addr, bool fReachable, @@ -2089,7 +2089,7 @@ Amount::zero() /* nAbsurdFee */)) { LogPrint(BCLog::MEMPOOL, " accepted orphan tx %s\n", orphanTxId.ToString()); - RelayTransaction(orphanTx, connman); + RelayTransaction(orphanTxId, *connman); for (size_t i = 0; i < orphanTx.vout.size(); i++) { auto it_by_prev = mapOrphanTransactionsByPrev.find(COutPoint(orphanTxId, i)); @@ -2882,7 +2882,7 @@ false /* bypass_limits */, Amount::zero() /* nAbsurdFee */)) { g_mempool.check(pcoinsTip.get()); - RelayTransaction(tx, connman); + RelayTransaction(tx.GetId(), *connman); for (size_t i = 0; i < tx.vout.size(); i++) { auto it_by_prev = mapOrphanTransactionsByPrev.find(COutPoint(txid, i)); @@ -2972,7 +2972,7 @@ if (!state.IsInvalid(nDoS) || nDoS == 0) { LogPrintf("Force relaying tx %s from whitelisted peer=%d\n", tx.GetId().ToString(), pfrom->GetId()); - RelayTransaction(tx, connman); + RelayTransaction(tx.GetId(), *connman); } else { LogPrintf("Not relaying invalid transaction %s from " "whitelisted peer=%d (%s)\n", diff --git a/src/node/transaction.cpp b/src/node/transaction.cpp --- a/src/node/transaction.cpp +++ b/src/node/transaction.cpp @@ -8,6 +8,7 @@ #include #include #include +#include #include #include #include @@ -76,8 +77,7 @@ return TransactionError::P2P_DISABLED; } - CInv inv(MSG_TX, txid); - g_connman->ForEachNode([&inv](CNode *pnode) { pnode->PushInventory(inv); }); + RelayTransaction(txid, *g_connman); return TransactionError::OK; }