mirror of
https://github.com/ElementsProject/elements.git
synced 2026-08-15 12:51:00 +02:00
Merge 38b2a0a3f9 into merged_master (Bitcoin PR bitcoin/bitcoin#23173)
This commit is contained in:
commit
2da8f66309
13 changed files with 56 additions and 36 deletions
|
|
@ -461,9 +461,9 @@ private:
|
|||
bool AlreadyHaveTx(const GenTxid& gtxid) EXCLUSIVE_LOCKS_REQUIRED(cs_main);
|
||||
|
||||
/**
|
||||
* Filter for transactions that were recently rejected by
|
||||
* AcceptToMemoryPool. These are not rerequested until the chain tip
|
||||
* changes, at which point the entire filter is reset.
|
||||
* Filter for transactions that were recently rejected by the mempool.
|
||||
* These are not rerequested until the chain tip changes, at which point
|
||||
* the entire filter is reset.
|
||||
*
|
||||
* Without this filter we'd be re-requesting txs from each of our peers,
|
||||
* increasing bandwidth consumption considerably. For instance, with 100
|
||||
|
|
@ -1413,6 +1413,7 @@ bool PeerManagerImpl::MaybePunishNodeForTx(NodeId nodeid, const TxValidationStat
|
|||
case TxValidationResult::TX_WITNESS_STRIPPED:
|
||||
case TxValidationResult::TX_CONFLICT:
|
||||
case TxValidationResult::TX_MEMPOOL_POLICY:
|
||||
case TxValidationResult::TX_NO_MEMPOOL:
|
||||
break;
|
||||
}
|
||||
if (message != "") {
|
||||
|
|
@ -2293,7 +2294,7 @@ void PeerManagerImpl::ProcessOrphanTx(std::set<uint256>& orphan_work_set)
|
|||
const auto [porphanTx, from_peer] = m_orphanage.GetTx(orphanHash);
|
||||
if (porphanTx == nullptr) continue;
|
||||
|
||||
const MempoolAcceptResult result = AcceptToMemoryPool(m_chainman.ActiveChainstate(), m_mempool, porphanTx, false /* bypass_limits */);
|
||||
const MempoolAcceptResult result = m_chainman.ProcessTransaction(porphanTx);
|
||||
const TxValidationState& state = result.m_state;
|
||||
|
||||
if (result.m_result_type == MempoolAcceptResult::ResultType::VALID) {
|
||||
|
|
@ -2350,8 +2351,6 @@ void PeerManagerImpl::ProcessOrphanTx(std::set<uint256>& orphan_work_set)
|
|||
break;
|
||||
}
|
||||
}
|
||||
CChainState& active_chainstate = m_chainman.ActiveChainstate();
|
||||
m_mempool.check(active_chainstate.m_chain.Tip(), active_chainstate.CoinsTip(), active_chainstate.m_chain.Height() + 1);
|
||||
}
|
||||
|
||||
bool PeerManagerImpl::PrepareBlockFilterRequest(CNode& peer,
|
||||
|
|
@ -3317,12 +3316,10 @@ void PeerManagerImpl::ProcessMessage(CNode& pfrom, const std::string& msg_type,
|
|||
return;
|
||||
}
|
||||
|
||||
const MempoolAcceptResult result = AcceptToMemoryPool(m_chainman.ActiveChainstate(), m_mempool, ptx, false /* bypass_limits */);
|
||||
const MempoolAcceptResult result = m_chainman.ProcessTransaction(ptx);
|
||||
const TxValidationState& state = result.m_state;
|
||||
|
||||
if (result.m_result_type == MempoolAcceptResult::ResultType::VALID) {
|
||||
CChainState& active_chainstate = m_chainman.ActiveChainstate();
|
||||
m_mempool.check(active_chainstate.m_chain.Tip(), active_chainstate.CoinsTip(), active_chainstate.m_chain.Height() + 1);
|
||||
// As this version of the transaction was acceptable, we can forget about any
|
||||
// requests for it.
|
||||
m_txrequest.ForgetTxHash(tx.GetHash());
|
||||
|
|
@ -3441,8 +3438,8 @@ void PeerManagerImpl::ProcessMessage(CNode& pfrom, const std::string& msg_type,
|
|||
}
|
||||
|
||||
// If a tx has been detected by m_recent_rejects, we will have reached
|
||||
// this point and the tx will have been ignored. Because we haven't run
|
||||
// the tx through AcceptToMemoryPool, we won't have computed a DoS
|
||||
// this point and the tx will have been ignored. Because we haven't
|
||||
// submitted the tx to our mempool, we won't have computed a DoS
|
||||
// score for it or determined exactly why we consider it invalid.
|
||||
//
|
||||
// This means we won't penalize any peer subsequently relaying a DoSy
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue