aboutsummaryrefslogtreecommitdiff
path: root/src/main.cpp
diff options
context:
space:
mode:
authorWladimir J. van der Laan <laanwj@gmail.com>2011-09-28 21:35:58 +0200
committerWladimir J. van der Laan <laanwj@gmail.com>2011-09-28 21:35:58 +0200
commita8b95ce6ed5e84d34748ecdd0ff1db4d03377cf0 (patch)
treef416d18e89f6e619a84d9e316134afc5380df282 /src/main.cpp
parent59020408744664fde902406cf41de125859d461f (diff)
downloadbitcoin-a8b95ce6ed5e84d34748ecdd0ff1db4d03377cf0.tar.xz
use median filter for peer-reported reported number of blocks
- fixes problem that one misconfigured or malicious node can mess up progress bar - implementation in src/util.h - testcase in src/test/util_tests.cpp
Diffstat (limited to 'src/main.cpp')
-rw-r--r--src/main.cpp16
1 files changed, 5 insertions, 11 deletions
diff --git a/src/main.cpp b/src/main.cpp
index e732ddcf5d..5c0dd7d765 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -32,7 +32,6 @@ uint256 hashGenesisBlock("0x000000000019d6689c085ae165831e934ff763ae46a2a6c172b3
static CBigNum bnProofOfWorkLimit(~uint256(0) >> 32);
const int nTotalBlocksEstimate = 140700; // Conservative estimate of total nr of blocks on main chain
const int nInitialBlockThreshold = 120; // Regard blocks up until N-threshold as "initial download"
-int nMaxBlocksOfPeers = 0; // Amount of blocks that other nodes claim to have
CBlockIndex* pindexGenesisBlock = NULL;
int nBestHeight = -1;
CBigNum bnBestChainWork = 0;
@@ -41,6 +40,8 @@ uint256 hashBestChain = 0;
CBlockIndex* pindexBest = NULL;
int64 nTimeBestReceived = 0;
+CMedianFilter<int> cPeerBlockCounts(5, 0); // Amount of blocks that other nodes claim to have
+
map<uint256, CBlock*> mapOrphanBlocks;
multimap<uint256, CBlock*> mapOrphanBlocksByPrev;
@@ -65,11 +66,6 @@ int fUseUPnP = false;
#endif
-
-
-
-
-
//////////////////////////////////////////////////////////////////////////////
//
// dispatching functions
@@ -730,7 +726,7 @@ int GetTotalBlocksEstimate()
// Return maximum amount of blocks that other nodes claim to have
int GetNumBlocksOfPeers()
{
- return std::max(nMaxBlocksOfPeers, GetTotalBlocksEstimate());
+ return std::max(cPeerBlockCounts.median(), GetTotalBlocksEstimate());
}
bool IsInitialBlockDownload()
@@ -1847,10 +1843,8 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv)
pfrom->fSuccessfullyConnected = true;
printf("version message: version %d, blocks=%d\n", pfrom->nVersion, pfrom->nStartingHeight);
- if(pfrom->nStartingHeight > nMaxBlocksOfPeers)
- {
- nMaxBlocksOfPeers = pfrom->nStartingHeight;
- }
+
+ cPeerBlockCounts.input(pfrom->nStartingHeight);
}