diff options
author | Gregory Maxwell <greg@xiph.org> | 2012-09-09 20:11:04 -0400 |
---|---|---|
committer | Luke Dashjr <luke-jr+git@utopios.org> | 2012-09-17 02:03:44 +0000 |
commit | a53b07313ffef3f4a3ad00a1a1befb4d9746d271 (patch) | |
tree | e3a2f32961bd2b0eceaea0689df911f37fa10107 | |
parent | 4ad495c2433a16edc1b6e2d2426fcefa69d06cd7 (diff) | |
download | bitcoin-a53b07313ffef3f4a3ad00a1a1befb4d9746d271.tar.xz |
Apply BIP30 checks to all blocks except the two historic violations.
Matt pointed out some time ago that there existed a minor DOS
attack where a node in its initial block download could be wedged
by an overwrite attack in a fork created between checkpoints before
a time where BIP30 was enforced. Now that the BIP30 timestamp
is irreversibly past the check can be more aggressive and apply to
all blocks except the two historic violations.
-rw-r--r-- | src/main.cpp | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/src/main.cpp b/src/main.cpp index 1860f471da..26adbf7178 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -1173,9 +1173,18 @@ bool CBlock::ConnectBlock(CTxDB& txdb, CBlockIndex* pindex) // See BIP30 and http://r6.ca/blog/20120206T005236Z.html for more information. // This logic is not necessary for memory pool transactions, as AcceptToMemoryPool // already refuses previously-known transaction ids entirely. - // This rule applies to all blocks whose timestamp is after March 15, 2012, 0:00 UTC. + // This rule was originally applied all blocks whose timestamp was after March 15, 2012, 0:00 UTC. + // Now that the whole chain is irreversibly beyond that time it is applied to all blocks except the + // two in the chain that violate it. This prevents exploiting the issue against nodes in their + // initial block download. // On testnet it is enabled as of februari 20, 2012, 0:00 UTC. - if (pindex->nTime > 1331769600 || (fTestNet && pindex->nTime > 1329696000)) + bool fEnforceBIP30; + if (fTestNet) + fEnforceBIP30 = pindex->nTime > 1329696000; + else + fEnforceBIP30 = !((pindex->nHeight==91842 && pindex->GetBlockHash() == uint256("0x00000000000a4d0a398161ffc163c503763b1f4360639393e0e4c8e300e0caec")) || + (pindex->nHeight==91880 && pindex->GetBlockHash() == uint256("0x00000000000743f190a18c5577a3c2d2a1f610ae9601ac046a38084ccb7cd721"))); + if (fEnforceBIP30) { BOOST_FOREACH(CTransaction& tx, vtx) { |