Browse Source

Fix issue #848 : broken mining on testnet

0.8
Gavin Andresen 13 years ago
parent
commit
0f8cb5db73
  1. 4
      src/bitcoinrpc.cpp
  2. 20
      src/main.cpp
  3. 1
      src/main.h

4
src/bitcoinrpc.cpp

@ -1816,7 +1816,7 @@ Value getwork(const Array& params, bool fHelp) @@ -1816,7 +1816,7 @@ Value getwork(const Array& params, bool fHelp)
}
// Update nTime
pblock->nTime = max(pindexPrev->GetMedianTimePast()+1, GetAdjustedTime());
pblock->UpdateTime(pindexPrev);
pblock->nNonce = 0;
// Update nExtraNonce
@ -1916,7 +1916,7 @@ Value getmemorypool(const Array& params, bool fHelp) @@ -1916,7 +1916,7 @@ Value getmemorypool(const Array& params, bool fHelp)
}
// Update nTime
pblock->nTime = max(pindexPrev->GetMedianTimePast()+1, GetAdjustedTime());
pblock->UpdateTime(pindexPrev);
pblock->nNonce = 0;
Array transactions;

20
src/main.cpp

@ -922,6 +922,15 @@ void static InvalidChainFound(CBlockIndex* pindexNew) @@ -922,6 +922,15 @@ void static InvalidChainFound(CBlockIndex* pindexNew)
printf("InvalidChainFound: WARNING: Displayed transactions may not be correct! You may need to upgrade, or other nodes may need to upgrade.\n");
}
void CBlock::UpdateTime(const CBlockIndex* pindexPrev)
{
nTime = max(pindexPrev->GetMedianTimePast()+1, GetAdjustedTime());
// Updating time can change work required on testnet:
if (fTestNet)
nBits = GetNextWorkRequired(pindexPrev, this);
}
@ -3168,7 +3177,7 @@ CBlock* CreateNewBlock(CReserveKey& reservekey) @@ -3168,7 +3177,7 @@ CBlock* CreateNewBlock(CReserveKey& reservekey)
// Fill in header
pblock->hashPrevBlock = pindexPrev->GetBlockHash();
pblock->hashMerkleRoot = pblock->BuildMerkleTree();
pblock->nTime = max(pindexPrev->GetMedianTimePast()+1, GetAdjustedTime());
pblock->UpdateTime(pindexPrev);
pblock->nBits = GetNextWorkRequired(pindexPrev, pblock.get());
pblock->nNonce = 0;
@ -3326,6 +3335,7 @@ void static BitcoinMiner(CWallet *pwallet) @@ -3326,6 +3335,7 @@ void static BitcoinMiner(CWallet *pwallet)
FormatHashBuffers(pblock.get(), pmidstate, pdata, phash1);
unsigned int& nBlockTime = *(unsigned int*)(pdata + 64 + 4);
unsigned int& nBlockBits = *(unsigned int*)(pdata + 64 + 8);
unsigned int& nBlockNonce = *(unsigned int*)(pdata + 64 + 12);
@ -3413,8 +3423,14 @@ void static BitcoinMiner(CWallet *pwallet) @@ -3413,8 +3423,14 @@ void static BitcoinMiner(CWallet *pwallet)
break;
// Update nTime every few seconds
pblock->nTime = max(pindexPrev->GetMedianTimePast()+1, GetAdjustedTime());
pblock->UpdateTime(pindexPrev);
nBlockTime = ByteReverse(pblock->nTime);
if (fTestNet)
{
// Changing pblock->nTime can change work required on testnet:
nBlockBits = ByteReverse(pblock->nBits);
hashTarget = CBigNum().SetCompact(pblock->nBits).getuint256();
}
}
}
}

1
src/main.h

@ -913,6 +913,7 @@ public: @@ -913,6 +913,7 @@ public:
return (int64)nTime;
}
void UpdateTime(const CBlockIndex* pindexPrev);
uint256 BuildMerkleTree() const

Loading…
Cancel
Save