diff --git a/bip-0148.mediawiki b/bip-0148.mediawiki index 5accfcf2..6eb9c42f 100644 --- a/bip-0148.mediawiki +++ b/bip-0148.mediawiki @@ -37,14 +37,22 @@ While this BIP is active, all blocks must set the nVersion header top 3 bits to === Reference implementation ===
+// Check if Segregated Witness is Locked In +bool IsWitnessLockedIn(const CBlockIndex* pindexPrev, const Consensus::Params& params) +{ + LOCK(cs_main); + return (VersionBitsState(pindexPrev, params, Consensus::DEPLOYMENT_SEGWIT, versionbitscache) == THRESHOLD_LOCKED_IN); +} + // BIP148 mandatory segwit signalling. int64_t nMedianTimePast = pindex->GetMedianTimePast(); if ( (nMedianTimePast >= 1501545600) && // Tue 01 Aug 2017 00:00:00 UTC (nMedianTimePast <= 1510704000) && // Wed 15 Nov 2017 00:00:00 UTC - (!IsWitnessEnabled(pindex->pprev, chainparams.GetConsensus())) ) // Segwit is not active + (!IsWitnessLockedIn(pindex->pprev, chainparams.GetConsensus()) && // Segwit is not locked in + !IsWitnessEnabled(pindex->pprev, chainparams.GetConsensus())) ) // and is not active. { - bool fVersionBits = (pindex->nVersion & VERSIONBITS_TOP_MASK) == VERSIONBITS_TOP_BITS; // BIP9 bit set - bool fSegbit = (pindex->nVersion & VersionBitsMask(chainparams.GetConsensus(), Consensus::DEPLOYMENT_SEGWIT)) != 0; // segwit bit set + bool fVersionBits = (pindex->nVersion & VERSIONBITS_TOP_MASK) == VERSIONBITS_TOP_BITS; + bool fSegbit = (pindex->nVersion & VersionBitsMask(chainparams.GetConsensus(), Consensus::DEPLOYMENT_SEGWIT)) != 0; if (!(fVersionBits && fSegbit)) { return state.DoS(0, error("ConnectBlock(): relayed block must signal for segwit, please upgrade"), REJECT_INVALID, "bad-no-segwit"); }