message: [Core] Do not check block if it's not the one needed
  also there's no need to count mints and spends here
diff: @@ -5050,30 +5050,6 @@ void CBlockIndex::BuildSkip()
  bool ProcessNewBlock(CValidationState& state, CNode* pfrom, CBlock* pblock, CDiskBlockPos* dbp)
  {
  - // Preliminary checks
  - int64_t nStartTime = GetTimeMillis();
  - bool checked = CheckBlock(*pblock, state);
  -
  - int nMints = 0;
  - int nSpends = 0;
  - for (const CTransaction& tx : pblock->vtx) {
  - if (tx.ContainsZerocoins()) {
  - for (const CTxIn& in : tx.vin) {
  - if (in.IsZerocoinSpend())
  - nSpends++;
  - }
  - for (const CTxOut& out : tx.vout) {
  - if (out.IsZerocoinMint())
  - nMints++;
  - }
  - }
  - }
  - if (nMints || nSpends)
  - LogPrintf("%s : block contains %d zPIV mints and %d zPIV spends\n", __func__, nMints, nSpends);
  -
  - if (!CheckBlockSignature(*pblock))
  - return error("ProcessNewBlock() : bad proof-of-stake block signature");
  -
  if (pblock->GetHash() != Params().HashGenesisBlock() && pfrom != NULL) {
  //if we get this far, check if the prev block is our prev block, if not then request sync and return false
  BlockMap::iterator mi = mapBlockIndex.find(pblock->hashPrevBlock);
  @@ -5083,6 +5059,15 @@ bool ProcessNewBlock(CValidationState& state, CNode* pfrom, CBlock* pblock, CDis
  }
  }
  + // Preliminary checks
  + int64_t nStartTime = GetTimeMillis();
  +
  + // check block
  + bool checked = CheckBlock(*pblock, state);
  +
  + if (!CheckBlockSignature(*pblock))
  + return error("ProcessNewBlock() : bad proof-of-stake block signature");
  +
  {
  LOCK(cs_main);
  