Add tx-comment to instant block generation

This commit is contained in:
Jeremiah Buddenhagen 2018-01-04 05:01:07 -06:00
parent a2597a4325
commit 6ad8d1c82c
6 changed files with 26 additions and 9 deletions

View File

@ -127,7 +127,7 @@ void BlockAssembler::resetBlock()
nFees = 0;
}
std::unique_ptr<CBlockTemplate> BlockAssembler::CreateNewBlock(const CScript& scriptPubKeyIn, bool fMineWitnessTx)
std::unique_ptr<CBlockTemplate> BlockAssembler::CreateNewBlock(const CScript& scriptPubKeyIn, bool fMineWitnessTx, std::string coinbaseTxComment)
{
int64_t nTimeStart = GetTimeMicros();
@ -187,6 +187,7 @@ std::unique_ptr<CBlockTemplate> BlockAssembler::CreateNewBlock(const CScript& sc
coinbaseTx.vout[0].scriptPubKey = scriptPubKeyIn;
coinbaseTx.vout[0].nValue = nFees + GetBlockSubsidy(nHeight, chainparams.GetConsensus());
coinbaseTx.vin[0].scriptSig = CScript() << nHeight << OP_0;
coinbaseTx.strTxComment = coinbaseTxComment;
pblock->vtx[0] = MakeTransactionRef(std::move(coinbaseTx));
pblocktemplate->vchCoinbaseCommitment = GenerateCoinbaseCommitment(*pblock, pindexPrev, chainparams.GetConsensus());
pblocktemplate->vTxFees[0] = -nFees;

View File

@ -168,7 +168,7 @@ public:
BlockAssembler(const CChainParams& params, const Options& options);
/** Construct a new block template with coinbase to scriptPubKeyIn */
std::unique_ptr<CBlockTemplate> CreateNewBlock(const CScript& scriptPubKeyIn, bool fMineWitnessTx=true);
std::unique_ptr<CBlockTemplate> CreateNewBlock(const CScript& scriptPubKeyIn, bool fMineWitnessTx=true, std::string coinbaseTxComment="");
private:
// utility functions

View File

@ -105,7 +105,7 @@ UniValue getnetworkhashps(const JSONRPCRequest& request)
return GetNetworkHashPS(!request.params[0].isNull() ? request.params[0].get_int() : 120, !request.params[1].isNull() ? request.params[1].get_int() : -1);
}
UniValue generateBlocks(std::shared_ptr<CReserveScript> coinbaseScript, int nGenerate, uint64_t nMaxTries, bool keepScript)
UniValue generateBlocks(std::shared_ptr<CReserveScript> coinbaseScript, int nGenerate, uint64_t nMaxTries, bool keepScript, std::string strTxComment)
{
static const int nInnerLoopCount = 0x10000;
int nHeightEnd = 0;
@ -120,7 +120,7 @@ UniValue generateBlocks(std::shared_ptr<CReserveScript> coinbaseScript, int nGen
UniValue blockHashes(UniValue::VARR);
while (nHeight < nHeightEnd)
{
std::unique_ptr<CBlockTemplate> pblocktemplate(BlockAssembler(Params()).CreateNewBlock(coinbaseScript->reserveScript));
std::unique_ptr<CBlockTemplate> pblocktemplate(BlockAssembler(Params()).CreateNewBlock(coinbaseScript->reserveScript, true, strTxComment));
if (!pblocktemplate.get())
throw JSONRPCError(RPC_INTERNAL_ERROR, "Couldn't create new block");
CBlock *pblock = &pblocktemplate->block;
@ -155,7 +155,7 @@ UniValue generateBlocks(std::shared_ptr<CReserveScript> coinbaseScript, int nGen
UniValue generatetoaddress(const JSONRPCRequest& request)
{
if (request.fHelp || request.params.size() < 2 || request.params.size() > 3)
if (request.fHelp || request.params.size() < 2 || request.params.size() > 4)
throw std::runtime_error(
"generatetoaddress nblocks address (maxtries)\n"
"\nMine blocks immediately to a specified address (before the RPC call returns)\n"
@ -163,6 +163,7 @@ UniValue generatetoaddress(const JSONRPCRequest& request)
"1. nblocks (numeric, required) How many blocks are generated immediately.\n"
"2. address (string, required) The address to send the newly generated litecoin to.\n"
"3. maxtries (numeric, optional) How many iterations to try (default = 1000000).\n"
"4. tx-comment (string, optional) Coinbase transaction tx-comment (default = \"\").\n"
"\nResult:\n"
"[ blockhashes ] (array) hashes of blocks generated\n"
"\nExamples:\n"
@ -176,6 +177,11 @@ UniValue generatetoaddress(const JSONRPCRequest& request)
nMaxTries = request.params[2].get_int();
}
std::string coinbaseTxComment = "";
if (!request.params[3].isNull()) {
coinbaseTxComment = request.params[3].get_str();
}
CBitcoinAddress address(request.params[1].get_str());
if (!address.IsValid())
throw JSONRPCError(RPC_INVALID_ADDRESS_OR_KEY, "Error: Invalid address");
@ -183,7 +189,9 @@ UniValue generatetoaddress(const JSONRPCRequest& request)
std::shared_ptr<CReserveScript> coinbaseScript = std::make_shared<CReserveScript>();
coinbaseScript->reserveScript = GetScriptForDestination(address.Get());
return generateBlocks(coinbaseScript, nGenerate, nMaxTries, false);
return generateBlocks(coinbaseScript, nGenerate, nMaxTries, false, coinbaseTxComment);
}
UniValue getmininginfo(const JSONRPCRequest& request)

View File

@ -10,7 +10,7 @@
#include <univalue.h>
/** Generate blocks (mine) */
UniValue generateBlocks(std::shared_ptr<CReserveScript> coinbaseScript, int nGenerate, uint64_t nMaxTries, bool keepScript);
UniValue generateBlocks(std::shared_ptr<CReserveScript> coinbaseScript, int nGenerate, uint64_t nMaxTries, bool keepScript, std::string strTxComment);
/** Check bounds on a command line confirm target */
unsigned int ParseConfirmTarget(const UniValue& value);

View File

@ -287,6 +287,7 @@ UniValue verifytxoutproof(const JSONRPCRequest& request)
return res;
}
// ToDo: FLO 0.15
UniValue createrawtransaction(const JSONRPCRequest& request)
{
if (request.fHelp || request.params.size() < 2 || request.params.size() > 4)
@ -551,6 +552,7 @@ static void TxInErrorToJSON(const CTxIn& txin, UniValue& vErrorsRet, const std::
vErrorsRet.push_back(entry);
}
// ToDo: FLO 0.15
UniValue combinerawtransaction(const JSONRPCRequest& request)
{

View File

@ -3095,13 +3095,14 @@ UniValue generate(const JSONRPCRequest& request)
return NullUniValue;
}
if (request.fHelp || request.params.size() < 1 || request.params.size() > 2) {
if (request.fHelp || request.params.size() < 1 || request.params.size() > 3) {
throw std::runtime_error(
"generate nblocks ( maxtries )\n"
"\nMine up to nblocks blocks immediately (before the RPC call returns) to an address in the wallet.\n"
"\nArguments:\n"
"1. nblocks (numeric, required) How many blocks are generated immediately.\n"
"2. maxtries (numeric, optional) How many iterations to try (default = 1000000).\n"
"3. tx-comment (string, optional) Coinbase transaction tx-comment (default = \"\").\n"
"\nResult:\n"
"[ blockhashes ] (array) hashes of blocks generated\n"
"\nExamples:\n"
@ -3116,6 +3117,11 @@ UniValue generate(const JSONRPCRequest& request)
max_tries = request.params[1].get_int();
}
std::string coinbaseTxComment = "";
if (!request.params[2].isNull()) {
coinbaseTxComment = request.params[2].get_str();
}
std::shared_ptr<CReserveScript> coinbase_script;
pwallet->GetScriptForMining(coinbase_script);
@ -3129,7 +3135,7 @@ UniValue generate(const JSONRPCRequest& request)
throw JSONRPCError(RPC_INTERNAL_ERROR, "No coinbase script available");
}
return generateBlocks(coinbase_script, num_generate, max_tries, true);
return generateBlocks(coinbase_script, num_generate, max_tries, true, coinbaseTxComment);
}
extern UniValue abortrescan(const JSONRPCRequest& request); // in rpcdump.cpp