@ -17,9 +17,7 @@
@@ -17,9 +17,7 @@
# include "timedata.h"
# include "util.h"
# include "utilmoneystr.h"
# ifdef ENABLE_WALLET
# include "wallet/wallet.h"
# endif
# include "validationinterface.h"
# include <boost/thread.hpp>
# include <boost/tuple/tuple.hpp>
@ -362,7 +360,6 @@ void IncrementExtraNonce(CBlock* pblock, CBlockIndex* pindexPrev, unsigned int&
@@ -362,7 +360,6 @@ void IncrementExtraNonce(CBlock* pblock, CBlockIndex* pindexPrev, unsigned int&
pblock - > hashMerkleRoot = pblock - > BuildMerkleTree ( ) ;
}
# ifdef ENABLE_WALLET
//////////////////////////////////////////////////////////////////////////////
//
// Internal miner
@ -401,17 +398,7 @@ bool static ScanHash(const CBlockHeader *pblock, uint32_t& nNonce, uint256 *phas
@@ -401,17 +398,7 @@ bool static ScanHash(const CBlockHeader *pblock, uint32_t& nNonce, uint256 *phas
}
}
CBlockTemplate * CreateNewBlockWithKey ( CReserveKey & reservekey )
{
CPubKey pubkey ;
if ( ! reservekey . GetReservedKey ( pubkey ) )
return NULL ;
CScript scriptPubKey = CScript ( ) < < ToByteVector ( pubkey ) < < OP_CHECKSIG ;
return CreateNewBlock ( scriptPubKey ) ;
}
static bool ProcessBlockFound ( CBlock * pblock , CWallet & wallet , CReserveKey & reservekey )
static bool ProcessBlockFound ( CBlock * pblock , const CChainParams & chainparams )
{
LogPrintf ( " %s \n " , pblock - > ToString ( ) ) ;
LogPrintf ( " generated %s \n " , FormatMoney ( pblock - > vtx [ 0 ] . vout [ 0 ] . nValue ) ) ;
@ -423,14 +410,8 @@ static bool ProcessBlockFound(CBlock* pblock, CWallet& wallet, CReserveKey& rese
@@ -423,14 +410,8 @@ static bool ProcessBlockFound(CBlock* pblock, CWallet& wallet, CReserveKey& rese
return error ( " BitcoinMiner: generated block is stale " ) ;
}
// Remove key from key pool
reservekey . KeepKey ( ) ;
// Track how many getdata requests this block gets
{
LOCK ( wallet . cs_wallet ) ;
wallet . mapRequestCount [ pblock - > GetHash ( ) ] = 0 ;
}
// Inform about the new block
GetMainSignals ( ) . BlockFound ( pblock - > GetHash ( ) ) ;
// Process this block the same as if we had received it from another node
CValidationState state ;
@ -440,18 +421,22 @@ static bool ProcessBlockFound(CBlock* pblock, CWallet& wallet, CReserveKey& rese
@@ -440,18 +421,22 @@ static bool ProcessBlockFound(CBlock* pblock, CWallet& wallet, CReserveKey& rese
return true ;
}
void static BitcoinMiner ( CWallet * pwallet )
void static BitcoinMiner ( const CChainParams & chainparams )
{
LogPrintf ( " BitcoinMiner started \n " ) ;
SetThreadPriority ( THREAD_PRIORITY_LOWEST ) ;
RenameThread ( " bitcoin-miner " ) ;
const CChainParams & chainparams = Params ( ) ;
// Each thread has its own key and counter
CReserveKey reservekey ( pwallet ) ;
unsigned int nExtraNonce = 0 ;
boost : : shared_ptr < CReserveScript > coinbaseScript ;
GetMainSignals ( ) . ScriptForMining ( coinbaseScript ) ;
try {
//throw an error if no script was provided
if ( ! coinbaseScript - > reserveScript . size ( ) )
throw std : : runtime_error ( " No coinbase script available (mining requires a wallet) " ) ;
while ( true ) {
if ( chainparams . MiningRequiresPeers ( ) ) {
// Busy-wait for the network to come online so we don't waste time mining
@ -474,7 +459,7 @@ void static BitcoinMiner(CWallet *pwallet)
@@ -474,7 +459,7 @@ void static BitcoinMiner(CWallet *pwallet)
unsigned int nTransactionsUpdatedLast = mempool . GetTransactionsUpdated ( ) ;
CBlockIndex * pindexPrev = chainActive . Tip ( ) ;
auto_ptr < CBlockTemplate > pblocktemplate ( CreateNewBlockWithKey ( reservekey ) ) ;
auto_ptr < CBlockTemplate > pblocktemplate ( CreateNewBlock ( coinbaseScript - > reserveScript ) ) ;
if ( ! pblocktemplate . get ( ) )
{
LogPrintf ( " Error in BitcoinMiner: Keypool ran out, please call keypoolrefill before restarting the mining thread \n " ) ;
@ -506,8 +491,9 @@ void static BitcoinMiner(CWallet *pwallet)
@@ -506,8 +491,9 @@ void static BitcoinMiner(CWallet *pwallet)
SetThreadPriority ( THREAD_PRIORITY_NORMAL ) ;
LogPrintf ( " BitcoinMiner: \n " ) ;
LogPrintf ( " proof-of-work found \n hash: %s \n target: %s \n " , hash . GetHex ( ) , hashTarget . GetHex ( ) ) ;
ProcessBlockFound ( pblock , * pwallet , reservekey ) ;
ProcessBlockFound ( pblock , chainparams ) ;
SetThreadPriority ( THREAD_PRIORITY_LOWEST ) ;
coinbaseScript - > KeepScript ( ) ;
// In regression test mode, stop mining after a block is found.
if ( chainparams . MineBlocksOnDemand ( ) )
@ -551,7 +537,7 @@ void static BitcoinMiner(CWallet *pwallet)
@@ -551,7 +537,7 @@ void static BitcoinMiner(CWallet *pwallet)
}
}
void GenerateBitcoins ( bool fGenerate , CWallet * pwallet , int nThread s)
void GenerateBitcoins ( bool fGenerate , int nThreads , const CChainParams & chainparam s)
{
static boost : : thread_group * minerThreads = NULL ;
@ -575,7 +561,5 @@ void GenerateBitcoins(bool fGenerate, CWallet* pwallet, int nThreads)
@@ -575,7 +561,5 @@ void GenerateBitcoins(bool fGenerate, CWallet* pwallet, int nThreads)
minerThreads = new boost : : thread_group ( ) ;
for ( int i = 0 ; i < nThreads ; i + + )
minerThreads - > create_thread ( boost : : bind ( & BitcoinMiner , pwallet ) ) ;
minerThreads - > create_thread ( boost : : bind ( & BitcoinMiner , boost : : cref ( chainparams ) ) ) ;
}
# endif // ENABLE_WALLET