aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatt Corallo <git@bluematt.me>2013-10-25 03:52:53 -0400
committerWladimir J. van der Laan <laanwj@gmail.com>2013-11-26 10:15:57 +0100
commit5c55bf5af00aa9b5888b0469501fd113a144967f (patch)
treec453c8cfb707e82fd6bcfc4b18c2768666eaca8c
parent7084756f4f4e34818659a10f62933fcfc77fe27f (diff)
downloadbitcoin-5c55bf5af00aa9b5888b0469501fd113a144967f.tar.xz
Fix comparison tool by asking for blocks more aggressively
Rebased-from: b33b9a6fefbe832bf45a6c7717d0537f27597bff
-rw-r--r--src/main.cpp4
-rw-r--r--src/main.h7
2 files changed, 8 insertions, 3 deletions
diff --git a/src/main.cpp b/src/main.cpp
index d4816ca22f..f8d8697a3e 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -2123,7 +2123,7 @@ bool CBlock::CheckBlock(CValidationState &state, bool fCheckPOW, bool fCheckMerk
uniqueTx.insert(GetTxHash(i));
}
if (uniqueTx.size() != vtx.size())
- return state.DoS(100, error("CheckBlock() : duplicate transaction"));
+ return state.DoS(100, error("CheckBlock() : duplicate transaction"), true);
unsigned int nSigOps = 0;
BOOST_FOREACH(const CTransaction& tx, vtx)
@@ -3583,7 +3583,7 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv)
pfrom->AddInventoryKnown(inv);
CValidationState state;
- if (ProcessBlock(state, pfrom, &block))
+ if (ProcessBlock(state, pfrom, &block) || state.CorruptionPossible())
mapAlreadyAskedFor.erase(inv);
int nDoS;
if (state.IsInvalid(nDoS))
diff --git a/src/main.h b/src/main.h
index d5cd4cf0a6..e5226b6942 100644
--- a/src/main.h
+++ b/src/main.h
@@ -1881,13 +1881,15 @@ private:
MODE_ERROR, // run-time error
} mode;
int nDoS;
+ bool corruptionPossible;
public:
CValidationState() : mode(MODE_VALID), nDoS(0) {}
- bool DoS(int level, bool ret = false) {
+ bool DoS(int level, bool ret = false, bool corruptionIn = false) {
if (mode == MODE_ERROR)
return ret;
nDoS += level;
mode = MODE_INVALID;
+ corruptionPossible = corruptionIn;
return ret;
}
bool Invalid(bool ret = false) {
@@ -1917,6 +1919,9 @@ public:
}
return false;
}
+ bool CorruptionPossible() {
+ return corruptionPossible;
+ }
};