X-Git-Url: https://git.novaco.in/?a=blobdiff_plain;f=src%2Frpcmining.cpp;h=c00c356b88374dfce6f5af4c3d8081e9aff21dba;hb=HEAD;hp=498e1af8733278318b512c05f01aa43f199842e4;hpb=38663dc48fc85ff2cd44b2fcb5b246a928c04e1f;p=novacoin.git diff --git a/src/rpcmining.cpp b/src/rpcmining.cpp index 498e1af..c00c356 100644 --- a/src/rpcmining.cpp +++ b/src/rpcmining.cpp @@ -3,17 +3,13 @@ // Distributed under the MIT/X11 software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. -#include "main.h" #include "db.h" -#include "txdb.h" +#include "txdb-leveldb.h" #include "init.h" #include "miner.h" #include "kernel.h" #include "bitcoinrpc.h" - -#include -#include -#include +#include "wallet.h" using namespace json_spirit; using namespace std; @@ -50,7 +46,7 @@ Value getmininginfo(const Array& params, bool fHelp) "getmininginfo\n" "Returns an object containing mining-related information."); - Object obj, diff, weight; + Object obj, diff; obj.push_back(Pair("blocks", (int)nBestHeight)); obj.push_back(Pair("currentblocksize",(uint64_t)nLastBlockSize)); obj.push_back(Pair("currentblocktx",(uint64_t)nLastBlockTx)); @@ -84,7 +80,7 @@ Value scaninput(const Array& params, bool fHelp) " days - time window, 90 days by default.\n" ); - RPCTypeCheck(params, boost::assign::list_of(obj_type)); + RPCTypeCheck(params, { obj_type }); Object scanParams = params[0].get_obj(); @@ -134,22 +130,34 @@ Value scaninput(const Array& params, bool fHelp) if (inputs_v.type() == array_type) { Array inputs = inputs_v.get_array(); - BOOST_FOREACH(const Value &v_out, inputs) + for (const Value &v_out : inputs) { int nOut = v_out.get_int(); if (nOut < 0 || nOut > (int)tx.vout.size() - 1) { stringstream strErrorMsg; - strErrorMsg << boost::format("Invalid parameter, input number %d is out of range") % nOut; + strErrorMsg << "Invalid parameter, input number " << to_string(nOut) << " is out of range"; throw JSONRPCError(RPC_INVALID_PARAMETER, strErrorMsg.str()); } vInputs.push_back(nOut); } } + else if(inputs_v.type() == int_type) + { + int nOut = inputs_v.get_int(); + if (nOut < 0 || nOut > (int)tx.vout.size() - 1) + { + stringstream strErrorMsg; + strErrorMsg << "Invalid parameter, input number " << to_string(nOut) << " is out of range"; + throw JSONRPCError(RPC_INVALID_PARAMETER, strErrorMsg.str()); + } + + vInputs.push_back(nOut); + } else { - vInputs = vector(boost::counting_iterator( 0 ), boost::counting_iterator( tx.vout.size() )); + for (size_t i = 0; i != tx.vout.size(); ++i) vInputs.push_back(i); } CTxDB txdb("r"); @@ -177,7 +185,7 @@ Value scaninput(const Array& params, bool fHelp) interval.second = interval.first + nDays * nOneDay; Array results; - BOOST_FOREACH(const int &nOut, vInputs) + for (const int &nOut : vInputs) { // Check for spent flag // It doesn't make sense to scan spent inputs. @@ -197,7 +205,7 @@ Value scaninput(const Array& params, bool fHelp) std::vector > result; if (ScanKernelForward((unsigned char *)&itK[0], nBits, tx.nTime, tx.vout[nOut].nValue, interval, result)) { - BOOST_FOREACH(const PAIRTYPE(uint256, uint32_t) solution, result) + for (const auto &solution : result) { Object item; item.push_back(Pair("nout", nOut)); @@ -232,9 +240,9 @@ Value getworkex(const Array& params, bool fHelp) if (IsInitialBlockDownload()) throw JSONRPCError(-10, "NovaCoin is downloading blocks..."); - typedef map > mapNewBlock_t; + typedef map, CScript> > mapNewBlock_t; static mapNewBlock_t mapNewBlock; - static vector vNewBlock; + static vector> vNewBlock; static CReserveKey reservekey(pwalletMain); if (params.size() == 0) @@ -243,7 +251,7 @@ Value getworkex(const Array& params, bool fHelp) static unsigned int nTransactionsUpdatedLast; static CBlockIndex* pindexPrev; static int64_t nStart; - static CBlock* pblock; + static shared_ptr pblock; if (pindexPrev != pindexBest || (nTransactionsUpdated != nTransactionsUpdatedLast && GetTime() - nStart > 60)) { @@ -251,8 +259,6 @@ Value getworkex(const Array& params, bool fHelp) { // Deallocate old blocks since they're obsolete now mapNewBlock.clear(); - BOOST_FOREACH(CBlock* pblock, vNewBlock) - delete pblock; vNewBlock.clear(); } nTransactionsUpdatedLast = nTransactionsUpdated; @@ -298,7 +304,7 @@ Value getworkex(const Array& params, bool fHelp) Array merkle_arr; - BOOST_FOREACH(uint256 merkleh, merkle) { + for (uint256 merkleh : merkle) { merkle_arr.push_back(HexStr(BEGIN(merkleh), END(merkleh))); } @@ -328,7 +334,7 @@ Value getworkex(const Array& params, bool fHelp) // Get saved block if (!mapNewBlock.count(pdata->hashMerkleRoot)) return false; - CBlock* pblock = mapNewBlock[pdata->hashMerkleRoot].first; + std::shared_ptr pblock = mapNewBlock[pdata->hashMerkleRoot].first; pblock->nTime = pdata->nTime; pblock->nNonce = pdata->nNonce; @@ -363,9 +369,9 @@ Value getwork(const Array& params, bool fHelp) if (IsInitialBlockDownload()) throw JSONRPCError(RPC_CLIENT_IN_INITIAL_DOWNLOAD, "NovaCoin is downloading blocks..."); - typedef map > mapNewBlock_t; + typedef map, CScript> > mapNewBlock_t; static mapNewBlock_t mapNewBlock; // FIXME: thread safety - static vector vNewBlock; + static vector> vNewBlock; static CReserveKey reservekey(pwalletMain); if (params.size() == 0) @@ -374,7 +380,7 @@ Value getwork(const Array& params, bool fHelp) static unsigned int nTransactionsUpdatedLast; static CBlockIndex* pindexPrev; static int64_t nStart; - static CBlock* pblock; + static shared_ptr pblock; if (pindexPrev != pindexBest || (nTransactionsUpdated != nTransactionsUpdatedLast && GetTime() - nStart > 60)) { @@ -382,8 +388,6 @@ Value getwork(const Array& params, bool fHelp) { // Deallocate old blocks since they're obsolete now mapNewBlock.clear(); - BOOST_FOREACH(CBlock* pblock, vNewBlock) - delete pblock; vNewBlock.clear(); } @@ -446,7 +450,7 @@ Value getwork(const Array& params, bool fHelp) // Get saved block if (!mapNewBlock.count(pdata->hashMerkleRoot)) return false; - CBlock* pblock = mapNewBlock[pdata->hashMerkleRoot].first; + std::shared_ptr pblock = mapNewBlock[pdata->hashMerkleRoot].first; pblock->nTime = pdata->nTime; pblock->nNonce = pdata->nNonce; @@ -510,7 +514,7 @@ Value getblocktemplate(const Array& params, bool fHelp) static unsigned int nTransactionsUpdatedLast; static CBlockIndex* pindexPrev; static int64_t nStart; - static CBlock* pblock; + static std::shared_ptr pblock; if (pindexPrev != pindexBest || (nTransactionsUpdated != nTransactionsUpdatedLast && GetTime() - nStart > 5)) { @@ -525,8 +529,7 @@ Value getblocktemplate(const Array& params, bool fHelp) // Create new block if(pblock) { - delete pblock; - pblock = NULL; + pblock.reset(); } pblock = CreateNewBlock(pwalletMain); if (!pblock) @@ -544,7 +547,7 @@ Value getblocktemplate(const Array& params, bool fHelp) map setTxIndex; int i = 0; CTxDB txdb("r"); - BOOST_FOREACH (CTransaction& tx, pblock->vtx) + for (CTransaction& tx : pblock->vtx) { uint256 txHash = tx.GetHash(); setTxIndex[txHash] = i++; @@ -568,7 +571,7 @@ Value getblocktemplate(const Array& params, bool fHelp) entry.push_back(Pair("fee", (int64_t)(tx.GetValueIn(mapInputs) - tx.GetValueOut()))); Array deps; - BOOST_FOREACH (MapPrevTx::value_type& inp, mapInputs) + for (MapPrevTx::value_type& inp : mapInputs) { if (setTxIndex.count(inp.first)) deps.push_back(setTxIndex[inp.first]);