-// Copyright (c) 2011 Bitcoin Developers
+// Copyright (c) 2009-2012 Bitcoin Developers
// Distributed under the MIT/X11 software license, see the accompanying
-// file license.txt or http://www.opensource.org/licenses/mit-license.php.
+// file COPYING or http://www.opensource.org/licenses/mit-license.php.
-#include "headers.h"
#include "init.h" // for pwalletMain
#include "bitcoinrpc.h"
-
-// #include <boost/asio.hpp>
-// #include <boost/iostreams/concepts.hpp>
-// #include <boost/iostreams/stream.hpp>
-#include <boost/lexical_cast.hpp>
-// #ifdef USE_SSL
-// #include <boost/asio/ssl.hpp>
-// typedef boost::asio::ssl::stream<boost::asio::ip::tcp::socket> SSLStream;
-// #endif
-// #include <boost/xpressive/xpressive_dynamic.hpp>
-#include "json/json_spirit_reader_template.h"
-#include "json/json_spirit_writer_template.h"
-#include "json/json_spirit_utils.h"
+#include "ui_interface.h"
+#include "base58.h"
#define printf OutputDebugStringF
-// using namespace boost::asio;
using namespace json_spirit;
using namespace std;
-extern Object JSONRPCError(int code, const string& message);
+void EnsureWalletIsUnlocked();
class CTxDump
{
{
if (fHelp || params.size() < 1 || params.size() > 2)
throw runtime_error(
- "importprivkey <bitcoinprivkey> [label]\n"
+ "importprivkey <novacoinprivkey> [label]\n"
"Adds a private key (as returned by dumpprivkey) to your wallet.");
string strSecret = params[0].get_str();
CBitcoinSecret vchSecret;
bool fGood = vchSecret.SetString(strSecret);
- if (!fGood) throw JSONRPCError(-5,"Invalid private key");
+ if (!fGood) throw JSONRPCError(RPC_INVALID_ADDRESS_OR_KEY, "Invalid private key");
+ if (fWalletUnlockMintOnly) // ppcoin: no importprivkey in mint-only mode
+ throw JSONRPCError(RPC_WALLET_UNLOCK_NEEDED, "Wallet is unlocked for minting only.");
CKey key;
- key.SetSecret(vchSecret.GetSecret());
- CBitcoinAddress vchAddress = CBitcoinAddress(key.GetPubKey());
-
- CRITICAL_BLOCK(cs_main)
- CRITICAL_BLOCK(pwalletMain->cs_wallet)
+ bool fCompressed;
+ CSecret secret = vchSecret.GetSecret(fCompressed);
+ key.SetSecret(secret, fCompressed);
+ CKeyID vchAddress = key.GetPubKey().GetID();
{
+ LOCK2(cs_main, pwalletMain->cs_wallet);
+
pwalletMain->MarkDirty();
pwalletMain->SetAddressBookName(vchAddress, strLabel);
if (!pwalletMain->AddKey(key))
- throw JSONRPCError(-4,"Error adding key to wallet");
+ throw JSONRPCError(RPC_WALLET_ERROR, "Error adding key to wallet");
pwalletMain->ScanForWalletTransactions(pindexGenesisBlock, true);
pwalletMain->ReacceptWalletTransactions();
}
- MainFrameRepaint();
+ return Value::null;
+}
+
+Value importwallet(const Array& params, bool fHelp)
+{
+ if (fHelp || params.size() != 1)
+ throw runtime_error(
+ "importwallet <filename>\n"
+ "Imports keys from a wallet dump file (see dumpwallet)."
+ + HelpRequiringPassphrase());
+
+ EnsureWalletIsUnlocked();
+
+ if(!ImportWallet(pwalletMain, params[0].get_str().c_str()))
+ throw JSONRPCError(RPC_WALLET_ERROR, "Error adding some keys to wallet");
return Value::null;
}
{
if (fHelp || params.size() != 1)
throw runtime_error(
- "dumpprivkey <bitcoinaddress>\n"
- "Reveals the private key corresponding to <bitcoinaddress>.");
+ "dumpprivkey <novacoinaddress>\n"
+ "Reveals the private key corresponding to <novacoinaddress>.");
+
+ EnsureWalletIsUnlocked();
string strAddress = params[0].get_str();
CBitcoinAddress address;
if (!address.SetString(strAddress))
- throw JSONRPCError(-5, "Invalid bitcoin address");
+ throw JSONRPCError(RPC_INVALID_ADDRESS_OR_KEY, "Invalid NovaCoin address");
+ if (fWalletUnlockMintOnly) // ppcoin: no dumpprivkey in mint-only mode
+ throw JSONRPCError(RPC_WALLET_UNLOCK_NEEDED, "Wallet is unlocked for minting only.");
+ CKeyID keyID;
+ if (!address.GetKeyID(keyID))
+ throw JSONRPCError(RPC_TYPE_ERROR, "Address does not refer to a key");
CSecret vchSecret;
- if (!pwalletMain->GetSecret(address, vchSecret))
- throw JSONRPCError(-4,"Private key for address " + strAddress + " is not known");
- return CBitcoinSecret(vchSecret).ToString();
+ bool fCompressed;
+ if (!pwalletMain->GetSecret(keyID, vchSecret, fCompressed))
+ throw JSONRPCError(RPC_WALLET_ERROR, "Private key for address " + strAddress + " is not known");
+ return CBitcoinSecret(vchSecret, fCompressed).ToString();
+}
+
+Value dumpwallet(const Array& params, bool fHelp)
+{
+ if (fHelp || params.size() != 1)
+ throw runtime_error(
+ "dumpwallet <filename>\n"
+ "Dumps all wallet keys in a human-readable format."
+ + HelpRequiringPassphrase());
+
+ EnsureWalletIsUnlocked();
+
+ if(!DumpWallet(pwalletMain, params[0].get_str().c_str() ))
+ throw JSONRPCError(RPC_WALLET_ERROR, "Error dumping wallet keys to file");
+
+ return Value::null;
}