diff options
author | Jonas Schnelli <jonas.schnelli@include7.ch> | 2015-07-01 08:32:30 +0200 |
---|---|---|
committer | Jonas Schnelli <jonas.schnelli@include7.ch> | 2015-07-01 16:06:14 +0200 |
commit | 5496253966abec287ea61a648cb518d14903f91f (patch) | |
tree | a8ed0fc4e07bfff4ac064ef80ff75f4882f4fe86 /src/miner.cpp | |
parent | 087e65def97fd3a2f61fa11b9f1cd2d7bc2f5f90 (diff) |
add CReserveScript to allow modular script keeping/returning
- use one CReserveScript per mining thread
Diffstat (limited to 'src/miner.cpp')
-rw-r--r-- | src/miner.cpp | 21 |
1 files changed, 11 insertions, 10 deletions
diff --git a/src/miner.cpp b/src/miner.cpp index c51c21b8cf..46cde91a4d 100644 --- a/src/miner.cpp +++ b/src/miner.cpp @@ -421,7 +421,7 @@ static bool ProcessBlockFound(CBlock* pblock, const CChainParams& chainparams) return true; } -void static BitcoinMiner(const CChainParams& chainparams, const CScript& coinbaseScript) +void static BitcoinMiner(const CChainParams& chainparams) { LogPrintf("BitcoinMiner started\n"); SetThreadPriority(THREAD_PRIORITY_LOWEST); @@ -429,7 +429,14 @@ void static BitcoinMiner(const CChainParams& chainparams, const CScript& coinbas 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 @@ -452,7 +459,7 @@ void static BitcoinMiner(const CChainParams& chainparams, const CScript& coinbas unsigned int nTransactionsUpdatedLast = mempool.GetTransactionsUpdated(); CBlockIndex* pindexPrev = chainActive.Tip(); - auto_ptr<CBlockTemplate> pblocktemplate(CreateNewBlock(coinbaseScript)); + 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"); @@ -486,6 +493,7 @@ void static BitcoinMiner(const CChainParams& chainparams, const CScript& coinbas LogPrintf("proof-of-work found \n hash: %s \ntarget: %s\n", hash.GetHex(), hashTarget.GetHex()); ProcessBlockFound(pblock, chainparams); SetThreadPriority(THREAD_PRIORITY_LOWEST); + coinbaseScript->KeepScript(); // In regression test mode, stop mining after a block is found. if (chainparams.MineBlocksOnDemand()) @@ -551,14 +559,7 @@ void GenerateBitcoins(bool fGenerate, int nThreads, const CChainParams& chainpar if (nThreads == 0 || !fGenerate) return; - CScript coinbaseScript; - GetMainSignals().ScriptForMining(coinbaseScript); - - //throw an error if no script was provided - if (!coinbaseScript.size()) - throw std::runtime_error("No coinbase script available (mining requires a wallet)"); - minerThreads = new boost::thread_group(); for (int i = 0; i < nThreads; i++) - minerThreads->create_thread(boost::bind(&BitcoinMiner, boost::cref(chainparams), coinbaseScript)); + minerThreads->create_thread(boost::bind(&BitcoinMiner, boost::cref(chainparams))); } |