24class DestinationEncoder
30 explicit DestinationEncoder(
const CChainParams& params) : m_params(params) {}
32 std::string operator()(
const PKHash&
id)
const
35 data.insert(
data.end(),
id.begin(),
id.end());
39 std::string operator()(
const ScriptHash&
id)
const
42 data.insert(
data.end(),
id.begin(),
id.end());
48 std::vector<unsigned char>
data = {0};
56 std::vector<unsigned char>
data = {0};
64 std::vector<unsigned char>
data = {1};
72 const std::vector<unsigned char>&
program =
id.GetWitnessProgram();
73 if (
id.GetWitnessVersion() < 1 ||
id.GetWitnessVersion() > 16 ||
program.size() < 2 ||
program.size() > 40) {
76 std::vector<unsigned char>
data = {(
unsigned char)
id.GetWitnessVersion()};
82 std::string operator()(
const CNoDestination& no)
const {
return {}; }
88 std::vector<unsigned char>
data;
117 error_str =
"Invalid length for Base58 address (P2PKH or P2SH)";
119 error_str =
"Invalid or unsupported Base58-encoded address.";
125 error_str =
"Invalid or unsupported Segwit (Bech32) or Base58 encoding.";
127 error_str =
"Invalid checksum or length of Base58 address (P2PKH or P2SH)";
135 if (dec.data.empty()) {
141 error_str =
strprintf(
"Invalid or unsupported prefix for Segwit (Bech32) address (expected %s, got %s).", params.
Bech32HRP(), dec.hrp);
144 int version = dec.data[0];
146 error_str =
"Version 0 witness address must use Bech32 checksum";
150 error_str =
"Version 1+ witness address must use Bech32m checksum";
154 data.reserve(((dec.data.size() - 1) * 5) / 8);
157 std::string_view
byte_str{
data.size() == 1 ?
"byte" :
"bytes"};
191 error_str =
"Invalid Bech32 address witness version";
218 std::vector<unsigned char>
data;
249 std::vector<unsigned char>
data;
270 std::vector<unsigned char>
data;
294 return std::visit(DestinationEncoder(
Params()), dest);
bool IsValidDestination(const CTxDestination &dest)
Check whether a CTxDestination corresponds to one with an address.
std::variant< CNoDestination, PubKeyDestination, PKHash, ScriptHash, WitnessV0ScriptHash, WitnessV0KeyHash, WitnessV1Taproot, PayToAnchor, WitnessUnknown > CTxDestination
A txout script categorized into standard templates.
static bool DecodeBase58Check(const char *psz, std::vector< unsigned char > &vchRet, int max_ret_len)
static bool DecodeBase58(const char *psz, std::vector< unsigned char > &vch, int max_ret_len)
std::string EncodeBase58Check(std::span< const unsigned char > input)
Encode a byte span into a base58-encoded string, including checksum.
const CChainParams & Params()
Return the currently selected parameters.
CChainParams defines various tweakable parameters of a given instance of the Bitcoin system.
const std::vector< unsigned char > & Base58Prefix(Base58Type type) const
const std::string & Bech32HRP() const
An encapsulated private key.
bool IsValid() const
Check whether this private key is valid.
const std::byte * begin() const
bool IsCompressed() const
Check whether the public key corresponding to this private key is (to be) compressed.
const std::byte * end() const
void Set(const T pbegin, const T pend, bool fCompressedIn)
Initialize using begin and end iterators to byte data.
bool IsPayToAnchor() const
Minimal stream for reading from an existing byte array by std::span.
static constexpr size_t size()
static constexpr unsigned int size()
constexpr unsigned char * begin()
void memory_cleanse(void *ptr, size_t len)
Secure overwrite a buffer (possibly containing secret data) with zero-bytes.
static const PrecomputedData data
Precomputed COutPoint and CCoins values.
constexpr size_t WITNESS_V1_TAPROOT_SIZE
static constexpr std::size_t BECH32_WITNESS_PROG_MAX_LEN
Maximum witness length for Bech32 addresses.
bool IsValidDestinationString(const std::string &str, const CChainParams ¶ms)
std::string EncodeExtKey(const CExtKey &key)
CExtPubKey DecodeExtPubKey(const std::string &str)
CTxDestination DecodeDestination(const std::string &str, std::string &error_msg, std::vector< int > *error_locations)
std::string EncodeSecret(const CKey &key)
std::string EncodeDestination(const CTxDestination &dest)
CKey DecodeSecret(const std::string &str)
std::string EncodeExtPubKey(const CExtPubKey &key)
CExtKey DecodeExtKey(const std::string &str)
std::pair< std::string, std::vector< int > > LocateErrors(const std::string &str, CharLimit limit)
Find index of an incorrect character in a Bech32 string.
@ BECH32
Bech32 encoding as defined in BIP173.
@ BECH32M
Bech32m encoding as defined in BIP350.
DecodeResult Decode(const std::string &str, CharLimit limit)
Decode a Bech32 or Bech32m string.
std::string Encode(Encoding encoding, const std::string &hrp, const data &values)
Encode a Bech32 or Bech32m string.
constexpr auto CeilDiv(const Dividend dividend, const Divisor divisor)
Integer ceiling division (for unsigned values).
constexpr unsigned int BIP32_EXTKEY_SIZE
unsigned char * UCharCast(char *c)
CTxDestination subtype to encode any future Witness version.
std::string ToLower(std::string_view str)
Returns the lowercase equivalent of the given string.
constexpr auto Ticks(Dur2 d)
Helper to count the seconds of a duration/time_point.