message: Add consensus rule that blocks may not be more than 15 seconds beyond AdjustedTime
diff: @@ -3522,6 +3522,9 @@ bool CheckBlock(const CBlock& block, CValidationState& state, const Consensus::P
  if (!CheckBlockHeader(block, state, consensusParams, fCheckPOW))
  return false;
  + if (block.GetBlockTime() > FutureDrift(GetAdjustedTime()))
  + return error("CheckBlock() : block timestamp too far in the future");
  +
  // Check the merkle root.
  if (fCheckMerkleRoot) {
  bool mutated;
  @@ -3687,7 +3690,7 @@ bool ContextualCheckBlockHeader(const CBlockHeader& block, CValidationState& sta
  return state.Invalid(false, REJECT_INVALID, "time-too-old", "block's timestamp is too early");
  // Check timestamp
  - if (block.GetBlockTime() > nAdjustedTime + 2 * 60 * 60)
  + if (block.GetBlockTime() > FutureDrift(nAdjustedTime))
  return state.Invalid(false, REJECT_INVALID, "time-too-new", "block timestamp too far in the future");
  // Reject outdated version blocks when 95% (75% on testnet) of the network has upgraded:
  @@ -3932,6 +3935,10 @@ static bool AcceptBlock(const std::shared_ptr<const CBlock>& pblock, CValidation
  if (pindexPrev && block.IsProofOfStake() && (block.GetBlockTime() <= pindexPrev->GetBlockTime() || FutureDrift(block.GetBlockTime()) < pindexPrev->GetBlockTime()))
  return error("AcceptBlock() : block's timestamp is too early");
  + // Check timestamp
  + if (block.GetBlockTime() > FutureDrift(GetAdjustedTime()))
  + return error("AcceptBlock() : block timestamp too far in the future");
  +
  // Enforce rule that the coinbase starts with serialized block height
  CScript expect = CScript() << nHeight;
  if (block.vtx[0]->vin[0].scriptSig.size() < expect.size() ||
  