message: Use blockhash for selection hash after PROTOCOL_ENFORCEMENT_BLOCK
diff: @@ -80,6 +80,8 @@ static bool SelectBlockFromCandidates(
  uint64_t nStakeModifierPrev,
  const CBlockIndex** pindexSelected)
  {
  + bool fModifierV2 = false;
  + bool fFirstRun = true;
  bool fSelected = false;
  uint256 hashBest = 0;
  *pindexSelected = (const CBlockIndex*)0;
  @@ -91,11 +93,22 @@ static bool SelectBlockFromCandidates(
  if (fSelected && pindex->GetBlockTime() > nSelectionIntervalStop)
  break;
  + //if the lowest block height (vSortedByTimestamp[0]) is >= switch height, use new modifier calc
  + if (fFirstRun){
  + fModifierV2 = pindex->nHeight >= PROTOCOL_ENFORCEMENT_BLOCK;
  + fFirstRun = false;
  + }
  +
  if (mapSelectedBlocks.count(pindex->GetBlockHash()) > 0)
  continue;
  - // compute the selection hash by hashing its proof-hash and the previous proof-of-stake modifier
  - uint256 hashProof = pindex->IsProofOfStake() ? 0 : pindex->GetBlockHash();
  + // compute the selection hash by hashing an input that is unique to that block
  + uint256 hashProof;
  + if(fModifierV2)
  + hashProof = pindex->GetBlockHash();
  + else
  + hashProof = pindex->IsProofOfStake() ? 0 : pindex->GetBlockHash();
  +
  CDataStream ss(SER_GETHASH, 0);
  ss << hashProof << nStakeModifierPrev;
  uint256 hashSelection = Hash(ss.begin(), ss.end());
  