remove the surplus signatures progress bar segments a finalized multisig transaction discards
What changed, and why it matters
This commit fixes a UI display bug in Sparrow Wallet's signature progress bar. When a multi-signature Bitcoin transaction becomes finalized, extra signatures beyond the required threshold are discarded. Previously, the progress bar did not remove the visual segments representing those discarded signatures, which could leave the bar showing more segments than actually exist. The fix cleans up those surplus segments and resets progress to zero for any segment whose signature was removed. There is no direct evidence this affects funds or transaction security.
Treat as a routine UI bug fix. Review the paired drongo submodule bump to confirm it only supports the finalization discard behavior and does not introduce unexpected transaction changes. No security response appears necessary based on the diff alone.
Security signals we found
UI state desynchronization after multisig finalization
Progress bar segment count mismatch with actual signature set
No change to cryptographic or transaction validation code
Evidence from the diff
In SignaturesProgressBar.java, the code now removes surplus SignatureProgressSegment objects when the number of valid signatures drops to the multisig threshold after finalization. It also resets a segment’s progress to 0.0 when its associated signature becomes null (e.g., discarded on finalization or superseded). The drongo submodule was bumped, likely to include related backend changes for finalization behavior. The change is purely in the UI control layer and does not alter transaction signing, validation, or broadcast logic.
Changed components
src/main/java/com/sparrowwallet/sparrow/control/SignaturesProgressBar.javadrongo submoduleInspect captured patch +9 / −1
### drongo
@@ -1 +1 @@
-Subproject commit e1c26413e4973752c9d7d43e37e39b411f21b48c
+Subproject commit d212f4a59e8dfe9c2a04710d8845ce7a18519e92
### src/main/java/com/sparrowwallet/sparrow/control/SignaturesProgressBar.java
@@ -49,6 +49,11 @@ public void initialize(ObservableMap<TransactionSignature, Keystore> signatureKe
int newNumSegments = Math.max(threshold, newSignedKeystores.size());
double newSegmentSize = 100d / newNumSegments;
+ //Remove any surplus signatures, which a finalized transaction discards once the threshold is met
+ while(getSegments().size() > newNumSegments) {
+ getSegments().remove(getSegments().size() - 1);
+ }
+
for(int i = 0; i < newNumSegments; i++) {
SignatureProgressSegment segment = null;
if(i < getSegments().size()) {
@@ -144,6 +149,9 @@ public SignatureProgressSegmentView(SignatureProgressSegment segment) {
);
timeline.setCycleCount(1);
timeline.play();
+ } else if(newValue == null) {
+ //A signature discarded on finalization or superseded by a lesser signed input leaves the segment empty
+ progressBar.setProgress(0.0);
}
});
}Why this scored 17/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.