Skip to content

Commit 1598f32

Browse files
jnewberyachow101
authored andcommitted
[rpc] Move DescribeAddressVisitor to rpc/util
1 parent 39633ec commit 1598f32

File tree

4 files changed

+83
-54
lines changed

4 files changed

+83
-54
lines changed

src/Makefile.am

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -215,6 +215,7 @@ libbitcoin_server_a_SOURCES = \
215215
rpc/rawtransaction.cpp \
216216
rpc/safemode.cpp \
217217
rpc/server.cpp \
218+
rpc/util.cpp \
218219
script/sigcache.cpp \
219220
script/ismine.cpp \
220221
timedata.cpp \

src/rpc/misc.cpp

Lines changed: 12 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -33,57 +33,6 @@
3333

3434
#include <univalue.h>
3535

36-
class DescribeAddressVisitor : public boost::static_visitor<UniValue>
37-
{
38-
public:
39-
explicit DescribeAddressVisitor() {}
40-
41-
UniValue operator()(const CNoDestination &dest) const { return UniValue(UniValue::VOBJ); }
42-
43-
UniValue operator()(const CKeyID &keyID) const {
44-
UniValue obj(UniValue::VOBJ);
45-
obj.pushKV("isscript", false);
46-
obj.pushKV("iswitness", false);
47-
return obj;
48-
}
49-
50-
UniValue operator()(const CScriptID &scriptID) const {
51-
UniValue obj(UniValue::VOBJ);
52-
obj.pushKV("isscript", true);
53-
obj.pushKV("iswitness", false);
54-
return obj;
55-
}
56-
57-
UniValue operator()(const WitnessV0KeyHash& id) const
58-
{
59-
UniValue obj(UniValue::VOBJ);
60-
obj.pushKV("isscript", false);
61-
obj.pushKV("iswitness", true);
62-
obj.pushKV("witness_version", 0);
63-
obj.pushKV("witness_program", HexStr(id.begin(), id.end()));
64-
return obj;
65-
}
66-
67-
UniValue operator()(const WitnessV0ScriptHash& id) const
68-
{
69-
UniValue obj(UniValue::VOBJ);
70-
obj.pushKV("isscript", true);
71-
obj.pushKV("iswitness", true);
72-
obj.pushKV("witness_version", 0);
73-
obj.pushKV("witness_program", HexStr(id.begin(), id.end()));
74-
return obj;
75-
}
76-
77-
UniValue operator()(const WitnessUnknown& id) const
78-
{
79-
UniValue obj(UniValue::VOBJ);
80-
obj.pushKV("iswitness", true);
81-
obj.pushKV("witness_version", (int)id.version);
82-
obj.pushKV("witness_program", HexStr(id.program, id.program + id.length));
83-
return obj;
84-
}
85-
};
86-
8736
#ifdef ENABLE_WALLET
8837
class DescribeWalletAddressVisitor : public boost::static_visitor<UniValue>
8938
{
@@ -182,6 +131,15 @@ class DescribeWalletAddressVisitor : public boost::static_visitor<UniValue>
182131

183132
UniValue operator()(const WitnessUnknown& id) const { return UniValue(UniValue::VOBJ); }
184133
};
134+
135+
UniValue DescribeWalletAddress(CWallet* pwallet, const CTxDestination& dest)
136+
{
137+
UniValue ret(UniValue::VOBJ);
138+
UniValue detail = DescribeAddress(dest);
139+
ret.pushKVs(detail);
140+
ret.pushKVs(boost::apply_visitor(DescribeWalletAddressVisitor(pwallet), dest));
141+
return ret;
142+
}
185143
#endif
186144

187145
UniValue validateaddress(const JSONRPCRequest& request)
@@ -254,10 +212,8 @@ UniValue validateaddress(const JSONRPCRequest& request)
254212
isminetype mine = pwallet ? IsMine(*pwallet, dest) : ISMINE_NO;
255213
ret.pushKV("ismine", bool(mine & ISMINE_SPENDABLE));
256214
ret.pushKV("iswatchonly", bool(mine & ISMINE_WATCH_ONLY));
257-
UniValue detail = boost::apply_visitor(DescribeAddressVisitor(), dest);
215+
UniValue detail = DescribeWalletAddress(pwallet, dest);
258216
ret.pushKVs(detail);
259-
UniValue wallet_detail = boost::apply_visitor(DescribeWalletAddressVisitor(pwallet), dest);
260-
ret.pushKVs(wallet_detail);
261217
if (pwallet && pwallet->mapAddressBook.count(dest)) {
262218
ret.pushKV("account", pwallet->mapAddressBook[dest].name);
263219
}
@@ -284,6 +240,8 @@ UniValue validateaddress(const JSONRPCRequest& request)
284240
}
285241
}
286242
}
243+
#else
244+
ret.pushKvs = DescribeAddress(dest);
287245
#endif
288246
}
289247
return ret;

src/rpc/util.cpp

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,3 +66,64 @@ CScript CreateMultisigRedeemscript(const int required, const std::vector<CPubKey
6666

6767
return result;
6868
}
69+
70+
class DescribeAddressVisitor : public boost::static_visitor<UniValue>
71+
{
72+
public:
73+
explicit DescribeAddressVisitor() {}
74+
75+
UniValue operator()(const CNoDestination& dest) const
76+
{
77+
return UniValue(UniValue::VOBJ);
78+
}
79+
80+
UniValue operator()(const CKeyID& keyID) const
81+
{
82+
UniValue obj(UniValue::VOBJ);
83+
obj.pushKV("isscript", false);
84+
obj.pushKV("iswitness", false);
85+
return obj;
86+
}
87+
88+
UniValue operator()(const CScriptID& scriptID) const
89+
{
90+
UniValue obj(UniValue::VOBJ);
91+
obj.pushKV("isscript", true);
92+
obj.pushKV("iswitness", false);
93+
return obj;
94+
}
95+
96+
UniValue operator()(const WitnessV0KeyHash& id) const
97+
{
98+
UniValue obj(UniValue::VOBJ);
99+
obj.pushKV("isscript", false);
100+
obj.pushKV("iswitness", true);
101+
obj.pushKV("witness_version", 0);
102+
obj.pushKV("witness_program", HexStr(id.begin(), id.end()));
103+
return obj;
104+
}
105+
106+
UniValue operator()(const WitnessV0ScriptHash& id) const
107+
{
108+
UniValue obj(UniValue::VOBJ);
109+
obj.pushKV("isscript", true);
110+
obj.pushKV("iswitness", true);
111+
obj.pushKV("witness_version", 0);
112+
obj.pushKV("witness_program", HexStr(id.begin(), id.end()));
113+
return obj;
114+
}
115+
116+
UniValue operator()(const WitnessUnknown& id) const
117+
{
118+
UniValue obj(UniValue::VOBJ);
119+
obj.pushKV("iswitness", true);
120+
obj.pushKV("witness_version", (int)id.version);
121+
obj.pushKV("witness_program", HexStr(id.program, id.program + id.length));
122+
return obj;
123+
}
124+
};
125+
126+
UniValue DescribeAddress(const CTxDestination& dest)
127+
{
128+
return boost::apply_visitor(DescribeAddressVisitor(), dest);
129+
}

src/rpc/util.h

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,13 @@
55
#ifndef BITCOIN_RPC_UTIL_H
66
#define BITCOIN_RPC_UTIL_H
77

8+
#include <pubkey.h>
9+
#include <script/standard.h>
10+
#include <univalue.h>
11+
#include <utilstrencodings.h>
12+
13+
#include <boost/variant/static_visitor.hpp>
14+
815
#include <string>
916
#include <vector>
1017

@@ -16,4 +23,6 @@ CPubKey HexToPubKey(const std::string& hex_in);
1623
CPubKey AddrToPubKey(CKeyStore* const keystore, const std::string& addr_in);
1724
CScript CreateMultisigRedeemscript(const int required, const std::vector<CPubKey>& pubkeys);
1825

26+
UniValue DescribeAddress(const CTxDestination& dest);
27+
1928
#endif // BITCOIN_RPC_UTIL_H

0 commit comments

Comments
 (0)