Further improve comments around recentRejects

This commit is contained in:
Suhas Daftuar 2020-06-29 17:14:40 -04:00
parent 0e20cfedb7
commit 0a4f1422cd

View File

@ -190,6 +190,15 @@ namespace {
* million to make it highly unlikely for users to have issues with this * million to make it highly unlikely for users to have issues with this
* filter. * filter.
* *
* We only need to add wtxids to this filter. For non-segwit
* transactions, the txid == wtxid, so this only prevents us from
* re-downloading non-segwit transactions when communicating with
* non-wtxidrelay peers -- which is important for avoiding malleation
* attacks that could otherwise interfere with transaction relay from
* non-wtxidrelay peers. For communicating with wtxidrelay peers, having
* the reject filter store wtxids is exactly what we want to avoid
* redownload of a rejected transaction.
*
* Memory used: 1.3 MB * Memory used: 1.3 MB
*/ */
std::unique_ptr<CRollingBloomFilter> recentRejects GUARDED_BY(cs_main); std::unique_ptr<CRollingBloomFilter> recentRejects GUARDED_BY(cs_main);
@ -2033,6 +2042,7 @@ void static ProcessOrphanTx(CConnman& connman, CTxMemPool& mempool, std::set<uin
// Probably non-standard or insufficient fee // Probably non-standard or insufficient fee
LogPrint(BCLog::MEMPOOL, " removed orphan tx %s\n", orphanHash.ToString()); LogPrint(BCLog::MEMPOOL, " removed orphan tx %s\n", orphanHash.ToString());
if (orphan_state.GetResult() != TxValidationResult::TX_WITNESS_STRIPPED) { if (orphan_state.GetResult() != TxValidationResult::TX_WITNESS_STRIPPED) {
// We can add the wtxid of this transaction to our reject filter.
// Do not add txids of witness transactions or witness-stripped // Do not add txids of witness transactions or witness-stripped
// transactions to the filter, as they can have been malleated; // transactions to the filter, as they can have been malleated;
// adding such txids to the reject filter would potentially // adding such txids to the reject filter would potentially
@ -3004,11 +3014,16 @@ void ProcessMessage(
LogPrint(BCLog::MEMPOOL, "not keeping orphan with rejected parents %s\n",tx.GetHash().ToString()); LogPrint(BCLog::MEMPOOL, "not keeping orphan with rejected parents %s\n",tx.GetHash().ToString());
// We will continue to reject this tx since it has rejected // We will continue to reject this tx since it has rejected
// parents so avoid re-requesting it from other peers. // parents so avoid re-requesting it from other peers.
// Here we add both the txid and the wtxid, as we know that
// regardless of what witness is provided, we will not accept
// this, so we don't need to allow for redownload of this txid
// from any of our non-wtxidrelay peers.
recentRejects->insert(tx.GetHash()); recentRejects->insert(tx.GetHash());
recentRejects->insert(tx.GetWitnessHash()); recentRejects->insert(tx.GetWitnessHash());
} }
} else { } else {
if (state.GetResult() != TxValidationResult::TX_WITNESS_STRIPPED) { if (state.GetResult() != TxValidationResult::TX_WITNESS_STRIPPED) {
// We can add the wtxid of this transaction to our reject filter.
// Do not add txids of witness transactions or witness-stripped // Do not add txids of witness transactions or witness-stripped
// transactions to the filter, as they can have been malleated; // transactions to the filter, as they can have been malleated;
// adding such txids to the reject filter would potentially // adding such txids to the reject filter would potentially