/tmp/bitcoin/src/wallet/types.h
Line | Count | Source |
1 | | // Copyright (c) 2009-2010 Satoshi Nakamoto |
2 | | // Copyright (c) 2009-present 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 | | //! @file wallet/types.h is a home for public enum and struct type definitions |
7 | | //! that are used by internally by wallet code, but also used externally by node |
8 | | //! or GUI code. |
9 | | //! |
10 | | //! This file is intended to define only simple types that do not have external |
11 | | //! dependencies. More complicated public wallet types like CCoinControl should |
12 | | //! be defined in dedicated header files. |
13 | | |
14 | | #ifndef BITCOIN_WALLET_TYPES_H |
15 | | #define BITCOIN_WALLET_TYPES_H |
16 | | |
17 | | #include <policy/fees/block_policy_estimator.h> |
18 | | #include <util/translation.h> |
19 | | |
20 | | namespace wallet { |
21 | | /** |
22 | | * Address purpose field that has been been stored with wallet sending and |
23 | | * receiving addresses since BIP70 payment protocol support was added in |
24 | | * https://github.com/bitcoin/bitcoin/pull/2539. This field is not currently |
25 | | * used for any logic inside the wallet, but it is still shown in RPC and GUI |
26 | | * interfaces and saved for new addresses. It is basically redundant with an |
27 | | * address's IsMine() result. |
28 | | */ |
29 | | enum class AddressPurpose { |
30 | | RECEIVE, |
31 | | SEND, |
32 | | REFUND, //!< Never set in current code may be present in older wallet databases |
33 | | }; |
34 | | |
35 | | struct CreatedTransactionResult |
36 | | { |
37 | | CTransactionRef tx; |
38 | | CAmount fee; |
39 | | FeeCalculation fee_calc; |
40 | | std::optional<unsigned int> change_pos; |
41 | | |
42 | | CreatedTransactionResult(CTransactionRef _tx, CAmount _fee, std::optional<unsigned int> _change_pos, const FeeCalculation& _fee_calc) |
43 | 3.57k | : tx(_tx), fee(_fee), fee_calc(_fee_calc), change_pos(_change_pos) {} |
44 | | }; |
45 | | |
46 | | //! Machine-readable wallet error codes. |
47 | | //! |
48 | | //! @note Add new codes only when callers need to handle the condition |
49 | | //! differently. For errors that should only be displayed to the user, use |
50 | | //! WalletErrorCode::GenericError and provide the user-facing details in WalletError::message. |
51 | | enum class WalletErrorCode { |
52 | | //! Generic wallet error. Callers may present the accompanying message to |
53 | | //! the user. |
54 | | GenericError, |
55 | | |
56 | | //! The wallet is locked and the operation requires access to private keys. |
57 | | //! Callers may ask the user to unlock the wallet and retry the operation. |
58 | | UnlockNeeded, |
59 | | }; |
60 | | |
61 | | //! Wallet-layer error with both programmatic and user-facing information. |
62 | | //! |
63 | | //! Wallet methods should return a specific WalletErrorCode only when callers |
64 | | //! can handle that condition differently. Otherwise, use WalletErrorCode::GenericError |
65 | | //! and describe the failure in `message`. |
66 | | struct WalletError { |
67 | | //! Machine-readable error code for callers that need programmatic handling. |
68 | | WalletErrorCode code; |
69 | | //! User-facing translated error message |
70 | | bilingual_str message; |
71 | | }; |
72 | | |
73 | | } // namespace wallet |
74 | | |
75 | | #endif // BITCOIN_WALLET_TYPES_H |