Bitcoin ABC 0.34.2
P2P Digital Currency
addresstype.h
Go to the documentation of this file.
1// Copyright (c) 2023 The Bitcoin Core developers
2// Distributed under the MIT software license, see the accompanying
3// file COPYING or https://www.opensource.org/licenses/mit-license.php.
4
5#ifndef BITCOIN_ADDRESSTYPE_H
6#define BITCOIN_ADDRESSTYPE_H
7
8#include <pubkey.h>
9#include <script/script.h>
10#include <uint256.h>
11#include <util/hash_type.h>
12
13#include <variant>
14
15enum class TxoutType;
16
18public:
19 friend bool operator==(const CNoDestination &a, const CNoDestination &b) {
20 return true;
21 }
22 friend bool operator<(const CNoDestination &a, const CNoDestination &b) {
23 return true;
24 }
25};
26
27struct PKHash : public BaseHash<uint160> {
29 explicit PKHash(const uint160 &hash) : BaseHash(hash) {}
30 explicit PKHash(const CPubKey &pubkey);
31 explicit PKHash(const CKeyID &pubkey_id);
32};
33CKeyID ToKeyID(const PKHash &key_hash);
34
35struct ScriptHash : public BaseHash<uint160> {
37 // This doesn't do what you'd expect.
38 // Use ScriptHash(GetScriptForDestination(...)) instead.
39 explicit ScriptHash(const PKHash &hash) = delete;
40
41 explicit ScriptHash(const uint160 &hash) : BaseHash(hash) {}
42 explicit ScriptHash(const CScript &script);
43 explicit ScriptHash(const CScriptID &script);
44};
45CScriptID ToScriptID(const ScriptHash &script_hash);
46
54using CTxDestination = std::variant<CNoDestination, PKHash, ScriptHash>;
55
57bool IsValidDestination(const CTxDestination &dest);
58
65bool ExtractDestination(const CScript &scriptPubKey,
66 CTxDestination &addressRet);
67
79bool ExtractDestinations(const CScript &scriptPubKey, TxoutType &typeRet,
80 std::vector<CTxDestination> &addressRet,
81 int &nRequiredRet);
82
89
90#endif // BITCOIN_ADDRESSTYPE_H
CScriptID ToScriptID(const ScriptHash &script_hash)
Definition: addresstype.cpp:22
bool ExtractDestination(const CScript &scriptPubKey, CTxDestination &addressRet)
Parse a standard scriptPubKey for the destination address.
Definition: addresstype.cpp:33
bool ExtractDestinations(const CScript &scriptPubKey, TxoutType &typeRet, std::vector< CTxDestination > &addressRet, int &nRequiredRet)
Parse a standard scriptPubKey with one or more destination addresses.
Definition: addresstype.cpp:59
bool IsValidDestination(const CTxDestination &dest)
Check whether a CTxDestination is a CNoDestination.
CScript GetScriptForDestination(const CTxDestination &dest)
Generate a Bitcoin scriptPubKey for the given CTxDestination.
CKeyID ToKeyID(const PKHash &key_hash)
Definition: addresstype.cpp:29
std::variant< CNoDestination, PKHash, ScriptHash > CTxDestination
A txout script template with a specific destination.
Definition: addresstype.h:54
A reference to a CKey: the Hash160 of its serialized public key.
Definition: pubkey.h:22
friend bool operator<(const CNoDestination &a, const CNoDestination &b)
Definition: addresstype.h:22
friend bool operator==(const CNoDestination &a, const CNoDestination &b)
Definition: addresstype.h:19
An encapsulated public key.
Definition: pubkey.h:31
Serialized script, used inside transaction inputs and outputs.
Definition: script.h:434
A reference to a CScript: the Hash160 of its serialization.
Definition: script.h:564
160-bit opaque blob.
Definition: uint256.h:184
TxoutType
Definition: solver.h:15
PKHash(const uint160 &hash)
Definition: addresstype.h:29
PKHash()
Definition: addresstype.h:28
ScriptHash(const uint160 &hash)
Definition: addresstype.h:41
ScriptHash(const PKHash &hash)=delete