aboutsummaryrefslogtreecommitdiff
path: root/src/rpcmisc.cpp
diff options
context:
space:
mode:
authordexX7 <dexx@bitwatch.co>2015-06-09 17:11:13 +0200
committerdexX7 <dexx@bitwatch.co>2015-06-09 17:21:27 +0200
commit506bae3ac94ae9d5edfa794d9b80a7c9921ace17 (patch)
tree9ac541c57726e70b6b0576d3ce1cdaaea79cd97f /src/rpcmisc.cpp
parentdefa4fc25c6dc1b360fb974690516df35629db1d (diff)
downloadbitcoin-506bae3ac94ae9d5edfa794d9b80a7c9921ace17.tar.xz
Return all available information via validateaddress
`"validateaddress"` omits some information, even in cases where is it available. The primary motivation is to be able to retrieve redeemScripts, after using `"addmultisigaddress"`, when not all keys are available in the keystore, but the redeemScript actually is. The output of `"validateaddress"` with this commit: Keys not available: ```js validateaddress "n4KWZKx349gdMQGgTnZ8W6WfgSwybkGSK3" { "isvalid": true, "address": "n4KWZKx349gdMQGgTnZ8W6WfgSwybkGSK3", "scriptPubKey": "76a914fa20d564550b105787f7ce3a9ad7fd9a45cd407088ac", "ismine": false, "iswatchonly": false, "isscript": false } ``` ```js validateaddress "2N2g2H7gjA8a11g1yKBgh5VTqndyvbnWpBK" { "isvalid": true, "address": "2N2g2H7gjA8a11g1yKBgh5VTqndyvbnWpBK", "scriptPubKey": "a9146769c19a16c9400b908756e19a4d2afb9e9760e187", "ismine": false, "iswatchonly": false, "isscript": true } ``` After adding the redeemScript: ```js addmultisigaddress 2 '["02537357B156A33306A7A014A3748631C59DF405B56F11BA4AA4A3CE81501AF095","02F1FB200390E7864EF4450C07B15988179A57C3CF3A878F668E1070CB615749FE"]' 2N2g2H7gjA8a11g1yKBgh5VTqndyvbnWpBK validateaddress "2N2g2H7gjA8a11g1yKBgh5VTqndyvbnWpBK" { "isvalid": true, "address": "2N2g2H7gjA8a11g1yKBgh5VTqndyvbnWpBK", "scriptPubKey": "a9146769c19a16c9400b908756e19a4d2afb9e9760e187", "ismine": false, "iswatchonly": false, "isscript": true, "script": "multisig", "hex": "522102537357b156a33306a7a014a3748631c59df405b56f11ba4aa4a3ce81501af0952102f1fb200390e7864ef4450c07b15988179a57c3cf3a878f668e1070cb615749fe52ae", "addresses": [ "n4KWZKx349gdMQGgTnZ8W6WfgSwybkGSK3", "mmSKNtbYYHRrhTLKiok5TuYrGEs4Y2A4k6" ], "sigsrequired": 2, "account": "" } ``` All keys available: ```js validateaddress "n4KWZKx349gdMQGgTnZ8W6WfgSwybkGSK3" { "isvalid": true, "address": "n4KWZKx349gdMQGgTnZ8W6WfgSwybkGSK3", "scriptPubKey": "76a914fa20d564550b105787f7ce3a9ad7fd9a45cd407088ac", "ismine": true, "iswatchonly": false, "isscript": false, "pubkey": "02537357b156a33306a7a014a3748631c59df405b56f11ba4aa4a3ce81501af095", "iscompressed": true, "account": "" } ``` ```js validateaddress "2N2g2H7gjA8a11g1yKBgh5VTqndyvbnWpBK" { "isvalid": true, "address": "2N2g2H7gjA8a11g1yKBgh5VTqndyvbnWpBK", "scriptPubKey": "a9146769c19a16c9400b908756e19a4d2afb9e9760e187", "ismine": true, "iswatchonly": false, "isscript": true, "script": "multisig", "hex": "522102537357b156a33306a7a014a3748631c59df405b56f11ba4aa4a3ce81501af0952102f1fb200390e7864ef4450c07b15988179a57c3cf3a878f668e1070cb615749fe52ae", "addresses": [ "n4KWZKx349gdMQGgTnZ8W6WfgSwybkGSK3", "mmSKNtbYYHRrhTLKiok5TuYrGEs4Y2A4k6" ], "sigsrequired": 2, "account": "" } ```
Diffstat (limited to 'src/rpcmisc.cpp')
-rw-r--r--src/rpcmisc.cpp21
1 files changed, 6 insertions, 15 deletions
diff --git a/src/rpcmisc.cpp b/src/rpcmisc.cpp
index fe6eb81b84..1d47bc06a5 100644
--- a/src/rpcmisc.cpp
+++ b/src/rpcmisc.cpp
@@ -109,20 +109,14 @@ UniValue getinfo(const UniValue& params, bool fHelp)
#ifdef ENABLE_WALLET
class DescribeAddressVisitor : public boost::static_visitor<UniValue>
{
-private:
- isminetype mine;
-
public:
- DescribeAddressVisitor(isminetype mineIn) : mine(mineIn) {}
-
UniValue operator()(const CNoDestination &dest) const { return UniValue(UniValue::VOBJ); }
UniValue operator()(const CKeyID &keyID) const {
UniValue obj(UniValue::VOBJ);
CPubKey vchPubKey;
obj.push_back(Pair("isscript", false));
- if (mine == ISMINE_SPENDABLE) {
- pwalletMain->GetPubKey(keyID, vchPubKey);
+ if (pwalletMain->GetPubKey(keyID, vchPubKey)) {
obj.push_back(Pair("pubkey", HexStr(vchPubKey)));
obj.push_back(Pair("iscompressed", vchPubKey.IsCompressed()));
}
@@ -131,10 +125,9 @@ public:
UniValue operator()(const CScriptID &scriptID) const {
UniValue obj(UniValue::VOBJ);
+ CScript subscript;
obj.push_back(Pair("isscript", true));
- if (mine != ISMINE_NO) {
- CScript subscript;
- pwalletMain->GetCScript(scriptID, subscript);
+ if (pwalletMain->GetCScript(scriptID, subscript)) {
std::vector<CTxDestination> addresses;
txnouttype whichType;
int nRequired;
@@ -200,11 +193,9 @@ UniValue validateaddress(const UniValue& params, bool fHelp)
#ifdef ENABLE_WALLET
isminetype mine = pwalletMain ? IsMine(*pwalletMain, dest) : ISMINE_NO;
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));
- UniValue detail = boost::apply_visitor(DescribeAddressVisitor(mine), dest);
- ret.pushKVs(detail);
- }
+ ret.push_back(Pair("iswatchonly", (mine & ISMINE_WATCH_ONLY) ? true: false));
+ UniValue detail = boost::apply_visitor(DescribeAddressVisitor(), dest);
+ ret.pushKVs(detail);
if (pwalletMain && pwalletMain->mapAddressBook.count(dest))
ret.push_back(Pair("account", pwalletMain->mapAddressBook[dest].name));
#endif