wallet: Introduce WalletError with machine-readable error code
What changed, and why it matters
This commit only adds a new data structure for wallet error reporting. It does not change any behavior, fix a bug, or alter how funds or keys are handled. There is no security issue here.
No action needed. This is a benign refactoring/infrastructure change.
Security signals we found
No strong security signals were identified.
Evidence from the diff
The patch introduces WalletErrorCode enum and WalletError struct in src/wallet/types.h. It is purely an API/typing addition: a machine-readable error code plus a translated user-facing message. No logic is modified and no existing code paths are affected.
Changed components
src/wallet/types.hInspect captured patch +28 / −0
diff --git a/src/wallet/types.h b/src/wallet/types.h
index 09ad4a0a..e4cbab3b 100644
--- a/src/wallet/types.h
+++ b/src/wallet/types.h
@@ -15,6 +15,7 @@
#define BITCOIN_WALLET_TYPES_H
#include <policy/fees/block_policy_estimator.h>
+#include <util/translation.h>
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
Why this scored 15/100
Community notes
Notes can correct, qualify, or add evidence to the AI analysis. Every note shown here has been validated by a human moderator.
The AI analysis stands alone for now. Submit a note if you can add evidence or important context.