always show display address for watch-only wallets
What changed, and why it matters
This small change makes the 'Display Address' button always appear for watch-only wallets in Sparrow Wallet. Watch-only wallets cannot spend funds, so this is mainly a usability improvement to help users verify receiving addresses. It does not appear to fix a vulnerability that lets someone steal bitcoins, but it may reduce the chance a user sends funds to a wrong or attacker-controlled address.
Treat as a minor usability/reliability improvement. No urgent security action is warranted based on the diff alone. If a security advisory is later published, re-evaluate.
Security signals we found
UI control visibility change for address verification
Watch-only wallet handling
No input validation, cryptographic, or authorization changes
Evidence from the diff
ReceiveController.java now shows the displayAddress control when the wallet is composed entirely of SW_WATCH keystores, in addition to the existing case for HW_USB keystores. The button was previously hidden for software watch-only wallets, even though displaying an address can be useful for verification. The diff adds one condition and no other logic changes.
Changed components
src/main/java/com/sparrowwallet/sparrow/wallet/ReceiveController.javaInspect captured patch +2 / −1
diff --git a/src/main/java/com/sparrowwallet/sparrow/wallet/ReceiveController.java b/src/main/java/com/sparrowwallet/sparrow/wallet/ReceiveController.java
index 93e3282..691c5d1 100644
--- a/src/main/java/com/sparrowwallet/sparrow/wallet/ReceiveController.java
+++ b/src/main/java/com/sparrowwallet/sparrow/wallet/ReceiveController.java
@@ -164,7 +164,8 @@ public class ReceiveController extends WalletFormController implements Initializ
displayAddress.setUserData(addressDevices);
return;
- } else if(currentEntry != null && wallet.getKeystores().stream().anyMatch(keystore -> keystore.getSource().equals(KeystoreSource.HW_USB))) {
+ } else if(currentEntry != null && (wallet.getKeystores().stream().anyMatch(keystore -> keystore.getSource().equals(KeystoreSource.HW_USB))
+ || wallet.getKeystores().stream().allMatch(keystore -> keystore.getSource().equals(KeystoreSource.SW_WATCH)))) {
displayAddress.setVisible(true);
displayAddress.setUserData(null);
return;
Why this scored 26/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.