message: Add comment explaining forced processing of compact blocks
  Github-Pull:
  Rebased-From:
diff: @@ -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 {
  