#include "ui_interface.h"
#include "base58.h"
-#include <boost/lexical_cast.hpp>
-
#define printf OutputDebugStringF
using namespace json_spirit;
using namespace std;
+void EnsureWalletIsUnlocked();
+
class CTxDump
{
public:
return Value::null;
}
+Value importaddress(const Array& params, bool fHelp)
+{
+ if (fHelp || params.size() < 1 || params.size() > 3)
+ throw runtime_error(
+ "importaddress <address> [label] [rescan=true]\n"
+ "Adds an address or script (in hex) that can be watched as if it were in your wallet but cannot be used to spend.");
+
+ CScript script;
+ CBitcoinAddress address(params[0].get_str());
+ if (address.IsValid()) {
+ script.SetDestination(address.Get());
+ } else if (IsHex(params[0].get_str())) {
+ std::vector<unsigned char> data(ParseHex(params[0].get_str()));
+ script = CScript(data.begin(), data.end());
+ } else {
+ throw JSONRPCError(RPC_INVALID_ADDRESS_OR_KEY, "Invalid Novacoin address or script");
+ }
+
+ string strLabel = "";
+ if (params.size() > 1)
+ strLabel = params[1].get_str();
+
+ // Whether to perform rescan after import
+ bool fRescan = true;
+ if (params.size() > 2)
+ fRescan = params[2].get_bool();
+
+ {
+ LOCK2(cs_main, pwalletMain->cs_wallet);
+
+ // Don't throw error in case an address is already there
+ if (pwalletMain->HaveWatchOnly(script))
+ return Value::null;
+
+ pwalletMain->MarkDirty();
+
+ if (address.IsValid())
+ pwalletMain->SetAddressBookName(address.Get(), strLabel);
+
+ if (!pwalletMain->AddWatchOnly(script))
+ throw JSONRPCError(RPC_WALLET_ERROR, "Error adding address to wallet");
+
+ if (fRescan)
+ {
+ pwalletMain->ScanForWalletTransactions(pindexGenesisBlock, true);
+ pwalletMain->ReacceptWalletTransactions();
+ }
+ }
+
+ 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;
+}
+
Value dumpprivkey(const Array& params, bool fHelp)
{
if (fHelp || params.size() != 1)
"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(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;
+}