diff --git a/src/cashaddrenc.h b/src/cashaddrenc.h --- a/src/cashaddrenc.h +++ b/src/cashaddrenc.h @@ -26,6 +26,7 @@ std::string EncodeCashAddr(const CTxDestination &, const CChainParams &); std::string EncodeCashAddr(const std::string &prefix, const CashAddrContent &content); +CashAddrContent EncodeCashAddrContent(const CTxDestination &dest); CTxDestination DecodeCashAddr(const std::string &addr, const CChainParams ¶ms); @@ -34,4 +35,4 @@ CTxDestination DecodeCashAddrDestination(const CashAddrContent &content); std::vector PackCashAddrContent(const CashAddrContent &content); -#endif // BITCOIN_CASHADDRENC_H +#endif // BITCOIN_CASHADDRENC_H \ No newline at end of file diff --git a/src/cashaddrenc.cpp b/src/cashaddrenc.cpp --- a/src/cashaddrenc.cpp +++ b/src/cashaddrenc.cpp @@ -99,6 +99,24 @@ return cashaddr::Encode(prefix, data); } +// Convert a CTxDestination to a CashAddrContent +class CashAddrContentEncoder : public boost::static_visitor { +public: + CashAddrContent operator()(const PKHash &id) const { + return CashAddrContent{CashAddrType::PUBKEY_TYPE, id}; + } + + CashAddrContent operator()(const ScriptHash &id) const { + return CashAddrContent{CashAddrType::SCRIPT_TYPE, id}; + } + + CashAddrContent operator()(const CNoDestination &) const { return {}; } +}; + +CashAddrContent EncodeCashAddrContent(const CTxDestination &dest) { + return boost::apply_visitor(CashAddrContentEncoder(), dest); +} + CTxDestination DecodeCashAddr(const std::string &addr, const CChainParams ¶ms) { CashAddrContent content = diff --git a/src/test/cashaddrenc_tests.cpp b/src/test/cashaddrenc_tests.cpp --- a/src/test/cashaddrenc_tests.cpp +++ b/src/test/cashaddrenc_tests.cpp @@ -472,4 +472,16 @@ } } +BOOST_AUTO_TEST_CASE(encode_decode_cashaddr_content) { + std::vector toTest = {CNoDestination{}, + PKHash(uint160S("badf00d")), + ScriptHash(uint160S("f00dbad"))}; + + for (auto dst : toTest) { + CashAddrContent encoded = EncodeCashAddrContent(dst); + CTxDestination decoded = DecodeCashAddrDestination(encoded); + BOOST_CHECK(dst == decoded); + } +} + BOOST_AUTO_TEST_SUITE_END()