From ab6416f30a3e57be0b273f6a8021f8768a3e61ef Mon Sep 17 00:00:00 2001 From: Craig Raw Date: Wed, 6 May 2026 15:05:52 +0200 Subject: [PATCH] fix sp self-spend output discovery by always scanning all batch txs --- .../sparrow/net/ElectrumServer.java | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/src/main/java/com/sparrowwallet/sparrow/net/ElectrumServer.java b/src/main/java/com/sparrowwallet/sparrow/net/ElectrumServer.java index f1af4efe..bbf698ef 100644 --- a/src/main/java/com/sparrowwallet/sparrow/net/ElectrumServer.java +++ b/src/main/java/com/sparrowwallet/sparrow/net/ElectrumServer.java @@ -1501,21 +1501,24 @@ public class ElectrumServer { return Collections.emptySet(); } - Map references = new TreeMap<>(); + Map referencesToFetch = new TreeMap<>(); + Map transactionMap = new HashMap<>(); Map tweakMap = new HashMap<>(); for(SilentPaymentsTx entry : entries) { Sha256Hash txid = Sha256Hash.wrap(entry.tx_hash); tweakMap.putIfAbsent(txid, Utils.hexToBytes(entry.tweak_key)); - if(wallet.getWalletTransaction(txid) == null) { - references.put(new BlockTransaction(txid, entry.height, null, null, null), null); + BlockTransaction existing = wallet.getWalletTransaction(txid); + if(existing != null) { + transactionMap.put(txid, existing); + } else { + referencesToFetch.put(new BlockTransaction(txid, entry.height, null, null, null), null); } } - if(references.isEmpty()) { - return Collections.emptySet(); - } - Map blockHeaderMap = getBlockHeaders(wallet, references.keySet()); - Map transactionMap = getTransactions(wallet, references, blockHeaderMap); + if(!referencesToFetch.isEmpty()) { + Map blockHeaderMap = getBlockHeaders(wallet, referencesToFetch.keySet()); + transactionMap.putAll(getTransactions(wallet, referencesToFetch, blockHeaderMap)); + } ECKey scanPriv = wallet.getSilentPaymentScanAddress().getScanKey(); ECKey spendPub = wallet.getSilentPaymentScanAddress().getSpendKey();