diff options
-rw-r--r-- | src/Makefile.am | 2 | ||||
-rw-r--r-- | src/addresstype.cpp | 150 | ||||
-rw-r--r-- | src/addresstype.h | 121 | ||||
-rw-r--r-- | src/bench/descriptors.cpp | 1 | ||||
-rw-r--r-- | src/interfaces/wallet.h | 8 | ||||
-rw-r--r-- | src/key_io.h | 1 | ||||
-rw-r--r-- | src/outputtype.h | 2 | ||||
-rw-r--r-- | src/script/signingprovider.h | 1 | ||||
-rw-r--r-- | src/script/standard.cpp | 135 | ||||
-rw-r--r-- | src/script/standard.h | 105 | ||||
-rw-r--r-- | src/test/blockfilter_index_tests.cpp | 1 | ||||
-rw-r--r-- | src/test/coins_tests.cpp | 1 | ||||
-rw-r--r-- | src/test/fuzz/util.h | 1 | ||||
-rw-r--r-- | src/test/miner_tests.cpp | 1 | ||||
-rw-r--r-- | src/test/miniscript_tests.cpp | 1 | ||||
-rw-r--r-- | src/test/sigopcount_tests.cpp | 1 | ||||
-rw-r--r-- | src/test/txindex_tests.cpp | 1 | ||||
-rw-r--r-- | src/wallet/scriptpubkeyman.h | 1 | ||||
-rw-r--r-- | src/wallet/test/util.h | 2 | ||||
-rw-r--r-- | src/wallet/test/wallet_tests.cpp | 1 | ||||
-rw-r--r-- | src/wallet/wallet.h | 1 |
21 files changed, 291 insertions, 247 deletions
diff --git a/src/Makefile.am b/src/Makefile.am index a108e60c86..3efc008e33 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -117,6 +117,7 @@ endif .PHONY: FORCE check-symbols check-security # bitcoin core # BITCOIN_CORE_H = \ + addresstype.h \ addrdb.h \ addrman.h \ addrman_impl.h \ @@ -657,6 +658,7 @@ libbitcoin_consensus_a_SOURCES = \ libbitcoin_common_a_CPPFLAGS = $(AM_CPPFLAGS) $(BITCOIN_INCLUDES) $(BOOST_CPPFLAGS) libbitcoin_common_a_CXXFLAGS = $(AM_CXXFLAGS) $(PIE_FLAGS) libbitcoin_common_a_SOURCES = \ + addresstype.cpp \ base58.cpp \ bech32.cpp \ chainparams.cpp \ diff --git a/src/addresstype.cpp b/src/addresstype.cpp new file mode 100644 index 0000000000..96428df846 --- /dev/null +++ b/src/addresstype.cpp @@ -0,0 +1,150 @@ +// Copyright (c) 2023 The Bitcoin Core developers +// Distributed under the MIT software license, see the accompanying +// file COPYING or https://www.opensource.org/licenses/mit-license.php. + +#include <addresstype.h> +#include <script/script.h> +#include <script/standard.h> +#include <hash.h> +#include <pubkey.h> +#include <uint256.h> +#include <util/hash_type.h> + +#include <vector> + +typedef std::vector<unsigned char> valtype; + +ScriptHash::ScriptHash(const CScript& in) : BaseHash(Hash160(in)) {} +ScriptHash::ScriptHash(const CScriptID& in) : BaseHash(static_cast<uint160>(in)) {} + +PKHash::PKHash(const CPubKey& pubkey) : BaseHash(pubkey.GetID()) {} +PKHash::PKHash(const CKeyID& pubkey_id) : BaseHash(pubkey_id) {} + +WitnessV0KeyHash::WitnessV0KeyHash(const CPubKey& pubkey) : BaseHash(pubkey.GetID()) {} +WitnessV0KeyHash::WitnessV0KeyHash(const PKHash& pubkey_hash) : BaseHash(static_cast<uint160>(pubkey_hash)) {} + +CKeyID ToKeyID(const PKHash& key_hash) +{ + return CKeyID{static_cast<uint160>(key_hash)}; +} + +CKeyID ToKeyID(const WitnessV0KeyHash& key_hash) +{ + return CKeyID{static_cast<uint160>(key_hash)}; +} + +CScriptID ToScriptID(const ScriptHash& script_hash) +{ + return CScriptID{static_cast<uint160>(script_hash)}; +} + +WitnessV0ScriptHash::WitnessV0ScriptHash(const CScript& in) +{ + CSHA256().Write(in.data(), in.size()).Finalize(begin()); +} + +bool ExtractDestination(const CScript& scriptPubKey, CTxDestination& addressRet) +{ + std::vector<valtype> vSolutions; + TxoutType whichType = Solver(scriptPubKey, vSolutions); + + switch (whichType) { + case TxoutType::PUBKEY: { + CPubKey pubKey(vSolutions[0]); + if (!pubKey.IsValid()) + return false; + + addressRet = PKHash(pubKey); + return true; + } + case TxoutType::PUBKEYHASH: { + addressRet = PKHash(uint160(vSolutions[0])); + return true; + } + case TxoutType::SCRIPTHASH: { + addressRet = ScriptHash(uint160(vSolutions[0])); + return true; + } + case TxoutType::WITNESS_V0_KEYHASH: { + WitnessV0KeyHash hash; + std::copy(vSolutions[0].begin(), vSolutions[0].end(), hash.begin()); + addressRet = hash; + return true; + } + case TxoutType::WITNESS_V0_SCRIPTHASH: { + WitnessV0ScriptHash hash; + std::copy(vSolutions[0].begin(), vSolutions[0].end(), hash.begin()); + addressRet = hash; + return true; + } + case TxoutType::WITNESS_V1_TAPROOT: { + WitnessV1Taproot tap; + std::copy(vSolutions[0].begin(), vSolutions[0].end(), tap.begin()); + addressRet = tap; + return true; + } + case TxoutType::WITNESS_UNKNOWN: { + WitnessUnknown unk; + unk.version = vSolutions[0][0]; + std::copy(vSolutions[1].begin(), vSolutions[1].end(), unk.program); + unk.length = vSolutions[1].size(); + addressRet = unk; + return true; + } + case TxoutType::MULTISIG: + case TxoutType::NULL_DATA: + case TxoutType::NONSTANDARD: + return false; + } // no default case, so the compiler can warn about missing cases + assert(false); +} + +namespace { +class CScriptVisitor +{ +public: + CScript operator()(const CNoDestination& dest) const + { + return CScript(); + } + + CScript operator()(const PKHash& keyID) const + { + return CScript() << OP_DUP << OP_HASH160 << ToByteVector(keyID) << OP_EQUALVERIFY << OP_CHECKSIG; + } + + CScript operator()(const ScriptHash& scriptID) const + { + return CScript() << OP_HASH160 << ToByteVector(scriptID) << OP_EQUAL; + } + + CScript operator()(const WitnessV0KeyHash& id) const + { + return CScript() << OP_0 << ToByteVector(id); + } + + CScript operator()(const WitnessV0ScriptHash& id) const + { + return CScript() << OP_0 << ToByteVector(id); + } + + CScript operator()(const WitnessV1Taproot& tap) const + { + return CScript() << OP_1 << ToByteVector(tap); + } + + CScript operator()(const WitnessUnknown& id) const + { + return CScript() << CScript::EncodeOP_N(id.version) << std::vector<unsigned char>(id.program, id.program + id.length); + } +}; +} // namespace + +CScript GetScriptForDestination(const CTxDestination& dest) +{ + return std::visit(CScriptVisitor(), dest); +} + +bool IsValidDestination(const CTxDestination& dest) { + return dest.index() != 0; +} diff --git a/src/addresstype.h b/src/addresstype.h new file mode 100644 index 0000000000..6b651e9014 --- /dev/null +++ b/src/addresstype.h @@ -0,0 +1,121 @@ +// Copyright (c) 2023 The Bitcoin Core developers +// Distributed under the MIT software license, see the accompanying +// file COPYING or https://www.opensource.org/licenses/mit-license.php. + +#ifndef BITCOIN_ADDRESSTYPE_H +#define BITCOIN_ADDRESSTYPE_H + +#include <pubkey.h> +#include <script/script.h> +#include <uint256.h> +#include <util/hash_type.h> + +#include <variant> +#include <algorithm> + +class CNoDestination { +public: + friend bool operator==(const CNoDestination &a, const CNoDestination &b) { return true; } + friend bool operator<(const CNoDestination &a, const CNoDestination &b) { return true; } +}; + +struct PKHash : public BaseHash<uint160> +{ + PKHash() : BaseHash() {} + explicit PKHash(const uint160& hash) : BaseHash(hash) {} + explicit PKHash(const CPubKey& pubkey); + explicit PKHash(const CKeyID& pubkey_id); +}; +CKeyID ToKeyID(const PKHash& key_hash); + +struct WitnessV0KeyHash; + +struct ScriptHash : public BaseHash<uint160> +{ + ScriptHash() : BaseHash() {} + // These don't do what you'd expect. + // Use ScriptHash(GetScriptForDestination(...)) instead. + explicit ScriptHash(const WitnessV0KeyHash& hash) = delete; + explicit ScriptHash(const PKHash& hash) = delete; + + explicit ScriptHash(const uint160& hash) : BaseHash(hash) {} + explicit ScriptHash(const CScript& script); + explicit ScriptHash(const CScriptID& script); +}; +CScriptID ToScriptID(const ScriptHash& script_hash); + +struct WitnessV0ScriptHash : public BaseHash<uint256> +{ + WitnessV0ScriptHash() : BaseHash() {} + explicit WitnessV0ScriptHash(const uint256& hash) : BaseHash(hash) {} + explicit WitnessV0ScriptHash(const CScript& script); +}; + +struct WitnessV0KeyHash : public BaseHash<uint160> +{ + WitnessV0KeyHash() : BaseHash() {} + explicit WitnessV0KeyHash(const uint160& hash) : BaseHash(hash) {} + explicit WitnessV0KeyHash(const CPubKey& pubkey); + explicit WitnessV0KeyHash(const PKHash& pubkey_hash); +}; +CKeyID ToKeyID(const WitnessV0KeyHash& key_hash); + +struct WitnessV1Taproot : public XOnlyPubKey +{ + WitnessV1Taproot() : XOnlyPubKey() {} + explicit WitnessV1Taproot(const XOnlyPubKey& xpk) : XOnlyPubKey(xpk) {} +}; + +//! CTxDestination subtype to encode any future Witness version +struct WitnessUnknown +{ + unsigned int version; + unsigned int length; + unsigned char program[40]; + + friend bool operator==(const WitnessUnknown& w1, const WitnessUnknown& w2) { + if (w1.version != w2.version) return false; + if (w1.length != w2.length) return false; + return std::equal(w1.program, w1.program + w1.length, w2.program); + } + + friend bool operator<(const WitnessUnknown& w1, const WitnessUnknown& w2) { + if (w1.version < w2.version) return true; + if (w1.version > w2.version) return false; + if (w1.length < w2.length) return true; + if (w1.length > w2.length) return false; + return std::lexicographical_compare(w1.program, w1.program + w1.length, w2.program, w2.program + w2.length); + } +}; + +/** + * A txout script template with a specific destination. It is either: + * * CNoDestination: no destination set + * * PKHash: TxoutType::PUBKEYHASH destination (P2PKH) + * * ScriptHash: TxoutType::SCRIPTHASH destination (P2SH) + * * WitnessV0ScriptHash: TxoutType::WITNESS_V0_SCRIPTHASH destination (P2WSH) + * * WitnessV0KeyHash: TxoutType::WITNESS_V0_KEYHASH destination (P2WPKH) + * * WitnessV1Taproot: TxoutType::WITNESS_V1_TAPROOT destination (P2TR) + * * WitnessUnknown: TxoutType::WITNESS_UNKNOWN destination (P2W???) + * A CTxDestination is the internal data type encoded in a bitcoin address + */ +using CTxDestination = std::variant<CNoDestination, PKHash, ScriptHash, WitnessV0ScriptHash, WitnessV0KeyHash, WitnessV1Taproot, WitnessUnknown>; + +/** Check whether a CTxDestination is a CNoDestination. */ +bool IsValidDestination(const CTxDestination& dest); + +/** + * Parse a standard scriptPubKey for the destination address. Assigns result to + * the addressRet parameter and returns true if successful. Currently only works for P2PK, + * P2PKH, P2SH, P2WPKH, and P2WSH scripts. + */ +bool ExtractDestination(const CScript& scriptPubKey, CTxDestination& addressRet); + +/** + * Generate a Bitcoin scriptPubKey for the given CTxDestination. Returns a P2PKH + * script for a CKeyID destination, a P2SH script for a CScriptID, and an empty + * script for CNoDestination. + */ +CScript GetScriptForDestination(const CTxDestination& dest); + +#endif // BITCOIN_ADDRESSTYPE_H diff --git a/src/bench/descriptors.cpp b/src/bench/descriptors.cpp index 5d28d26909..fbef1395fb 100644 --- a/src/bench/descriptors.cpp +++ b/src/bench/descriptors.cpp @@ -6,7 +6,6 @@ #include <key.h> #include <pubkey.h> #include <script/descriptor.h> -#include <script/standard.h> #include <string> #include <utility> diff --git a/src/interfaces/wallet.h b/src/interfaces/wallet.h index 9d8bebb406..9987681367 100644 --- a/src/interfaces/wallet.h +++ b/src/interfaces/wallet.h @@ -5,12 +5,12 @@ #ifndef BITCOIN_INTERFACES_WALLET_H #define BITCOIN_INTERFACES_WALLET_H +#include <addresstype.h> #include <consensus/amount.h> -#include <interfaces/chain.h> // For ChainClient -#include <pubkey.h> // For CKeyID and CScriptID (definitions needed in CTxDestination instantiation) +#include <interfaces/chain.h> +#include <pubkey.h> #include <script/script.h> -#include <script/standard.h> // For CTxDestination -#include <support/allocators/secure.h> // For SecureString +#include <support/allocators/secure.h> #include <util/fs.h> #include <util/message.h> #include <util/result.h> diff --git a/src/key_io.h b/src/key_io.h index 07b80c4b85..6d2aface4c 100644 --- a/src/key_io.h +++ b/src/key_io.h @@ -6,6 +6,7 @@ #ifndef BITCOIN_KEY_IO_H #define BITCOIN_KEY_IO_H +#include <addresstype.h> #include <chainparams.h> #include <key.h> #include <pubkey.h> diff --git a/src/outputtype.h b/src/outputtype.h index 7c50f445fc..a2d5942320 100644 --- a/src/outputtype.h +++ b/src/outputtype.h @@ -6,8 +6,8 @@ #ifndef BITCOIN_OUTPUTTYPE_H #define BITCOIN_OUTPUTTYPE_H +#include <addresstype.h> #include <script/signingprovider.h> -#include <script/standard.h> #include <array> #include <optional> diff --git a/src/script/signingprovider.h b/src/script/signingprovider.h index 26886e0d57..40927f57bc 100644 --- a/src/script/signingprovider.h +++ b/src/script/signingprovider.h @@ -6,6 +6,7 @@ #ifndef BITCOIN_SCRIPT_SIGNINGPROVIDER_H #define BITCOIN_SCRIPT_SIGNINGPROVIDER_H +#include <addresstype.h> #include <attributes.h> #include <key.h> #include <pubkey.h> diff --git a/src/script/standard.cpp b/src/script/standard.cpp index 01b074e27c..6cbcf9a016 100644 --- a/src/script/standard.cpp +++ b/src/script/standard.cpp @@ -16,35 +16,6 @@ typedef std::vector<unsigned char> valtype; -ScriptHash::ScriptHash(const CScript& in) : BaseHash(Hash160(in)) {} -ScriptHash::ScriptHash(const CScriptID& in) : BaseHash(static_cast<uint160>(in)) {} - -PKHash::PKHash(const CPubKey& pubkey) : BaseHash(pubkey.GetID()) {} -PKHash::PKHash(const CKeyID& pubkey_id) : BaseHash(pubkey_id) {} - -WitnessV0KeyHash::WitnessV0KeyHash(const CPubKey& pubkey) : BaseHash(pubkey.GetID()) {} -WitnessV0KeyHash::WitnessV0KeyHash(const PKHash& pubkey_hash) : BaseHash(static_cast<uint160>(pubkey_hash)) {} - -CKeyID ToKeyID(const PKHash& key_hash) -{ - return CKeyID{static_cast<uint160>(key_hash)}; -} - -CKeyID ToKeyID(const WitnessV0KeyHash& key_hash) -{ - return CKeyID{static_cast<uint160>(key_hash)}; -} - -CScriptID ToScriptID(const ScriptHash& script_hash) -{ - return CScriptID{static_cast<uint160>(script_hash)}; -} - -WitnessV0ScriptHash::WitnessV0ScriptHash(const CScript& in) -{ - CSHA256().Write(in.data(), in.size()).Finalize(begin()); -} - std::string GetTxnOutputType(TxoutType t) { switch (t) { @@ -236,108 +207,6 @@ TxoutType Solver(const CScript& scriptPubKey, std::vector<std::vector<unsigned c return TxoutType::NONSTANDARD; } -bool ExtractDestination(const CScript& scriptPubKey, CTxDestination& addressRet) -{ - std::vector<valtype> vSolutions; - TxoutType whichType = Solver(scriptPubKey, vSolutions); - - switch (whichType) { - case TxoutType::PUBKEY: { - CPubKey pubKey(vSolutions[0]); - if (!pubKey.IsValid()) - return false; - - addressRet = PKHash(pubKey); - return true; - } - case TxoutType::PUBKEYHASH: { - addressRet = PKHash(uint160(vSolutions[0])); - return true; - } - case TxoutType::SCRIPTHASH: { - addressRet = ScriptHash(uint160(vSolutions[0])); - return true; - } - case TxoutType::WITNESS_V0_KEYHASH: { - WitnessV0KeyHash hash; - std::copy(vSolutions[0].begin(), vSolutions[0].end(), hash.begin()); - addressRet = hash; - return true; - } - case TxoutType::WITNESS_V0_SCRIPTHASH: { - WitnessV0ScriptHash hash; - std::copy(vSolutions[0].begin(), vSolutions[0].end(), hash.begin()); - addressRet = hash; - return true; - } - case TxoutType::WITNESS_V1_TAPROOT: { - WitnessV1Taproot tap; - std::copy(vSolutions[0].begin(), vSolutions[0].end(), tap.begin()); - addressRet = tap; - return true; - } - case TxoutType::WITNESS_UNKNOWN: { - WitnessUnknown unk; - unk.version = vSolutions[0][0]; - std::copy(vSolutions[1].begin(), vSolutions[1].end(), unk.program); - unk.length = vSolutions[1].size(); - addressRet = unk; - return true; - } - case TxoutType::MULTISIG: - case TxoutType::NULL_DATA: - case TxoutType::NONSTANDARD: - return false; - } // no default case, so the compiler can warn about missing cases - assert(false); -} - -namespace { -class CScriptVisitor -{ -public: - CScript operator()(const CNoDestination& dest) const - { - return CScript(); - } - - CScript operator()(const PKHash& keyID) const - { - return CScript() << OP_DUP << OP_HASH160 << ToByteVector(keyID) << OP_EQUALVERIFY << OP_CHECKSIG; - } - - CScript operator()(const ScriptHash& scriptID) const - { - return CScript() << OP_HASH160 << ToByteVector(scriptID) << OP_EQUAL; - } - - CScript operator()(const WitnessV0KeyHash& id) const - { - return CScript() << OP_0 << ToByteVector(id); - } - - CScript operator()(const WitnessV0ScriptHash& id) const - { - return CScript() << OP_0 << ToByteVector(id); - } - - CScript operator()(const WitnessV1Taproot& tap) const - { - return CScript() << OP_1 << ToByteVector(tap); - } - - CScript operator()(const WitnessUnknown& id) const - { - return CScript() << CScript::EncodeOP_N(id.version) << std::vector<unsigned char>(id.program, id.program + id.length); - } -}; -} // namespace - -CScript GetScriptForDestination(const CTxDestination& dest) -{ - return std::visit(CScriptVisitor(), dest); -} - CScript GetScriptForRawPubKey(const CPubKey& pubKey) { return CScript() << std::vector<unsigned char>(pubKey.begin(), pubKey.end()) << OP_CHECKSIG; @@ -354,7 +223,3 @@ CScript GetScriptForMultisig(int nRequired, const std::vector<CPubKey>& keys) return script; } - -bool IsValidDestination(const CTxDestination& dest) { - return dest.index() != 0; -} diff --git a/src/script/standard.h b/src/script/standard.h index 9555cc2b61..097ab92652 100644 --- a/src/script/standard.h +++ b/src/script/standard.h @@ -18,7 +18,6 @@ static const bool DEFAULT_ACCEPT_DATACARRIER = true; -class CKeyID; class CScript; /** @@ -41,96 +40,6 @@ enum class TxoutType { WITNESS_UNKNOWN, //!< Only for Witness versions not already defined above }; -class CNoDestination { -public: - friend bool operator==(const CNoDestination &a, const CNoDestination &b) { return true; } - friend bool operator<(const CNoDestination &a, const CNoDestination &b) { return true; } -}; - -struct PKHash : public BaseHash<uint160> -{ - PKHash() : BaseHash() {} - explicit PKHash(const uint160& hash) : BaseHash(hash) {} - explicit PKHash(const CPubKey& pubkey); - explicit PKHash(const CKeyID& pubkey_id); -}; -CKeyID ToKeyID(const PKHash& key_hash); - -struct WitnessV0KeyHash; -struct ScriptHash : public BaseHash<uint160> -{ - ScriptHash() : BaseHash() {} - // These don't do what you'd expect. - // Use ScriptHash(GetScriptForDestination(...)) instead. - explicit ScriptHash(const WitnessV0KeyHash& hash) = delete; - explicit ScriptHash(const PKHash& hash) = delete; - - explicit ScriptHash(const uint160& hash) : BaseHash(hash) {} - explicit ScriptHash(const CScript& script); - explicit ScriptHash(const CScriptID& script); -}; -CScriptID ToScriptID(const ScriptHash& script_hash); - -struct WitnessV0ScriptHash : public BaseHash<uint256> -{ - WitnessV0ScriptHash() : BaseHash() {} - explicit WitnessV0ScriptHash(const uint256& hash) : BaseHash(hash) {} - explicit WitnessV0ScriptHash(const CScript& script); -}; - -struct WitnessV0KeyHash : public BaseHash<uint160> -{ - WitnessV0KeyHash() : BaseHash() {} - explicit WitnessV0KeyHash(const uint160& hash) : BaseHash(hash) {} - explicit WitnessV0KeyHash(const CPubKey& pubkey); - explicit WitnessV0KeyHash(const PKHash& pubkey_hash); -}; -CKeyID ToKeyID(const WitnessV0KeyHash& key_hash); - -struct WitnessV1Taproot : public XOnlyPubKey -{ - WitnessV1Taproot() : XOnlyPubKey() {} - explicit WitnessV1Taproot(const XOnlyPubKey& xpk) : XOnlyPubKey(xpk) {} -}; - -//! CTxDestination subtype to encode any future Witness version -struct WitnessUnknown -{ - unsigned int version; - unsigned int length; - unsigned char program[40]; - - friend bool operator==(const WitnessUnknown& w1, const WitnessUnknown& w2) { - if (w1.version != w2.version) return false; - if (w1.length != w2.length) return false; - return std::equal(w1.program, w1.program + w1.length, w2.program); - } - - friend bool operator<(const WitnessUnknown& w1, const WitnessUnknown& w2) { - if (w1.version < w2.version) return true; - if (w1.version > w2.version) return false; - if (w1.length < w2.length) return true; - if (w1.length > w2.length) return false; - return std::lexicographical_compare(w1.program, w1.program + w1.length, w2.program, w2.program + w2.length); - } -}; - -/** - * A txout script template with a specific destination. It is either: - * * CNoDestination: no destination set - * * PKHash: TxoutType::PUBKEYHASH destination (P2PKH) - * * ScriptHash: TxoutType::SCRIPTHASH destination (P2SH) - * * WitnessV0ScriptHash: TxoutType::WITNESS_V0_SCRIPTHASH destination (P2WSH) - * * WitnessV0KeyHash: TxoutType::WITNESS_V0_KEYHASH destination (P2WPKH) - * * WitnessV1Taproot: TxoutType::WITNESS_V1_TAPROOT destination (P2TR) - * * WitnessUnknown: TxoutType::WITNESS_UNKNOWN destination (P2W???) - * A CTxDestination is the internal data type encoded in a bitcoin address - */ -using CTxDestination = std::variant<CNoDestination, PKHash, ScriptHash, WitnessV0ScriptHash, WitnessV0KeyHash, WitnessV1Taproot, WitnessUnknown>; - -/** Check whether a CTxDestination is a CNoDestination. */ -bool IsValidDestination(const CTxDestination& dest); - /** Get the name of a TxoutType as a string */ std::string GetTxnOutputType(TxoutType t); @@ -151,20 +60,6 @@ constexpr bool IsPushdataOp(opcodetype opcode) */ TxoutType Solver(const CScript& scriptPubKey, std::vector<std::vector<unsigned char>>& vSolutionsRet); -/** - * Parse a standard scriptPubKey for the destination address. Assigns result to - * the addressRet parameter and returns true if successful. Currently only works for P2PK, - * P2PKH, P2SH, P2WPKH, and P2WSH scripts. - */ -bool ExtractDestination(const CScript& scriptPubKey, CTxDestination& addressRet); - -/** - * Generate a Bitcoin scriptPubKey for the given CTxDestination. Returns a P2PKH - * script for a CKeyID destination, a P2SH script for a CScriptID, and an empty - * script for CNoDestination. - */ -CScript GetScriptForDestination(const CTxDestination& dest); - /** Generate a P2PK script for the given pubkey. */ CScript GetScriptForRawPubKey(const CPubKey& pubkey); diff --git a/src/test/blockfilter_index_tests.cpp b/src/test/blockfilter_index_tests.cpp index 9bd5c7c2b6..cd90448e28 100644 --- a/src/test/blockfilter_index_tests.cpp +++ b/src/test/blockfilter_index_tests.cpp @@ -2,6 +2,7 @@ // Distributed under the MIT software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. +#include <addresstype.h> #include <blockfilter.h> #include <chainparams.h> #include <consensus/merkle.h> diff --git a/src/test/coins_tests.cpp b/src/test/coins_tests.cpp index 853dc6dc1e..f8a2917978 100644 --- a/src/test/coins_tests.cpp +++ b/src/test/coins_tests.cpp @@ -2,6 +2,7 @@ // Distributed under the MIT software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. +#include <addresstype.h> #include <clientversion.h> #include <coins.h> #include <script/standard.h> diff --git a/src/test/fuzz/util.h b/src/test/fuzz/util.h index 5f2aff08da..2d612a8272 100644 --- a/src/test/fuzz/util.h +++ b/src/test/fuzz/util.h @@ -5,6 +5,7 @@ #ifndef BITCOIN_TEST_FUZZ_UTIL_H #define BITCOIN_TEST_FUZZ_UTIL_H +#include <addresstype.h> #include <arith_uint256.h> #include <coins.h> #include <compat/compat.h> diff --git a/src/test/miner_tests.cpp b/src/test/miner_tests.cpp index 94e3f27930..ea13989eb3 100644 --- a/src/test/miner_tests.cpp +++ b/src/test/miner_tests.cpp @@ -2,6 +2,7 @@ // Distributed under the MIT software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. +#include <addresstype.h> #include <coins.h> #include <common/system.h> #include <consensus/consensus.h> diff --git a/src/test/miniscript_tests.cpp b/src/test/miniscript_tests.cpp index 9c811db3e9..2a67da5cab 100644 --- a/src/test/miniscript_tests.cpp +++ b/src/test/miniscript_tests.cpp @@ -10,6 +10,7 @@ #include <test/util/setup_common.h> #include <boost/test/unit_test.hpp> +#include <addresstype.h> #include <core_io.h> #include <hash.h> #include <pubkey.h> diff --git a/src/test/sigopcount_tests.cpp b/src/test/sigopcount_tests.cpp index a17be54419..e20b591c80 100644 --- a/src/test/sigopcount_tests.cpp +++ b/src/test/sigopcount_tests.cpp @@ -2,6 +2,7 @@ // Distributed under the MIT software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. +#include <addresstype.h> #include <coins.h> #include <consensus/consensus.h> #include <consensus/tx_verify.h> diff --git a/src/test/txindex_tests.cpp b/src/test/txindex_tests.cpp index cb80dbed69..1471290d4b 100644 --- a/src/test/txindex_tests.cpp +++ b/src/test/txindex_tests.cpp @@ -2,6 +2,7 @@ // Distributed under the MIT software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. +#include <addresstype.h> #include <chainparams.h> #include <index/txindex.h> #include <interfaces/chain.h> diff --git a/src/wallet/scriptpubkeyman.h b/src/wallet/scriptpubkeyman.h index 00159abbef..c775d26c4f 100644 --- a/src/wallet/scriptpubkeyman.h +++ b/src/wallet/scriptpubkeyman.h @@ -5,6 +5,7 @@ #ifndef BITCOIN_WALLET_SCRIPTPUBKEYMAN_H #define BITCOIN_WALLET_SCRIPTPUBKEYMAN_H +#include <addresstype.h> #include <logging.h> #include <psbt.h> #include <script/descriptor.h> diff --git a/src/wallet/test/util.h b/src/wallet/test/util.h index 2a1fe639de..8bd238648f 100644 --- a/src/wallet/test/util.h +++ b/src/wallet/test/util.h @@ -5,7 +5,7 @@ #ifndef BITCOIN_WALLET_TEST_UTIL_H #define BITCOIN_WALLET_TEST_UTIL_H -#include <script/standard.h> +#include <addresstype.h> #include <wallet/db.h> #include <memory> diff --git a/src/wallet/test/wallet_tests.cpp b/src/wallet/test/wallet_tests.cpp index dd914f159c..1c128a85df 100644 --- a/src/wallet/test/wallet_tests.cpp +++ b/src/wallet/test/wallet_tests.cpp @@ -9,6 +9,7 @@ #include <stdint.h> #include <vector> +#include <addresstype.h> #include <interfaces/chain.h> #include <key_io.h> #include <node/blockstorage.h> diff --git a/src/wallet/wallet.h b/src/wallet/wallet.h index cbd5008366..91c8e89d2d 100644 --- a/src/wallet/wallet.h +++ b/src/wallet/wallet.h @@ -6,6 +6,7 @@ #ifndef BITCOIN_WALLET_WALLET_H #define BITCOIN_WALLET_WALLET_H +#include <addresstype.h> #include <consensus/amount.h> #include <interfaces/chain.h> #include <interfaces/handler.h> |