X-Git-Url: https://git.novaco.in/?a=blobdiff_plain;f=src%2Frpcdump.cpp;h=138fc00a700e43e156b2f1ade24562e167d7aa39;hb=1c4fc9052a444c114d9c1501d2c6d1305de650d0;hp=fe9df925a7a81312f08e7ee3a46db5ebf09b5450;hpb=580fa137c61abe24c56b440e62fa21657227e9a2;p=novacoin.git diff --git a/src/rpcdump.cpp b/src/rpcdump.cpp index fe9df92..138fc00 100644 --- a/src/rpcdump.cpp +++ b/src/rpcdump.cpp @@ -76,13 +76,18 @@ Value importaddress(const Array& params, bool fHelp) if (fHelp || params.size() < 1 || params.size() > 3) throw runtime_error( "importaddress
[label] [rescan=true]\n" - "Adds an address that can be watched as if it were in your wallet but cannot be used to spend."); + "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()) - throw JSONRPCError(RPC_INVALID_ADDRESS_OR_KEY, "Invalid Bitcoin address"); - CTxDestination dest; - dest = address.Get(); + if (address.IsValid()) { + script.SetDestination(address.Get()); + } else if (IsHex(params[0].get_str())) { + std::vector 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) @@ -97,13 +102,15 @@ Value importaddress(const Array& params, bool fHelp) LOCK2(cs_main, pwalletMain->cs_wallet); // Don't throw error in case an address is already there - if (pwalletMain->HaveWatchOnly(dest)) + if (pwalletMain->HaveWatchOnly(script)) return Value::null; pwalletMain->MarkDirty(); - pwalletMain->SetAddressBookName(dest, strLabel); - if (!pwalletMain->AddWatchOnly(dest)) + if (address.IsValid()) + pwalletMain->SetAddressBookName(address.Get(), strLabel); + + if (!pwalletMain->AddWatchOnly(script)) throw JSONRPCError(RPC_WALLET_ERROR, "Error adding address to wallet"); if (fRescan)