aboutsummaryrefslogtreecommitdiff
path: root/src/main.cpp
diff options
context:
space:
mode:
authorGregory Maxwell <greg@xiph.org>2012-09-09 20:11:04 -0400
committerLuke Dashjr <luke-jr+git@utopios.org>2012-09-17 02:03:44 +0000
commita53b07313ffef3f4a3ad00a1a1befb4d9746d271 (patch)
treee3a2f32961bd2b0eceaea0689df911f37fa10107 /src/main.cpp
parent4ad495c2433a16edc1b6e2d2426fcefa69d06cd7 (diff)
downloadbitcoin-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.
Diffstat (limited to 'src/main.cpp')
-rw-r--r--src/main.cpp13
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)
{