|
|
@ -1862,87 +1862,6 @@ Value encryptwallet(const Array& params, bool fHelp) |
|
|
|
return "wallet encrypted; Bitcoin server stopping, restart to run with encrypted wallet. The keypool has been flushed, you need to make a new backup."; |
|
|
|
return "wallet encrypted; Bitcoin server stopping, restart to run with encrypted wallet. The keypool has been flushed, you need to make a new backup."; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
class DescribeAddressVisitor : public boost::static_visitor<Object> |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
public: |
|
|
|
|
|
|
|
Object operator()(const CNoDestination &dest) const { return Object(); } |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Object operator()(const CKeyID &keyID) const { |
|
|
|
|
|
|
|
Object obj; |
|
|
|
|
|
|
|
CPubKey vchPubKey; |
|
|
|
|
|
|
|
pwalletMain->GetPubKey(keyID, vchPubKey); |
|
|
|
|
|
|
|
obj.push_back(Pair("isscript", false)); |
|
|
|
|
|
|
|
obj.push_back(Pair("pubkey", HexStr(vchPubKey))); |
|
|
|
|
|
|
|
obj.push_back(Pair("iscompressed", vchPubKey.IsCompressed())); |
|
|
|
|
|
|
|
return obj; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Object operator()(const CScriptID &scriptID) const { |
|
|
|
|
|
|
|
Object obj; |
|
|
|
|
|
|
|
obj.push_back(Pair("isscript", true)); |
|
|
|
|
|
|
|
CScript subscript; |
|
|
|
|
|
|
|
pwalletMain->GetCScript(scriptID, subscript); |
|
|
|
|
|
|
|
std::vector<CTxDestination> addresses; |
|
|
|
|
|
|
|
txnouttype whichType; |
|
|
|
|
|
|
|
int nRequired; |
|
|
|
|
|
|
|
ExtractDestinations(subscript, whichType, addresses, nRequired); |
|
|
|
|
|
|
|
obj.push_back(Pair("script", GetTxnOutputType(whichType))); |
|
|
|
|
|
|
|
obj.push_back(Pair("hex", HexStr(subscript.begin(), subscript.end()))); |
|
|
|
|
|
|
|
Array a; |
|
|
|
|
|
|
|
BOOST_FOREACH(const CTxDestination& addr, addresses) |
|
|
|
|
|
|
|
a.push_back(CBitcoinAddress(addr).ToString()); |
|
|
|
|
|
|
|
obj.push_back(Pair("addresses", a)); |
|
|
|
|
|
|
|
if (whichType == TX_MULTISIG) |
|
|
|
|
|
|
|
obj.push_back(Pair("sigsrequired", nRequired)); |
|
|
|
|
|
|
|
return obj; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Value validateaddress(const Array& params, bool fHelp) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
if (fHelp || params.size() != 1) |
|
|
|
|
|
|
|
throw runtime_error( |
|
|
|
|
|
|
|
"validateaddress \"bitcoinaddress\"\n" |
|
|
|
|
|
|
|
"\nReturn information about the given bitcoin address.\n" |
|
|
|
|
|
|
|
"\nArguments:\n" |
|
|
|
|
|
|
|
"1. \"bitcoinaddress\" (string, required) The bitcoin address to validate\n" |
|
|
|
|
|
|
|
"\nResult:\n" |
|
|
|
|
|
|
|
"{\n" |
|
|
|
|
|
|
|
" \"isvalid\" : true|false, (boolean) If the address is valid or not. If not, this is the only property returned.\n" |
|
|
|
|
|
|
|
" \"address\" : \"bitcoinaddress\", (string) The bitcoin address validated\n" |
|
|
|
|
|
|
|
" \"ismine\" : true|false, (boolean) If the address is yours or not\n" |
|
|
|
|
|
|
|
" \"isscript\" : true|false, (boolean) If the key is a script\n" |
|
|
|
|
|
|
|
" \"pubkey\" : \"publickeyhex\", (string) The hex value of the raw public key\n" |
|
|
|
|
|
|
|
" \"iscompressed\" : true|false, (boolean) If the address is compressed\n" |
|
|
|
|
|
|
|
" \"account\" : \"account\" (string) The account associated with the address, \"\" is the default account\n" |
|
|
|
|
|
|
|
"}\n" |
|
|
|
|
|
|
|
"\nExamples:\n" |
|
|
|
|
|
|
|
+ HelpExampleCli("validateaddress", "\"1PSSGeFHDnKNxiEyFrD1wcEaHr9hrQDDWc\"") |
|
|
|
|
|
|
|
+ HelpExampleRpc("validateaddress", "\"1PSSGeFHDnKNxiEyFrD1wcEaHr9hrQDDWc\"") |
|
|
|
|
|
|
|
); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
CBitcoinAddress address(params[0].get_str()); |
|
|
|
|
|
|
|
bool isValid = address.IsValid(); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Object ret; |
|
|
|
|
|
|
|
ret.push_back(Pair("isvalid", isValid)); |
|
|
|
|
|
|
|
if (isValid) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
CTxDestination dest = address.Get(); |
|
|
|
|
|
|
|
string currentAddress = address.ToString(); |
|
|
|
|
|
|
|
ret.push_back(Pair("address", currentAddress)); |
|
|
|
|
|
|
|
bool fMine = pwalletMain ? IsMine(*pwalletMain, dest) : false; |
|
|
|
|
|
|
|
ret.push_back(Pair("ismine", fMine)); |
|
|
|
|
|
|
|
if (fMine) { |
|
|
|
|
|
|
|
Object detail = boost::apply_visitor(DescribeAddressVisitor(), dest); |
|
|
|
|
|
|
|
ret.insert(ret.end(), detail.begin(), detail.end()); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
if (pwalletMain && pwalletMain->mapAddressBook.count(dest)) |
|
|
|
|
|
|
|
ret.push_back(Pair("account", pwalletMain->mapAddressBook[dest].name)); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
return ret; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Value lockunspent(const Array& params, bool fHelp) |
|
|
|
Value lockunspent(const Array& params, bool fHelp) |
|
|
|
{ |
|
|
|
{ |
|
|
|
if (fHelp || params.size() < 1 || params.size() > 2) |
|
|
|
if (fHelp || params.size() < 1 || params.size() > 2) |
|
|
|