|
|
|
@ -1305,10 +1305,10 @@ bool static AlreadyHave(const CInv& inv) EXCLUSIVE_LOCKS_REQUIRED(cs_main)
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void RelayTransaction(const CTransaction& tx, CConnman* connman)
|
|
|
|
|
void RelayTransaction(const uint256& txid, const CConnman& connman)
|
|
|
|
|
{
|
|
|
|
|
CInv inv(MSG_TX, tx.GetHash());
|
|
|
|
|
connman->ForEachNode([&inv](CNode* pnode)
|
|
|
|
|
CInv inv(MSG_TX, txid);
|
|
|
|
|
connman.ForEachNode([&inv](CNode* pnode)
|
|
|
|
|
{
|
|
|
|
|
pnode->PushInventory(inv);
|
|
|
|
|
});
|
|
|
|
@ -1811,7 +1811,7 @@ void static ProcessOrphanTx(CConnman* connman, std::set<uint256>& orphan_work_se
|
|
|
|
|
if (setMisbehaving.count(fromPeer)) continue;
|
|
|
|
|
if (AcceptToMemoryPool(mempool, orphan_state, porphanTx, &fMissingInputs2, &removed_txn, false /* bypass_limits */, 0 /* nAbsurdFee */)) {
|
|
|
|
|
LogPrint(BCLog::MEMPOOL, " accepted orphan tx %s\n", orphanHash.ToString());
|
|
|
|
|
RelayTransaction(orphanTx, connman);
|
|
|
|
|
RelayTransaction(orphanHash, *connman);
|
|
|
|
|
for (unsigned int i = 0; i < orphanTx.vout.size(); i++) {
|
|
|
|
|
auto it_by_prev = mapOrphanTransactionsByPrev.find(COutPoint(orphanHash, i));
|
|
|
|
|
if (it_by_prev != mapOrphanTransactionsByPrev.end()) {
|
|
|
|
@ -2498,7 +2498,7 @@ bool static ProcessMessage(CNode* pfrom, const std::string& strCommand, CDataStr
|
|
|
|
|
if (!AlreadyHave(inv) &&
|
|
|
|
|
AcceptToMemoryPool(mempool, state, ptx, &fMissingInputs, &lRemovedTxn, false /* bypass_limits */, 0 /* nAbsurdFee */)) {
|
|
|
|
|
mempool.check(pcoinsTip.get());
|
|
|
|
|
RelayTransaction(tx, connman);
|
|
|
|
|
RelayTransaction(tx.GetHash(), *connman);
|
|
|
|
|
for (unsigned int i = 0; i < tx.vout.size(); i++) {
|
|
|
|
|
auto it_by_prev = mapOrphanTransactionsByPrev.find(COutPoint(inv.hash, i));
|
|
|
|
|
if (it_by_prev != mapOrphanTransactionsByPrev.end()) {
|
|
|
|
@ -2577,7 +2577,7 @@ bool static ProcessMessage(CNode* pfrom, const std::string& strCommand, CDataStr
|
|
|
|
|
LogPrintf("Not relaying invalid transaction %s from whitelisted peer=%d (%s)\n", tx.GetHash().ToString(), pfrom->GetId(), FormatStateMessage(state));
|
|
|
|
|
} else {
|
|
|
|
|
LogPrintf("Force relaying tx %s from whitelisted peer=%d\n", tx.GetHash().ToString(), pfrom->GetId());
|
|
|
|
|
RelayTransaction(tx, connman);
|
|
|
|
|
RelayTransaction(tx.GetHash(), *connman);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|