aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSuhas Daftuar <sdaftuar@chaincode.com>2017-10-19 20:52:30 -0400
committerMarcoFalke <falke.marco@gmail.com>2017-11-02 13:09:16 -0400
commitffb6ea4e5ebfe109e9771aab058bdd4d2f6468a8 (patch)
treeba355b722427dd221a126d79850ea318b8d96d42
parent2df65eeb98100a376678cdf9cad4c973733df894 (diff)
downloadbitcoin-ffb6ea4e5ebfe109e9771aab058bdd4d2f6468a8.tar.xz
Add comment explaining forced processing of compact blocks
Github-Pull: #11458 Rebased-From: 01b52cedd42f50a93b40981c91af7c12de6e45ce
-rw-r--r--src/net_processing.cpp17
1 files changed, 15 insertions, 2 deletions
diff --git a/src/net_processing.cpp b/src/net_processing.cpp
index 5f117dea7e..5b97509d64 100644
--- a/src/net_processing.cpp
+++ b/src/net_processing.cpp
@@ -2144,7 +2144,16 @@ bool static ProcessMessage(CNode* pfrom, const std::string& strCommand, CDataStr
mapBlockSource.emplace(pblock->GetHash(), std::make_pair(pfrom->GetId(), false));
}
bool fNewBlock = false;
- ProcessNewBlock(chainparams, pblock, true, &fNewBlock);
+ // Setting fForceProcessing to true means that we bypass some of
+ // our anti-DoS protections in AcceptBlock, which filters
+ // unrequested blocks that might be trying to waste our resources
+ // (eg disk space). Because we only try to reconstruct blocks when
+ // we're close to caught up (via the CanDirectFetch() requirement
+ // above, combined with the behavior of not requesting blocks until
+ // we have a chain with at least nMinimumChainWork), and we ignore
+ // compact blocks with less work than our tip, it is safe to treat
+ // reconstructed compact blocks as having been requested.
+ ProcessNewBlock(chainparams, pblock, /*fForceProcessing=*/true, &fNewBlock);
if (fNewBlock) {
pfrom->nLastBlockTime = GetTime();
} else {
@@ -2224,7 +2233,11 @@ bool static ProcessMessage(CNode* pfrom, const std::string& strCommand, CDataStr
bool fNewBlock = false;
// Since we requested this block (it was in mapBlocksInFlight), force it to be processed,
// even if it would not be a candidate for new tip (missing previous block, chain not long enough, etc)
- ProcessNewBlock(chainparams, pblock, true, &fNewBlock);
+ // This bypasses some anti-DoS logic in AcceptBlock (eg to prevent
+ // disk-space attacks), but this should be safe due to the
+ // protections in the compact block handler -- see related comment
+ // in compact block optimistic reconstruction handling.
+ ProcessNewBlock(chainparams, pblock, /*fForceProcessing=*/true, &fNewBlock);
if (fNewBlock) {
pfrom->nLastBlockTime = GetTime();
} else {