diff options
author | John Newbery <john@johnnewbery.com> | 2020-07-30 11:18:45 +0100 |
---|---|---|
committer | Jon Atack <jon@atack.com> | 2020-08-26 11:57:15 +0200 |
commit | acd66421671e42a58e8e067868e1ab86268e3231 (patch) | |
tree | 095e8124c06f47de8aa2b5d6a8e3fabc10ce1aa8 /src | |
parent | 5fdfb80b861e0de3fcf8a57163b3f52af4b2df3b (diff) |
[net processing] Change AlreadyHaveTx() to take a GenTxid
Diffstat (limited to 'src')
-rw-r--r-- | src/net_processing.cpp | 23 |
1 files changed, 12 insertions, 11 deletions
diff --git a/src/net_processing.cpp b/src/net_processing.cpp index 82d41d737e..4907743587 100644 --- a/src/net_processing.cpp +++ b/src/net_processing.cpp @@ -1422,7 +1422,7 @@ void PeerLogicValidation::BlockChecked(const CBlock& block, const BlockValidatio // -bool static AlreadyHaveTx(const CInv& inv, const CTxMemPool& mempool) EXCLUSIVE_LOCKS_REQUIRED(cs_main) +bool static AlreadyHaveTx(const GenTxid& gtxid, const CTxMemPool& mempool) EXCLUSIVE_LOCKS_REQUIRED(cs_main) { assert(recentRejects); if (::ChainActive().Tip()->GetBlockHash() != hashRecentRejectsChainTip) { @@ -1436,19 +1436,19 @@ bool static AlreadyHaveTx(const CInv& inv, const CTxMemPool& mempool) EXCLUSIVE_ { LOCK(g_cs_orphans); - if (!inv.IsMsgWtx() && mapOrphanTransactions.count(inv.hash)) { + if (!gtxid.IsWtxid() && mapOrphanTransactions.count(gtxid.GetHash())) { return true; - } else if (inv.IsMsgWtx() && g_orphans_by_wtxid.count(inv.hash)) { + } else if (gtxid.IsWtxid() && g_orphans_by_wtxid.count(gtxid.GetHash())) { return true; } } { LOCK(g_cs_recent_confirmed_transactions); - if (g_recent_confirmed_transactions->contains(inv.hash)) return true; + if (g_recent_confirmed_transactions->contains(gtxid.GetHash())) return true; } - return recentRejects->contains(inv.hash) || mempool.exists(ToGenTxid(inv)); + return recentRejects->contains(gtxid.GetHash()) || mempool.exists(gtxid); } bool static AlreadyHaveBlock(const uint256& block_hash) EXCLUSIVE_LOCKS_REQUIRED(cs_main) @@ -2675,7 +2675,8 @@ void PeerLogicValidation::ProcessMessage(CNode& pfrom, const std::string& msg_ty best_block = &inv.hash; } } else { - bool fAlreadyHave = AlreadyHaveTx(inv, mempool); + GenTxid gtxid = ToGenTxid(inv); + bool fAlreadyHave = AlreadyHaveTx(gtxid, mempool); LogPrint(BCLog::NET, "got inv: %s %s peer=%d\n", inv.ToString(), fAlreadyHave ? "have" : "new", pfrom.GetId()); pfrom.AddKnownTx(inv.hash); @@ -2684,7 +2685,7 @@ void PeerLogicValidation::ProcessMessage(CNode& pfrom, const std::string& msg_ty pfrom.fDisconnect = true; return; } else if (!fAlreadyHave && !m_chainman.ActiveChainstate().IsInitialBlockDownload()) { - RequestTx(State(pfrom.GetId()), ToGenTxid(inv), current_time); + RequestTx(State(pfrom.GetId()), gtxid, current_time); } } } @@ -2957,7 +2958,7 @@ void PeerLogicValidation::ProcessMessage(CNode& pfrom, const std::string& msg_ty // already; and an adversary can already relay us old transactions // (older than our recency filter) if trying to DoS us, without any need // for witness malleation. - if (!AlreadyHaveTx(CInv(MSG_WTX, wtxid), m_mempool) && + if (!AlreadyHaveTx(GenTxid(/* is_wtxid=*/true, wtxid), m_mempool) && AcceptToMemoryPool(m_mempool, state, ptx, &lRemovedTxn, false /* bypass_limits */, 0 /* nAbsurdFee */)) { m_mempool.check(&::ChainstateActive().CoinsTip()); RelayTransaction(tx.GetHash(), tx.GetWitnessHash(), m_connman); @@ -3009,9 +3010,9 @@ void PeerLogicValidation::ProcessMessage(CNode& pfrom, const std::string& msg_ty // wtxidrelay peers. // Eventually we should replace this with an improved // protocol for getting all unconfirmed parents. - CInv _inv(MSG_TX, parent_txid); + GenTxid gtxid{/* is_wtxid=*/false, parent_txid}; pfrom.AddKnownTx(parent_txid); - if (!AlreadyHaveTx(_inv, m_mempool)) RequestTx(State(pfrom.GetId()), ToGenTxid(_inv), current_time); + if (!AlreadyHaveTx(gtxid, m_mempool)) RequestTx(State(pfrom.GetId()), gtxid, current_time); } AddOrphanTx(ptx, pfrom.GetId()); @@ -4562,7 +4563,7 @@ bool PeerLogicValidation::SendMessages(CNode* pto) // processing at a later time, see below) tx_process_time.erase(tx_process_time.begin()); CInv inv(gtxid.IsWtxid() ? MSG_WTX : (MSG_TX | GetFetchFlags(*pto)), gtxid.GetHash()); - if (!AlreadyHaveTx(inv, m_mempool)) { + if (!AlreadyHaveTx(ToGenTxid(inv), m_mempool)) { // If this transaction was last requested more than 1 minute ago, // then request. const auto last_request_time = GetTxRequestTime(gtxid); |