message: Cleaner disconnectBlock flow for coinbase and zerocoin txs.
diff: @@ -2052,8 +2052,11 @@ bool DisconnectBlock(CBlock& block, CValidationState& state, CBlockIndex* pindex
  outs->Clear();
  }
  + // not coinbases or zerocoinspend because they dont have traditional inputs
  + if (tx.IsCoinBase() || tx.HasZerocoinSpendInputs())
  + continue;
  +
  // restore inputs
  - if (!tx.IsCoinBase() && !tx.HasZerocoinSpendInputs()) { // not coinbases or zerocoinspend because they dont have traditional inputs
  const CTxUndo& txundo = blockUndo.vtxundo[i - 1];
  if (txundo.vprevout.size() != tx.vin.size())
  return error("DisconnectBlock() : transaction and undo data inconsistent - txundo.vprevout.siz=%d tx.vin.siz=%d", txundo.vprevout.size(), tx.vin.size());
  @@ -2079,9 +2082,8 @@ bool DisconnectBlock(CBlock& block, CValidationState& state, CBlockIndex* pindex
  coins->vout.resize(out.n + 1);
  coins->vout[out.n] = undo.txout;
  }
  - }
  - if (!tx.HasZerocoinSpendInputs() && !tx.IsCoinBase() && view.HaveInputs(tx))
  + if (view.HaveInputs(tx))
  nValueIn += view.GetValueIn(tx);
  }
  