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 /src/main.cpp | |
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.
Diffstat (limited to 'src/main.cpp')
-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) { |