Bitcoin ABC  0.26.3
P2P Digital Currency
standard.h
Go to the documentation of this file.
1 // Copyright (c) 2009-2010 Satoshi Nakamoto
2 // Copyright (c) 2009-2016 The Bitcoin Core developers
3 // Distributed under the MIT software license, see the accompanying
4 // file COPYING or http://www.opensource.org/licenses/mit-license.php.
5 
6 #ifndef BITCOIN_SCRIPT_STANDARD_H
7 #define BITCOIN_SCRIPT_STANDARD_H
8 
9 #include <consensus/amount.h>
10 #include <pubkey.h>
11 #include <script/script_flags.h>
12 #include <uint256.h>
13 #include <util/hash_type.h>
14 
15 #include <string>
16 #include <variant>
17 
18 static const bool DEFAULT_ACCEPT_DATACARRIER = true;
19 
20 class CKeyID;
21 class CScript;
22 struct ScriptHash;
23 
25 class CScriptID : public BaseHash<uint160> {
26 public:
28  explicit CScriptID(const CScript &in);
29  explicit CScriptID(const uint160 &in) : BaseHash(in) {}
30  explicit CScriptID(const ScriptHash &in);
31 };
32 
37 static const unsigned int MAX_OP_RETURN_RELAY = 223;
38 
43 extern bool fAcceptDatacarrier;
44 
45 enum class TxoutType {
47  // 'standard' transaction types:
48  PUBKEY,
49  PUBKEYHASH,
50  SCRIPTHASH,
51  MULTISIG,
52  // unspendable OP_RETURN script that carries data
53  NULL_DATA,
54 };
55 
57 public:
58  friend bool operator==(const CNoDestination &a, const CNoDestination &b) {
59  return true;
60  }
61  friend bool operator<(const CNoDestination &a, const CNoDestination &b) {
62  return true;
63  }
64 };
65 
66 struct PKHash : public BaseHash<uint160> {
67  PKHash() : BaseHash() {}
68  explicit PKHash(const uint160 &hash) : BaseHash(hash) {}
69  explicit PKHash(const CPubKey &pubkey);
70  explicit PKHash(const CKeyID &pubkey_id);
71 };
72 CKeyID ToKeyID(const PKHash &key_hash);
73 
74 struct ScriptHash : public BaseHash<uint160> {
76  // This doesn't do what you'd expect.
77  // Use ScriptHash(GetScriptForDestination(...)) instead.
78  explicit ScriptHash(const PKHash &hash) = delete;
79 
80  explicit ScriptHash(const uint160 &hash) : BaseHash(hash) {}
81  explicit ScriptHash(const CScript &script);
82  explicit ScriptHash(const CScriptID &script);
83 };
84 
92 using CTxDestination = std::variant<CNoDestination, PKHash, ScriptHash>;
93 
95 bool IsValidDestination(const CTxDestination &dest);
96 
98 std::string GetTxnOutputType(TxoutType t);
99 
111 TxoutType Solver(const CScript &scriptPubKey,
112  std::vector<std::vector<uint8_t>> &vSolutionsRet);
113 
120 bool ExtractDestination(const CScript &scriptPubKey,
121  CTxDestination &addressRet);
122 
134 bool ExtractDestinations(const CScript &scriptPubKey, TxoutType &typeRet,
135  std::vector<CTxDestination> &addressRet,
136  int &nRequiredRet);
137 
144 
146 CScript GetScriptForRawPubKey(const CPubKey &pubkey);
147 
149 CScript GetScriptForMultisig(int nRequired, const std::vector<CPubKey> &keys);
150 
151 #endif // BITCOIN_SCRIPT_STANDARD_H
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: standard.h:61
friend bool operator==(const CNoDestination &a, const CNoDestination &b)
Definition: standard.h:58
An encapsulated public key.
Definition: pubkey.h:31
Serialized script, used inside transaction inputs and outputs.
Definition: script.h:431
A reference to a CScript: the Hash160 of its serialization (see script.h)
Definition: standard.h:25
CScriptID()
Definition: standard.h:27
CScriptID(const uint160 &in)
Definition: standard.h:29
160-bit opaque blob.
Definition: uint256.h:115
static const unsigned int MAX_OP_RETURN_RELAY
Default setting for nMaxDatacarrierBytes.
Definition: standard.h:37
bool fAcceptDatacarrier
A data carrying output is an unspendable output containing data.
Definition: standard.cpp:15
CScript GetScriptForMultisig(int nRequired, const std::vector< CPubKey > &keys)
Generate a multisig script.
Definition: standard.cpp:252
CScript GetScriptForRawPubKey(const CPubKey &pubkey)
Generate a P2PK script for the given pubkey.
Definition: standard.cpp:247
bool ExtractDestination(const CScript &scriptPubKey, CTxDestination &addressRet)
Parse a standard scriptPubKey for the destination address.
Definition: standard.cpp:161
std::string GetTxnOutputType(TxoutType t)
Get the name of a TxoutType as a string.
Definition: standard.cpp:32
TxoutType Solver(const CScript &scriptPubKey, std::vector< std::vector< uint8_t >> &vSolutionsRet)
Parse a scriptPubKey and identify script type for standard scripts.
Definition: standard.cpp:111
TxoutType
Definition: standard.h:45
static const bool DEFAULT_ACCEPT_DATACARRIER
Definition: standard.h:18
bool ExtractDestinations(const CScript &scriptPubKey, TxoutType &typeRet, std::vector< CTxDestination > &addressRet, int &nRequiredRet)
Parse a standard scriptPubKey with one or more destination addresses.
Definition: standard.cpp:187
bool IsValidDestination(const CTxDestination &dest)
Check whether a CTxDestination is a CNoDestination.
Definition: standard.cpp:263
CScript GetScriptForDestination(const CTxDestination &dest)
Generate a Bitcoin scriptPubKey for the given CTxDestination.
Definition: standard.cpp:243
CKeyID ToKeyID(const PKHash &key_hash)
Definition: standard.cpp:28
std::variant< CNoDestination, PKHash, ScriptHash > CTxDestination
A txout script template with a specific destination.
Definition: standard.h:92
PKHash(const uint160 &hash)
Definition: standard.h:68
PKHash()
Definition: standard.h:67
ScriptHash(const uint160 &hash)
Definition: standard.h:80
ScriptHash()
Definition: standard.h:75
ScriptHash(const PKHash &hash)=delete