Merge branch 'master' of github.com:novacoin-project/novacoin
[novacoin.git] / src / rpcrawtransaction.cpp
index 4bcf911..346dcfc 100644 (file)
@@ -43,11 +43,9 @@ void ScriptPubKeyToJSON(const CScript& scriptPubKey, Object& out, bool fIncludeH
         if (type == TX_PUBKEY_DROP)
         {
             vector<valtype> vSolutions;
-            if (!Solver(scriptPubKey, type, vSolutions))
-            {
-                out.push_back(Pair("keyVariant", HexStr(vSolutions[0])));
-                out.push_back(Pair("R", HexStr(vSolutions[1])));
-            }
+            Solver(scriptPubKey, type, vSolutions);
+            out.push_back(Pair("keyVariant", HexStr(vSolutions[0])));
+            out.push_back(Pair("R", HexStr(vSolutions[1])));
         }
 
         Array a;
@@ -286,16 +284,27 @@ Value createrawtransaction(const Array& params, bool fHelp)
     set<CBitcoinAddress> setAddress;
     BOOST_FOREACH(const Pair& s, sendTo)
     {
+        // Create output destination script
+        CScript scriptPubKey;
         CBitcoinAddress address(s.name_);
         if (!address.IsValid())
-            throw JSONRPCError(RPC_INVALID_ADDRESS_OR_KEY, string("Invalid NovaCoin address: ")+s.name_);
+        {
+            CMalleablePubKey mpk(s.name_);
+            if (!mpk.IsValid())
+                throw JSONRPCError(RPC_INVALID_ADDRESS_OR_KEY, string("Invalid output destination: ")+s.name_);
 
-        if (setAddress.count(address))
-            throw JSONRPCError(RPC_INVALID_PARAMETER, string("Invalid parameter, duplicated address: ")+s.name_);
-        setAddress.insert(address);
+            CPubKey keyVariant, R;
+            mpk.GetVariant(R, keyVariant);
+            scriptPubKey.SetDestination(R, keyVariant);
+        }
+        else
+        {
+            scriptPubKey.SetDestination(address.Get());
+            if (setAddress.count(address))
+                throw JSONRPCError(RPC_INVALID_PARAMETER, string("Invalid parameter, duplicated address: ")+s.name_);
+            setAddress.insert(address);
+        }
 
-        CScript scriptPubKey;
-        scriptPubKey.SetDestination(address.Get());
         int64_t nAmount = AmountFromValue(s.value_);
 
         CTxOut out(nAmount, scriptPubKey);