From 1352c367a1431fef1a711edeb239fa822a564c4b Mon Sep 17 00:00:00 2001
From: Cameron Garnham <da2ce7@gmail.com>
Date: Tue, 4 Apr 2017 12:30:31 +0200
Subject: Stop BIP 148 enforced signalling if SegWit is Locked-In State

---
 bip-0148.mediawiki | 14 +++++++++++---
 1 file changed, 11 insertions(+), 3 deletions(-)

(limited to 'bip-0148.mediawiki')

diff --git a/bip-0148.mediawiki b/bip-0148.mediawiki
index 5accfcf..6eb9c42 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 ===
 
 <pre>
+// 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");
     }
-- 
cgit v1.2.3

