Bitcoin-Qt signmessage GUI (pull request #582)
[novacoin.git] / src / bitcoinrpc.cpp
index c1e4df4..03c01f7 100644 (file)
@@ -589,8 +589,6 @@ Value sendtoaddress(const Array& params, bool fHelp)
     return wtx.GetHash().GetHex();
 }
 
-static const string strMessageMagic = "Bitcoin Signed Message:\n";
-
 Value signmessage(const Array& params, bool fHelp)
 {
     if (fHelp || params.size() != 2)
@@ -994,7 +992,7 @@ Value addmultisigaddress(const Array& params, bool fHelp)
     {
         string msg = "addmultisigaddress <nrequired> <'[\"key\",\"key\"]'> [account]\n"
             "Add a nrequired-to-sign multisignature address to the wallet\"\n"
-            "each key is a bitcoin address, hex or base58 public key\n"
+            "each key is a bitcoin address or hex-encoded public key\n"
             "If [account] is specified, assign address to [account].";
         throw runtime_error(msg);
     }
@@ -1025,35 +1023,25 @@ Value addmultisigaddress(const Array& params, bool fHelp)
             if (address.IsScript())
                 throw runtime_error(
                     strprintf("%s is a pay-to-script address",ks.c_str()));
-            if (!pwalletMain->GetKey(address, pubkeys[i]))
+            std::vector<unsigned char> vchPubKey;
+            if (!pwalletMain->GetPubKey(address, vchPubKey))
                 throw runtime_error(
                     strprintf("no full public key for address %s",ks.c_str()));
-            continue;
+            if (vchPubKey.empty() || !pubkeys[i].SetPubKey(vchPubKey))
+                throw runtime_error(" Invalid public key: "+ks);
         }
 
         // Case 2: hex public key
-        if (IsHex(ks))
+        else if (IsHex(ks))
         {
             vector<unsigned char> vchPubKey = ParseHex(ks);
             if (vchPubKey.empty() || !pubkeys[i].SetPubKey(vchPubKey))
                 throw runtime_error(" Invalid public key: "+ks);
-            // There is approximately a zero percent chance a random
-            // public key encoded as base58 will consist entirely
-            // of hex characters.
-            continue;
         }
-        // Case 3: base58-encoded public key
+        else
         {
-            vector<unsigned char> vchPubKey;
-            if (!DecodeBase58(ks, vchPubKey))
-                throw runtime_error("base58 decoding failed: "+ks);
-            if (vchPubKey.size() < 33) // 33 is size of a compressed public key
-                throw runtime_error("decoded public key too short: "+ks);
-            if (pubkeys[i].SetPubKey(vchPubKey))
-                continue;
+            throw runtime_error(" Invalid public key: "+ks);
         }
-
-        throw runtime_error(" Invalid public key: "+ks);
     }
 
     // Construct using pay-to-script-hash:
@@ -1739,8 +1727,6 @@ Value validateaddress(const Array& params, bool fHelp)
             std::vector<unsigned char> vchPubKey;
             pwalletMain->GetPubKey(address, vchPubKey);
             ret.push_back(Pair("pubkey", HexStr(vchPubKey)));
-            std::string strPubKey(vchPubKey.begin(), vchPubKey.end());
-            ret.push_back(Pair("pubkey58", EncodeBase58(vchPubKey)));
             CKey key;
             key.SetPubKey(vchPubKey);
             ret.push_back(Pair("iscompressed", key.IsCompressed()));
@@ -1886,7 +1872,10 @@ Value getmemorypool(const Array& params, bool fHelp)
             "  \"previousblockhash\" : hash of current highest block\n"
             "  \"transactions\" : contents of non-coinbase transactions that should be included in the next block\n"
             "  \"coinbasevalue\" : maximum allowable input to coinbase transaction, including the generation award and transaction fees\n"
+            "  \"coinbaseflags\" : data that should be included in coinbase so support for new features can be judged\n"
             "  \"time\" : timestamp appropriate for next block\n"
+            "  \"mintime\" : minimum timestamp appropriate for next block\n"
+            "  \"curtime\" : current timestamp\n"
             "  \"bits\" : compressed target of next block\n"
             "If [data] is specified, tries to solve the block and returns true if it was successful.");
 
@@ -1940,7 +1929,10 @@ Value getmemorypool(const Array& params, bool fHelp)
         result.push_back(Pair("previousblockhash", pblock->hashPrevBlock.GetHex()));
         result.push_back(Pair("transactions", transactions));
         result.push_back(Pair("coinbasevalue", (int64_t)pblock->vtx[0].vout[0].nValue));
+        result.push_back(Pair("coinbaseflags", HexStr(COINBASE_FLAGS.begin(), COINBASE_FLAGS.end())));
         result.push_back(Pair("time", (int64_t)pblock->nTime));
+        result.push_back(Pair("mintime", (int64_t)pindexPrev->GetMedianTimePast()+1));
+        result.push_back(Pair("curtime", (int64_t)GetAdjustedTime()));
 
         union {
             int32_t nBits;