Merge pull request #6262

506bae3 Return all available information via validateaddress (dexX7)
This commit is contained in:
Wladimir J. van der Laan 2015-06-19 18:30:46 +02:00
commit 247b91449a
No known key found for this signature in database
GPG key ID: 74810B012346C9A6

View file

@ -109,20 +109,14 @@ UniValue getinfo(const UniValue& params, bool fHelp)
#ifdef ENABLE_WALLET #ifdef ENABLE_WALLET
class DescribeAddressVisitor : public boost::static_visitor<UniValue> class DescribeAddressVisitor : public boost::static_visitor<UniValue>
{ {
private:
isminetype mine;
public: public:
DescribeAddressVisitor(isminetype mineIn) : mine(mineIn) {}
UniValue operator()(const CNoDestination &dest) const { return UniValue(UniValue::VOBJ); } UniValue operator()(const CNoDestination &dest) const { return UniValue(UniValue::VOBJ); }
UniValue operator()(const CKeyID &keyID) const { UniValue operator()(const CKeyID &keyID) const {
UniValue obj(UniValue::VOBJ); UniValue obj(UniValue::VOBJ);
CPubKey vchPubKey; CPubKey vchPubKey;
obj.push_back(Pair("isscript", false)); obj.push_back(Pair("isscript", false));
if (mine == ISMINE_SPENDABLE) { if (pwalletMain->GetPubKey(keyID, vchPubKey)) {
pwalletMain->GetPubKey(keyID, vchPubKey);
obj.push_back(Pair("pubkey", HexStr(vchPubKey))); obj.push_back(Pair("pubkey", HexStr(vchPubKey)));
obj.push_back(Pair("iscompressed", vchPubKey.IsCompressed())); obj.push_back(Pair("iscompressed", vchPubKey.IsCompressed()));
} }
@ -131,10 +125,9 @@ public:
UniValue operator()(const CScriptID &scriptID) const { UniValue operator()(const CScriptID &scriptID) const {
UniValue obj(UniValue::VOBJ); UniValue obj(UniValue::VOBJ);
CScript subscript;
obj.push_back(Pair("isscript", true)); obj.push_back(Pair("isscript", true));
if (mine != ISMINE_NO) { if (pwalletMain->GetCScript(scriptID, subscript)) {
CScript subscript;
pwalletMain->GetCScript(scriptID, subscript);
std::vector<CTxDestination> addresses; std::vector<CTxDestination> addresses;
txnouttype whichType; txnouttype whichType;
int nRequired; int nRequired;
@ -200,11 +193,9 @@ UniValue validateaddress(const UniValue& params, bool fHelp)
#ifdef ENABLE_WALLET #ifdef ENABLE_WALLET
isminetype mine = pwalletMain ? IsMine(*pwalletMain, dest) : ISMINE_NO; isminetype mine = pwalletMain ? IsMine(*pwalletMain, dest) : ISMINE_NO;
ret.push_back(Pair("ismine", (mine & ISMINE_SPENDABLE) ? true : false)); ret.push_back(Pair("ismine", (mine & ISMINE_SPENDABLE) ? true : false));
if (mine != ISMINE_NO) { ret.push_back(Pair("iswatchonly", (mine & ISMINE_WATCH_ONLY) ? true: false));
ret.push_back(Pair("iswatchonly", (mine & ISMINE_WATCH_ONLY) ? true: false)); UniValue detail = boost::apply_visitor(DescribeAddressVisitor(), dest);
UniValue detail = boost::apply_visitor(DescribeAddressVisitor(mine), dest); ret.pushKVs(detail);
ret.pushKVs(detail);
}
if (pwalletMain && pwalletMain->mapAddressBook.count(dest)) if (pwalletMain && pwalletMain->mapAddressBook.count(dest))
ret.push_back(Pair("account", pwalletMain->mapAddressBook[dest].name)); ret.push_back(Pair("account", pwalletMain->mapAddressBook[dest].name));
#endif #endif