From a8223bb4e62c8facd7e99eb05221c67cdcf0b52c Mon Sep 17 00:00:00 2001 From: pseudoramdom Date: Thu, 9 Jul 2026 05:13:11 -0700 Subject: [PATCH] wallet: Introduce WalletError with machine-readable error code Introduce WalletError as a generic wallet-layer error type that can carry a machine-readable WalletErrorCode and a translated user-facing message. The WalletErrorCode::GenericError code is intended for failures that callers should only display to the user. More specific codes should only be added when callers can handle the condition differently. --- src/wallet/types.h | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/src/wallet/types.h b/src/wallet/types.h index 09ad4a0ab4c..e4cbab3b241 100644 --- a/src/wallet/types.h +++ b/src/wallet/types.h @@ -15,6 +15,7 @@ #define BITCOIN_WALLET_TYPES_H #include +#include namespace wallet { /** @@ -42,6 +43,33 @@ struct CreatedTransactionResult : tx(_tx), fee(_fee), fee_calc(_fee_calc), change_pos(_change_pos) {} }; +//! Machine-readable wallet error codes. +//! +//! @note Add new codes only when callers need to handle the condition +//! differently. For errors that should only be displayed to the user, use +//! WalletErrorCode::GenericError and provide the user-facing details in WalletError::message. +enum class WalletErrorCode { + //! Generic wallet error. Callers may present the accompanying message to + //! the user. + GenericError, + + //! The wallet is locked and the operation requires access to private keys. + //! Callers may ask the user to unlock the wallet and retry the operation. + UnlockNeeded, +}; + +//! Wallet-layer error with both programmatic and user-facing information. +//! +//! Wallet methods should return a specific WalletErrorCode only when callers +//! can handle that condition differently. Otherwise, use WalletErrorCode::GenericError +//! and describe the failure in `message`. +struct WalletError { + //! Machine-readable error code for callers that need programmatic handling. + WalletErrorCode code; + //! User-facing translated error message + bilingual_str message; +}; + } // namespace wallet #endif // BITCOIN_WALLET_TYPES_H