@@ -1740,11 +1740,18 @@ bool ConnectBlock(const CBlock& block, CValidationState& state, CBlockIndex* pin
17401740
17411741 unsigned int flags = fStrictPayToScriptHash ? SCRIPT_VERIFY_P2SH : SCRIPT_VERIFY_NONE;
17421742
1743- // Start enforcing the DERSIG (BIP66) rules, for block.nVersion=3 blocks, when 75% of the network has upgraded:
1743+ // Start enforcing the DERSIG (BIP66) rules, for block.nVersion=3 blocks,
1744+ // when 75% of the network has upgraded:
17441745 if (block.nVersion >= 3 && IsSuperMajority (3 , pindex->pprev , chainparams.GetConsensus ().nMajorityEnforceBlockUpgrade , chainparams.GetConsensus ())) {
17451746 flags |= SCRIPT_VERIFY_DERSIG;
17461747 }
17471748
1749+ // Start enforcing CHECKLOCKTIMEVERIFY, (BIP65) for block.nVersion=4
1750+ // blocks, when 75% of the network has upgraded:
1751+ if (block.nVersion >= 4 && IsSuperMajority (4 , pindex->pprev , chainparams.GetConsensus ().nMajorityEnforceBlockUpgrade , chainparams.GetConsensus ())) {
1752+ flags |= SCRIPT_VERIFY_CHECKLOCKTIMEVERIFY;
1753+ }
1754+
17481755 CBlockUndo blockundo;
17491756
17501757 CCheckQueueControl<CScriptCheck> control (fScriptChecks && nScriptCheckThreads ? &scriptcheckqueue : NULL );
@@ -2684,6 +2691,11 @@ bool ContextualCheckBlockHeader(const CBlockHeader& block, CValidationState& sta
26842691 return state.Invalid (error (" %s : rejected nVersion=2 block" , __func__),
26852692 REJECT_OBSOLETE, " bad-version" );
26862693
2694+ // Reject block.nVersion=3 blocks when 95% (75% on testnet) of the network has upgraded:
2695+ if (block.nVersion < 4 && IsSuperMajority (4 , pindexPrev, consensusParams.nMajorityRejectBlockOutdated , consensusParams))
2696+ return state.Invalid (error (" %s : rejected nVersion=3 block" , __func__),
2697+ REJECT_OBSOLETE, " bad-version" );
2698+
26872699 return true ;
26882700}
26892701
0 commit comments