diff --git a/src/main.cpp b/src/main.cpp index bbc083cec..6cf08aced 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); @@ -2066,10 +2071,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 */