mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-06-05 20:50:18 +02:00
txorphanage: Extract GetOrphanTx
Extract orphan lookup code into GetOrphanTx function.
This commit is contained in:
parent
83679ffc60
commit
f294da7274
@ -2104,10 +2104,9 @@ void PeerManagerImpl::ProcessOrphanTx(std::set<uint256>& orphan_work_set)
|
|||||||
const uint256 orphanHash = *orphan_work_set.begin();
|
const uint256 orphanHash = *orphan_work_set.begin();
|
||||||
orphan_work_set.erase(orphan_work_set.begin());
|
orphan_work_set.erase(orphan_work_set.begin());
|
||||||
|
|
||||||
auto orphan_it = mapOrphanTransactions.find(orphanHash);
|
const auto [porphanTx, from_peer] = GetOrphanTx(orphanHash);
|
||||||
if (orphan_it == mapOrphanTransactions.end()) continue;
|
if (porphanTx == nullptr) continue;
|
||||||
|
|
||||||
const CTransactionRef porphanTx = orphan_it->second.tx;
|
|
||||||
const MempoolAcceptResult result = AcceptToMemoryPool(::ChainstateActive(), m_mempool, porphanTx, false /* bypass_limits */);
|
const MempoolAcceptResult result = AcceptToMemoryPool(::ChainstateActive(), m_mempool, porphanTx, false /* bypass_limits */);
|
||||||
const TxValidationState& state = result.m_state;
|
const TxValidationState& state = result.m_state;
|
||||||
|
|
||||||
@ -2124,10 +2123,10 @@ void PeerManagerImpl::ProcessOrphanTx(std::set<uint256>& orphan_work_set)
|
|||||||
if (state.IsInvalid()) {
|
if (state.IsInvalid()) {
|
||||||
LogPrint(BCLog::MEMPOOL, " invalid orphan tx %s from peer=%d. %s\n",
|
LogPrint(BCLog::MEMPOOL, " invalid orphan tx %s from peer=%d. %s\n",
|
||||||
orphanHash.ToString(),
|
orphanHash.ToString(),
|
||||||
orphan_it->second.fromPeer,
|
from_peer,
|
||||||
state.ToString());
|
state.ToString());
|
||||||
// Maybe punish peer that gave us an invalid orphan tx
|
// Maybe punish peer that gave us an invalid orphan tx
|
||||||
MaybePunishNodeForTx(orphan_it->second.fromPeer, state);
|
MaybePunishNodeForTx(from_peer, state);
|
||||||
}
|
}
|
||||||
// Has inputs but not accepted to mempool
|
// Has inputs but not accepted to mempool
|
||||||
// Probably non-standard or insufficient fee
|
// Probably non-standard or insufficient fee
|
||||||
|
@ -129,3 +129,11 @@ bool HaveOrphanTx(const GenTxid& gtxid)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
std::pair<CTransactionRef, NodeId> GetOrphanTx(const uint256& txid)
|
||||||
|
{
|
||||||
|
AssertLockHeld(g_cs_orphans);
|
||||||
|
|
||||||
|
const auto it = mapOrphanTransactions.find(txid);
|
||||||
|
if (it == mapOrphanTransactions.end()) return {nullptr, -1};
|
||||||
|
return {it->second.tx, it->second.fromPeer};
|
||||||
|
}
|
||||||
|
@ -28,6 +28,7 @@ void EraseOrphansFor(NodeId peer) EXCLUSIVE_LOCKS_REQUIRED(g_cs_orphans);
|
|||||||
unsigned int LimitOrphanTxSize(unsigned int nMaxOrphans) EXCLUSIVE_LOCKS_REQUIRED(g_cs_orphans);
|
unsigned int LimitOrphanTxSize(unsigned int nMaxOrphans) EXCLUSIVE_LOCKS_REQUIRED(g_cs_orphans);
|
||||||
void AddChildrenToWorkSet(const CTransaction& tx, std::set<uint256>& orphan_work_set) EXCLUSIVE_LOCKS_REQUIRED(g_cs_orphans);
|
void AddChildrenToWorkSet(const CTransaction& tx, std::set<uint256>& orphan_work_set) EXCLUSIVE_LOCKS_REQUIRED(g_cs_orphans);
|
||||||
bool HaveOrphanTx(const GenTxid& gtxid) EXCLUSIVE_LOCKS_REQUIRED(!g_cs_orphans);
|
bool HaveOrphanTx(const GenTxid& gtxid) EXCLUSIVE_LOCKS_REQUIRED(!g_cs_orphans);
|
||||||
|
std::pair<CTransactionRef, NodeId> GetOrphanTx(const uint256& txid) EXCLUSIVE_LOCKS_REQUIRED(g_cs_orphans);
|
||||||
|
|
||||||
/** Map from txid to orphan transaction record. Limited by
|
/** Map from txid to orphan transaction record. Limited by
|
||||||
* -maxorphantx/DEFAULT_MAX_ORPHAN_TRANSACTIONS */
|
* -maxorphantx/DEFAULT_MAX_ORPHAN_TRANSACTIONS */
|
||||||
|
Loading…
x
Reference in New Issue
Block a user