Merge pull request #361 from svost/master
[novacoin.git] / src / rpcmining.cpp
index 63b4e37..62d8837 100644 (file)
@@ -13,7 +13,6 @@
 
 #include <boost/format.hpp>
 #include <boost/assign/list_of.hpp>
-#include <boost/iterator/counting_iterator.hpp>
 
 using namespace json_spirit;
 using namespace std;
@@ -50,7 +49,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));
@@ -78,7 +77,7 @@ Value scaninput(const Array& params, bool fHelp)
 {
     if (fHelp || params.size() != 1)
         throw runtime_error(
-            "scaninput {\"txid\":txid, \"vout\":[vout1, vout2, ..., voutN], \"difficulty\":difficulty, \"days\":days}\n"
+            "scaninput '{\"txid\":\"txid\", \"vout\":[vout1, vout2, ..., voutN], \"difficulty\":difficulty, \"days\":days}'\n"
             "Scan specified transaction or input for suitable kernel solutions.\n"
             "    difficulty - upper limit for difficulty, current difficulty by default;\n"
             "    days - time window, 90 days by default.\n"
@@ -101,7 +100,7 @@ Value scaninput(const Array& params, bool fHelp)
     uint32_t nBits = GetNextTargetRequired(pindexBest, true);
 
     const Value& diff_v = find_value(scanParams, "difficulty");
-    if (diff_v.type() == real_type)
+    if (diff_v.type() == real_type || diff_v.type() == int_type)
     {
         double dDiff = diff_v.get_real();
         if (dDiff <= 0)
@@ -147,9 +146,21 @@ Value scaninput(const Array& params, bool fHelp)
                 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 << boost::format("Invalid parameter, input number %d is out of range") % nOut;
+                throw JSONRPCError(RPC_INVALID_PARAMETER, strErrorMsg.str());
+            }
+
+            vInputs.push_back(nOut);
+        }
         else
         {
-            vInputs = vector<int>(boost::counting_iterator<int>( 0 ), boost::counting_iterator<int>( tx.vout.size() ));
+            for (size_t i = 0; i != tx.vout.size(); ++i) vInputs.push_back(i);
         }
 
         CTxDB txdb("r");