aboutsummaryrefslogtreecommitdiff
path: root/src/miner.cpp
diff options
context:
space:
mode:
authorJonas Schnelli <jonas.schnelli@include7.ch>2015-07-01 08:32:30 +0200
committerJonas Schnelli <jonas.schnelli@include7.ch>2015-07-01 16:06:14 +0200
commit5496253966abec287ea61a648cb518d14903f91f (patch)
treea8ed0fc4e07bfff4ac064ef80ff75f4882f4fe86 /src/miner.cpp
parent087e65def97fd3a2f61fa11b9f1cd2d7bc2f5f90 (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.cpp21
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)));
}