Line data Source code
1 : // Copyright (c) 2009-2010 Satoshi Nakamoto 2 : // Copyright (c) 2009-2021 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_WALLET_ISMINE_H 7 : #define BITCOIN_WALLET_ISMINE_H 8 : 9 : #include <script/standard.h> 10 : 11 : #include <bitset> 12 : #include <cstdint> 13 : #include <type_traits> 14 : 15 : class CScript; 16 : 17 : namespace wallet { 18 : class CWallet; 19 : 20 : /** 21 : * IsMine() return codes, which depend on ScriptPubKeyMan implementation. 22 : * Not every ScriptPubKeyMan covers all types, please refer to 23 : * https://github.com/bitcoin/bitcoin/blob/master/doc/release-notes/release-notes-0.21.0.md#ismine-semantics 24 : * for better understanding. 25 : * 26 : * For LegacyScriptPubKeyMan, 27 : * ISMINE_NO: the scriptPubKey is not in the wallet; 28 : * ISMINE_WATCH_ONLY: the scriptPubKey has been imported into the wallet; 29 : * ISMINE_SPENDABLE: the scriptPubKey corresponds to an address owned by the wallet user (can spend with the private key); 30 : * ISMINE_USED: the scriptPubKey corresponds to a used address owned by the wallet user; 31 : * ISMINE_ALL: all ISMINE flags except for USED; 32 : * ISMINE_ALL_USED: all ISMINE flags including USED; 33 : * ISMINE_ENUM_ELEMENTS: the number of isminetype enum elements. 34 : * 35 : * For DescriptorScriptPubKeyMan and future ScriptPubKeyMan, 36 : * ISMINE_NO: the scriptPubKey is not in the wallet; 37 : * ISMINE_SPENDABLE: the scriptPubKey matches a scriptPubKey in the wallet. 38 : * ISMINE_USED: the scriptPubKey corresponds to a used address owned by the wallet user. 39 : * 40 : */ 41 : enum isminetype : unsigned int { 42 : ISMINE_NO = 0, 43 : ISMINE_WATCH_ONLY = 1 << 0, 44 : ISMINE_SPENDABLE = 1 << 1, 45 : ISMINE_USED = 1 << 2, 46 : ISMINE_ALL = ISMINE_WATCH_ONLY | ISMINE_SPENDABLE, 47 : ISMINE_ALL_USED = ISMINE_ALL | ISMINE_USED, 48 : ISMINE_ENUM_ELEMENTS, 49 : }; 50 : /** used for bitflags of isminetype */ 51 : using isminefilter = std::underlying_type<isminetype>::type; 52 : 53 : /** 54 : * Cachable amount subdivided into watchonly and spendable parts. 55 : */ 56 : struct CachableAmount 57 : { 58 : // NO and ALL are never (supposed to be) cached 59 : std::bitset<ISMINE_ENUM_ELEMENTS> m_cached; 60 : CAmount m_value[ISMINE_ENUM_ELEMENTS]; 61 5964 : inline void Reset() 62 : { 63 5964 : m_cached.reset(); 64 5964 : } 65 78 : void Set(isminefilter filter, CAmount value) 66 : { 67 78 : m_cached.set(filter); 68 78 : m_value[filter] = value; 69 78 : } 70 : }; 71 : } // namespace wallet 72 : 73 : #endif // BITCOIN_WALLET_ISMINE_H