mirror of
https://github.com/kvazar-network/kevacoin.git
synced 2025-02-03 18:54:38 +00:00
Merge pull request #3294
c8b7425 setgenerate creates multiple blocks in -regtest mode (Gavin Andresen)
This commit is contained in:
commit
4c3e24644d
@ -238,7 +238,7 @@ static const CRPCCommand vRPCCommands[] =
|
|||||||
{ "getdifficulty", &getdifficulty, true, false, false },
|
{ "getdifficulty", &getdifficulty, true, false, false },
|
||||||
{ "getnetworkhashps", &getnetworkhashps, true, false, false },
|
{ "getnetworkhashps", &getnetworkhashps, true, false, false },
|
||||||
{ "getgenerate", &getgenerate, true, false, false },
|
{ "getgenerate", &getgenerate, true, false, false },
|
||||||
{ "setgenerate", &setgenerate, true, false, true },
|
{ "setgenerate", &setgenerate, true, true, false },
|
||||||
{ "gethashespersec", &gethashespersec, true, false, false },
|
{ "gethashespersec", &gethashespersec, true, false, false },
|
||||||
{ "getinfo", &getinfo, true, false, false },
|
{ "getinfo", &getinfo, true, false, false },
|
||||||
{ "getmininginfo", &getmininginfo, true, false, false },
|
{ "getmininginfo", &getmininginfo, true, false, false },
|
||||||
|
@ -112,7 +112,7 @@ void Shutdown()
|
|||||||
ShutdownRPCMining();
|
ShutdownRPCMining();
|
||||||
if (pwalletMain)
|
if (pwalletMain)
|
||||||
bitdb.Flush(false);
|
bitdb.Flush(false);
|
||||||
GenerateBitcoins(false, NULL);
|
GenerateBitcoins(false, NULL, 0);
|
||||||
StopNode();
|
StopNode();
|
||||||
{
|
{
|
||||||
LOCK(cs_main);
|
LOCK(cs_main);
|
||||||
@ -1050,7 +1050,7 @@ bool AppInit2(boost::thread_group& threadGroup, bool fForceServer)
|
|||||||
|
|
||||||
// Generate coins in the background
|
// Generate coins in the background
|
||||||
if (pwalletMain)
|
if (pwalletMain)
|
||||||
GenerateBitcoins(GetBoolArg("-gen", false), pwalletMain);
|
GenerateBitcoins(GetBoolArg("-gen", false), pwalletMain, GetArg("-genproclimit", -1));
|
||||||
|
|
||||||
// ********************************************************* Step 12: finished
|
// ********************************************************* Step 12: finished
|
||||||
|
|
||||||
|
@ -650,11 +650,10 @@ void static BitcoinMiner(CWallet *pwallet)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void GenerateBitcoins(bool fGenerate, CWallet* pwallet)
|
void GenerateBitcoins(bool fGenerate, CWallet* pwallet, int nThreads)
|
||||||
{
|
{
|
||||||
static boost::thread_group* minerThreads = NULL;
|
static boost::thread_group* minerThreads = NULL;
|
||||||
|
|
||||||
int nThreads = GetArg("-genproclimit", -1);
|
|
||||||
if (nThreads < 0) {
|
if (nThreads < 0) {
|
||||||
if (Params().NetworkID() == CChainParams::REGTEST)
|
if (Params().NetworkID() == CChainParams::REGTEST)
|
||||||
nThreads = 1;
|
nThreads = 1;
|
||||||
|
@ -16,7 +16,7 @@ class CScript;
|
|||||||
class CWallet;
|
class CWallet;
|
||||||
|
|
||||||
/** Run the miner threads */
|
/** Run the miner threads */
|
||||||
void GenerateBitcoins(bool fGenerate, CWallet* pwallet);
|
void GenerateBitcoins(bool fGenerate, CWallet* pwallet, int nThreads);
|
||||||
/** Generate a new block, without valid proof-of-work */
|
/** Generate a new block, without valid proof-of-work */
|
||||||
CBlockTemplate* CreateNewBlock(const CScript& scriptPubKeyIn);
|
CBlockTemplate* CreateNewBlock(const CScript& scriptPubKeyIn);
|
||||||
CBlockTemplate* CreateNewBlockWithKey(CReserveKey& reservekey);
|
CBlockTemplate* CreateNewBlockWithKey(CReserveKey& reservekey);
|
||||||
|
@ -133,6 +133,7 @@ Value setgenerate(const Array& params, bool fHelp)
|
|||||||
"\nArguments:\n"
|
"\nArguments:\n"
|
||||||
"1. generate (boolean, required) Set to true to turn on generation, off to turn off.\n"
|
"1. generate (boolean, required) Set to true to turn on generation, off to turn off.\n"
|
||||||
"2. genproclimit (numeric, optional) Set the processor limit for when generation is on. Can be -1 for unlimited.\n"
|
"2. genproclimit (numeric, optional) Set the processor limit for when generation is on. Can be -1 for unlimited.\n"
|
||||||
|
" Note: in -regtest mode, genproclimit controls how many blocks are generated immediately.\n"
|
||||||
"\nExamples:\n"
|
"\nExamples:\n"
|
||||||
"\nSet the generation on with a limit of one processor\n"
|
"\nSet the generation on with a limit of one processor\n"
|
||||||
+ HelpExampleCli("setgenerate", "true 1") +
|
+ HelpExampleCli("setgenerate", "true 1") +
|
||||||
@ -144,21 +145,55 @@ Value setgenerate(const Array& params, bool fHelp)
|
|||||||
+ HelpExampleRpc("setgenerate", "true, 1")
|
+ HelpExampleRpc("setgenerate", "true, 1")
|
||||||
);
|
);
|
||||||
|
|
||||||
|
if (pwalletMain == NULL)
|
||||||
|
throw JSONRPCError(RPC_METHOD_NOT_FOUND, "Method not found (disabled)");
|
||||||
|
|
||||||
bool fGenerate = true;
|
bool fGenerate = true;
|
||||||
if (params.size() > 0)
|
if (params.size() > 0)
|
||||||
fGenerate = params[0].get_bool();
|
fGenerate = params[0].get_bool();
|
||||||
|
|
||||||
|
int nGenProcLimit = -1;
|
||||||
if (params.size() > 1)
|
if (params.size() > 1)
|
||||||
{
|
{
|
||||||
int nGenProcLimit = params[1].get_int();
|
nGenProcLimit = params[1].get_int();
|
||||||
mapArgs["-genproclimit"] = itostr(nGenProcLimit);
|
|
||||||
if (nGenProcLimit == 0)
|
if (nGenProcLimit == 0)
|
||||||
fGenerate = false;
|
fGenerate = false;
|
||||||
}
|
}
|
||||||
mapArgs["-gen"] = (fGenerate ? "1" : "0");
|
|
||||||
|
|
||||||
assert(pwalletMain != NULL);
|
// -regtest mode: don't return until nGenProcLimit blocks are generated
|
||||||
GenerateBitcoins(fGenerate, pwalletMain);
|
if (fGenerate && Params().NetworkID() == CChainParams::REGTEST)
|
||||||
|
{
|
||||||
|
int nHeightStart = 0;
|
||||||
|
int nHeightEnd = 0;
|
||||||
|
int nHeight = 0;
|
||||||
|
int nGenerate = (nGenProcLimit > 0 ? nGenProcLimit : 1);
|
||||||
|
{ // Don't keep cs_main locked
|
||||||
|
LOCK(cs_main);
|
||||||
|
nHeightStart = chainActive.Height();
|
||||||
|
nHeight = nHeightStart;
|
||||||
|
nHeightEnd = nHeightStart+nGenerate;
|
||||||
|
}
|
||||||
|
int nHeightLast = -1;
|
||||||
|
while (nHeight < nHeightEnd)
|
||||||
|
{
|
||||||
|
if (nHeightLast != nHeight)
|
||||||
|
{
|
||||||
|
nHeightLast = nHeight;
|
||||||
|
GenerateBitcoins(fGenerate, pwalletMain, 1);
|
||||||
|
}
|
||||||
|
MilliSleep(1);
|
||||||
|
{ // Don't keep cs_main locked
|
||||||
|
LOCK(cs_main);
|
||||||
|
nHeight = chainActive.Height();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else // Not -regtest: start generate thread, return immediately
|
||||||
|
{
|
||||||
|
mapArgs["-gen"] = (fGenerate ? "1" : "0");
|
||||||
|
GenerateBitcoins(fGenerate, pwalletMain, nGenProcLimit);
|
||||||
|
}
|
||||||
|
|
||||||
return Value::null;
|
return Value::null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user