aboutsummaryrefslogtreecommitdiff
path: root/src/main.cpp
diff options
context:
space:
mode:
authorWladimir J. van der Laan <laanwj@gmail.com>2015-02-03 10:28:56 +0100
committerWladimir J. van der Laan <laanwj@gmail.com>2015-02-03 10:33:58 +0100
commit336f9fbd30a2fd62c70c4017c73c464f248e46ab (patch)
tree96bcd24d291b742f288f5c681a191669eb7d56d3 /src/main.cpp
parentb6347bf8138395117fa6d3a753c8aa266b05ada0 (diff)
parent3916a81a27b4be880361269d634dffbbbcad00a3 (diff)
downloadbitcoin-336f9fbd30a2fd62c70c4017c73c464f248e46ab.tar.xz
Merge pull request #5714
3916a81 Increase coverage of DERSIG edge cases (Pieter Wuille) 6da2028 Add RPC test for DERSIG BIP switchover logic (Pieter Wuille) 773c30d BIP66 changeover logic (Pieter Wuille) 18695f0 Example unit tests from BIP66 (Pieter Wuille) abfbeaf Change IsDERSignature to BIP66 implementation (Pieter Wuille)
Diffstat (limited to 'src/main.cpp')
-rw-r--r--src/main.cpp12
1 files changed, 12 insertions, 0 deletions
diff --git a/src/main.cpp b/src/main.cpp
index 09b0ac7af9..a7d9391cd9 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -1685,6 +1685,11 @@ bool ConnectBlock(const CBlock& block, CValidationState& state, CBlockIndex* pin
unsigned int flags = fStrictPayToScriptHash ? SCRIPT_VERIFY_P2SH : SCRIPT_VERIFY_NONE;
+ // Start enforcing the DERSIG (BIP66) rules, for block.nVersion=3 blocks, when 75% of the network has upgraded:
+ if (block.nVersion >= 3 && CBlockIndex::IsSuperMajority(3, pindex->pprev, Params().EnforceBlockUpgradeMajority())) {
+ flags |= SCRIPT_VERIFY_DERSIG;
+ }
+
CBlockUndo blockundo;
CCheckQueueControl<CScriptCheck> control(fScriptChecks && nScriptCheckThreads ? &scriptcheckqueue : NULL);
@@ -2524,6 +2529,13 @@ bool ContextualCheckBlockHeader(const CBlockHeader& block, CValidationState& sta
REJECT_OBSOLETE, "bad-version");
}
+ // Reject block.nVersion=2 blocks when 95% (75% on testnet) of the network has upgraded:
+ if (block.nVersion < 3 && CBlockIndex::IsSuperMajority(3, pindexPrev, Params().RejectBlockOutdatedMajority()))
+ {
+ return state.Invalid(error("%s : rejected nVersion=2 block", __func__),
+ REJECT_OBSOLETE, "bad-version");
+ }
+
return true;
}