Merge pull request #5170

092b58d CBlockIndex::GetBlockWork() + GetProofIncrement(nBits) -> GetBlockProof(CBlockIndex) (jtimon)
22c4272 MOVEONLY: Move void UpdateTime() from pow.o to miner.o (plus fix include main.h -> chain.h) (jtimon)
This commit is contained in:
Wladimir J. van der Laan 2014-11-21 14:29:12 +01:00
commit f2ada138c2
No known key found for this signature in database
GPG Key ID: 74810B012346C9A6
6 changed files with 20 additions and 26 deletions

View File

@ -220,11 +220,6 @@ public:
return (int64_t)nTime; return (int64_t)nTime;
} }
uint256 GetBlockWork() const
{
return GetProofIncrement(nBits);
}
enum { nMedianTimeSpan=11 }; enum { nMedianTimeSpan=11 };
int64_t GetMedianTimePast() const int64_t GetMedianTimePast() const

View File

@ -1226,7 +1226,7 @@ void CheckForkWarningConditions()
if (pindexBestForkTip && chainActive.Height() - pindexBestForkTip->nHeight >= 72) if (pindexBestForkTip && chainActive.Height() - pindexBestForkTip->nHeight >= 72)
pindexBestForkTip = NULL; pindexBestForkTip = NULL;
if (pindexBestForkTip || (pindexBestInvalid && pindexBestInvalid->nChainWork > chainActive.Tip()->nChainWork + (chainActive.Tip()->GetBlockWork() * 6))) if (pindexBestForkTip || (pindexBestInvalid && pindexBestInvalid->nChainWork > chainActive.Tip()->nChainWork + (GetBlockProof(*chainActive.Tip()) * 6)))
{ {
if (!fLargeWorkForkFound) if (!fLargeWorkForkFound)
{ {
@ -1277,7 +1277,7 @@ void CheckForkWarningConditionsOnNewFork(CBlockIndex* pindexNewForkTip)
// We define it this way because it allows us to only store the highest fork tip (+ base) which meets // We define it this way because it allows us to only store the highest fork tip (+ base) which meets
// the 7-block condition and from this always have the most-likely-to-cause-warning fork // the 7-block condition and from this always have the most-likely-to-cause-warning fork
if (pfork && (!pindexBestForkTip || (pindexBestForkTip && pindexNewForkTip->nHeight > pindexBestForkTip->nHeight)) && if (pfork && (!pindexBestForkTip || (pindexBestForkTip && pindexNewForkTip->nHeight > pindexBestForkTip->nHeight)) &&
pindexNewForkTip->nChainWork - pfork->nChainWork > (pfork->GetBlockWork() * 7) && pindexNewForkTip->nChainWork - pfork->nChainWork > (GetBlockProof(*pfork) * 7) &&
chainActive.Height() - pindexNewForkTip->nHeight < 72) chainActive.Height() - pindexNewForkTip->nHeight < 72)
{ {
pindexBestForkTip = pindexNewForkTip; pindexBestForkTip = pindexNewForkTip;
@ -2118,7 +2118,7 @@ CBlockIndex* AddToBlockIndex(const CBlockHeader& block)
pindexNew->nHeight = pindexNew->pprev->nHeight + 1; pindexNew->nHeight = pindexNew->pprev->nHeight + 1;
pindexNew->BuildSkip(); pindexNew->BuildSkip();
} }
pindexNew->nChainWork = (pindexNew->pprev ? pindexNew->pprev->nChainWork : 0) + pindexNew->GetBlockWork(); pindexNew->nChainWork = (pindexNew->pprev ? pindexNew->pprev->nChainWork : 0) + GetBlockProof(*pindexNew);
pindexNew->RaiseValidity(BLOCK_VALID_TREE); pindexNew->RaiseValidity(BLOCK_VALID_TREE);
if (pindexBestHeader == NULL || pindexBestHeader->nChainWork < pindexNew->nChainWork) if (pindexBestHeader == NULL || pindexBestHeader->nChainWork < pindexNew->nChainWork)
pindexBestHeader = pindexNew; pindexBestHeader = pindexNew;
@ -2816,7 +2816,7 @@ bool static LoadBlockIndexDB()
BOOST_FOREACH(const PAIRTYPE(int, CBlockIndex*)& item, vSortedByHeight) BOOST_FOREACH(const PAIRTYPE(int, CBlockIndex*)& item, vSortedByHeight)
{ {
CBlockIndex* pindex = item.second; CBlockIndex* pindex = item.second;
pindex->nChainWork = (pindex->pprev ? pindex->pprev->nChainWork : 0) + pindex->GetBlockWork(); pindex->nChainWork = (pindex->pprev ? pindex->pprev->nChainWork : 0) + GetBlockProof(*pindex);
if (pindex->nStatus & BLOCK_HAVE_DATA) { if (pindex->nStatus & BLOCK_HAVE_DATA) {
if (pindex->pprev) { if (pindex->pprev) {
if (pindex->pprev->nChainTx) { if (pindex->pprev->nChainTx) {

View File

@ -12,6 +12,7 @@
#include "main.h" #include "main.h"
#include "net.h" #include "net.h"
#include "pow.h" #include "pow.h"
#include "timedata.h"
#include "util.h" #include "util.h"
#include "utilmoneystr.h" #include "utilmoneystr.h"
#ifdef ENABLE_WALLET #ifdef ENABLE_WALLET
@ -78,6 +79,15 @@ public:
} }
}; };
void UpdateTime(CBlockHeader* pblock, const CBlockIndex* pindexPrev)
{
pblock->nTime = std::max(pindexPrev->GetMedianTimePast()+1, GetAdjustedTime());
// Updating time can change work required on testnet:
if (Params().AllowMinDifficultyBlocks())
pblock->nBits = GetNextWorkRequired(pindexPrev, pblock);
}
CBlockTemplate* CreateNewBlock(const CScript& scriptPubKeyIn) CBlockTemplate* CreateNewBlock(const CScript& scriptPubKeyIn)
{ {
// Create new block // Create new block

View File

@ -9,6 +9,7 @@
#include <stdint.h> #include <stdint.h>
class CBlock; class CBlock;
class CBlockHeader;
class CBlockIndex; class CBlockIndex;
class CReserveKey; class CReserveKey;
class CScript; class CScript;
@ -25,6 +26,7 @@ CBlockTemplate* CreateNewBlockWithKey(CReserveKey& reservekey);
void IncrementExtraNonce(CBlock* pblock, CBlockIndex* pindexPrev, unsigned int& nExtraNonce); void IncrementExtraNonce(CBlock* pblock, CBlockIndex* pindexPrev, unsigned int& nExtraNonce);
/** Check mined block */ /** Check mined block */
bool CheckWork(CBlock* pblock, CWallet& wallet, CReserveKey& reservekey); bool CheckWork(CBlock* pblock, CWallet& wallet, CReserveKey& reservekey);
void UpdateTime(CBlockHeader* block, const CBlockIndex* pindexPrev);
extern double dHashesPerSec; extern double dHashesPerSec;
extern int64_t nHPSTimerStart; extern int64_t nHPSTimerStart;

View File

@ -5,10 +5,9 @@
#include "pow.h" #include "pow.h"
#include "chain.h"
#include "chainparams.h" #include "chainparams.h"
#include "core/block.h" #include "core/block.h"
#include "main.h"
#include "timedata.h"
#include "uint256.h" #include "uint256.h"
#include "util.h" #include "util.h"
@ -98,21 +97,12 @@ bool CheckProofOfWork(uint256 hash, unsigned int nBits)
return true; return true;
} }
void UpdateTime(CBlockHeader* pblock, const CBlockIndex* pindexPrev) uint256 GetBlockProof(const CBlockIndex& block)
{
pblock->nTime = std::max(pindexPrev->GetMedianTimePast()+1, GetAdjustedTime());
// Updating time can change work required on testnet:
if (Params().AllowMinDifficultyBlocks())
pblock->nBits = GetNextWorkRequired(pindexPrev, pblock);
}
uint256 GetProofIncrement(unsigned int nBits)
{ {
uint256 bnTarget; uint256 bnTarget;
bool fNegative; bool fNegative;
bool fOverflow; bool fOverflow;
bnTarget.SetCompact(nBits, &fNegative, &fOverflow); bnTarget.SetCompact(block.nBits, &fNegative, &fOverflow);
if (fNegative || fOverflow || bnTarget == 0) if (fNegative || fOverflow || bnTarget == 0)
return 0; return 0;
// We need to compute 2**256 / (bnTarget+1), but we can't represent 2**256 // We need to compute 2**256 / (bnTarget+1), but we can't represent 2**256

View File

@ -16,9 +16,6 @@ unsigned int GetNextWorkRequired(const CBlockIndex* pindexLast, const CBlockHead
/** Check whether a block hash satisfies the proof-of-work requirement specified by nBits */ /** Check whether a block hash satisfies the proof-of-work requirement specified by nBits */
bool CheckProofOfWork(uint256 hash, unsigned int nBits); bool CheckProofOfWork(uint256 hash, unsigned int nBits);
uint256 GetBlockProof(const CBlockIndex& block);
void UpdateTime(CBlockHeader* block, const CBlockIndex* pindexPrev);
uint256 GetProofIncrement(unsigned int nBits);
#endif // BITCOIN_POW_H #endif // BITCOIN_POW_H