MCPcopy Create free account
hub / github.com/bitcoin/bitcoin / DestinationEncoder

Class DestinationEncoder

src/key_io.cpp:23–83  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

21
22namespace {
23class DestinationEncoder
24{
25private:
26 const CChainParams& m_params;
27
28public:
29 explicit DestinationEncoder(const CChainParams& params) : m_params(params) {}
30
31 std::string operator()(const PKHash& id) const
32 {
33 std::vector<unsigned char> data = m_params.Base58Prefix(CChainParams::PUBKEY_ADDRESS);
34 data.insert(data.end(), id.begin(), id.end());
35 return EncodeBase58Check(data);
36 }
37
38 std::string operator()(const ScriptHash& id) const
39 {
40 std::vector<unsigned char> data = m_params.Base58Prefix(CChainParams::SCRIPT_ADDRESS);
41 data.insert(data.end(), id.begin(), id.end());
42 return EncodeBase58Check(data);
43 }
44
45 std::string operator()(const WitnessV0KeyHash& id) const
46 {
47 std::vector<unsigned char> data = {0};
48 data.reserve(33);
49 ConvertBits<8, 5, true>([&](unsigned char c) { data.push_back(c); }, id.begin(), id.end());
50 return bech32::Encode(bech32::Encoding::BECH32, m_params.Bech32HRP(), data);
51 }
52
53 std::string operator()(const WitnessV0ScriptHash& id) const
54 {
55 std::vector<unsigned char> data = {0};
56 data.reserve(53);
57 ConvertBits<8, 5, true>([&](unsigned char c) { data.push_back(c); }, id.begin(), id.end());
58 return bech32::Encode(bech32::Encoding::BECH32, m_params.Bech32HRP(), data);
59 }
60
61 std::string operator()(const WitnessV1Taproot& tap) const
62 {
63 std::vector<unsigned char> data = {1};
64 data.reserve(53);
65 ConvertBits<8, 5, true>([&](unsigned char c) { data.push_back(c); }, tap.begin(), tap.end());
66 return bech32::Encode(bech32::Encoding::BECH32M, m_params.Bech32HRP(), data);
67 }
68
69 std::string operator()(const WitnessUnknown& id) const
70 {
71 const std::vector<unsigned char>& program = id.GetWitnessProgram();
72 if (id.GetWitnessVersion() < 1 || id.GetWitnessVersion() > 16 || program.size() < 2 || program.size() > 40) {
73 return {};
74 }
75 std::vector<unsigned char> data = {(unsigned char)id.GetWitnessVersion()};
76 data.reserve(1 + CeilDiv(program.size() * 8, 5u));
77 ConvertBits<8, 5, true>([&](unsigned char c) { data.push_back(c); }, program.begin(), program.end());
78 return bech32::Encode(bech32::Encoding::BECH32M, m_params.Bech32HRP(), data);
79 }
80

Callers 1

EncodeDestinationFunction · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected