From 2d1ea2c3076fdb75ce9e32ee6c699f810f342858 Mon Sep 17 00:00:00 2001 From: Patrick Lodder Date: Fri, 8 Aug 2014 12:19:34 +0200 Subject: [PATCH] check block version for aux blocks properly for version warning UpdateTip() was checking block versions against one of two possible AuxPoW versions. Added consts for version checks and IsAuxPowVersion(int nVersion) for use with UpdateTip()'s block version check. --- src/main.cpp | 8 ++++++-- src/main.h | 11 +++++++++++ 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/src/main.cpp b/src/main.cpp index da1f12cdc..c8d024bab 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -1158,6 +1158,11 @@ void CBlockHeader::SetAuxPow(CAuxPow* pow) auxpow.reset(pow); } +bool IsAuxPowVersion(int nVersion) +{ + return (nVersion == BLOCK_VERSION_AUXPOW_WITH_AUX || nVersion == BLOCK_VERSION_AUXPOW_WITHOUT_AUX); +} + uint256 static GetOrphanRoot(const uint256& hash) { map::iterator it = mapOrphanBlocks.find(hash); @@ -2064,10 +2069,9 @@ void static UpdateTip(CBlockIndex *pindexNew) { { int nUpgraded = 0; const CBlockIndex* pindex = chainActive.Tip(); - int nAuxVersion = CBlockHeader::CURRENT_VERSION | (AUXPOW_CHAIN_ID * BLOCK_VERSION_CHAIN_START); for (int i = 0; i < 100 && pindex != NULL; i++) { - if (pindex->nVersion > CBlock::CURRENT_VERSION && pindex->nVersion != nAuxVersion) + if (pindex->nVersion > CBlock::CURRENT_VERSION && !IsAuxPowVersion(pindex->nVersion)) ++nUpgraded; pindex = pindex->pprev; } diff --git a/src/main.h b/src/main.h index cd512846e..acea707ea 100644 --- a/src/main.h +++ b/src/main.h @@ -79,6 +79,14 @@ static const int MAX_BLOCKS_IN_TRANSIT_PER_PEER = 128; /** Timeout in seconds before considering a block download peer unresponsive. */ static const unsigned int BLOCK_DOWNLOAD_TIMEOUT = 60; +/** AuxPow Block versions for sanity checks. */ +/** bare AuxPoW block version which will be modulated further. */ +static const int BLOCK_VERSION_AUXPOW_BARE = CBlockHeader::CURRENT_VERSION | (AUXPOW_CHAIN_ID * BLOCK_VERSION_CHAIN_START); +/** version when AuxPoW exists on the block */ +static const int BLOCK_VERSION_AUXPOW_WITH_AUX = BLOCK_VERSION_AUXPOW_BARE | BLOCK_VERSION_AUXPOW; +/** version when no AuxPoW exists on the block */ +static const int BLOCK_VERSION_AUXPOW_WITHOUT_AUX = BLOCK_VERSION_AUXPOW_BARE & ~BLOCK_VERSION_AUXPOW; + #ifdef USE_UPNP static const int fHaveUPnP = true; #else @@ -185,6 +193,9 @@ unsigned int GetNextWorkRequired(const CBlockIndex* pindexLast, const CBlockHead void UpdateTime(CBlockHeader& block, const CBlockIndex* pindexPrev); +/** Determine whether the block version is modulated with auxpow logic */ +bool IsAuxPowVersion(int nVersion); + /** Create a new block index entry for a given block hash */ CBlockIndex * InsertBlockIndex(uint256 hash); /** Verify a signature */