diff options
author | John Newbery <john@johnnewbery.com> | 2017-12-04 12:49:20 -0500 |
---|---|---|
committer | Andrew Chow <achow101-github@achow101.com> | 2018-02-16 12:09:26 -0500 |
commit | 1598f32304cd55b83ecc623ee0f9e30b4e087b7d (patch) | |
tree | ec538026ed4ed137e19b75ea104f8ba3d71ab8f3 /src/rpc/util.cpp | |
parent | 39633ecd5c18ca29cb551f701e57e8cec3e609da (diff) | |
download | bitcoin-1598f32304cd55b83ecc623ee0f9e30b4e087b7d.tar.xz |
[rpc] Move DescribeAddressVisitor to rpc/util
Diffstat (limited to 'src/rpc/util.cpp')
-rw-r--r-- | src/rpc/util.cpp | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/src/rpc/util.cpp b/src/rpc/util.cpp index 09ded4e46e..cdcb68d15f 100644 --- a/src/rpc/util.cpp +++ b/src/rpc/util.cpp @@ -66,3 +66,64 @@ CScript CreateMultisigRedeemscript(const int required, const std::vector<CPubKey return result; } + +class DescribeAddressVisitor : public boost::static_visitor<UniValue> +{ +public: + explicit DescribeAddressVisitor() {} + + UniValue operator()(const CNoDestination& dest) const + { + return UniValue(UniValue::VOBJ); + } + + UniValue operator()(const CKeyID& keyID) const + { + UniValue obj(UniValue::VOBJ); + obj.pushKV("isscript", false); + obj.pushKV("iswitness", false); + return obj; + } + + UniValue operator()(const CScriptID& scriptID) const + { + UniValue obj(UniValue::VOBJ); + obj.pushKV("isscript", true); + obj.pushKV("iswitness", false); + return obj; + } + + UniValue operator()(const WitnessV0KeyHash& id) const + { + UniValue obj(UniValue::VOBJ); + obj.pushKV("isscript", false); + obj.pushKV("iswitness", true); + obj.pushKV("witness_version", 0); + obj.pushKV("witness_program", HexStr(id.begin(), id.end())); + return obj; + } + + UniValue operator()(const WitnessV0ScriptHash& id) const + { + UniValue obj(UniValue::VOBJ); + obj.pushKV("isscript", true); + obj.pushKV("iswitness", true); + obj.pushKV("witness_version", 0); + obj.pushKV("witness_program", HexStr(id.begin(), id.end())); + return obj; + } + + UniValue operator()(const WitnessUnknown& id) const + { + UniValue obj(UniValue::VOBJ); + obj.pushKV("iswitness", true); + obj.pushKV("witness_version", (int)id.version); + obj.pushKV("witness_program", HexStr(id.program, id.program + id.length)); + return obj; + } +}; + +UniValue DescribeAddress(const CTxDestination& dest) +{ + return boost::apply_visitor(DescribeAddressVisitor(), dest); +} |